From 755320b0f64ab4fe487507104d2929cfb19dcee1 Mon Sep 17 00:00:00 2001 From: Coccinelle Date: Fri, 17 Aug 2012 23:09:49 +0200 Subject: [PATCH] Coccinelle release 1.0.0-rc15 - allow mixing isomorpisms with normal rules - Support const/volatile after *. Thanks to Lars-Peter Clausen for pointing out the problem. - Support variable declarations in the first element of a for loop header. - Dropped the need for the ocaml-extlib and ocaml-sexplib packages. - Changed the file format of the regression test results. Files in the old format are no longer readable by spatch. - Added a crude mechanism for integrating the results of external analyses with coccinelle, using positions to connect them together. This is an experimental feature. See demos/external_ana.{c,cocci,data}. - Ocaml 4.00.0 compatibility fixes - Drop inlines, reduce parser code size - Bind const_vol in the right order in Ast0 visitor --- Makefile | 15 +- Makefile.config.in | 20 +- bundles/extlib/Makefile | 13 +- bundles/extlib/extlib-1.5.2/.marker | 0 bundles/extlib/extlib-1.5.2/IO.ml | 769 - bundles/extlib/extlib-1.5.2/IO.mli | 321 - bundles/extlib/extlib-1.5.2/LICENSE | 199 - bundles/extlib/extlib-1.5.2/META | 4 - bundles/extlib/extlib-1.5.2/Makefile | 30 - bundles/extlib/extlib-1.5.2/README.txt | 54 - bundles/extlib/extlib-1.5.2/base64.ml | 119 - bundles/extlib/extlib-1.5.2/base64.mli | 57 - bundles/extlib/extlib-1.5.2/bitSet.ml | 324 - bundles/extlib/extlib-1.5.2/bitSet.mli | 101 - bundles/extlib/extlib-1.5.2/dllist.ml | 287 - bundles/extlib/extlib-1.5.2/dllist.mli | 182 - bundles/extlib/extlib-1.5.2/dynArray.ml | 451 - bundles/extlib/extlib-1.5.2/dynArray.mli | 281 - bundles/extlib/extlib-1.5.2/enum.ml | 376 - bundles/extlib/extlib-1.5.2/enum.mli | 201 - bundles/extlib/extlib-1.5.2/extArray.ml | 172 - bundles/extlib/extlib-1.5.2/extArray.mli | 136 - bundles/extlib/extlib-1.5.2/extHashtbl.ml | 134 - bundles/extlib/extlib-1.5.2/extHashtbl.mli | 89 - bundles/extlib/extlib-1.5.2/extLib.ml | 45 - bundles/extlib/extlib-1.5.2/extList.ml | 515 - bundles/extlib/extlib-1.5.2/extList.mli | 244 - bundles/extlib/extlib-1.5.2/extString.ml | 251 - bundles/extlib/extlib-1.5.2/extString.mli | 182 - bundles/extlib/extlib-1.5.2/global.ml | 40 - bundles/extlib/extlib-1.5.2/global.mli | 58 - bundles/extlib/extlib-1.5.2/install.ml | 216 - bundles/extlib/extlib-1.5.2/odoc_style.css | 24 - bundles/extlib/extlib-1.5.2/optParse.ml | 720 - bundles/extlib/extlib-1.5.2/optParse.mli | 466 - bundles/extlib/extlib-1.5.2/option.ml | 49 - bundles/extlib/extlib-1.5.2/option.mli | 53 - bundles/extlib/extlib-1.5.2/pMap.ml | 197 - bundles/extlib/extlib-1.5.2/pMap.mli | 92 - bundles/extlib/extlib-1.5.2/refList.ml | 139 - bundles/extlib/extlib-1.5.2/refList.mli | 201 - bundles/extlib/extlib-1.5.2/std.ml | 185 - bundles/extlib/extlib-1.5.2/std.mli | 69 - bundles/extlib/extlib-1.5.2/uChar.ml | 48 - bundles/extlib/extlib-1.5.2/uChar.mli | 79 - bundles/extlib/extlib-1.5.2/uTF8.ml | 220 - bundles/extlib/extlib-1.5.2/uTF8.mli | 144 - bundles/extlib/extlib-1.5.2/unzip.ml | 449 - bundles/extlib/extlib-1.5.2/unzip.mli | 45 - bundles/extlib/hashtable-ocaml4-compat.patch | 12 + bundles/menhirLib/Makefile | 8 +- bundles/pcre/Makefile | 8 +- bundles/pycaml/Makefile | 8 +- bundles/sexplib/Makefile | 8 +- .../sexplib/sexplib-7.0.5/.hg_archival.txt | 4 - bundles/sexplib/sexplib-7.0.5/.marker | 0 bundles/sexplib/sexplib-7.0.5/COPYRIGHT | 19 - bundles/sexplib/sexplib-7.0.5/Changelog | 254 - bundles/sexplib/sexplib-7.0.5/INSTALL | 37 - bundles/sexplib/sexplib-7.0.5/LICENSE | 520 - bundles/sexplib/sexplib-7.0.5/LICENSE.Tywith | 26 - bundles/sexplib/sexplib-7.0.5/Makefile | 38 - bundles/sexplib/sexplib-7.0.5/README.txt | 457 - bundles/sexplib/sexplib-7.0.5/_oasis | 84 - bundles/sexplib/sexplib-7.0.5/_tags | 68 - bundles/sexplib/sexplib-7.0.5/configure | 27 - bundles/sexplib/sexplib-7.0.5/doc/Makefile | 9 - bundles/sexplib/sexplib-7.0.5/doc/OMakefile | 8 - bundles/sexplib/sexplib-7.0.5/doc/README.tex | 473 - bundles/sexplib/sexplib-7.0.5/doc/custom.hva | 9 - bundles/sexplib/sexplib-7.0.5/doc/hevea.sty | 78 - bundles/sexplib/sexplib-7.0.5/lib/META | 26 - bundles/sexplib/sexplib-7.0.5/lib/conv.ml | 713 - bundles/sexplib/sexplib-7.0.5/lib/conv.mli | 226 - .../sexplib/sexplib-7.0.5/lib/conv_error.ml | 141 - .../sexplib/sexplib-7.0.5/lib/conv_error.mli | 26 - .../sexplib/sexplib-7.0.5/lib/exn_magic.ml | 223 - .../sexplib/sexplib-7.0.5/lib/exn_magic.mli | 130 - bundles/sexplib/sexplib-7.0.5/lib/lexer.mll | 173 - bundles/sexplib/sexplib-7.0.5/lib/parser.mly | 75 - bundles/sexplib/sexplib-7.0.5/lib/path.ml | 175 - bundles/sexplib/sexplib-7.0.5/lib/path.mli | 141 - bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.ml | 1052 - .../sexplib/sexplib-7.0.5/lib/pre_sexp.mli | 316 - bundles/sexplib/sexplib-7.0.5/lib/sexp.ml | 25 - bundles/sexplib/sexplib-7.0.5/lib/sexp.mli | 329 - .../sexplib/sexplib-7.0.5/lib/sexp_intf.ml | 594 - .../sexplib/sexplib-7.0.5/lib/sexp_intf.mli | 157 - .../sexplib/sexplib-7.0.5/lib/sexplib.mlpack | 14 - .../sexplib/sexplib-7.0.5/lib/sexplib.odocl | 14 - bundles/sexplib/sexplib-7.0.5/lib/std.ml | 109 - bundles/sexplib/sexplib-7.0.5/lib/type.ml | 26 - bundles/sexplib/sexplib-7.0.5/lib/type.mli | 1 - .../sexplib/sexplib-7.0.5/lib_test/Makefile | 27 - .../sexplib/sexplib-7.0.5/lib_test/OMakefile | 7 - .../sexplib-7.0.5/lib_test/conv_test.ml | 194 - .../sexplib-7.0.5/lib_test/sexp_test.ml | 71 - .../sexplib/sexplib-7.0.5/lib_test/test.sexp | 14 - bundles/sexplib/sexplib-7.0.5/myocamlbuild.ml | 489 - bundles/sexplib/sexplib-7.0.5/setup.ml | 5597 -- .../sexplib-7.0.5/syntax/pa_sexp_conv.ml | 1383 - .../sexplib-7.0.5/syntax/pa_sexp_conv.mli | 33 - .../sexplib-7.0.5/syntax/pa_sexp_conv.mllib | 4 - .../sexplib-7.0.5/top/install_printers.ml | 41 - .../sexplib-7.0.5/top/sexplib_top.mllib | 4 - changes.txt | 13 + commons/Makefile | 27 +- commons/common.ml | 4 + commons/common.mli | 2 + commons/{ => obsolete}/ofullcommon.ml | 0 configure | 2594 +- configure.ac | 30 +- ctl/Makefile | 8 +- demos/external_ana.c | 26 + demos/external_ana.cocci | 54 + demos/external_ana.data | 11 + docs/manual/main_grammar.pdf | Bin 346367 -> 346270 bytes docs/manual/manual.pdf | Bin 455205 -> 456509 bytes docs/manual/options.pdf | Bin 141260 -> 142898 bytes docs/manual/spatch_options.tex | 10 + docs/spatch.1.in | 431 +- engine/Makefile | 11 +- engine/asttoctl2.ml | 7 +- engine/check_exhaustive_pattern.ml | 2 +- engine/cocci_vs_c.ml | 31 +- engine/externalanalysis.ml | 313 + engine/externalanalysis.mli | 62 + extra/Makefile | 8 +- globals/Makefile | 6 +- install.txt | 13 +- main.ml | 3 + ocaml/Makefile | 10 +- ocaml/coccilib.ml | 59 + ocaml/coccilib.mli | 69 + ocaml/yes_prepare_ocamlcocci.ml | 2 +- parsing_c/Makefile | 8 +- parsing_c/ast_c.ml | 9 +- parsing_c/control_flow_c.ml | 2 +- parsing_c/control_flow_c.mli | 2 +- parsing_c/parser_c.mly | 13 +- parsing_c/pretty_print_c.ml | 11 +- parsing_c/sexp_ast_c.ml | 4044 -- parsing_c/unparse_cocci.ml | 24 +- parsing_c/visitor_c.ml | 47 +- parsing_cocci/Makefile | 16 +- parsing_cocci/adjust_pragmas.ml | 6 +- parsing_cocci/arity.ml | 24 +- parsing_cocci/ast0_cocci.ml | 11 +- parsing_cocci/ast0_cocci.mli | 11 +- parsing_cocci/ast0toast.ml | 24 +- parsing_cocci/ast0toast.mli | 1 + parsing_cocci/ast_cocci.ml | 31 +- parsing_cocci/ast_cocci.mli | 8 +- parsing_cocci/check_meta.ml | 18 +- parsing_cocci/compute_lines.ml | 22 +- parsing_cocci/context_neg.ml | 23 +- parsing_cocci/disjdistr.ml | 25 +- parsing_cocci/function_prototypes.ml | 4 +- parsing_cocci/get_constants2.ml | 2 +- parsing_cocci/get_metas.ml | 17 +- parsing_cocci/index.ml | 9 +- parsing_cocci/index.mli | 1 + parsing_cocci/insert_plus.ml | 34 +- parsing_cocci/iso_compile.ml | 2 +- parsing_cocci/iso_pattern.ml | 36 +- parsing_cocci/parse_aux.ml | 11 +- parsing_cocci/parse_cocci.ml | 2 +- parsing_cocci/parser_cocci_menhir.ml | 47842 ++++++---------- parsing_cocci/parser_cocci_menhir.mly | 19 +- parsing_cocci/pretty_print_cocci.ml | 21 +- parsing_cocci/single_statement.ml | 10 +- parsing_cocci/test_exps.ml | 4 +- parsing_cocci/type_infer.ml | 22 +- parsing_cocci/unify_ast.ml | 14 +- parsing_cocci/unparse_ast0.ml | 13 +- parsing_cocci/visitor_ast.ml | 31 +- parsing_cocci/visitor_ast0.ml | 51 +- parsing_cocci/visitor_ast0.mli | 2 + parsing_cocci/visitor_ast0_types.ml | 6 + popl/Makefile | 8 +- popl09/Makefile | 8 +- python/Makefile | 9 +- release.nix | 51 +- setup/wrapper-ocamlcp.sh | 39 + testing.ml | 19 +- tests/SCORE_expected.sexp | Bin 14854 -> 13294 bytes tests/SCORE_expected_orig.sexp | Bin 14854 -> 13294 bytes tests/cptr.c | 1 + tests/cptr.cocci | 7 + tests/cptr.res | 1 + tests/fortype.c | 4 + tests/fortype.cocci | 15 + tests/fortype.res | 4 + tools/Makefile | 8 +- tools/splitpatch.ml | 92 +- version | 2 +- 196 files changed, 21152 insertions(+), 59226 deletions(-) delete mode 100644 bundles/extlib/extlib-1.5.2/.marker delete mode 100644 bundles/extlib/extlib-1.5.2/IO.ml delete mode 100644 bundles/extlib/extlib-1.5.2/IO.mli delete mode 100644 bundles/extlib/extlib-1.5.2/LICENSE delete mode 100644 bundles/extlib/extlib-1.5.2/META delete mode 100644 bundles/extlib/extlib-1.5.2/Makefile delete mode 100644 bundles/extlib/extlib-1.5.2/README.txt delete mode 100644 bundles/extlib/extlib-1.5.2/base64.ml delete mode 100644 bundles/extlib/extlib-1.5.2/base64.mli delete mode 100644 bundles/extlib/extlib-1.5.2/bitSet.ml delete mode 100644 bundles/extlib/extlib-1.5.2/bitSet.mli delete mode 100644 bundles/extlib/extlib-1.5.2/dllist.ml delete mode 100644 bundles/extlib/extlib-1.5.2/dllist.mli delete mode 100644 bundles/extlib/extlib-1.5.2/dynArray.ml delete mode 100644 bundles/extlib/extlib-1.5.2/dynArray.mli delete mode 100644 bundles/extlib/extlib-1.5.2/enum.ml delete mode 100644 bundles/extlib/extlib-1.5.2/enum.mli delete mode 100644 bundles/extlib/extlib-1.5.2/extArray.ml delete mode 100644 bundles/extlib/extlib-1.5.2/extArray.mli delete mode 100644 bundles/extlib/extlib-1.5.2/extHashtbl.ml delete mode 100644 bundles/extlib/extlib-1.5.2/extHashtbl.mli delete mode 100644 bundles/extlib/extlib-1.5.2/extLib.ml delete mode 100644 bundles/extlib/extlib-1.5.2/extList.ml delete mode 100644 bundles/extlib/extlib-1.5.2/extList.mli delete mode 100644 bundles/extlib/extlib-1.5.2/extString.ml delete mode 100644 bundles/extlib/extlib-1.5.2/extString.mli delete mode 100644 bundles/extlib/extlib-1.5.2/global.ml delete mode 100644 bundles/extlib/extlib-1.5.2/global.mli delete mode 100644 bundles/extlib/extlib-1.5.2/install.ml delete mode 100644 bundles/extlib/extlib-1.5.2/odoc_style.css delete mode 100644 bundles/extlib/extlib-1.5.2/optParse.ml delete mode 100644 bundles/extlib/extlib-1.5.2/optParse.mli delete mode 100644 bundles/extlib/extlib-1.5.2/option.ml delete mode 100644 bundles/extlib/extlib-1.5.2/option.mli delete mode 100644 bundles/extlib/extlib-1.5.2/pMap.ml delete mode 100644 bundles/extlib/extlib-1.5.2/pMap.mli delete mode 100644 bundles/extlib/extlib-1.5.2/refList.ml delete mode 100644 bundles/extlib/extlib-1.5.2/refList.mli delete mode 100644 bundles/extlib/extlib-1.5.2/std.ml delete mode 100644 bundles/extlib/extlib-1.5.2/std.mli delete mode 100644 bundles/extlib/extlib-1.5.2/uChar.ml delete mode 100644 bundles/extlib/extlib-1.5.2/uChar.mli delete mode 100644 bundles/extlib/extlib-1.5.2/uTF8.ml delete mode 100644 bundles/extlib/extlib-1.5.2/uTF8.mli delete mode 100644 bundles/extlib/extlib-1.5.2/unzip.ml delete mode 100644 bundles/extlib/extlib-1.5.2/unzip.mli create mode 100644 bundles/extlib/hashtable-ocaml4-compat.patch delete mode 100644 bundles/sexplib/sexplib-7.0.5/.hg_archival.txt delete mode 100644 bundles/sexplib/sexplib-7.0.5/.marker delete mode 100644 bundles/sexplib/sexplib-7.0.5/COPYRIGHT delete mode 100644 bundles/sexplib/sexplib-7.0.5/Changelog delete mode 100644 bundles/sexplib/sexplib-7.0.5/INSTALL delete mode 100644 bundles/sexplib/sexplib-7.0.5/LICENSE delete mode 100644 bundles/sexplib/sexplib-7.0.5/LICENSE.Tywith delete mode 100644 bundles/sexplib/sexplib-7.0.5/Makefile delete mode 100644 bundles/sexplib/sexplib-7.0.5/README.txt delete mode 100644 bundles/sexplib/sexplib-7.0.5/_oasis delete mode 100644 bundles/sexplib/sexplib-7.0.5/_tags delete mode 100755 bundles/sexplib/sexplib-7.0.5/configure delete mode 100644 bundles/sexplib/sexplib-7.0.5/doc/Makefile delete mode 100644 bundles/sexplib/sexplib-7.0.5/doc/OMakefile delete mode 100644 bundles/sexplib/sexplib-7.0.5/doc/README.tex delete mode 100644 bundles/sexplib/sexplib-7.0.5/doc/custom.hva delete mode 100644 bundles/sexplib/sexplib-7.0.5/doc/hevea.sty delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/META delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/conv.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/conv.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/conv_error.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/conv_error.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/exn_magic.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/exn_magic.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/lexer.mll delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/parser.mly delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/path.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/path.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/sexp.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/sexp.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/sexplib.mlpack delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/sexplib.odocl delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/std.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/type.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib/type.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib_test/Makefile delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib_test/OMakefile delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib_test/conv_test.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib_test/sexp_test.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/lib_test/test.sexp delete mode 100644 bundles/sexplib/sexplib-7.0.5/myocamlbuild.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/setup.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mli delete mode 100644 bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mllib delete mode 100644 bundles/sexplib/sexplib-7.0.5/top/install_printers.ml delete mode 100644 bundles/sexplib/sexplib-7.0.5/top/sexplib_top.mllib rename commons/{ => obsolete}/ofullcommon.ml (100%) create mode 100644 demos/external_ana.c create mode 100644 demos/external_ana.cocci create mode 100644 demos/external_ana.data create mode 100644 engine/externalanalysis.ml create mode 100644 engine/externalanalysis.mli delete mode 100644 parsing_c/sexp_ast_c.ml create mode 100755 setup/wrapper-ocamlcp.sh rewrite tests/SCORE_expected.sexp (99%) rewrite tests/SCORE_expected_orig.sexp (99%) create mode 100644 tests/cptr.c create mode 100644 tests/cptr.cocci create mode 100644 tests/cptr.res create mode 100644 tests/fortype.c create mode 100644 tests/fortype.cocci create mode 100644 tests/fortype.res diff --git a/Makefile b/Makefile index cdb1ac2..052ff9f 100644 --- a/Makefile +++ b/Makefile @@ -64,7 +64,6 @@ endif SYSLIBS=str.cma unix.cma bigarray.cma nums.cma LIBS=commons/commons.cma \ - commons/commons_sexp.cma \ globals/globals.cma \ ctl/ctl.cma \ parsing_cocci/cocci_parser.cma parsing_c/parsing_c.cma \ @@ -193,11 +192,9 @@ top: $(EXEC).top subdirs.all: @+for D in $(MAKESUBDIRS); do $(MAKE) $$D.all || exit 1 ; done - @$(MAKE) -C commons sexp.all subdirs.opt: @+for D in $(MAKESUBDIRS); do $(MAKE) $$D.opt || exit 1 ; done - @$(MAKE) -C commons sexp.opt $(MAKESUBDIRS:%=%.all): @$(MAKE) -C $(@:%.all=%) all @@ -231,10 +228,10 @@ $(OBJS):$(LIBS) $(OPTOBJS):$(LIBS:.cma=.cmxa) $(EXEC): $(LNKLIBS) $(LIBS) $(OBJS) - $(OCAMLC_CMD) -thread $(BYTECODE_EXTRA) $(FLAGSLIBS) -o $@ $(SYSLIBS) $^ + $(OCAMLC_CMD) $(BYTECODE_EXTRA) $(FLAGSLIBS) -o $@ $(SYSLIBS) $^ $(EXEC).opt: $(OPTLNKLIBS) $(LIBS:.cma=.cmxa) $(OPTOBJS) - $(OCAMLOPT_CMD) -thread $(OPTFLAGSLIBS) -o $@ $(SYSLIBS:.cma=.cmxa) $^ + $(OCAMLOPT_CMD) $(OPTFLAGSLIBS) -o $@ $(SYSLIBS:.cma=.cmxa) $^ $(EXEC).top: $(LNKLIBS) $(LIBS) $(OBJS) $(OCAMLMKTOP_CMD) -custom -o $@ $(SYSLIBS) $(FLAGSLIBS) $^ @@ -514,7 +511,7 @@ forprofiling: $(MAKE) OPTFLAGS="-p -inline 0 ${EXTRA_OCAML_FLAGS}" opt clean distclean:: - rm -f gmon.out + rm -f gmon.out ocamlprof.dump tags: otags -no-mli-tags -r . @@ -559,9 +556,9 @@ clean distclean:: distclean:: set -e; for i in $(CLEANSUBDIRS); do $(MAKE) -C $$i $@; done rm -f test.ml - rm -f TAGS - rm -f tests/SCORE_actual.sexp - rm -f tests/SCORE_best_of_both.sexp + rm -f TAGS *.native *.byte *.d.native *.p.byte + rm -rf _build _log + rm -f tests/SCORE_actual.sexp tests/SCORE_best_of_both.sexp find . -name ".#*1.*" | xargs rm -f rm -f $(EXEC) $(EXEC).opt $(EXEC).top diff --git a/Makefile.config.in b/Makefile.config.in index 0db96b6..43a70f3 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -1,16 +1,16 @@ # autogenerated by configure # * for each library $1, add another entry in the same manner -MAKELIBS=@MAKE_dynlink@ @MAKE_extlib@ @MAKE_sexplib@ @MAKE_menhirLib@ @MAKE_pycaml@ @MAKE_pcre@ -LNKLIBS=@MODULES_dynlink@ @MODULES_extlib@ @MODULES_sexplib@ @MODULES_menhirLib@ @MODULES_pycaml@ @MODULES_pcre@ -OPTLNKLIBS=@MODULESOPT_dynlink@ @MODULESOPT_extlib@ @MODULESOPT_sexplib@ @MODULESOPT_menhirLib@ @MODULESOPT_pycaml@ @MODULESOPT_pcre@ -INCLIBS=@PATH_dynlink@ @PATH_extlib@ @PATH_sexplib@ @PATH_menhirLib@ @PATH_pycaml@ @PATH_pcre@ -FLAGSLIBS=@FLAGS_dynlink@ @FLAGS_extlib@ @FLAGS_sexplib@ @FLAGS_menhirLib@ @FLAGS_pycaml@ @FLAGS_pcre@ -OPTFLAGSLIBS=@OPTFLAGS_dynlink@ @OPTFLAGS_extlib@ @OPTFLAGS_sexplib@ @OPTFLAGS_menhirLib@ @OPTFLAGS_pycaml@ @OPTFLAGS_pcre@ +MAKELIBS=@MAKE_dynlink@ @MAKE_menhirLib@ @MAKE_pycaml@ @MAKE_pcre@ +LNKLIBS=@MODULES_dynlink@ @MODULES_menhirLib@ @MODULES_pycaml@ @MODULES_pcre@ @MODULES_profiling@ +OPTLNKLIBS=@MODULESOPT_dynlink@ @MODULESOPT_menhirLib@ @MODULESOPT_pycaml@ @MODULESOPT_pcre@ +INCLIBS=@PATH_dynlink@ @PATH_menhirLib@ @PATH_pycaml@ @PATH_pcre@ +FLAGSLIBS=@FLAGS_dynlink@ @FLAGS_menhirLib@ @FLAGS_pycaml@ @FLAGS_pcre@ +OPTFLAGSLIBS=@OPTFLAGS_dynlink@ @OPTFLAGS_menhirLib@ @OPTFLAGS_pycaml@ @OPTFLAGS_pcre@ # * end of library variables # system packages inc libs -SYSINCLIBS=@PATH_unix@ @PATH_bigarray@ @PATH_num@ @PATH_str@ @PATH_threads@ @PATH_dynlink@ +SYSINCLIBS=@PATH_unix@ @PATH_bigarray@ @PATH_num@ @PATH_str@ @PATH_dynlink@ # camlp4 library location PATH_camlp4=@PATH_camlp4@ @@ -31,6 +31,8 @@ CONFIGURE_FLAGS=@CONFIGURE_FLAGS@ ifneq (@enable_release@, no) EXTRA_OCAML_FLAGS=-unsafe else +# -dtypes is depricated and can be replaced with -annot for newer +# versions of ocaml. EXTRA_OCAML_FLAGS=-g -dtypes endif @@ -108,11 +110,9 @@ SHAREDIR=@SHAREDIR@ BASH_COMPLETION_DIR=${sysconfdir}/bash_completion.d # selected libraries -FEATURE_sexplib=@FEATURE_sexplib@ FEATURE_menhirLib=@FEATURE_menhirLib@ FEATURE_pycaml=@FEATURE_pycaml@ FEATURE_pcre=@FEATURE_pcre@ -LOCALLIB_sexplib=@LOCALLIB_sexplib@ LOCALLIB_pycaml=@LOCALLIB_pycaml@ # Features @@ -124,8 +124,6 @@ NO_OCAMLFIND=@SUBSTITUTED_OCAMLFIND@ PCREDIR=@PATH_pcre@ PYCAMLDIR=@PATH_pycaml@ MENHIRDIR=@PATH_menhirLib@ -SEXPDIR=@PATH_sexplib@ -EXTLIBDIR=@PATH_extlib@ DYNLINKDIR=@PATH_dynlink@ # selected ocaml modules diff --git a/bundles/extlib/Makefile b/bundles/extlib/Makefile index a3b17d5..7cf73b7 100644 --- a/bundles/extlib/Makefile +++ b/bundles/extlib/Makefile @@ -9,8 +9,8 @@ ifneq ($(MAKECMDGOALS),distclean) include ../../Makefile.config endif -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g VERSION=1.5.2 EXTLIB=extlib-$(VERSION) @@ -34,8 +34,9 @@ distclean: clean depend: $(EXTMARKER) -$(EXTMARKER): $(EXTLIB).tar.gz +$(EXTMARKER): $(EXTLIB).tar.gz hashtable-ocaml4-compat.patch $(TAR) xfvz $< + $(PATCH) -d $(EXTLIB) -p1 < ./hashtable-ocaml4-compat.patch touch $@ $(EXTLIB).tar.gz: @@ -56,14 +57,14 @@ SRC=$(MODULES:%=$(EXTLIB)/%.ml) $(EXTLIB)/extLib.ml # otherwise errors such as 'module X makes inconsistent assumptions about interface Y' may # arise. The dependencies on this marker establishes this sharing. .mli-marker: $(MLI) $(SRC) - $(OCAMLC) $(OCAMLCFLAGS) -c -thread -I $(EXTLIB) $(MLI) + $(OCAMLC) $(OCAMLCFLAGS) -c -I $(EXTLIB) $(MLI) touch .mli-marker extLib.cma: .mli-marker $(SRC) - $(OCAMLC) $(OCAMLCFLAGS) -a -thread -I $(EXTLIB) -o extLib.cma $(MLI) $(SRC) + $(OCAMLC) $(OCAMLCFLAGS) -a -I $(EXTLIB) -o extLib.cma $(MLI) $(SRC) extLib.cmxa: .mli-marker $(SRC) - $(OCAMLOPT) $(OPTFLAGS) -a -thread -I $(EXTLIB) -o extLib.cmxa $(SRC) + $(OCAMLOPT) $(OPTFLAGS) -a -I $(EXTLIB) -o extLib.cmxa $(SRC) META: $(EXTLIB)/META cp $< $@ diff --git a/bundles/extlib/extlib-1.5.2/.marker b/bundles/extlib/extlib-1.5.2/.marker deleted file mode 100644 index e69de29..0000000 diff --git a/bundles/extlib/extlib-1.5.2/IO.ml b/bundles/extlib/extlib-1.5.2/IO.ml deleted file mode 100644 index 533a0ca..0000000 --- a/bundles/extlib/extlib-1.5.2/IO.ml +++ /dev/null @@ -1,769 +0,0 @@ -(* - * IO - Abstract input/output - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type input = { - mutable in_read : unit -> char; - mutable in_input : string -> int -> int -> int; - mutable in_close : unit -> unit; -} - -type 'a output = { - mutable out_write : char -> unit; - mutable out_output : string -> int -> int -> int; - mutable out_close : unit -> 'a; - mutable out_flush : unit -> unit; -} - -exception No_more_input -exception Input_closed -exception Output_closed - -(* -------------------------------------------------------------- *) -(* API *) - -let default_close = (fun () -> ()) - -let create_in ~read ~input ~close = - { - in_read = read; - in_input = input; - in_close = close; - } - -let create_out ~write ~output ~flush ~close = - { - out_write = write; - out_output = output; - out_close = close; - out_flush = flush; - } - -let read i = i.in_read() - -let nread i n = - if n < 0 then invalid_arg "IO.nread"; - if n = 0 then - "" - else - let s = String.create n in - let l = ref n in - let p = ref 0 in - try - while !l > 0 do - let r = i.in_input s !p !l in - if r = 0 then raise No_more_input; - p := !p + r; - l := !l - r; - done; - s - with - No_more_input as e -> - if !p = 0 then raise e; - String.sub s 0 !p - -let really_output o s p l' = - let sl = String.length s in - if p + l' > sl || p < 0 || l' < 0 then invalid_arg "IO.really_output"; - let l = ref l' in - let p = ref p in - while !l > 0 do - let w = o.out_output s !p !l in - if w = 0 then raise Sys_blocked_io; - p := !p + w; - l := !l - w; - done; - l' - -let input i s p l = - let sl = String.length s in - if p + l > sl || p < 0 || l < 0 then invalid_arg "IO.input"; - if l = 0 then - 0 - else - i.in_input s p l - -let really_input i s p l' = - let sl = String.length s in - if p + l' > sl || p < 0 || l' < 0 then invalid_arg "IO.really_input"; - let l = ref l' in - let p = ref p in - while !l > 0 do - let r = i.in_input s !p !l in - if r = 0 then raise Sys_blocked_io; - p := !p + r; - l := !l - r; - done; - l' - -let really_nread i n = - if n < 0 then invalid_arg "IO.really_nread"; - if n = 0 then "" - else - let s = String.create n - in - ignore(really_input i s 0 n); - s - -let close_in i = - let f _ = raise Input_closed in - i.in_close(); - i.in_read <- f; - i.in_input <- f; - i.in_close <- f - -let write o x = o.out_write x - -let nwrite o s = - let p = ref 0 in - let l = ref (String.length s) in - while !l > 0 do - let w = o.out_output s !p !l in - if w = 0 then raise Sys_blocked_io; - p := !p + w; - l := !l - w; - done - -let output o s p l = - let sl = String.length s in - if p + l > sl || p < 0 || l < 0 then invalid_arg "IO.output"; - o.out_output s p l - -let printf o fmt = - Printf.kprintf (fun s -> nwrite o s) fmt - -let flush o = o.out_flush() - -let close_out o = - let f _ = raise Output_closed in - let r = o.out_close() in - o.out_write <- f; - o.out_output <- f; - o.out_close <- f; - o.out_flush <- f; - r - -let read_all i = - let maxlen = 1024 in - let str = ref [] in - let pos = ref 0 in - let rec loop() = - let s = nread i maxlen in - str := (s,!pos) :: !str; - pos := !pos + String.length s; - loop() - in - try - loop() - with - No_more_input -> - let buf = String.create !pos in - List.iter (fun (s,p) -> - String.unsafe_blit s 0 buf p (String.length s) - ) !str; - buf - -let pos_in i = - let p = ref 0 in - { - in_read = (fun () -> - let c = i.in_read() in - incr p; - c - ); - in_input = (fun s sp l -> - let n = i.in_input s sp l in - p := !p + n; - n - ); - in_close = i.in_close - } , (fun () -> !p) - -let pos_out o = - let p = ref 0 in - { - out_write = (fun c -> - o.out_write c; - incr p - ); - out_output = (fun s sp l -> - let n = o.out_output s sp l in - p := !p + n; - n - ); - out_close = o.out_close; - out_flush = o.out_flush; - } , (fun () -> !p) - -(* -------------------------------------------------------------- *) -(* Standard IO *) - -let input_string s = - let pos = ref 0 in - let len = String.length s in - { - in_read = (fun () -> - if !pos >= len then raise No_more_input; - let c = String.unsafe_get s !pos in - incr pos; - c - ); - in_input = (fun sout p l -> - if !pos >= len then raise No_more_input; - let n = (if !pos + l > len then len - !pos else l) in - String.unsafe_blit s !pos sout p n; - pos := !pos + n; - n - ); - in_close = (fun () -> ()); - } - -let output_string() = - let b = Buffer.create 0 in - { - out_write = (fun c -> - Buffer.add_char b c - ); - out_output = (fun s p l -> - Buffer.add_substring b s p l; - l - ); - out_close = (fun () -> Buffer.contents b); - out_flush = (fun () -> ()); - } - -let input_channel ch = - { - in_read = (fun () -> - try - input_char ch - with - End_of_file -> raise No_more_input - ); - in_input = (fun s p l -> - let n = Pervasives.input ch s p l in - if n = 0 then raise No_more_input; - n - ); - in_close = (fun () -> Pervasives.close_in ch); - } - -let output_channel ch = - { - out_write = (fun c -> output_char ch c); - out_output = (fun s p l -> Pervasives.output ch s p l; l); - out_close = (fun () -> Pervasives.close_out ch); - out_flush = (fun () -> Pervasives.flush ch); - } - -let input_enum e = - let pos = ref 0 in - { - in_read = (fun () -> - match Enum.get e with - | None -> raise No_more_input - | Some c -> - incr pos; - c - ); - in_input = (fun s p l -> - let rec loop p l = - if l = 0 then - 0 - else - match Enum.get e with - | None -> l - | Some c -> - String.unsafe_set s p c; - loop (p + 1) (l - 1) - in - let k = loop p l in - if k = l then raise No_more_input; - l - k - ); - in_close = (fun () -> ()); - } - -let output_enum() = - let b = Buffer.create 0 in - { - out_write = (fun x -> - Buffer.add_char b x - ); - out_output = (fun s p l -> - Buffer.add_substring b s p l; - l - ); - out_close = (fun () -> - let s = Buffer.contents b in - ExtString.String.enum s - ); - out_flush = (fun () -> ()); - } - -let pipe() = - let input = ref "" in - let inpos = ref 0 in - let output = Buffer.create 0 in - let flush() = - input := Buffer.contents output; - inpos := 0; - Buffer.reset output; - if String.length !input = 0 then raise No_more_input - in - let read() = - if !inpos = String.length !input then flush(); - let c = String.unsafe_get !input !inpos in - incr inpos; - c - in - let input s p l = - if !inpos = String.length !input then flush(); - let r = (if !inpos + l > String.length !input then String.length !input - !inpos else l) in - String.unsafe_blit !input !inpos s p r; - inpos := !inpos + r; - r - in - let write c = - Buffer.add_char output c - in - let output s p l = - Buffer.add_substring output s p l; - l - in - let input = { - in_read = read; - in_input = input; - in_close = (fun () -> ()); - } in - let output = { - out_write = write; - out_output = output; - out_close = (fun () -> ()); - out_flush = (fun () -> ()); - } in - input , output - -external cast_output : 'a output -> unit output = "%identity" - -(* -------------------------------------------------------------- *) -(* BINARY APIs *) - -exception Overflow of string - -let read_byte i = int_of_char (i.in_read()) - -let read_signed_byte i = - let c = int_of_char (i.in_read()) in - if c land 128 <> 0 then - c - 256 - else - c - -let read_string i = - let b = Buffer.create 8 in - let rec loop() = - let c = i.in_read() in - if c <> '\000' then begin - Buffer.add_char b c; - loop(); - end; - in - loop(); - Buffer.contents b - -let read_line i = - let b = Buffer.create 8 in - let cr = ref false in - let rec loop() = - let c = i.in_read() in - match c with - | '\n' -> - () - | '\r' -> - cr := true; - loop() - | _ when !cr -> - cr := false; - Buffer.add_char b '\r'; - Buffer.add_char b c; - loop(); - | _ -> - Buffer.add_char b c; - loop(); - in - try - loop(); - Buffer.contents b - with - No_more_input -> - if !cr then Buffer.add_char b '\r'; - if Buffer.length b > 0 then - Buffer.contents b - else - raise No_more_input - -let read_ui16 i = - let ch1 = read_byte i in - let ch2 = read_byte i in - ch1 lor (ch2 lsl 8) - -let read_i16 i = - let ch1 = read_byte i in - let ch2 = read_byte i in - let n = ch1 lor (ch2 lsl 8) in - if ch2 land 128 <> 0 then - n - 65536 - else - n - -let read_i32 ch = - let ch1 = read_byte ch in - let ch2 = read_byte ch in - let ch3 = read_byte ch in - let ch4 = read_byte ch in - if ch4 land 128 <> 0 then begin - if ch4 land 64 = 0 then raise (Overflow "read_i32"); - ch1 lor (ch2 lsl 8) lor (ch3 lsl 16) lor ((ch4 land 127) lsl 24) - end else begin - if ch4 land 64 <> 0 then raise (Overflow "read_i32"); - ch1 lor (ch2 lsl 8) lor (ch3 lsl 16) lor (ch4 lsl 24) - end - -let read_real_i32 ch = - let ch1 = read_byte ch in - let ch2 = read_byte ch in - let ch3 = read_byte ch in - let base = Int32.of_int (ch1 lor (ch2 lsl 8) lor (ch3 lsl 16)) in - let big = Int32.shift_left (Int32.of_int (read_byte ch)) 24 in - Int32.logor base big - -let read_i64 ch = - let ch1 = read_byte ch in - let ch2 = read_byte ch in - let ch3 = read_byte ch in - let ch4 = read_byte ch in - let base = Int64.of_int (ch1 lor (ch2 lsl 8) lor (ch3 lsl 16)) in - let small = Int64.logor base (Int64.shift_left (Int64.of_int ch4) 24) in - let big = Int64.of_int32 (read_real_i32 ch) in - Int64.logor (Int64.shift_left big 32) small - -let read_double ch = - Int64.float_of_bits (read_i64 ch) - -let write_byte o n = - (* doesn't test bounds of n in order to keep semantics of Pervasives.output_byte *) - write o (Char.unsafe_chr (n land 0xFF)) - -let write_string o s = - nwrite o s; - write o '\000' - -let write_line o s = - nwrite o s; - write o '\n' - -let write_ui16 ch n = - if n < 0 || n > 0xFFFF then raise (Overflow "write_ui16"); - write_byte ch n; - write_byte ch (n lsr 8) - -let write_i16 ch n = - if n < -0x8000 || n > 0x7FFF then raise (Overflow "write_i16"); - if n < 0 then - write_ui16 ch (65536 + n) - else - write_ui16 ch n - -let write_i32 ch n = - write_byte ch n; - write_byte ch (n lsr 8); - write_byte ch (n lsr 16); - write_byte ch (n asr 24) - -let write_real_i32 ch n = - let base = Int32.to_int n in - let big = Int32.to_int (Int32.shift_right_logical n 24) in - write_byte ch base; - write_byte ch (base lsr 8); - write_byte ch (base lsr 16); - write_byte ch big - -let write_i64 ch n = - write_real_i32 ch (Int64.to_int32 n); - write_real_i32 ch (Int64.to_int32 (Int64.shift_right_logical n 32)) - -let write_double ch f = - write_i64 ch (Int64.bits_of_float f) - -(* -------------------------------------------------------------- *) -(* Big Endians *) - -module BigEndian = struct - -let read_ui16 i = - let ch2 = read_byte i in - let ch1 = read_byte i in - ch1 lor (ch2 lsl 8) - -let read_i16 i = - let ch2 = read_byte i in - let ch1 = read_byte i in - let n = ch1 lor (ch2 lsl 8) in - if ch2 land 128 <> 0 then - n - 65536 - else - n - -let read_i32 ch = - let ch4 = read_byte ch in - let ch3 = read_byte ch in - let ch2 = read_byte ch in - let ch1 = read_byte ch in - if ch4 land 128 <> 0 then begin - if ch4 land 64 = 0 then raise (Overflow "read_i32"); - ch1 lor (ch2 lsl 8) lor (ch3 lsl 16) lor ((ch4 land 127) lsl 24) - end else begin - if ch4 land 64 <> 0 then raise (Overflow "read_i32"); - ch1 lor (ch2 lsl 8) lor (ch3 lsl 16) lor (ch4 lsl 24) - end - -let read_real_i32 ch = - let big = Int32.shift_left (Int32.of_int (read_byte ch)) 24 in - let ch3 = read_byte ch in - let ch2 = read_byte ch in - let ch1 = read_byte ch in - let base = Int32.of_int (ch1 lor (ch2 lsl 8) lor (ch3 lsl 16)) in - Int32.logor base big - -let read_i64 ch = - let big = Int64.of_int32 (read_real_i32 ch) in - let ch4 = read_byte ch in - let ch3 = read_byte ch in - let ch2 = read_byte ch in - let ch1 = read_byte ch in - let base = Int64.of_int (ch1 lor (ch2 lsl 8) lor (ch3 lsl 16)) in - let small = Int64.logor base (Int64.shift_left (Int64.of_int ch4) 24) in - Int64.logor (Int64.shift_left big 32) small - -let read_double ch = - Int64.float_of_bits (read_i64 ch) - -let write_ui16 ch n = - if n < 0 || n > 0xFFFF then raise (Overflow "write_ui16"); - write_byte ch (n lsr 8); - write_byte ch n - -let write_i16 ch n = - if n < -0x8000 || n > 0x7FFF then raise (Overflow "write_i16"); - if n < 0 then - write_ui16 ch (65536 + n) - else - write_ui16 ch n - -let write_i32 ch n = - write_byte ch (n asr 24); - write_byte ch (n lsr 16); - write_byte ch (n lsr 8); - write_byte ch n - -let write_real_i32 ch n = - let base = Int32.to_int n in - let big = Int32.to_int (Int32.shift_right_logical n 24) in - write_byte ch big; - write_byte ch (base lsr 16); - write_byte ch (base lsr 8); - write_byte ch base - -let write_i64 ch n = - write_real_i32 ch (Int64.to_int32 (Int64.shift_right_logical n 32)); - write_real_i32 ch (Int64.to_int32 n) - -let write_double ch f = - write_i64 ch (Int64.bits_of_float f) - -end - -(* -------------------------------------------------------------- *) -(* Bits API *) - -type 'a bc = { - ch : 'a; - mutable nbits : int; - mutable bits : int; -} - -type in_bits = input bc -type out_bits = unit output bc - -exception Bits_error - -let input_bits ch = - { - ch = ch; - nbits = 0; - bits = 0; - } - -let output_bits ch = - { - ch = cast_output ch; - nbits = 0; - bits = 0; - } - -let rec read_bits b n = - if b.nbits >= n then begin - let c = b.nbits - n in - let k = (b.bits asr c) land ((1 lsl n) - 1) in - b.nbits <- c; - k - end else begin - let k = read_byte b.ch in - if b.nbits >= 24 then begin - if n >= 31 then raise Bits_error; - let c = 8 + b.nbits - n in - let d = b.bits land ((1 lsl b.nbits) - 1) in - let d = (d lsl (8 - c)) lor (k lsr c) in - b.bits <- k; - b.nbits <- c; - d - end else begin - b.bits <- (b.bits lsl 8) lor k; - b.nbits <- b.nbits + 8; - read_bits b n; - end - end - -let drop_bits b = - b.nbits <- 0 - -let rec write_bits b ~nbits x = - let n = nbits in - if n + b.nbits >= 32 then begin - if n > 31 then raise Bits_error; - let n2 = 32 - b.nbits - 1 in - let n3 = n - n2 in - write_bits b ~nbits:n2 (x asr n3); - write_bits b ~nbits:n3 (x land ((1 lsl n3) - 1)); - end else begin - if n < 0 then raise Bits_error; - if (x < 0 || x > (1 lsl n - 1)) && n <> 31 then raise Bits_error; - b.bits <- (b.bits lsl n) lor x; - b.nbits <- b.nbits + n; - while b.nbits >= 8 do - b.nbits <- b.nbits - 8; - write_byte b.ch (b.bits asr b.nbits) - done - end - -let flush_bits b = - if b.nbits > 0 then write_bits b (8 - b.nbits) 0 - -(* -------------------------------------------------------------- *) -(* Generic IO *) - -class in_channel ch = - object - method input s pos len = input ch s pos len - method close_in() = close_in ch - end - -class out_channel ch = - object - method output s pos len = output ch s pos len - method flush() = flush ch - method close_out() = ignore(close_out ch) - end - -class in_chars ch = - object - method get() = try read ch with No_more_input -> raise End_of_file - method close_in() = close_in ch - end - -class out_chars ch = - object - method put t = write ch t - method flush() = flush ch - method close_out() = ignore(close_out ch) - end - -let from_in_channel ch = - let cbuf = String.create 1 in - let read() = - try - if ch#input cbuf 0 1 = 0 then raise Sys_blocked_io; - String.unsafe_get cbuf 0 - with - End_of_file -> raise No_more_input - in - let input s p l = - ch#input s p l - in - create_in - ~read - ~input - ~close:ch#close_in - -let from_out_channel ch = - let cbuf = String.create 1 in - let write c = - String.unsafe_set cbuf 0 c; - if ch#output cbuf 0 1 = 0 then raise Sys_blocked_io; - in - let output s p l = - ch#output s p l - in - create_out - ~write - ~output - ~flush:ch#flush - ~close:ch#close_out - -let from_in_chars ch = - let input s p l = - let i = ref 0 in - try - while !i < l do - String.unsafe_set s (p + !i) (ch#get()); - incr i - done; - l - with - End_of_file when !i > 0 -> - !i - in - create_in - ~read:ch#get - ~input - ~close:ch#close_in - -let from_out_chars ch = - let output s p l = - for i = p to p + l - 1 do - ch#put (String.unsafe_get s i) - done; - l - in - create_out - ~write:ch#put - ~output - ~flush:ch#flush - ~close:ch#close_out diff --git a/bundles/extlib/extlib-1.5.2/IO.mli b/bundles/extlib/extlib-1.5.2/IO.mli deleted file mode 100644 index 2d8bd77..0000000 --- a/bundles/extlib/extlib-1.5.2/IO.mli +++ /dev/null @@ -1,321 +0,0 @@ -(* - * IO - Abstract input/output - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** High-order abstract I/O. - - IO module simply deals with abstract inputs/outputs. It provides a - set of methods for working with these IO as well as several - constructors that enable to write to an underlying channel, buffer, - or enum. -*) - -type input -(** The abstract input type. *) - -type 'a output -(** The abstract output type, ['a] is the accumulator data, it is returned - when the [close_out] function is called. *) - -exception No_more_input -(** This exception is raised when reading on an input with the [read] or - [nread] functions while there is no available token to read. *) - -exception Input_closed -(** This exception is raised when reading on a closed input. *) - -exception Output_closed -(** This exception is raised when reading on a closed output. *) - -(** {6 Standard API} *) - -val read : input -> char -(** Read a single char from an input or raise [No_more_input] if - no input available. *) - -val nread : input -> int -> string -(** [nread i n] reads a string of size up to [n] from an input. - The function will raise [No_more_input] if no input is available. - It will raise [Invalid_argument] if [n] < 0. *) - -val really_nread : input -> int -> string -(** [really_nread i n] reads a string of exactly [n] characters - from the input. Raises [No_more_input] if at least [n] characters are - not available. Raises [Invalid_argument] if [n] < 0. *) - -val input : input -> string -> int -> int -> int -(** [input i s p l] reads up to [l] characters from the given input, storing - them in string [s], starting at character number [p]. It returns the actual - number of characters read or raise [No_more_input] if no character can be - read. It will raise [Invalid_argument] if [p] and [l] do not designate a - valid substring of [s]. *) - -val really_input : input -> string -> int -> int -> int -(** [really_input i s p l] reads exactly [l] characters from the given input, - storing them in the string [s], starting at position [p]. For consistency with - {!IO.input} it returns [l]. Raises [No_more_input] if at [l] characters are - not available. Raises [Invalid_argument] if [p] and [l] do not designate a - valid substring of [s]. *) - -val close_in : input -> unit -(** Close the input. It can no longer be read from. *) - -val write : 'a output -> char -> unit -(** Write a single char to an output. *) - -val nwrite : 'a output -> string -> unit -(** Write a string to an output. *) - -val output : 'a output -> string -> int -> int -> int -(** [output o s p l] writes up to [l] characters from string [s], starting at - offset [p]. It returns the number of characters written. It will raise - [Invalid_argument] if [p] and [l] do not designate a valid substring of [s]. *) - -val really_output : 'a output -> string -> int -> int -> int -(** [really_output o s p l] writes exactly [l] characters from string [s] onto - the the output, starting with the character at offset [p]. For consistency with - {!IO.output} it returns [l]. Raises [Invalid_argument] if [p] and [l] do not - designate a valid substring of [s]. *) - -val flush : 'a output -> unit -(** Flush an output. *) - -val close_out : 'a output -> 'a -(** Close the output and return its accumulator data. - It can no longer be written. *) - -(** {6 Creation of IO Inputs/Outputs} *) - -val input_string : string -> input -(** Create an input that will read from a string. *) - -val output_string : unit -> string output -(** Create an output that will write into a string in an efficient way. - When closed, the output returns all the data written into it. *) - -val input_channel : in_channel -> input -(** Create an input that will read from a channel. *) - -val output_channel : out_channel -> unit output -(** Create an output that will write into a channel. *) - -val input_enum : char Enum.t -> input -(** Create an input that will read from an [enum]. *) - -val output_enum : unit -> char Enum.t output -(** Create an output that will write into an [enum]. The - final enum is returned when the output is closed. *) - -val create_in : - read:(unit -> char) -> - input:(string -> int -> int -> int) -> close:(unit -> unit) -> input -(** Fully create an input by giving all the needed functions. *) - -val create_out : - write:(char -> unit) -> - output:(string -> int -> int -> int) -> - flush:(unit -> unit) -> close:(unit -> 'a) -> 'a output -(** Fully create an output by giving all the needed functions. *) - -(** {6 Utilities} *) - -val printf : 'a output -> ('b, unit, string, unit) format4 -> 'b -(** The printf function works for any output. *) - -val read_all : input -> string -(** read all the contents of the input until [No_more_input] is raised. *) - -val pipe : unit -> input * unit output -(** Create a pipe between an input and an ouput. Data written from - the output can be read from the input. *) - -val pos_in : input -> input * (unit -> int) -(** Create an input that provide a count function of the number of bytes - read from it. *) - -val pos_out : 'a output -> 'a output * (unit -> int) -(** Create an output that provide a count function of the number of bytes - written through it. *) - -external cast_output : 'a output -> unit output = "%identity" -(** You can safely transform any output to an unit output in a safe way - by using this function. *) - -(** {6 Binary files API} - - Here is some API useful for working with binary files, in particular - binary files generated by C applications. By default, encoding of - multibyte integers is low-endian. The BigEndian module provide multibyte - operations with other encoding. -*) - -exception Overflow of string -(** Exception raised when a read or write operation cannot be completed. *) - -val read_byte : input -> int -(** Read an unsigned 8-bit integer. *) - -val read_signed_byte : input -> int -(** Read an signed 8-bit integer. *) - -val read_ui16 : input -> int -(** Read an unsigned 16-bit word. *) - -val read_i16 : input -> int -(** Read a signed 16-bit word. *) - -val read_i32 : input -> int -(** Read a signed 32-bit integer. Raise [Overflow] if the - read integer cannot be represented as a Caml 31-bit integer. *) - -val read_real_i32 : input -> int32 -(** Read a signed 32-bit integer as an OCaml int32. *) - -val read_i64 : input -> int64 -(** Read a signed 64-bit integer as an OCaml int64. *) - -val read_double : input -> float -(** Read an IEEE double precision floating point value. *) - -val read_string : input -> string -(** Read a null-terminated string. *) - -val read_line : input -> string -(** Read a LF or CRLF terminated string. *) - -val write_byte : 'a output -> int -> unit -(** Write an unsigned 8-bit byte. *) - -val write_ui16 : 'a output -> int -> unit -(** Write an unsigned 16-bit word. *) - -val write_i16 : 'a output -> int -> unit -(** Write a signed 16-bit word. *) - -val write_i32 : 'a output -> int -> unit -(** Write a signed 32-bit integer. *) - -val write_real_i32 : 'a output -> int32 -> unit -(** Write an OCaml int32. *) - -val write_i64 : 'a output -> int64 -> unit -(** Write an OCaml int64. *) - -val write_double : 'a output -> float -> unit -(** Write an IEEE double precision floating point value. *) - -val write_string : 'a output -> string -> unit -(** Write a string and append an null character. *) - -val write_line : 'a output -> string -> unit -(** Write a line and append a LF (it might be converted - to CRLF on some systems depending on the underlying IO). *) - -(** Same as operations above, but use big-endian encoding *) -module BigEndian : -sig - - val read_ui16 : input -> int - val read_i16 : input -> int - val read_i32 : input -> int - val read_real_i32 : input -> int32 - val read_i64 : input -> int64 - val read_double : input -> float - - val write_ui16 : 'a output -> int -> unit - val write_i16 : 'a output -> int -> unit - val write_i32 : 'a output -> int -> unit - val write_real_i32 : 'a output -> int32 -> unit - val write_i64 : 'a output -> int64 -> unit - val write_double : 'a output -> float -> unit - -end - -(** {6 Bits API} - - This enable you to read and write from an IO bit-by-bit or several bits - at the same time. -*) - -type in_bits -type out_bits - -exception Bits_error - -val input_bits : input -> in_bits -(** Read bits from an input *) - -val output_bits : 'a output -> out_bits -(** Write bits to an output *) - -val read_bits : in_bits -> int -> int -(** Read up to 31 bits, raise Bits_error if n < 0 or n > 31 *) - -val write_bits : out_bits -> nbits:int -> int -> unit -(** Write up to 31 bits represented as a value, raise Bits_error if nbits < 0 - or nbits > 31 or the value representation excess nbits. *) - -val flush_bits : out_bits -> unit -(** Flush remaining unwritten bits, adding up to 7 bits which values 0. *) - -val drop_bits : in_bits -> unit -(** Drop up to 7 buffered bits and restart to next input character. *) - -(** {6 Generic IO Object Wrappers} - - Theses OO Wrappers have been written to provide easy support of ExtLib - IO by external librairies. If you want your library to support ExtLib - IO without actually requiring ExtLib to compile, you can should implement - the classes [in_channel], [out_channel], [poly_in_channel] and/or - [poly_out_channel] which are the common IO specifications established - for ExtLib, OCamlNet and Camomile. - - (see http://www.ocaml-programming.de/tmp/IO-Classes.html for more details). -*) - -class in_channel : input -> - object - method input : string -> int -> int -> int - method close_in : unit -> unit - end - -class out_channel : 'a output -> - object - method output : string -> int -> int -> int - method flush : unit -> unit - method close_out : unit -> unit - end - -class in_chars : input -> - object - method get : unit -> char - method close_in : unit -> unit - end - -class out_chars : 'a output -> - object - method put : char -> unit - method flush : unit -> unit - method close_out : unit -> unit - end - -val from_in_channel : #in_channel -> input -val from_out_channel : #out_channel -> unit output -val from_in_chars : #in_chars -> input -val from_out_chars : #out_chars -> unit output diff --git a/bundles/extlib/extlib-1.5.2/LICENSE b/bundles/extlib/extlib-1.5.2/LICENSE deleted file mode 100644 index d158692..0000000 --- a/bundles/extlib/extlib-1.5.2/LICENSE +++ /dev/null @@ -1,199 +0,0 @@ -The Library is distributed under the terms of the GNU Library General -Public License version 2 (included below). - -As a special exception to the GNU Library General Public License, you -may link, statically or dynamically, a "work that uses the Library" -with a publicly distributed version of the Library to produce an -executable file containing portions of the Library, and distribute -that executable file under terms of your choice, without any of the -additional requirements listed in clause 6 of the GNU Library General -Public License. By "a publicly distributed version of the Library", -we mean either the unmodified Library as distributed, or a -modified version of the Library that is distributed under the -conditions defined in clause 3 of the GNU Library General Public -License. This exception does not however invalidate any other reasons -why the executable file might be covered by the GNU Library General -Public License. - ------------- - -GNU LESSER GENERAL PUBLIC LICENSE -Version 2.1, February 1999 - - -Copyright (C) 1991, 1999 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - -Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. - -This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. - -When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. - -To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. - -We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. - -To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. - -Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. - -Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. - -When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. - -We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. - -For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. - -In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. - -Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. - -The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. - - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". - -A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) - -"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - -1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - - -a) The modified work must itself be a software library. -b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. -c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. -d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. -(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. - -5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. - -However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. - -When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. - -If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. - -6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: - - -a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) -b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. -c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. -d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. -e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. -For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: - - -a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. -b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. -8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. - -11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - -END OF TERMS AND CONDITIONS -How to Apply These Terms to Your New Libraries -If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). - -To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - -one line to give the library's name and an idea of what it does. -Copyright (C) year name of author - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library 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 GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: - - -Yoyodyne, Inc., hereby disclaims all copyright interest in -the library `Frob' (a library for tweaking knobs) written -by James Random Hacker. - -signature of Ty Coon, 1 April 1990 -Ty Coon, President of Vice - -That's all there is to it! diff --git a/bundles/extlib/extlib-1.5.2/META b/bundles/extlib/extlib-1.5.2/META deleted file mode 100644 index 9a8fc05..0000000 --- a/bundles/extlib/extlib-1.5.2/META +++ /dev/null @@ -1,4 +0,0 @@ -version="1.5.2" -description="Extended standard library" -archive(byte)="extLib.cma" -archive(native)="extLib.cmxa" diff --git a/bundles/extlib/extlib-1.5.2/Makefile b/bundles/extlib/extlib-1.5.2/Makefile deleted file mode 100644 index b50f463..0000000 --- a/bundles/extlib/extlib-1.5.2/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# Makefile contributed by Alain Frisch - -MODULES = \ - enum bitSet dynArray extArray extHashtbl extList extString global IO option \ - pMap std uChar uTF8 base64 unzip refList optParse dllist - -# the list is topologically sorted - -MLI = $(MODULES:=.mli) -SRC = $(MLI) $(MODULES:=.ml) extLib.ml - -all: - ocamlc -a -o extLib.cma $(SRC) -opt: - ocamlopt -a -o extLib.cmxa $(SRC) -doc: - ocamlc -c $(MODULES:=.mli) - mkdir -p doc/ - ocamldoc -sort -html -d doc/ $(MODULES:=.mli) - cp odoc_style.css doc/style.css - -install: - ocamlfind install extlib META *.cmi *.cma $(MLI) $(wildcard *.cmxa) $(wildcard *.a) - -uninstall: - ocamlfind remove extlib - -clean: - rm -f *.cmo *.cmx *.o *.cmi *.cma *.cmxa *.a - rm -Rf doc diff --git a/bundles/extlib/extlib-1.5.2/README.txt b/bundles/extlib/extlib-1.5.2/README.txt deleted file mode 100644 index 435916f..0000000 --- a/bundles/extlib/extlib-1.5.2/README.txt +++ /dev/null @@ -1,54 +0,0 @@ -OCaml Extended standard Library - ExtLib. -========================================= - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version,, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -What is ExtLib ? ----------------- - -ExtLib is a set of additional useful functions and modules for OCaml. -Project page : - http://code.google.com/p/ocaml-extlib -and you can join the mailing list here : - http://lists.sourceforge.net/lists/listinfo/ocaml-lib-devel - -People are encouraged to contribute and to report any bug or problem -they might have with ExtLib by using the mailing list. - -Installation : --------------- - -Unzip or untar in any directory, then simply run - -> ocaml install.ml - -and follow the instructions. - -Usage : -------- - -Generate and watch the documentation. - -Contributors : --------------- - -Nicolas Cannasse (ncannasse@motion-twin.com) -Brian Hurt (brian.hurt@qlogic.com) -Yamagata Yoriyuki (yori@users.sourceforge.net) - -License : ---------- - -See LICENSE diff --git a/bundles/extlib/extlib-1.5.2/base64.ml b/bundles/extlib/extlib-1.5.2/base64.ml deleted file mode 100644 index 0ac9613..0000000 --- a/bundles/extlib/extlib-1.5.2/base64.ml +++ /dev/null @@ -1,119 +0,0 @@ -(* - * Base64 - Base64 codec - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -exception Invalid_char -exception Invalid_table - -external unsafe_char_of_int : int -> char = "%identity" - -type encoding_table = char array -type decoding_table = int array - -let chars = [| - 'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P'; - 'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';'a';'b';'c';'d';'e';'f'; - 'g';'h';'i';'j';'k';'l';'m';'n';'o';'p';'q';'r';'s';'t';'u';'v'; - 'w';'x';'y';'z';'0';'1';'2';'3';'4';'5';'6';'7';'8';'9';'+';'/' -|] - -let make_decoding_table tbl = - if Array.length tbl <> 64 then raise Invalid_table; - let d = Array.make 256 (-1) in - for i = 0 to 63 do - Array.unsafe_set d (int_of_char (Array.unsafe_get tbl i)) i; - done; - d - -let inv_chars = make_decoding_table chars - -let encode ?(tbl=chars) ch = - if Array.length tbl <> 64 then raise Invalid_table; - let data = ref 0 in - let count = ref 0 in - let flush() = - if !count > 0 then begin - let d = (!data lsl (6 - !count)) land 63 in - IO.write ch (Array.unsafe_get tbl d); - end; - in - let write c = - let c = int_of_char c in - data := (!data lsl 8) lor c; - count := !count + 8; - while !count >= 6 do - count := !count - 6; - let d = (!data asr !count) land 63 in - IO.write ch (Array.unsafe_get tbl d) - done; - in - let output s p l = - for i = p to p + l - 1 do - write (String.unsafe_get s i) - done; - l - in - IO.create_out ~write ~output - ~flush:(fun () -> flush(); IO.flush ch) - ~close:(fun() -> flush(); IO.close_out ch) - -let decode ?(tbl=inv_chars) ch = - if Array.length tbl <> 256 then raise Invalid_table; - let data = ref 0 in - let count = ref 0 in - let rec fetch() = - if !count >= 8 then begin - count := !count - 8; - let d = (!data asr !count) land 0xFF in - unsafe_char_of_int d - end else - let c = int_of_char (IO.read ch) in - let c = Array.unsafe_get tbl c in - if c = -1 then raise Invalid_char; - data := (!data lsl 6) lor c; - count := !count + 6; - fetch() - in - let read = fetch in - let input s p l = - let i = ref 0 in - try - while !i < l do - String.unsafe_set s (p + !i) (fetch()); - incr i; - done; - l - with - IO.No_more_input when !i > 0 -> - !i - in - let close() = - count := 0; - IO.close_in ch - in - IO.create_in ~read ~input ~close - -let str_encode ?(tbl=chars) s = - let ch = encode ~tbl (IO.output_string()) in - IO.nwrite ch s; - IO.close_out ch - -let str_decode ?(tbl=inv_chars) s = - let ch = decode ~tbl (IO.input_string s) in - IO.nread ch ((String.length s * 6) / 8) diff --git a/bundles/extlib/extlib-1.5.2/base64.mli b/bundles/extlib/extlib-1.5.2/base64.mli deleted file mode 100644 index 38dd9b4..0000000 --- a/bundles/extlib/extlib-1.5.2/base64.mli +++ /dev/null @@ -1,57 +0,0 @@ -(* - * Base64 - Base64 codec - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Base64 codec. - - 8-bit characters are encoded into 6-bit ones using ASCII lookup tables. - Default tables maps 0..63 values on characters A-Z, a-z, 0-9, '+' and '/' - (in that order). -*) - -(** This exception is raised when reading an invalid character - from a base64 input. *) -exception Invalid_char - -(** This exception is raised if the encoding or decoding table - size is not correct. *) -exception Invalid_table - -(** An encoding table maps integers 0..63 to the corresponding char. *) -type encoding_table = char array - -(** A decoding table mais chars 0..255 to the corresponding 0..63 value - or -1 if the char is not accepted. *) -type decoding_table = int array - -(** Encode a string into Base64. *) -val str_encode : ?tbl:encoding_table -> string -> string - -(** Decode a string encoded into Base64, raise [Invalid_char] if a - character in the input string is not a valid one. *) -val str_decode : ?tbl:decoding_table -> string -> string - -(** Generic base64 encoding over an output. *) -val encode : ?tbl:encoding_table -> 'a IO.output -> 'a IO.output - -(** Generic base64 decoding over an input. *) -val decode : ?tbl:decoding_table -> IO.input -> IO.input - -(** Create a valid decoding table from an encoding one. *) -val make_decoding_table : encoding_table -> decoding_table diff --git a/bundles/extlib/extlib-1.5.2/bitSet.ml b/bundles/extlib/extlib-1.5.2/bitSet.ml deleted file mode 100644 index 6556bb0..0000000 --- a/bundles/extlib/extlib-1.5.2/bitSet.ml +++ /dev/null @@ -1,324 +0,0 @@ -(* - * Bitset - Efficient bit sets - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type intern - -let bcreate : int -> intern = Obj.magic String.create -external fast_get : intern -> int -> int = "%string_unsafe_get" -external fast_set : intern -> int -> int -> unit = "%string_unsafe_set" -external fast_bool : int -> bool = "%identity" -let fast_blit : intern -> int -> intern -> int -> int -> unit = Obj.magic String.blit -let fast_fill : intern -> int -> int -> int -> unit = Obj.magic String.fill -let fast_length : intern -> int= Obj.magic String.length - -let bget s ndx = - assert (ndx >= 0 && ndx < fast_length s); - fast_get s ndx - -let bset s ndx v = - assert (ndx >= 0 && ndx < fast_length s); - fast_set s ndx v - -let bblit src srcoff dst dstoff len = - assert (srcoff >= 0 && dstoff >= 0 && len >= 0); - fast_blit src srcoff dst dstoff len - -let bfill dst start len c = - assert (start >= 0 && len >= 0); - fast_fill dst start len c - -exception Negative_index of string - -type t = { - mutable data : intern; - mutable len : int; -} - -let error fname = raise (Negative_index fname) - -let empty() = - { - data = bcreate 0; - len = 0; - } - -let int_size = 7 (* value used to round up index *) -let log_int_size = 3 (* number of shifts *) - -let create n = - if n < 0 then error "create"; - let size = (n+int_size) lsr log_int_size in - let b = bcreate size in - bfill b 0 size 0; - { - data = b; - len = size; - } - -let copy t = - let b = bcreate t.len in - bblit t.data 0 b 0 t.len; - { - data = b; - len = t.len - } - -let clone = copy - -let set t x = - if x < 0 then error "set"; - let pos = x lsr log_int_size and delta = x land int_size in - let size = t.len in - if pos >= size then begin - let b = bcreate (pos+1) in - bblit t.data 0 b 0 size; - bfill b size (pos - size + 1) 0; - t.len <- pos + 1; - t.data <- b; - end; - bset t.data pos ((bget t.data pos) lor (1 lsl delta)) - -let unset t x = - if x < 0 then error "unset"; - let pos = x lsr log_int_size and delta = x land int_size in - if pos < t.len then - bset t.data pos ((bget t.data pos) land (0xFF lxor (1 lsl delta))) - -let toggle t x = - if x < 0 then error "toggle"; - let pos = x lsr log_int_size and delta = x land int_size in - let size = t.len in - if pos >= size then begin - let b = bcreate (pos+1) in - bblit t.data 0 b 0 size; - bfill b size (pos - size + 1) 0; - t.len <- pos + 1; - t.data <- b; - end; - bset t.data pos ((bget t.data pos) lxor (1 lsl delta)) - -let put t = function - | true -> set t - | false -> unset t - -let is_set t x = - if x < 0 then error "is_set"; - let pos = x lsr log_int_size and delta = x land int_size in - let size = t.len in - if pos < size then - fast_bool (((bget t.data pos) lsr delta) land 1) - else - false - - -exception Break_int of int - -(* Find highest set element or raise Not_found *) -let find_msb t = - (* Find highest set bit in a byte. Does not work with zero. *) - let byte_msb b = - assert (b <> 0); - let rec loop n = - if b land (1 lsl n) = 0 then - loop (n-1) - else n in - loop 7 in - let n = t.len - 1 - and buf = t.data in - try - for i = n downto 0 do - let byte = bget buf i in - if byte <> 0 then raise (Break_int ((i lsl log_int_size)+(byte_msb byte))) - done; - raise Not_found - with - Break_int n -> n - | _ -> raise Not_found - -let compare t1 t2 = - let some_msb b = try Some (find_msb b) with Not_found -> None in - match (some_msb t1, some_msb t2) with - (None, Some _) -> -1 (* 0-y -> -1 *) - | (Some _, None) -> 1 (* x-0 -> 1 *) - | (None, None) -> 0 (* 0-0 -> 0 *) - | (Some a, Some b) -> (* x-y *) - if a < b then -1 - else if a > b then 1 - else - begin - (* MSBs differ, we need to scan arrays until we find a - difference *) - let ndx = a lsr log_int_size in - assert (ndx < t1.len && ndx < t2.len); - try - for i = ndx downto 0 do - let b1 = bget t1.data i - and b2 = bget t2.data i in - if b1 <> b2 then raise (Break_int (compare b1 b2)) - done; - 0 - with - Break_int res -> res - end - -let equals t1 t2 = - compare t1 t2 = 0 - -let partial_count t x = - let rec nbits x = - if x = 0 then - 0 - else if fast_bool (x land 1) then - 1 + (nbits (x lsr 1)) - else - nbits (x lsr 1) - in - let size = t.len in - let pos = x lsr log_int_size and delta = x land int_size in - let rec loop n acc = - if n = size then - acc - else - let x = bget t.data n in - loop (n+1) (acc + nbits x) - in - if pos >= size then - 0 - else - loop (pos+1) (nbits ((bget t.data pos) lsr delta)) - -let count t = - partial_count t 0 - -(* Find the first set bit in the bit array *) -let find_first_set b n = - (* TODO there are many ways to speed this up. Lookup table would be - one way to speed this up. *) - let find_lsb b = - assert (b <> 0); - let rec loop n = - if b land (1 lsl n) <> 0 then n else loop (n+1) in - loop 0 in - - let buf = b.data in - let rec find_bit byte_ndx bit_offs = - if byte_ndx >= b.len then - None - else - let byte = (bget buf byte_ndx) lsr bit_offs in - if byte = 0 then - find_bit (byte_ndx + 1) 0 - else - Some ((find_lsb byte) + (byte_ndx lsl log_int_size) + bit_offs) in - find_bit (n lsr log_int_size) (n land int_size) - -let enum t = - let rec make n = - let cur = ref n in - let rec next () = - match find_first_set t !cur with - Some elem -> - cur := (elem+1); - elem - | None -> - raise Enum.No_more_elements in - Enum.make - ~next - ~count:(fun () -> partial_count t !cur) - ~clone:(fun () -> make !cur) - in - make 0 - -let raw_create size = - let b = bcreate size in - bfill b 0 size 0; - { data = b; len = size } - -let inter a b = - let max_size = max a.len b.len in - let d = raw_create max_size in - let sl = min a.len b.len in - let abuf = a.data - and bbuf = b.data in - (* Note: rest of the array is set to zero automatically *) - for i = 0 to sl-1 do - bset d.data i ((bget abuf i) land (bget bbuf i)) - done; - d - -(* Note: rest of the array is handled automatically correct, since we - took a copy of the bigger set. *) -let union a b = - let d = if a.len > b.len then copy a else copy b in - let sl = min a.len b.len in - let abuf = a.data - and bbuf = b.data in - for i = 0 to sl-1 do - bset d.data i ((bget abuf i) lor (bget bbuf i)) - done; - d - -let diff a b = - let maxlen = max a.len b.len in - let buf = bcreate maxlen in - bblit a.data 0 buf 0 a.len; - let sl = min a.len b.len in - let abuf = a.data - and bbuf = b.data in - for i = 0 to sl-1 do - bset buf i ((bget abuf i) land (lnot (bget bbuf i))) - done; - { data = buf; len = maxlen } - -let sym_diff a b = - let maxlen = max a.len b.len in - let buf = bcreate maxlen in - (* Copy larger (assumes missing bits are zero) *) - bblit (if a.len > b.len then a.data else b.data) 0 buf 0 maxlen; - let sl = min a.len b.len in - let abuf = a.data - and bbuf = b.data in - for i = 0 to sl-1 do - bset buf i ((bget abuf i) lxor (bget bbuf i)) - done; - { data = buf; len = maxlen } - -(* TODO the following set operations can be made faster if you do the - set operation in-place instead of taking a copy. But be careful - when the sizes of the bitvector strings differ. *) -let intersect t t' = - let d = inter t t' in - t.data <- d.data; - t.len <- d.len - -let differentiate t t' = - let d = diff t t' in - t.data <- d.data; - t.len <- d.len - -let unite t t' = - let d = union t t' in - t.data <- d.data; - t.len <- d.len - -let differentiate_sym t t' = - let d = sym_diff t t' in - t.data <- d.data; - t.len <- d.len diff --git a/bundles/extlib/extlib-1.5.2/bitSet.mli b/bundles/extlib/extlib-1.5.2/bitSet.mli deleted file mode 100644 index aeff7f7..0000000 --- a/bundles/extlib/extlib-1.5.2/bitSet.mli +++ /dev/null @@ -1,101 +0,0 @@ -(* - * Bitset - Efficient bit sets - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Efficient bit sets. - - A bitset is an array of boolean values that can be accessed with indexes - like an array but provides a better memory usage (divided by 8) for a - very small speed trade-off. *) - -type t - -exception Negative_index of string -(** When a negative bit value is used for one of the BitSet functions, - this exception is raised with the name of the function. *) - -val empty : unit -> t -(** Create an empty bitset of size 0, the bitset will automatically expand - when needed. *) - -val create : int -> t -(** Create an empty bitset with an initial size (in number of bits). *) - -val copy : t -> t -(** Copy a bitset : further modifications of first one will not affect the - copy. *) - -val clone : t -> t -(** Same as [copy] *) - -val set : t -> int -> unit -(** [set s n] sets the nth-bit in the bitset [s] to true. *) - -val unset : t -> int -> unit -(** [unset s n] sets the nth-bit in the bitset [s] to false. *) - -val put : t -> bool -> int -> unit -(** [put s v n] sets the nth-bit in the bitset [s] to [v]. *) - -val toggle : t -> int -> unit -(** [toggle s n] changes the nth-bit value in the bitset [s]. *) - -val is_set : t -> int -> bool -(** [is_set s n] returns true if nth-bit in the bitset [s] is set, - or false otherwise. *) - -val compare : t -> t -> int -(** [compare s1 s2] compares two bitsets. Highest bit indexes are - compared first. *) - -val equals : t -> t -> bool -(** [equals s1 s2] returns true if, and only if, all bits values in s1 are - the same as in s2. *) - -val count : t -> int -(** [count s] returns the number of bits set in the bitset [s]. *) - -val enum : t -> int Enum.t -(** [enum s] returns an enumeration of bits which are set - in the bitset [s]. *) - -val intersect : t -> t -> unit -(** [intersect s t] sets [s] to the intersection of the sets [s] and [t]. *) - -val unite : t -> t -> unit -(** [unite s t] sets [s] to the union of the sets [s] and [t]. *) - -val differentiate : t -> t -> unit -(** [differentiate s t] removes the elements of [t] from [s]. *) - -val differentiate_sym : t -> t -> unit -(** [differentiate_sym s t] sets [s] to the symmetrical difference of the - sets [s] and [t]. *) - -val inter : t -> t -> t -(** [inter s t] returns the intersection of sets [s] and [t]. *) - -val union : t -> t -> t -(** [union s t] return the union of sets [s] and [t]. *) - -val diff : t -> t -> t -(** [diff s t] returns [s]-[t]. *) - -val sym_diff : t -> t -> t -(** [sym_diff s t] returns the symmetrical difference of [s] and [t]. *) diff --git a/bundles/extlib/extlib-1.5.2/dllist.ml b/bundles/extlib/extlib-1.5.2/dllist.ml deleted file mode 100644 index 0718291..0000000 --- a/bundles/extlib/extlib-1.5.2/dllist.ml +++ /dev/null @@ -1,287 +0,0 @@ -(* - * Dllist- a mutable, circular, doubly linked list library - * Copyright (C) 2004 Brian Hurt, Jesse Guardiani - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type 'a node_t = { - mutable data : 'a; - mutable next : 'a node_t; - mutable prev : 'a node_t -} - -type 'a enum_t = { - mutable curr : 'a node_t; - mutable valid : bool -} - -exception Empty - -let create x = let rec nn = { data = x; next = nn; prev = nn} in nn - -let length node = - let rec loop cnt n = - if n == node then - cnt - else - loop (cnt + 1) n.next - in - loop 1 node.next - -let add node elem = - let nn = { data = elem; next = node.next; prev = node } in - node.next.prev <- nn; - node.next <- nn - -let append node elem = - let nn = { data = elem; next = node.next; prev = node } in - node.next.prev <- nn; - node.next <- nn; - nn - -let prepend node elem = - let nn = { data = elem; next = node; prev = node.prev } in - node.prev.next <- nn; - node.prev <- nn; - nn - -let promote node = - let next = node.next in - let prev = node.prev in - if next != prev then begin - next.next.prev <- node; - node.next <- next.next; - node.prev <- next; - next.next <- node; - next.prev <- prev; - prev.next <- next - end - -let demote node = - let next = node.next in - let prev = node.prev in - if next != prev then begin - prev.prev.next <- node; - node.prev <- prev.prev; - node.next <- prev; - prev.prev <- node; - prev.next <- next; - next.prev <- prev - end - -let remove node = - let next = node.next in - let prev = node.prev in - prev.next <- next; - next.prev <- prev; - node.next <- node; - node.prev <- node - -let drop node = - let next = node.next in - let prev = node.prev in - prev.next <- next; - next.prev <- prev; - node.next <- node; - node.prev <- node; - next - -let rev_drop node = - let next = node.next in - let prev = node.prev in - prev.next <- next; - next.prev <- prev; - node.next <- node; - node.prev <- node; - prev - -let splice node1 node2 = - let next = node1.next in - let prev = node2.prev in - node1.next <- node2; - node2.prev <- node1; - next.prev <- prev; - prev.next <- next - -let set node data = node.data <- data - -let get node = node.data - -let next node = node.next - -let prev node = node.prev - -let skip node idx = - let m = if idx > 0 then -1 else 1 in - let rec loop idx n = - if idx == 0 then - n - else - loop (idx + m) n.next - in - loop idx node - -let rev node = - let rec loop next n = - begin - let prev = n.prev in - n.next <- prev; - n.prev <- next; - - if n != node then - loop n prev - end - in - loop node node.prev - -let iter f node = - let () = f node.data in - let rec loop n = - if n != node then - let () = f n.data in - loop n.next - in - loop node.next - -let fold_left f init node = - let rec loop accu n = - if n == node then - accu - else - loop (f accu n.data) n.next - in - loop (f init node.data) node.next - -let fold_right f node init = - let rec loop accu n = - if n == node then - f n.data accu - else - loop (f n.data accu) n.prev - in - loop init node.prev - -let map f node = - let first = create (f node.data) in - let rec loop last n = - if n == node then - begin - first.prev <- last; - first - end - else - begin - let nn = { data = f n.data; next = first; prev = last } in - last.next <- nn; - loop nn n.next - end - in - loop first node.next - -let copy node = map (fun x -> x) node - -let to_list node = fold_right (fun d l -> d::l) node [] - -let of_list lst = - match lst with - | [] -> raise Empty - | h :: t -> - let first = create h in - let rec loop last = function - | [] -> - last.next <- first; - first.prev <- last; - first - | h :: t -> - let nn = { data = h; next = first; prev = last } in - last.next <- nn; - loop nn t - in - loop first t - -let enum node = - let next e () = - if e.valid == false then - raise Enum.No_more_elements - else - begin - let rval = e.curr.data in - e.curr <- e.curr.next; - - if (e.curr == node) then - e.valid <- false; - rval - end - and count e () = - if e.valid == false then - 0 - else - let rec loop cnt n = - if n == node then - cnt - else - loop (cnt + 1) (n.next) - in - loop 1 (e.curr.next) - in - let rec clone e () = - let e' = { curr = e.curr; valid = e.valid } in - Enum.make ~next:(next e') ~count:(count e') ~clone:(clone e') - in - let e = { curr = node; valid = true } in - Enum.make ~next:(next e) ~count:(count e) ~clone:(clone e) - -let rev_enum node = - let prev e () = - if e.valid == false then - raise Enum.No_more_elements - else - begin - let rval = e.curr.data in - e.curr <- e.curr.prev; - - if (e.curr == node) then - e.valid <- false; - rval - end - and count e () = - if e.valid == false then - 0 - else - let rec loop cnt n = - if n == node then - cnt - else - loop (cnt + 1) (n.prev) - in - loop 1 (e.curr.prev) - in - let rec clone e () = - let e' = { curr = e.curr; valid = e.valid } in - Enum.make ~next:(prev e') ~count:(count e') ~clone:(clone e') - in - let e = { curr = node; valid = true } in - Enum.make ~next:(prev e) ~count:(count e) ~clone:(clone e) - -let of_enum enm = - match Enum.get enm with - | None -> raise Empty - | Some(d) -> - let first = create d in - let f d n = append n d in - ignore(Enum.fold f first enm); - first diff --git a/bundles/extlib/extlib-1.5.2/dllist.mli b/bundles/extlib/extlib-1.5.2/dllist.mli deleted file mode 100644 index 0e0990e..0000000 --- a/bundles/extlib/extlib-1.5.2/dllist.mli +++ /dev/null @@ -1,182 +0,0 @@ -(* - * Dllist- a mutable, circular, doubly linked list library - * Copyright (C) 2004 Brian Hurt, Jesse Guardiani - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** A mutable, imperative, circular, doubly linked list library - - This module implements a doubly linked list in a mutable or imperitive - style (changes to the list are visible to all copies of the list). -*) - - -type 'a node_t (* abstract *) - -exception Empty - -(** {6 node functions } *) - -(** Creates a node. This is an O(1) operation. *) -val create : 'a -> 'a node_t - -(** Copy the list attached to the given node and return the copy of the given - node. This is an O(N) operation. -*) -val copy : 'a node_t -> 'a node_t - -(** Returns the length of the list. This is an O(N) operation. *) -val length : 'a node_t -> int - -(** List reversal. This is an O(N) operation. -*) -val rev : 'a node_t -> unit - -(** [add n a] Creates a new node containing data [a] and inserts it into - the list after node [n]. This is an O(1) operation. -*) -val add : 'a node_t -> 'a -> unit - -(** [append n a] Creates a new node containing data [a] and inserts it into - the list after node [n]. Returns new node. This is an O(1) operation. -*) -val append : 'a node_t -> 'a -> 'a node_t - -(** [prepend n a] Creates a new node containing data [a] and inserts it into - the list before node [n]. Returns new node. This is an O(1) operation. -*) -val prepend : 'a node_t -> 'a -> 'a node_t - -(** [promote n] Swaps [n] with [next n]. This is an O(1) operation. -*) -val promote : 'a node_t -> unit - -(** [demote n] Swaps [n] with [prev n]. This is an O(1) operation. -*) -val demote : 'a node_t -> unit - -(** Remove node from the list no matter where it is. This is an O(1) operation. -*) -val remove : 'a node_t -> unit - -(** Remove node from the list no matter where it is. Return next node. This is - an O(1) operation. -*) -val drop : 'a node_t -> 'a node_t - -(** Remove node from the list no matter where it is. Return previous node. This - is an O(1) operation. -*) -val rev_drop : 'a node_t -> 'a node_t - -(** [splice n1 n2] Connects [n1] and [n2] so that - [next n1 == n2 && prev n2 == n1]. This can be used to connect two discrete - lists, or, if used on two nodes within the same list, it can be used to - separate the nodes between [n1] and [n2] from the rest of the list. In this - case, those nodes become a discrete list by themselves. This is an O(1) - operation. -*) -val splice : 'a node_t -> 'a node_t -> unit - -(** Given a node, get the data associated with that node. This is an - O(1) operation. -*) -val get : 'a node_t -> 'a - -(** Given a node, set the data associated with that node. This is an O(1) - operation. -*) -val set : 'a node_t -> 'a -> unit - -(** Given a node, get the next element in the list after the node. - - The list is circular, so the last node of the list returns the first - node of the list as it's next node. - - This is an O(1) operation. -*) -val next : 'a node_t -> 'a node_t - -(** Given a node, get the previous element in the list before the node. - - The list is circular, so the first node of the list returns the - last element of the list as it's previous node. - - This is an O(1) operation. -*) -val prev : 'a node_t -> 'a node_t - -(** [skip n i] Return the node that is [i] nodes after node [n] in the list. - If [i] is negative then return the node that is [i] nodes before node [n] - in the list. This is an O(N) operation. -*) -val skip : 'a node_t -> int -> 'a node_t - -(** [iter f n] Apply [f] to every element in the list, starting at [n]. This - is an O(N) operation. -*) -val iter : ('a -> unit) -> 'a node_t -> unit - -(** Accumulate a value over the entire list. - This works like List.fold_left. This is an O(N) operation. -*) -val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b node_t -> 'a - -(** Accumulate a value over the entire list. - This works like List.fold_right, but since the list is bidirectional, - it doesn't suffer the performance problems of List.fold_right. - This is an O(N) operation. -*) -val fold_right : ('a -> 'b -> 'b) -> 'a node_t -> 'b -> 'b - -(** Allocate a new list, with entirely new nodes, whose values are - the transforms of the values of the original list. Note that this - does not modify the given list. This is an O(N) operation. -*) -val map : ('a -> 'b) -> 'a node_t -> 'b node_t - - -(** {6 list conversion } *) - -(** Converts a dllist to a normal list. This is an O(N) operation. *) -val to_list : 'a node_t -> 'a list - -(** Converts from a normal list to a Dllist and returns the first node. Raises - [Empty] if given list is empty. This is an O(N) operation. -*) -val of_list : 'a list -> 'a node_t - - -(** {6 enums } *) - -(** Create an enum of the list. - Note that modifying the list while the enum exists will have undefined - effects. This is an O(1) operation. -*) -val enum : 'a node_t -> 'a Enum.t - -(** Create a reverse enum of the list. - Note that modifying the list while the enum exists will have undefined - effects. This is an O(1) operation. -*) -val rev_enum : 'a node_t -> 'a Enum.t - -(** Create a dllist from an enum. - This consumes the enum, and allocates a whole new dllist. Raises - [Empty] if given enum is empty. This is an O(N) operation. -*) -val of_enum : 'a Enum.t -> 'a node_t diff --git a/bundles/extlib/extlib-1.5.2/dynArray.ml b/bundles/extlib/extlib-1.5.2/dynArray.ml deleted file mode 100644 index eedc888..0000000 --- a/bundles/extlib/extlib-1.5.2/dynArray.ml +++ /dev/null @@ -1,451 +0,0 @@ -(* - * DynArray - Resizeable Ocaml arrays - * Copyright (C) 2003 Brian Hurt - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type resizer_t = currslots:int -> oldlength:int -> newlength:int -> int - -type 'a intern - -external ilen : 'a intern -> int = "%obj_size" -let idup (x : 'a intern) = if ilen x = 0 then x else (Obj.magic (Obj.dup (Obj.repr x)) : 'a intern) -let imake tag len = (Obj.magic (Obj.new_block tag len) : 'a intern) -external iget : 'a intern -> int -> 'a = "%obj_field" -external iset : 'a intern -> int -> 'a -> unit = "%obj_set_field" - -type 'a t = { - mutable arr : 'a intern; - mutable len : int; - mutable resize: resizer_t; -} - -exception Invalid_arg of int * string * string - -let invalid_arg n f p = raise (Invalid_arg (n,f,p)) - -let length d = d.len - -let exponential_resizer ~currslots ~oldlength ~newlength = - let rec doubler x = if x >= newlength then x else doubler (x * 2) in - let rec halfer x = if x / 2 < newlength then x else halfer (x / 2) in - if newlength = 1 then - 1 - else if currslots = 0 then - doubler 1 - else if currslots < newlength then - doubler currslots - else - halfer currslots - -let step_resizer step = - if step <= 0 then invalid_arg step "step_resizer" "step"; - (fun ~currslots ~oldlength ~newlength -> - if currslots < newlength || newlength < (currslots - step) - then - (newlength + step - (newlength mod step)) - else - currslots) - -let conservative_exponential_resizer ~currslots ~oldlength ~newlength = - let rec doubler x = if x >= newlength then x else doubler (x * 2) in - let rec halfer x = if x / 2 < newlength then x else halfer (x / 2) in - if currslots < newlength then begin - if newlength = 1 then - 1 - else if currslots = 0 then - doubler 1 - else - doubler currslots - end else if oldlength < newlength then - halfer currslots - else - currslots - -let default_resizer = conservative_exponential_resizer - -let changelen (d : 'a t) newlen = - if newlen > Sys.max_array_length then invalid_arg newlen "changelen" "newlen"; - - let oldsize = ilen d.arr in - let r = d.resize - ~currslots:oldsize - ~oldlength:d.len - ~newlength:newlen - in - (* We require the size to be at least large enough to hold the number - * of elements we know we need! - * Also be sure not to exceed max_array_length - *) - let newsize = if r < newlen then newlen else min Sys.max_array_length r in - if newsize <> oldsize then begin - let newarr = imake 0 newsize in - let cpylen = (if newlen < d.len then newlen else d.len) in - for i = 0 to cpylen - 1 do - iset newarr i (iget d.arr i); - done; - d.arr <- newarr; - end; - d.len <- newlen - -let compact d = - if d.len <> ilen d.arr then begin - let newarr = imake 0 d.len in - for i = 0 to d.len - 1 do - iset newarr i (iget d.arr i) - done; - d.arr <- newarr; - end - -let create() = - { - resize = default_resizer; - len = 0; - arr = imake 0 0; - } - -let make initsize = - if initsize < 0 then invalid_arg initsize "make" "size"; - { - resize = default_resizer; - len = 0; - arr = imake 0 initsize; - } - -let init initlen f = - if initlen < 0 then invalid_arg initlen "init" "len"; - let arr = imake 0 initlen in - for i = 0 to initlen-1 do - iset arr i (f i) - done; - { - resize = default_resizer; - len = initlen; - arr = arr; - } - -let set_resizer d resizer = - d.resize <- resizer - -let get_resizer d = - d.resize - -let empty d = - d.len = 0 - -let get d idx = - if idx < 0 || idx >= d.len then invalid_arg idx "get" "index"; - iget d.arr idx - -let last d = - if d.len = 0 then invalid_arg 0 "last" ""; - iget d.arr (d.len - 1) - -let set d idx v = - if idx < 0 || idx >= d.len then invalid_arg idx "set" "index"; - iset d.arr idx v - -let insert d idx v = - if idx < 0 || idx > d.len then invalid_arg idx "insert" "index"; - if d.len = ilen d.arr then changelen d (d.len + 1) else d.len <- d.len + 1; - if idx < d.len - 1 then begin - for i = d.len - 2 downto idx do - iset d.arr (i+1) (iget d.arr i) - done; - end; - iset d.arr idx v - -let add d v = - if d.len = ilen d.arr then changelen d (d.len + 1) else d.len <- d.len + 1; - iset d.arr (d.len - 1) v - -let delete d idx = - if idx < 0 || idx >= d.len then invalid_arg idx "delete" "index"; - let oldsize = ilen d.arr in - (* we don't call changelen because we want to blit *) - let r = d.resize - ~currslots:oldsize - ~oldlength:d.len - ~newlength:(d.len - 1) - in - let newsize = (if r < d.len - 1 then d.len - 1 else r) in - if oldsize <> newsize then begin - let newarr = imake 0 newsize in - for i = 0 to idx - 1 do - iset newarr i (iget d.arr i); - done; - for i = idx to d.len - 2 do - iset newarr i (iget d.arr (i+1)); - done; - d.arr <- newarr; - end else begin - for i = idx to d.len - 2 do - iset d.arr i (iget d.arr (i+1)); - done; - iset d.arr (d.len - 1) (Obj.magic 0) - end; - d.len <- d.len - 1 - - -let delete_range d idx len = - if len < 0 then invalid_arg len "delete_range" "length"; - if idx < 0 || idx + len > d.len then invalid_arg idx "delete_range" "index"; - let oldsize = ilen d.arr in - (* we don't call changelen because we want to blit *) - let r = d.resize - ~currslots:oldsize - ~oldlength:d.len - ~newlength:(d.len - len) - in - let newsize = (if r < d.len - len then d.len - len else r) in - if oldsize <> newsize then begin - let newarr = imake 0 newsize in - for i = 0 to idx - 1 do - iset newarr i (iget d.arr i); - done; - for i = idx to d.len - len - 1 do - iset newarr i (iget d.arr (i+len)); - done; - d.arr <- newarr; - end else begin - for i = idx to d.len - len - 1 do - iset d.arr i (iget d.arr (i+len)); - done; - for i = d.len - len to d.len - 1 do - iset d.arr i (Obj.magic 0) - done; - end; - d.len <- d.len - len - -let clear d = - d.len <- 0; - d.arr <- imake 0 0 - -let delete_last d = - if d.len <= 0 then invalid_arg 0 "delete_last" ""; - (* erase for GC, in case changelen don't resize our array *) - iset d.arr (d.len - 1) (Obj.magic 0); - changelen d (d.len - 1) - -let rec blit src srcidx dst dstidx len = - if len < 0 then invalid_arg len "blit" "len"; - if srcidx < 0 || srcidx + len > src.len then invalid_arg srcidx "blit" "source index"; - if dstidx < 0 || dstidx > dst.len then invalid_arg dstidx "blit" "dest index"; - let newlen = dstidx + len in - if newlen > ilen dst.arr then begin - (* this case could be inlined so we don't blit on just-copied elements *) - changelen dst newlen - end else begin - if newlen > dst.len then dst.len <- newlen; - end; - (* same array ! we need to copy in reverse order *) - if src.arr == dst.arr && dstidx > srcidx then - for i = len - 1 downto 0 do - iset dst.arr (dstidx+i) (iget src.arr (srcidx+i)); - done - else - for i = 0 to len - 1 do - iset dst.arr (dstidx+i) (iget src.arr (srcidx+i)); - done - -let append src dst = - blit src 0 dst dst.len src.len - -let to_list d = - let rec loop idx accum = - if idx < 0 then accum else loop (idx - 1) (iget d.arr idx :: accum) - in - loop (d.len - 1) [] - -let to_array d = - if d.len = 0 then begin - (* since the empty array is an atom, we don't care if float or not *) - [||] - end else begin - let arr = Array.make d.len (iget d.arr 0) in - for i = 1 to d.len - 1 do - Array.unsafe_set arr i (iget d.arr i) - done; - arr; - end - -let of_list lst = - let size = List.length lst in - let arr = imake 0 size in - let rec loop idx = function - | h :: t -> iset arr idx h; loop (idx + 1) t - | [] -> () - in - loop 0 lst; - { - resize = default_resizer; - len = size; - arr = arr; - } - -let of_array src = - let size = Array.length src in - let is_float = Obj.tag (Obj.repr src) = Obj.double_array_tag in - let arr = (if is_float then begin - let arr = imake 0 size in - for i = 0 to size - 1 do - iset arr i (Array.unsafe_get src i); - done; - arr - end else - (* copy the fields *) - idup (Obj.magic src : 'a intern)) - in - { - resize = default_resizer; - len = size; - arr = arr; - } - -let copy src = - { - resize = src.resize; - len = src.len; - arr = idup src.arr; - } - -let sub src start len = - if len < 0 then invalid_arg len "sub" "len"; - if start < 0 || start + len > src.len then invalid_arg start "sub" "start"; - let arr = imake 0 len in - for i = 0 to len - 1 do - iset arr i (iget src.arr (i+start)); - done; - { - resize = src.resize; - len = len; - arr = arr; - } - -let iter f d = - for i = 0 to d.len - 1 do - f (iget d.arr i) - done - -let iteri f d = - for i = 0 to d.len - 1 do - f i (iget d.arr i) - done - -let filter f d = - let l = d.len in - let a = imake 0 l in - let a2 = d.arr in - let p = ref 0 in - for i = 0 to l - 1 do - let x = iget a2 i in - if f x then begin - iset a !p x; - incr p; - end; - done; - d.len <- !p; - d.arr <- a - -let index_of f d = - let rec loop i = - if i >= d.len then - raise Not_found - else - if f (iget d.arr i) then - i - else - loop (i+1) - in - loop 0 - -let map f src = - let arr = imake 0 src.len in - for i = 0 to src.len - 1 do - iset arr i (f (iget src.arr i)) - done; - { - resize = src.resize; - len = src.len; - arr = arr; - } - -let mapi f src = - let arr = imake 0 src.len in - for i = 0 to src.len - 1 do - iset arr i (f i (iget src.arr i)) - done; - { - resize = src.resize; - len = src.len; - arr = arr; - } - -let fold_left f x a = - let rec loop idx x = - if idx >= a.len then x else loop (idx + 1) (f x (iget a.arr idx)) - in - loop 0 x - -let fold_right f a x = - let rec loop idx x = - if idx < 0 then x - else loop (idx - 1) (f (iget a.arr idx) x) - in - loop (a.len - 1) x - -let enum d = - let rec make start = - let idxref = ref 0 in - let next () = - if !idxref >= d.len then - raise Enum.No_more_elements - else - let retval = iget d.arr !idxref in - incr idxref; - retval - and count () = - if !idxref >= d.len then 0 - else d.len - !idxref - and clone () = - make !idxref - in - Enum.make ~next:next ~count:count ~clone:clone - in - make 0 - -let of_enum e = - if Enum.fast_count e then begin - let c = Enum.count e in - let arr = imake 0 c in - Enum.iteri (fun i x -> iset arr i x) e; - { - resize = default_resizer; - len = c; - arr = arr; - } - end else - let d = make 0 in - Enum.iter (add d) e; - d - -let unsafe_get a n = - iget a.arr n - -let unsafe_set a n x = - iset a.arr n x diff --git a/bundles/extlib/extlib-1.5.2/dynArray.mli b/bundles/extlib/extlib-1.5.2/dynArray.mli deleted file mode 100644 index dbd1f6a..0000000 --- a/bundles/extlib/extlib-1.5.2/dynArray.mli +++ /dev/null @@ -1,281 +0,0 @@ -(* - * DynArray - Resizeable Ocaml arrays - * Copyright (C) 2003 Brian Hurt - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Dynamic arrays. - - A dynamic array is equivalent to a OCaml array that will resize itself - when elements are added or removed, except that floats are boxed and - that no initialization element is required. -*) - -type 'a t - -exception Invalid_arg of int * string * string -(** When an operation on an array fails, [Invalid_arg] is raised. The - integer is the value that made the operation fail, the first string - contains the function name that has been called and the second string - contains the parameter name that made the operation fail. -*) - -(** {6 Array creation} *) - -val create : unit -> 'a t -(** [create()] returns a new empty dynamic array. *) - -val make : int -> 'a t -(** [make count] returns an array with some memory already allocated so - up to [count] elements can be stored into it without resizing. *) - -val init : int -> (int -> 'a) -> 'a t -(** [init n f] returns an array of [n] elements filled with values - returned by [f 0 , f 1, ... f (n-1)]. *) - -(** {6 Array manipulation functions} *) - -val empty : 'a t -> bool -(** Return true if the number of elements in the array is 0. *) - -val length : 'a t -> int -(** Return the number of elements in the array. *) - -val get : 'a t -> int -> 'a -(** [get darr idx] gets the element in [darr] at index [idx]. If [darr] has - [len] elements in it, then the valid indexes range from [0] to [len-1]. *) - -val last : 'a t -> 'a -(** [last darr] returns the last element of [darr]. *) - -val set : 'a t -> int -> 'a -> unit -(** [set darr idx v] sets the element of [darr] at index [idx] to value - [v]. The previous value is overwritten. *) - -val insert : 'a t -> int -> 'a -> unit -(** [insert darr idx v] inserts [v] into [darr] at index [idx]. All elements - of [darr] with an index greater than or equal to [idx] have their - index incremented (are moved up one place) to make room for the new - element. *) - -val add : 'a t -> 'a -> unit -(** [add darr v] appends [v] onto [darr]. [v] becomes the new - last element of [darr]. *) - -val append : 'a t -> 'a t -> unit -(** [append src dst] adds all elements of [src] to the end of [dst]. *) - -val delete : 'a t -> int -> unit -(** [delete darr idx] deletes the element of [darr] at [idx]. All elements - with an index greater than [idx] have their index decremented (are - moved down one place) to fill in the hole. *) - -val delete_last : 'a t -> unit -(** [delete_last darr] deletes the last element of [darr]. This is equivalent - of doing [delete darr ((length darr) - 1)]. *) - -val delete_range : 'a t -> int -> int -> unit -(** [delete_range darr p len] deletes [len] elements starting at index [p]. - All elements with an index greater than [p+len] are moved to fill - in the hole. *) - -val clear : 'a t -> unit -(** remove all elements from the array and resize it to 0. *) - -val blit : 'a t -> int -> 'a t -> int -> int -> unit -(** [blit src srcidx dst dstidx len] copies [len] elements from [src] - starting with index [srcidx] to [dst] starting at [dstidx]. *) - -val compact : 'a t -> unit -(** [compact darr] ensures that the space allocated by the array is minimal.*) - -(** {6 Array copy and conversion} *) - -val to_list : 'a t -> 'a list -(** [to_list darr] returns the elements of [darr] in order as a list. *) - -val to_array : 'a t -> 'a array -(** [to_array darr] returns the elements of [darr] in order as an array. *) - -val enum : 'a t -> 'a Enum.t -(** [enum darr] returns the enumeration of [darr] elements. *) - -val of_list : 'a list -> 'a t -(** [of_list lst] returns a dynamic array with the elements of [lst] in - it in order. *) - -val of_array : 'a array -> 'a t -(** [of_array arr] returns an array with the elements of [arr] in it - in order. *) - -val of_enum : 'a Enum.t -> 'a t -(** [of_enum e] returns an array that holds, in order, the elements of [e]. *) - -val copy : 'a t -> 'a t -(** [copy src] returns a fresh copy of [src], such that no modification of - [src] affects the copy, or vice versa (all new memory is allocated for - the copy). *) - -val sub : 'a t -> int -> int -> 'a t -(** [sub darr start len] returns an array holding the subset of [len] - elements from [darr] starting with the element at index [idx]. *) - -(** {6 Array functional support} *) - -val iter : ('a -> unit) -> 'a t -> unit -(** [iter f darr] calls the function [f] on every element of [darr]. It - is equivalent to [for i = 0 to length darr - 1 do f (get darr i) done;] *) - -val iteri : (int -> 'a -> unit) -> 'a t -> unit -(** [iteri f darr] calls the function [f] on every element of [darr]. It - is equivalent to [for i = 0 to length darr - 1 do f i (get darr i) done;] - *) - -val map : ('a -> 'b) -> 'a t -> 'b t -(** [map f darr] applies the function [f] to every element of [darr] - and creates a dynamic array from the results - similar to [List.map] or - [Array.map]. *) - -val mapi : (int -> 'a -> 'b) -> 'a t -> 'b t -(** [mapi f darr] applies the function [f] to every element of [darr] - and creates a dynamic array from the results - similar to [List.mapi] or - [Array.mapi]. *) - -val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'a -(** [fold_left f x darr] computes - [f ( ... ( f ( f (get darr 0) x) (get darr 1) ) ... ) (get darr n-1)], - similar to [Array.fold_left] or [List.fold_left]. *) - -val fold_right : ('a -> 'b -> 'b) -> 'a t -> 'b -> 'b -(** [fold_right f darr x] computes - [ f (get darr 0) (f (get darr 1) ( ... ( f (get darr n-1) x ) ... ) ) ] - similar to [Array.fold_right] or [List.fold_right]. *) - -val index_of : ('a -> bool) -> 'a t -> int -(** [index_of f darr] returns the index of the first element [x] in darr such - as [f x] returns [true] or raise [Not_found] if not found. *) - -val filter : ('a -> bool) -> 'a t -> unit - -(** {6 Array resizers} *) - -type resizer_t = currslots:int -> oldlength:int -> newlength:int -> int -(** The type of a resizer function. - - Resizer functions are called whenever elements are added to - or removed from the dynamic array to determine what the current number of - storage spaces in the array should be. The three named arguments - passed to a resizer are the current number of storage spaces in - the array, the length of the array before the elements are - added or removed, and the length the array will be after the - elements are added or removed. If elements are being added, newlength - will be larger than oldlength, if elements are being removed, - newlength will be smaller than oldlength. If the resizer function - returns exactly oldlength, the size of the array is only changed when - adding an element while there is not enough space for it. - - By default, all dynamic arrays are created with the [default_resizer]. - When a dynamic array is created from another dynamic array (using [copy], - [map] , etc. ) the resizer of the copy will be the same as the original - dynamic array resizer. To change the resizer, use the [set_resizer] - function. -*) - -val set_resizer : 'a t -> resizer_t -> unit -(** Change the resizer for this array. *) - -val get_resizer : 'a t -> resizer_t -(** Get the current resizer function for a given array *) - -val default_resizer : resizer_t -(** The default resizer function the library is using - in this version - of DynArray, this is the [exponential_resizer] but should change in - next versions. *) - -val exponential_resizer : resizer_t -(** The exponential resizer- The default resizer except when the resizer - is being copied from some other darray. - - [exponential_resizer] works by doubling or halving the number of - slots until they "fit". If the number of slots is less than the - new length, the number of slots is doubled until it is greater - than the new length (or Sys.max_array_size is reached). - - If the number of slots is more than four times the new length, - the number of slots is halved until it is less than four times the - new length. - - Allowing darrays to fall below 25% utilization before shrinking them - prevents "thrashing". Consider the case where the caller is constantly - adding a few elements, and then removing a few elements, causing - the length to constantly cross above and below a power of two. - Shrinking the array when it falls below 50% would causing the - underlying array to be constantly allocated and deallocated. - A few elements would be added, causing the array to be reallocated - and have a usage of just above 50%. Then a few elements would be - remove, and the array would fall below 50% utilization and be - reallocated yet again. The bulk of the array, untouched, would be - copied and copied again. By setting the threshold at 25% instead, - such "thrashing" only occurs with wild swings- adding and removing - huge numbers of elements (more than half of the elements in the array). - - [exponential_resizer] is a good performing resizer for most - applications. A list allocates 2 words for every element, while an - array (with large numbers of elements) allocates only 1 word per - element (ignoring unboxed floats). On insert, [exponential_resizer] - keeps the amount of wasted "extra" array elements below 50%, meaning - that less than 2 words per element are used. Even on removals - where the amount of wasted space is allowed to rise to 75%, that - only means that darray is using 4 words per element. This is - generally not a significant overhead. - - Furthermore, [exponential_resizer] minimizes the number of copies - needed- appending n elements into an empty darray with initial size - 0 requires between n and 2n elements of the array be copied- O(n) - work, or O(1) work per element (on average). A similar argument - can be made that deletes from the end of the array are O(1) as - well (obviously deletes from anywhere else are O(n) work- you - have to move the n or so elements above the deleted element down). - -*) - -val step_resizer : int -> resizer_t -(** The stepwise resizer- another example of a resizer function, this - time of a parameterized resizer. - - The resizer returned by [step_resizer step] returns the smallest - multiple of [step] larger than [newlength] if [currslots] is less - then [newlength]-[step] or greater than [newlength]. - - For example, to make an darray with a step of 10, a length - of len, and a null of null, you would do: - [make] ~resizer:([step_resizer] 10) len null -*) - -val conservative_exponential_resizer : resizer_t -(** [conservative_exponential_resizer] is an example resizer function - which uses the oldlength parameter. It only shrinks the array - on inserts- no deletes shrink the array, only inserts. It does - this by comparing the oldlength and newlength parameters. Other - than that, it acts like [exponential_resizer]. -*) - -(** {6 Unsafe operations} **) - -val unsafe_get : 'a t -> int -> 'a -val unsafe_set : 'a t -> int -> 'a -> unit diff --git a/bundles/extlib/extlib-1.5.2/enum.ml b/bundles/extlib/extlib-1.5.2/enum.ml deleted file mode 100644 index 3b7708d..0000000 --- a/bundles/extlib/extlib-1.5.2/enum.ml +++ /dev/null @@ -1,376 +0,0 @@ -(* - * Enum - Enumeration over abstract collection of elements. - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type 'a t = { - mutable count : unit -> int; - mutable next : unit -> 'a; - mutable clone : unit -> 'a t; - mutable fast : bool; -} - -(* raised by 'next' functions, should NOT go outside the API *) -exception No_more_elements - -let _dummy () = assert false - -let make ~next ~count ~clone = - { - count = count; - next = next; - clone = clone; - fast = true; - } - -let rec init n f = - if n < 0 then invalid_arg "Enum.init"; - let count = ref n in - { - count = (fun () -> !count); - next = (fun () -> - match !count with - | 0 -> raise No_more_elements - | _ -> - decr count; - f (n - 1 - !count)); - clone = (fun () -> init !count f); - fast = true; - } - -let rec empty () = - { - count = (fun () -> 0); - next = (fun () -> raise No_more_elements); - clone = (fun () -> empty()); - fast = true; - } - -type 'a _mut_list = { - hd : 'a; - mutable tl : 'a _mut_list; -} - -let force t = - let rec clone enum count = - let enum = ref !enum - and count = ref !count in - { - count = (fun () -> !count); - next = (fun () -> - match !enum with - | [] -> raise No_more_elements - | h :: t -> decr count; enum := t; h); - clone = (fun () -> - let enum = ref !enum - and count = ref !count in - clone enum count); - fast = true; - } - in - let count = ref 0 in - let _empty = Obj.magic [] in - let rec loop dst = - let x = { hd = t.next(); tl = _empty } in - incr count; - dst.tl <- x; - loop x - in - let enum = ref _empty in - (try - enum := { hd = t.next(); tl = _empty }; - incr count; - loop !enum; - with No_more_elements -> ()); - let tc = clone (Obj.magic enum) count in - t.clone <- tc.clone; - t.next <- tc.next; - t.count <- tc.count; - t.fast <- true - -let from f = - let e = { - next = f; - count = _dummy; - clone = _dummy; - fast = false; - } in - e.count <- (fun () -> force e; e.count()); - e.clone <- (fun () -> force e; e.clone()); - e - -let from2 next clone = - let e = { - next = next; - count = _dummy; - clone = clone; - fast = false; - } in - e.count <- (fun () -> force e; e.count()); - e - -let get t = - try - Some (t.next()) - with - No_more_elements -> None - -let push t e = - let rec make t = - let fnext = t.next in - let fcount = t.count in - let fclone = t.clone in - let next_called = ref false in - t.next <- (fun () -> - next_called := true; - t.next <- fnext; - t.count <- fcount; - t.clone <- fclone; - e); - t.count <- (fun () -> - let n = fcount() in - if !next_called then n else n+1); - t.clone <- (fun () -> - let tc = fclone() in - if not !next_called then make tc; - tc); - in - make t - -let peek t = - match get t with - | None -> None - | Some x -> - push t x; - Some x - -let junk t = - try - ignore(t.next()) - with - No_more_elements -> () - -let is_empty t = - if t.fast then - t.count() = 0 - else - peek t = None - -let count t = - t.count() - -let fast_count t = - t.fast - -let clone t = - t.clone() - -let iter f t = - let rec loop () = - f (t.next()); - loop(); - in - try - loop(); - with - No_more_elements -> () - -let iteri f t = - let rec loop idx = - f idx (t.next()); - loop (idx+1); - in - try - loop 0; - with - No_more_elements -> () - -let iter2 f t u = - let push_t = ref None in - let rec loop () = - push_t := None; - let e = t.next() in - push_t := Some e; - f e (u.next()); - loop () - in - try - loop () - with - No_more_elements -> - match !push_t with - | None -> () - | Some e -> - push t e - -let iter2i f t u = - let push_t = ref None in - let rec loop idx = - push_t := None; - let e = t.next() in - push_t := Some e; - f idx e (u.next()); - loop (idx + 1) - in - try - loop 0 - with - No_more_elements -> - match !push_t with - | None -> () - | Some e -> push t e - -let fold f init t = - let acc = ref init in - let rec loop() = - acc := f (t.next()) !acc; - loop() - in - try - loop() - with - No_more_elements -> !acc - -let foldi f init t = - let acc = ref init in - let rec loop idx = - acc := f idx (t.next()) !acc; - loop (idx + 1) - in - try - loop 0 - with - No_more_elements -> !acc - -let fold2 f init t u = - let acc = ref init in - let push_t = ref None in - let rec loop() = - push_t := None; - let e = t.next() in - push_t := Some e; - acc := f e (u.next()) !acc; - loop() - in - try - loop() - with - No_more_elements -> - match !push_t with - | None -> !acc - | Some e -> - push t e; - !acc - -let fold2i f init t u = - let acc = ref init in - let push_t = ref None in - let rec loop idx = - push_t := None; - let e = t.next() in - push_t := Some e; - acc := f idx e (u.next()) !acc; - loop (idx + 1) - in - try - loop 0 - with - No_more_elements -> - match !push_t with - | None -> !acc - | Some e -> - push t e; - !acc - -let find f t = - let rec loop () = - let x = t.next() in - if f x then x else loop() - in - try - loop() - with - No_more_elements -> raise Not_found - -let rec map f t = - { - count = t.count; - next = (fun () -> f (t.next())); - clone = (fun () -> map f (t.clone())); - fast = t.fast; - } - -let rec mapi f t = - let idx = ref (-1) in - { - count = t.count; - next = (fun () -> incr idx; f !idx (t.next())); - clone = (fun () -> mapi f (t.clone())); - fast = t.fast; - } - -let rec filter f t = - let rec next() = - let x = t.next() in - if f x then x else next() - in - from2 next (fun () -> filter f (t.clone())) - -let rec filter_map f t = - let rec next () = - match f (t.next()) with - | None -> next() - | Some x -> x - in - from2 next (fun () -> filter_map f (t.clone())) - -let rec append ta tb = - let t = { - count = (fun () -> ta.count() + tb.count()); - next = _dummy; - clone = (fun () -> append (ta.clone()) (tb.clone())); - fast = ta.fast && tb.fast; - } in - t.next <- (fun () -> - try - ta.next() - with - No_more_elements -> - (* add one indirection because tb can mute *) - t.next <- (fun () -> tb.next()); - t.count <- (fun () -> tb.count()); - t.clone <- (fun () -> tb.clone()); - t.fast <- tb.fast; - t.next() - ); - t - -let rec concat t = - let concat_ref = ref _dummy in - let rec concat_next() = - let tn = t.next() in - concat_ref := (fun () -> - try - tn.next() - with - No_more_elements -> - concat_next()); - !concat_ref () - in - concat_ref := concat_next; - from2 (fun () -> !concat_ref ()) (fun () -> concat (t.clone())) diff --git a/bundles/extlib/extlib-1.5.2/enum.mli b/bundles/extlib/extlib-1.5.2/enum.mli deleted file mode 100644 index 5ab6fbf..0000000 --- a/bundles/extlib/extlib-1.5.2/enum.mli +++ /dev/null @@ -1,201 +0,0 @@ -(* - * Enum - enumeration over abstract collection of elements. - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Enumeration over abstract collection of elements. - - Enumerations are entirely functional and most of the operations do not - actually require the allocation of data structures. Using enumerations - to manipulate data is therefore efficient and simple. All data structures in - ExtLib such as lists, arrays, etc. have support to convert from and to - enumerations. -*) - - -type 'a t - -(** {6 Final functions} - - These functions consume the enumeration until - it ends or an exception is raised by the first - argument function. -*) - -val iter : ('a -> unit) -> 'a t -> unit -(** [iter f e] calls the function [f] with each elements of [e] in turn. *) - -val iter2 : ('a -> 'b -> unit) -> 'a t -> 'b t -> unit -(** [iter2 f e1 e2] calls the function [f] with the next elements of [e] and - [e2] repeatedly until one of the two enumerations ends. *) - -val fold : ('a -> 'b -> 'b) -> 'b -> 'a t -> 'b -(** [fold f v e] returns [v] if [e] is empty, - otherwise [f aN (... (f a2 (f a1 v)) ...)] where a1..N are - the elements of [e]. -*) - -val fold2 : ('a -> 'b -> 'c -> 'c) -> 'c -> 'a t -> 'b t -> 'c -(** [fold2] is similar to [fold] but will fold over two enumerations at the - same time until one of the two enumerations ends. *) - -(** Indexed functions : these functions are similar to previous ones - except that they call the function with one additional argument which - is an index starting at 0 and incremented after each call to the function. *) - -val iteri : (int -> 'a -> unit) -> 'a t -> unit - -val iter2i : ( int -> 'a -> 'b -> unit) -> 'a t -> 'b t -> unit - -val foldi : (int -> 'a -> 'b -> 'b) -> 'b -> 'a t -> 'b - -val fold2i : (int -> 'a -> 'b -> 'c -> 'c) -> 'c -> 'a t -> 'b t -> 'c - -(** {6 Useful functions} *) - -val find : ('a -> bool) -> 'a t -> 'a -(** [find f e] returns the first element [x] of [e] such that [f x] returns - [true], consuming the enumeration up to and including the - found element, or, raises [Not_found] if no such element exists - in the enumeration, consuming the whole enumeration in the search. - - Since [find] consumes a prefix of the enumeration, it can be used several - times on the same enumeration to find the next element. *) - -val is_empty : 'a t -> bool -(** [is_empty e] returns true if [e] does not contains any element. *) - -val peek : 'a t -> 'a option -(** [peek e] returns [None] if [e] is empty or [Some x] where [x] is - the next element of [e]. The element is not removed from the enumeration. *) - -val get : 'a t -> 'a option -(** [get e] returns [None] if [e] is empty or [Some x] where [x] is - the next element of [e], in which case the element is removed from the enumeration. *) - -val push : 'a t -> 'a -> unit -(** [push e x] will add [x] at the beginning of [e]. *) - -val junk : 'a t -> unit -(** [junk e] removes the first element from the enumeration, if any. *) - -val clone : 'a t -> 'a t -(** [clone e] creates a new enumeration that is copy of [e]. If [e] - is consumed by later operations, the clone will not get affected. *) - -val force : 'a t -> unit -(** [force e] forces the application of all lazy functions and the - enumeration of all elements, exhausting the enumeration. - - An efficient intermediate data structure - of enumerated elements is constructed and [e] will now enumerate over - that data structure. *) - -(** {6 Lazy constructors} - - These functions are lazy which means that they will create a new modified - enumeration without actually enumerating any element until they are asked - to do so by the programmer (using one of the functions above). - - When the resulting enumerations of these functions are consumed, the - underlying enumerations they were created from are also consumed. *) - -val map : ('a -> 'b) -> 'a t -> 'b t -(** [map f e] returns an enumeration over [(f a1, f a2, ... , f aN)] where - a1...N are the elements of [e]. *) - -val mapi : (int -> 'a -> 'b) -> 'a t -> 'b t -(** [mapi] is similar to [map] except that [f] is passed one extra argument - which is the index of the element in the enumeration, starting from 0. *) - -val filter : ('a -> bool) -> 'a t -> 'a t -(** [filter f e] returns an enumeration over all elements [x] of [e] such - as [f x] returns [true]. *) - -val filter_map : ('a -> 'b option) -> 'a t -> 'b t -(** [filter_map f e] returns an enumeration over all elements [x] such as - [f y] returns [Some x] , where [y] is an element of [e]. *) - -val append : 'a t -> 'a t -> 'a t -(** [append e1 e2] returns an enumeration that will enumerate over all - elements of [e1] followed by all elements of [e2]. *) - -val concat : 'a t t -> 'a t -(** [concat e] returns an enumeration over all elements of all enumerations - of [e]. *) - -(** {6 Constructors} - - In this section the word {i shall} denotes a semantic - requirement. The correct operation - of the functions in this interface are conditional - on the client meeting these requirements. -*) - -exception No_more_elements -(** This exception {i shall} be raised by the [next] function of [make] - or [from] when no more elements can be enumerated, it {i shall not} - be raised by any function which is an argument to any - other function specified in the interface. -*) - -val empty : unit -> 'a t -(** The empty enumeration : contains no element *) - -val make : next:(unit -> 'a) -> count:(unit -> int) -> clone:(unit -> 'a t) -> 'a t -(** This function creates a fully defined enumeration. - {ul {li the [next] function {i shall} return the next element of the - enumeration or raise [No_more_elements] if the underlying data structure - does not have any more elements to enumerate.} - {li the [count] function {i shall} return the actual number of remaining - elements in the enumeration.} - {li the [clone] function {i shall} create a clone of the enumeration - such as operations on the original enumeration will not affect the - clone. }} - - For some samples on how to correctly use [make], you can have a look - at implementation of [ExtList.enum]. -*) - -val from : (unit -> 'a) -> 'a t -(** [from next] creates an enumeration from the [next] function. - [next] {i shall} return the next element of the enumeration or raise - [No_more_elements] when no more elements can be enumerated. Since the - enumeration definition is incomplete, a call to [clone] or [count] will - result in a call to [force] that will enumerate all elements in order to - return a correct value. *) - -val init : int -> (int -> 'a) -> 'a t -(** [init n f] creates a new enumeration over elements - [f 0, f 1, ..., f (n-1)] *) - -(** {6 Counting} *) - -val count : 'a t -> int -(** [count e] returns the number of remaining elements in [e] without - consuming the enumeration. - -Depending of the underlying data structure that is implementing the -enumeration functions, the count operation can be costly, and even sometimes -can cause a call to [force]. *) - -val fast_count : 'a t -> bool -(** For users worried about the speed of [count] you can call the [fast_count] - function that will give an hint about [count] implementation. Basically, if - the enumeration has been created with [make] or [init] or if [force] has - been called on it, then [fast_count] will return true. *) diff --git a/bundles/extlib/extlib-1.5.2/extArray.ml b/bundles/extlib/extlib-1.5.2/extArray.ml deleted file mode 100644 index 6d5f4f5..0000000 --- a/bundles/extlib/extlib-1.5.2/extArray.ml +++ /dev/null @@ -1,172 +0,0 @@ -(* - * ExtList - additional and modified functions for lists. - * Copyright (C) 2005 Richard W.M. Jones (rich @ annexia.org) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -module Array = struct - -include Array - -let rev_in_place xs = - let n = length xs in - let j = ref (n-1) in - for i = 0 to n/2-1 do - let c = xs.(i) in - xs.(i) <- xs.(!j); - xs.(!j) <- c; - decr j - done - -let rev xs = - let ys = Array.copy xs in - rev_in_place ys; - ys - -let for_all p xs = - let n = length xs in - let rec loop i = - if i = n then true - else if p xs.(i) then loop (succ i) - else false - in - loop 0 - -let exists p xs = - let n = length xs in - let rec loop i = - if i = n then false - else if p xs.(i) then true - else loop (succ i) - in - loop 0 - -let mem a xs = - let n = length xs in - let rec loop i = - if i = n then false - else if a = xs.(i) then true - else loop (succ i) - in - loop 0 - -let memq a xs = - let n = length xs in - let rec loop i = - if i = n then false - else if a == xs.(i) then true - else loop (succ i) - in - loop 0 - -let findi p xs = - let n = length xs in - let rec loop i = - if i = n then raise Not_found - else if p xs.(i) then i - else loop (succ i) - in - loop 0 - -let find p xs = xs.(findi p xs) - -(* Use of BitSet suggested by Brian Hurt. *) -let filter p xs = - let n = length xs in - (* Use a bitset to store which elements will be in the final array. *) - let bs = BitSet.create n in - for i = 0 to n-1 do - if p xs.(i) then BitSet.set bs i - done; - (* Allocate the final array and copy elements into it. *) - let n' = BitSet.count bs in - let j = ref 0 in - let xs' = init n' - (fun _ -> - (* Find the next set bit in the BitSet. *) - while not (BitSet.is_set bs !j) do incr j done; - let r = xs.(!j) in - incr j; - r) in - xs' - -let find_all = filter - -let partition p xs = - let n = length xs in - (* Use a bitset to store which elements will be in which final array. *) - let bs = BitSet.create n in - for i = 0 to n-1 do - if p xs.(i) then BitSet.set bs i - done; - (* Allocate the final arrays and copy elements into them. *) - let n1 = BitSet.count bs in - let n2 = n - n1 in - let j = ref 0 in - let xs1 = init n1 - (fun _ -> - (* Find the next set bit in the BitSet. *) - while not (BitSet.is_set bs !j) do incr j done; - let r = xs.(!j) in - incr j; - r) in - let j = ref 0 in - let xs2 = init n2 - (fun _ -> - (* Find the next clear bit in the BitSet. *) - while BitSet.is_set bs !j do incr j done; - let r = xs.(!j) in - incr j; - r) in - xs1, xs2 - -let enum xs = - let rec make start xs = - let n = length xs in - Enum.make - ~next:(fun () -> - if !start < n then ( - let r = xs.(!start) in - incr start; - r - ) else - raise Enum.No_more_elements) - ~count:(fun () -> - n - !start) - ~clone:(fun () -> - let xs' = Array.sub xs !start (n - !start) in - make (ref 0) xs') - in - make (ref 0) xs - -let of_enum e = - let n = Enum.count e in - (* This assumes, reasonably, that init traverses the array in order. *) - Array.init n - (fun i -> - match Enum.get e with - | Some x -> x - | None -> assert false) - -let iter2 f a1 a2 = - if Array.length a1 <> Array.length a2 - then raise (Invalid_argument "Array.iter2"); - for i = 0 to Array.length a1 - 1 do - f a1.(i) a2.(i); - done;; - -end diff --git a/bundles/extlib/extlib-1.5.2/extArray.mli b/bundles/extlib/extlib-1.5.2/extArray.mli deleted file mode 100644 index ce5fc55..0000000 --- a/bundles/extlib/extlib-1.5.2/extArray.mli +++ /dev/null @@ -1,136 +0,0 @@ -(* - * ExtArray - additional and modified functions for arrays. - * Copyright (C) 2005 Richard W.M. Jones (rich @ annexia.org) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Additional and modified functions for arrays. - - The OCaml standard library provides a module of array functions. - This ExtArray module can be used to override the Array module or - as a standalone module. It provides some additional functions. -*) - -module Array : -sig - - (** {6 New functions} *) - val rev : 'a array -> 'a array - (** Array reversal. *) - - val rev_in_place : 'a array -> unit - (** In-place array reversal. The array argument is updated. *) - - val iter2 : ('a -> 'b -> unit) -> 'a array -> 'b array -> unit - (** [Array.iter2 f [|a1; ...; an|] [|b1; ...; bn|]] performs - calls [f a1 b1; ...; f an bn] in that order. - - @raise Invalid_argument if the length of [a1] does not equal the - length of [a2]. *) - - val for_all : ('a -> bool) -> 'a array -> bool - (** [for_all p [a1; ...; an]] checks if all elements of the array - satisfy the predicate [p]. That is, it returns - [ (p a1) && (p a2) && ... && (p an)]. - *) - - val exists : ('a -> bool) -> 'a array -> bool - (** [exists p [a1; ...; an]] checks if at least one element of - the array satisfies the predicate [p]. That is, it returns - [ (p a1) || (p a2) || ... || (p an)]. - *) - - val mem : 'a -> 'a array -> bool - (** [mem m a] is true if and only if [m] is equal to an element of [a]. *) - - val memq : 'a -> 'a array -> bool - (** Same as {!Array.mem} but uses physical equality instead of - structural equality to compare array elements. - *) - - val find : ('a -> bool) -> 'a array -> 'a - (** [find p a] returns the first element of array [a] - that satisfies the predicate [p]. - Raise [Not_found] if there is no value that satisfies [p] in the - array [a]. - *) - - val findi : ('a -> bool) -> 'a array -> int - (** [findi p a] returns the index of the first element of array [a] - that satisfies the predicate [p]. - Raise [Not_found] if there is no value that satisfies [p] in the - array [a]. - *) - - val filter : ('a -> bool) -> 'a array -> 'a array - (** [filter p a] returns all the elements of the array [a] - that satisfy the predicate [p]. The order of the elements - in the input array is preserved. *) - - val find_all : ('a -> bool) -> 'a array -> 'a array - (** [find_all] is another name for {!Array.filter}. *) - - val partition : ('a -> bool) -> 'a array -> 'a array * 'a array - (** [partition p a] returns a pair of arrays [(a1, a2)], where - [a1] is the array of all the elements of [a] that - satisfy the predicate [p], and [a2] is the array of all the - elements of [a] that do not satisfy [p]. - The order of the elements in the input array is preserved. *) - - (** {6 Enumerations} *) - - val enum : 'a array -> 'a Enum.t - (** Returns an enumeration of the elements of an array. *) - - val of_enum : 'a Enum.t -> 'a array - (** Build an array from an enumeration. *) - - (** {6 Old functions} *) - - (** These functions are already part of the Ocaml standard library - and have not been modified. Please refer to the Ocaml Manual for - documentation. *) - - external length : 'a array -> int = "%array_length" - external get : 'a array -> int -> 'a = "%array_safe_get" - external set : 'a array -> int -> 'a -> unit = "%array_safe_set" - external make : int -> 'a -> 'a array = "caml_make_vect" - external create : int -> 'a -> 'a array = "caml_make_vect" - val init : int -> (int -> 'a) -> 'a array - val make_matrix : int -> int -> 'a -> 'a array array - val create_matrix : int -> int -> 'a -> 'a array array - val append : 'a array -> 'a array -> 'a array - val concat : 'a array list -> 'a array - val sub : 'a array -> int -> int -> 'a array - val copy : 'a array -> 'a array - val fill : 'a array -> int -> int -> 'a -> unit - val blit : 'a array -> int -> 'a array -> int -> int -> unit - val to_list : 'a array -> 'a list - val of_list : 'a list -> 'a array - val iter : ('a -> unit) -> 'a array -> unit - val map : ('a -> 'b) -> 'a array -> 'b array - val iteri : (int -> 'a -> unit) -> 'a array -> unit - val mapi : (int -> 'a -> 'b) -> 'a array -> 'b array - val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b array -> 'a - val fold_right : ('b -> 'a -> 'a) -> 'b array -> 'a -> 'a - val sort : ('a -> 'a -> int) -> 'a array -> unit - val stable_sort : ('a -> 'a -> int) -> 'a array -> unit - val fast_sort : ('a -> 'a -> int) -> 'a array -> unit - external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get" - external unsafe_set : 'a array -> int -> 'a -> unit = "%array_unsafe_set" - -end diff --git a/bundles/extlib/extlib-1.5.2/extHashtbl.ml b/bundles/extlib/extlib-1.5.2/extHashtbl.ml deleted file mode 100644 index f667dff..0000000 --- a/bundles/extlib/extlib-1.5.2/extHashtbl.ml +++ /dev/null @@ -1,134 +0,0 @@ -(* - * ExtHashtbl, extra functions over hashtables. - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - - -module Hashtbl = - struct - - type ('a, 'b) h_bucketlist = - | Empty - | Cons of 'a * 'b * ('a, 'b) h_bucketlist - - type ('a, 'b) h_t = { - mutable size: int; - mutable data: ('a, 'b) h_bucketlist array - } - - include Hashtbl - - external h_conv : ('a, 'b) t -> ('a, 'b) h_t = "%identity" - external h_make : ('a, 'b) h_t -> ('a, 'b) t = "%identity" - - let exists = mem - - let enum h = - let rec make ipos ibuck idata icount = - let pos = ref ipos in - let buck = ref ibuck in - let hdata = ref idata in - let hcount = ref icount in - let force() = - (** this is a hack in order to keep an O(1) enum constructor **) - if !hcount = -1 then begin - hcount := (h_conv h).size; - hdata := Array.copy (h_conv h).data; - end; - in - let rec next() = - force(); - match !buck with - | Empty -> - if !hcount = 0 then raise Enum.No_more_elements; - incr pos; - buck := Array.unsafe_get !hdata !pos; - next() - | Cons (k,i,next_buck) -> - buck := next_buck; - decr hcount; - (k,i) - in - let count() = - if !hcount = -1 then (h_conv h).size else !hcount - in - let clone() = - force(); - make !pos !buck !hdata !hcount - in - Enum.make ~next ~count ~clone - in - make (-1) Empty (Obj.magic()) (-1) - - let keys h = - Enum.map (fun (k,_) -> k) (enum h) - - let values h = - Enum.map (fun (_,v) -> v) (enum h) - - let map f h = - let rec loop = function - | Empty -> Empty - | Cons (k,v,next) -> Cons (k,f v,loop next) - in - h_make { - size = (h_conv h).size; - data = Array.map loop (h_conv h).data; - } - - let remove_all h key = - let hc = h_conv h in - let rec loop = function - | Empty -> Empty - | Cons(k,v,next) -> - if k = key then begin - hc.size <- pred hc.size; - loop next - end else - Cons(k,v,loop next) - in - let pos = (hash key) mod (Array.length hc.data) in - Array.unsafe_set hc.data pos (loop (Array.unsafe_get hc.data pos)) - - let find_default h key defval = - let rec loop = function - | Empty -> defval - | Cons (k,v,next) -> - if k = key then v else loop next - in - let pos = (hash key) mod (Array.length (h_conv h).data) in - loop (Array.unsafe_get (h_conv h).data pos) - - let find_option h key = - let rec loop = function - | Empty -> None - | Cons (k,v,next) -> - if k = key then Some v else loop next - in - let pos = (hash key) mod (Array.length (h_conv h).data) in - loop (Array.unsafe_get (h_conv h).data pos) - - let of_enum e = - let h = create (if Enum.fast_count e then Enum.count e else 0) in - Enum.iter (fun (k,v) -> add h k v) e; - h - - let length h = - (h_conv h).size - - end diff --git a/bundles/extlib/extlib-1.5.2/extHashtbl.mli b/bundles/extlib/extlib-1.5.2/extHashtbl.mli deleted file mode 100644 index 8df3f4f..0000000 --- a/bundles/extlib/extlib-1.5.2/extHashtbl.mli +++ /dev/null @@ -1,89 +0,0 @@ -(* - * ExtHashtbl - extra functions over hashtables. - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Extra functions over hashtables. *) - -module Hashtbl : - (** The wrapper module *) - sig - - type ('a,'b) t = ('a,'b) Hashtbl.t - (** The type of a hashtable. *) - - (** {6 New Functions} *) - - val exists : ('a,'b) t -> 'a -> bool - (** [exists h k] returns true is at least one item with key [k] is - found in the hashtable. *) - - val keys : ('a,'b) t -> 'a Enum.t - (** Return an enumeration of all the keys of a hashtable. - If the key is in the Hashtable multiple times, all occurrences - will be returned. *) - - val values : ('a,'b) t -> 'b Enum.t - (** Return an enumeration of all the values of a hashtable. *) - - val enum : ('a, 'b) t -> ('a * 'b) Enum.t - (** Return an enumeration of (key,value) pairs of a hashtable. *) - - val of_enum : ('a * 'b) Enum.t -> ('a, 'b) t - (** Create a hashtable from a (key,value) enumeration. *) - - val find_default : ('a,'b) t -> 'a -> 'b -> 'b - (** Find a binding for the key, and return a default - value if not found *) - - val find_option : ('a,'b) Hashtbl.t -> 'a -> 'b option - (** Find a binding for the key, or return [None] if no - value is found *) - - val remove_all : ('a,'b) t -> 'a -> unit - (** Remove all bindings for the given key *) - - val map : ('b -> 'c) -> ('a,'b) t -> ('a,'c) t - (** [map f x] creates a new hashtable with the same - keys as [x], but with the function [f] applied to - all the values *) - - val length : ('a,'b) t -> int - (** Return the number of elements inserted into the Hashtbl - (including duplicates) *) - - (** {6 Older Functions} *) - - (** Please refer to the Ocaml Manual for documentation of these - functions. (note : functor support removed to avoid code - duplication). *) - - val create : int -> ('a, 'b) t - val clear : ('a, 'b) t -> unit - val add : ('a, 'b) t -> 'a -> 'b -> unit - val copy : ('a, 'b) t -> ('a, 'b) t - val find : ('a, 'b) t -> 'a -> 'b - val find_all : ('a, 'b) t -> 'a -> 'b list - val mem : ('a, 'b) t -> 'a -> bool - val remove : ('a, 'b) t -> 'a -> unit - val replace : ('a, 'b) t -> 'a -> 'b -> unit - val iter : ('a -> 'b -> unit) -> ('a, 'b) t -> unit - val fold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) t -> 'c -> 'c - val hash : 'a -> int - - end diff --git a/bundles/extlib/extlib-1.5.2/extLib.ml b/bundles/extlib/extlib-1.5.2/extLib.ml deleted file mode 100644 index 64a1ab7..0000000 --- a/bundles/extlib/extlib-1.5.2/extLib.ml +++ /dev/null @@ -1,45 +0,0 @@ -(* - * ExtLib - use extensions as separate modules - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(* - Note: - - Since ExtLib is provided for namespace convenience for - users who wants to keep the usage of the original - Ocaml Standard Library, no MLI CMI nor documentation will - be provided for this module. - - Users can simply do an "open ExtLib" to import all Ext* - namespaces instead of doing "open ExtList" for example. - - The trade-off is that they'll have to link all the modules - included below so the resulting binary is bigger. -*) - -module List = ExtList.List -module String = ExtString.String -module Hashtbl = ExtHashtbl.Hashtbl -module Array = ExtArray.Array - -exception Invalid_string = ExtString.Invalid_string - -let (@) = ExtList.(@) - -include Std diff --git a/bundles/extlib/extlib-1.5.2/extList.ml b/bundles/extlib/extlib-1.5.2/extList.ml deleted file mode 100644 index e940782..0000000 --- a/bundles/extlib/extlib-1.5.2/extList.ml +++ /dev/null @@ -1,515 +0,0 @@ -(* - * ExtList - additional and modified functions for lists. - * Copyright (C) 2003 Brian Hurt - * Copyright (C) 2003 Nicolas Cannasse - * Copyright (C) 2008 Red Hat Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -module List = struct - -exception Empty_list -exception Invalid_index of int -exception Different_list_size of string - -include List - -(* Thanks to Jacques Garrigue for suggesting the following structure *) -type 'a mut_list = { - hd: 'a; - mutable tl: 'a list -} -external inj : 'a mut_list -> 'a list = "%identity" - - -let dummy_node () = { hd = Obj.magic (); tl = [] } - -let hd = function - | [] -> raise Empty_list - | h :: t -> h - -let tl = function - | [] -> raise Empty_list - | h :: t -> t - -let nth l index = - if index < 0 then raise (Invalid_index index); - let rec loop n = function - | [] -> raise (Invalid_index index); - | h :: t -> - if n = 0 then h else loop (n - 1) t - in - loop index l - -let append l1 l2 = - match l1 with - | [] -> l2 - | h :: t -> - let rec loop dst = function - | [] -> - dst.tl <- l2 - | h :: t -> - let cell = { hd = h; tl = [] } in - dst.tl <- inj cell; - loop cell t - in - let r = { hd = h; tl = [] } in - loop r t; - inj r - -let rec flatten l = - let rec inner dst = function - | [] -> dst - | h :: t -> - let r = { hd = h; tl = [] } in - dst.tl <- inj r; - inner r t - in - let rec outer dst = function - | [] -> () - | h :: t -> outer (inner dst h) t - in - let r = dummy_node () in - outer r l; - r.tl - -let concat = flatten - -let map f = function - | [] -> [] - | h :: t -> - let rec loop dst = function - | [] -> () - | h :: t -> - let r = { hd = f h; tl = [] } in - dst.tl <- inj r; - loop r t - in - let r = { hd = f h; tl = [] } in - loop r t; - inj r - -let rec drop n = function - | _ :: l when n > 0 -> drop (n-1) l - | l -> l - -let take n l = - let rec loop n dst = function - | h :: t when n > 0 -> - let r = { hd = h; tl = [] } in - dst.tl <- inj r; - loop (n-1) r t - | _ -> - () - in - let dummy = dummy_node() in - loop n dummy l; - dummy.tl - -(* takewhile and dropwhile by Richard W.M. Jones. *) -let rec takewhile f = function - | [] -> [] - | x :: xs when f x -> x :: takewhile f xs - | _ -> [] - -let rec dropwhile f = function - | [] -> [] - | x :: xs when f x -> dropwhile f xs - | xs -> xs - - -let rec unique ?(cmp = ( = )) l = - let rec loop dst = function - | [] -> () - | h :: t -> - match exists (cmp h) t with - | true -> loop dst t - | false -> - let r = { hd = h; tl = [] } in - dst.tl <- inj r; - loop r t - in - let dummy = dummy_node() in - loop dummy l; - dummy.tl - -let filter_map f l = - let rec loop dst = function - | [] -> () - | h :: t -> - match f h with - | None -> loop dst t - | Some x -> - let r = { hd = x; tl = [] } in - dst.tl <- inj r; - loop r t - in - let dummy = dummy_node() in - loop dummy l; - dummy.tl - -let rec find_map f = function - | [] -> raise Not_found - | x :: xs -> - match f x with - | Some y -> y - | None -> find_map f xs - -let fold_right_max = 1000 - -let fold_right f l init = - let rec tail_loop acc = function - | [] -> acc - | h :: t -> tail_loop (f h acc) t - in - let rec loop n = function - | [] -> init - | h :: t -> - if n < fold_right_max then - f h (loop (n+1) t) - else - f h (tail_loop init (rev t)) - in - loop 0 l - -let map2 f l1 l2 = - let rec loop dst src1 src2 = - match src1, src2 with - | [], [] -> () - | h1 :: t1, h2 :: t2 -> - let r = { hd = f h1 h2; tl = [] } in - dst.tl <- inj r; - loop r t1 t2 - | _ -> raise (Different_list_size "map2") - in - let dummy = dummy_node () in - loop dummy l1 l2; - dummy.tl - -let rec iter2 f l1 l2 = - match l1, l2 with - | [], [] -> () - | h1 :: t1, h2 :: t2 -> f h1 h2; iter2 f t1 t2 - | _ -> raise (Different_list_size "iter2") - -let rec fold_left2 f accum l1 l2 = - match l1, l2 with - | [], [] -> accum - | h1 :: t1, h2 :: t2 -> fold_left2 f (f accum h1 h2) t1 t2 - | _ -> raise (Different_list_size "fold_left2") - -let fold_right2 f l1 l2 init = - let rec tail_loop acc l1 l2 = - match l1, l2 with - | [] , [] -> acc - | h1 :: t1 , h2 :: t2 -> tail_loop (f h1 h2 acc) t1 t2 - | _ -> raise (Different_list_size "fold_right2") - in - let rec loop n l1 l2 = - match l1, l2 with - | [], [] -> init - | h1 :: t1, h2 :: t2 -> - if n < fold_right_max then - f h1 h2 (loop (n+1) t1 t2) - else - f h1 h2 (tail_loop init (rev t1) (rev t2)) - | _ -> raise (Different_list_size "fold_right2") - in - loop 0 l1 l2 - -let for_all2 p l1 l2 = - let rec loop l1 l2 = - match l1, l2 with - | [], [] -> true - | h1 :: t1, h2 :: t2 -> if p h1 h2 then loop t1 t2 else false - | _ -> raise (Different_list_size "for_all2") - in - loop l1 l2 - -let exists2 p l1 l2 = - let rec loop l1 l2 = - match l1, l2 with - | [], [] -> false - | h1 :: t1, h2 :: t2 -> if p h1 h2 then true else loop t1 t2 - | _ -> raise (Different_list_size "exists2") - in - loop l1 l2 - -let remove_assoc x lst = - let rec loop dst = function - | [] -> () - | (a, _ as pair) :: t -> - if a = x then - dst.tl <- t - else - let r = { hd = pair; tl = [] } in - dst.tl <- inj r; - loop r t - in - let dummy = dummy_node () in - loop dummy lst; - dummy.tl - -let remove_assq x lst = - let rec loop dst = function - | [] -> () - | (a, _ as pair) :: t -> - if a == x then - dst.tl <- t - else - let r = { hd = pair; tl = [] } in - dst.tl <- inj r; - loop r t - in - let dummy = dummy_node() in - loop dummy lst; - dummy.tl - -let rfind p l = find p (rev l) - -let find_all p l = - let rec findnext dst = function - | [] -> () - | h :: t -> - if p h then - let r = { hd = h; tl = [] } in - dst.tl <- inj r; - findnext r t - else - findnext dst t - in - let dummy = dummy_node () in - findnext dummy l; - dummy.tl - -let rec findi p l = - let rec loop n = function - | [] -> raise Not_found - | h :: t -> - if p n h then (n,h) else loop (n+1) t - in - loop 0 l - -let filter = find_all - -let partition p lst = - let rec loop yesdst nodst = function - | [] -> () - | h :: t -> - let r = { hd = h; tl = [] } in - if p h then - begin - yesdst.tl <- inj r; - loop r nodst t - end - else - begin - nodst.tl <- inj r; - loop yesdst r t - end - in - let yesdummy = dummy_node() - and nodummy = dummy_node() - in - loop yesdummy nodummy lst; - yesdummy.tl, nodummy.tl - -let split lst = - let rec loop adst bdst = function - | [] -> () - | (a, b) :: t -> - let x = { hd = a; tl = [] } - and y = { hd = b; tl = [] } in - adst.tl <- inj x; - bdst.tl <- inj y; - loop x y t - in - let adummy = dummy_node () - and bdummy = dummy_node () - in - loop adummy bdummy lst; - adummy.tl, bdummy.tl - -let combine l1 l2 = - let rec loop dst l1 l2 = - match l1, l2 with - | [], [] -> () - | h1 :: t1, h2 :: t2 -> - let r = { hd = h1, h2; tl = [] } in - dst.tl <- inj r; - loop r t1 t2 - | _, _ -> raise (Different_list_size "combine") - in - let dummy = dummy_node () in - loop dummy l1 l2; - dummy.tl - -let sort ?(cmp=compare) = List.sort cmp - -let rec init size f = - if size = 0 then [] - else if size < 0 then invalid_arg "ExtList.init" - else - let rec loop dst n = - if n < size then - let r = { hd = f n; tl = [] } in - dst.tl <- inj r; - loop r (n+1) - in - let r = { hd = f 0; tl = [] } in - loop r 1; - inj r - -let make i x = - if i < 0 then invalid_arg "ExtList.List.make"; - let rec loop acc x = function - | 0 -> acc - | i -> loop (x::acc) x (i-1) - in - loop [] x i - -let mapi f = function - | [] -> [] - | h :: t -> - let rec loop dst n = function - | [] -> () - | h :: t -> - let r = { hd = f n h; tl = [] } in - dst.tl <- inj r; - loop r (n+1) t - in - let r = { hd = f 0 h; tl = [] } in - loop r 1 t; - inj r - -let iteri f l = - let rec loop n = function - | [] -> () - | h :: t -> - f n h; - loop (n+1) t - in - loop 0 l - -let first = hd - -let rec last = function - | [] -> raise Empty_list - | h :: [] -> h - | _ :: t -> last t - -let split_nth index = function - | [] -> if index = 0 then [],[] else raise (Invalid_index index) - | (h :: t as l) -> - if index = 0 then [],l - else if index < 0 then raise (Invalid_index index) - else - let rec loop n dst l = - if n = 0 then l else - match l with - | [] -> raise (Invalid_index index) - | h :: t -> - let r = { hd = h; tl = [] } in - dst.tl <- inj r; - loop (n-1) r t - in - let r = { hd = h; tl = [] } in - inj r, loop (index-1) r t - -let find_exc f e l = - try - find f l - with - Not_found -> raise e - -let remove l x = - let rec loop dst = function - | [] -> () - | h :: t -> - if x = h then - dst.tl <- t - else - let r = { hd = h; tl = [] } in - dst.tl <- inj r; - loop r t - in - let dummy = dummy_node () in - loop dummy l; - dummy.tl - -let rec remove_if f lst = - let rec loop dst = function - | [] -> () - | x :: l -> - if f x then - dst.tl <- l - else - let r = { hd = x; tl = [] } in - dst.tl <- inj r; - loop r l - in - let dummy = dummy_node () in - loop dummy lst; - dummy.tl - -let rec remove_all l x = - let rec loop dst = function - | [] -> () - | h :: t -> - if x = h then - loop dst t - else - let r = { hd = h; tl = [] } in - dst.tl <- inj r; - loop r t - in - let dummy = dummy_node () in - loop dummy l; - dummy.tl - -let enum l = - let rec make lr count = - Enum.make - ~next:(fun () -> - match !lr with - | [] -> raise Enum.No_more_elements - | h :: t -> - decr count; - lr := t; - h - ) - ~count:(fun () -> - if !count < 0 then count := length !lr; - !count - ) - ~clone:(fun () -> - make (ref !lr) (ref !count) - ) - in - make (ref l) (ref (-1)) - -let of_enum e = - let h = dummy_node() in - let _ = Enum.fold (fun x acc -> - let r = { hd = x; tl = [] } in - acc.tl <- inj r; - r) h e in - h.tl - -end - -let ( @ ) = List.append diff --git a/bundles/extlib/extlib-1.5.2/extList.mli b/bundles/extlib/extlib-1.5.2/extList.mli deleted file mode 100644 index 58cc72e..0000000 --- a/bundles/extlib/extlib-1.5.2/extList.mli +++ /dev/null @@ -1,244 +0,0 @@ -(* - * ExtList - additional and modified functions for lists. - * Copyright (C) 2003 Brian Hurt - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Additional and modified functions for lists. - - The OCaml standard library provides a module for list functions. - This ExtList module can be used to override the List module or - as a standalone module. It provides new functions and modify - the behavior of some other ones (in particular all functions - are now {b tail-recursive}). -*) - -module List : - sig - - (** {6 New functions} *) - - val init : int -> (int -> 'a) -> 'a list - (** Similar to [Array.init], [init n f] returns the list containing - the results of (f 0),(f 1).... (f (n-1)). - Raise [Invalid_arg "ExtList.init"] if n < 0.*) - - val make : int -> 'a -> 'a list - (** Similar to [String.make], [make n x] returns a - * list containing [n] elements [x]. - *) - - val first : 'a list -> 'a - (** Returns the first element of the list, or raise [Empty_list] if - the list is empty (similar to [hd]). *) - - val last : 'a list -> 'a - (** Returns the last element of the list, or raise [Empty_list] if - the list is empty. This function takes linear time. *) - - val iteri : (int -> 'a -> 'b) -> 'a list -> unit - (** [iteri f l] will call [(f 0 a0);(f 1 a1) ... (f n an)] where - [a0..an] are the elements of the list [l]. *) - - val mapi : (int -> 'a -> 'b) -> 'a list -> 'b list - (** [mapi f l] will build the list containing - [(f 0 a0);(f 1 a1) ... (f n an)] where [a0..an] are the elements of - the list [l]. *) - - val rfind : ('a -> bool) -> 'a list -> 'a - (** [rfind p l] returns the last element [x] of [l] such as [p x] returns - [true] or raises [Not_found] if such element as not been found. *) - - val find_exc : ('a -> bool) -> exn -> 'a list -> 'a - (** [find_exc p e l] returns the first element of [l] such as [p x] - returns [true] or raises [e] if such element as not been found. *) - - val findi : (int -> 'a -> bool) -> 'a list -> (int * 'a) - (** [findi p e l] returns the first element [ai] of [l] along with its - index [i] such that [p i ai] is true, or raises [Not_found] if no - such element has been found. *) - - val unique : ?cmp:('a -> 'a -> bool) -> 'a list -> 'a list - (** [unique cmp l] returns the list [l] without any duplicate element. - Default comparator ( = ) is used if no comparison function specified. *) - - val filter_map : ('a -> 'b option) -> 'a list -> 'b list - (** [filter_map f l] call [(f a0) (f a1).... (f an)] where [a0..an] are - the elements of [l]. It returns the list of elements [bi] such as - [f ai = Some bi] (when [f] returns [None], the corresponding element of - [l] is discarded). *) - - val find_map : ('a -> 'b option) -> 'a list -> 'b - (** [find_map pred list] finds the first element of [list] for which - [pred element] returns [Some r]. It returns [r] immediately - once found or raises [Not_found] if no element matches the - predicate. See also {!filter_map}. *) - - val split_nth : int -> 'a list -> 'a list * 'a list - (** [split_nth n l] returns two lists [l1] and [l2], [l1] containing the - first [n] elements of [l] and [l2] the others. Raise [Invalid_index] if - [n] is outside of [l] size bounds. *) - - val remove : 'a list -> 'a -> 'a list - (** [remove l x] returns the list [l] without the first element [x] found - or returns [l] if no element is equal to [x]. Elements are compared - using ( = ). *) - - val remove_if : ('a -> bool) -> 'a list -> 'a list - (** [remove_if cmp l] is similar to [remove], but with [cmp] used - instead of ( = ). *) - - val remove_all : 'a list -> 'a -> 'a list - (** [remove_all l x] is similar to [remove] but removes all elements that - are equal to [x] and not only the first one. *) - - val take : int -> 'a list -> 'a list - (** [take n l] returns up to the [n] first elements from list [l], if - available. *) - - val drop : int -> 'a list -> 'a list - (** [drop n l] returns [l] without the first [n] elements, or the empty - list if [l] have less than [n] elements. *) - - val takewhile : ('a -> bool) -> 'a list -> 'a list - (** [takewhile f xs] returns the first elements of list [xs] - which satisfy the predicate [f]. *) - - val dropwhile : ('a -> bool) -> 'a list -> 'a list - (** [dropwhile f xs] returns the list [xs] with the first - elements satisfying the predicate [f] dropped. *) - - (** {6 Enum functions} *) - - (** Enumerations are important in ExtLib, they are a good way to work with - abstract enumeration of elements, regardless if they are located in a list, - an array, or a file. *) - - val enum : 'a list -> 'a Enum.t - (** Returns an enumeration of the elements of a list. *) - - val of_enum : 'a Enum.t -> 'a list - (** Build a list from an enumeration. *) - - (** {6 Modified functions} *) - - (** Some minor modifications have been made to the specification of some - functions, especially concerning exceptions raised. *) - - val hd : 'a list -> 'a - (** Returns the first element of the list or raise [Empty_list] if the - list is empty. *) - - val tl : 'a list -> 'a list - (** Returns the list without its first elements or raise [Empty_list] if - the list is empty. *) - - val nth : 'a list -> int -> 'a - (** [nth l n] returns the n-th element of the list [l] or raise - [Invalid_index] is the index is outside of [l] bounds. *) - - val sort : ?cmp:('a -> 'a -> int) -> 'a list -> 'a list - (** Sort the list using optional comparator (by default [compare]). *) - - (** The following functions have been improved so all of them are - tail-recursive. They have also been modified so they no longer - raise [Invalid_arg] but [Different_list_size] when used on two - lists having a different number of elements. *) - - val map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list - val iter2 : ('a -> 'b -> unit) -> 'a list -> 'b list -> unit - val fold_left2 : ('a -> 'b -> 'c -> 'a) -> 'a -> 'b list -> 'c list -> 'a - val fold_right2 : ('a -> 'b -> 'c -> 'c) -> 'a list -> 'b list -> 'c -> 'c - val for_all2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool - val exists2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool - val combine : 'a list -> 'b list -> ('a * 'b) list - - - (** {6 Improved functions} *) - - (** The following functions have the same behavior as the [List] - module ones but are tail-recursive. That means they will not - cause a [Stack_overflow] when used on very long list. - - The implementation might be a little more slow in bytecode, - but compiling in native code will not affect performances. *) - - val map : ('a -> 'b) -> 'a list -> 'b list - val append : 'a list -> 'a list -> 'a list - val flatten : 'a list list -> 'a list - val concat : 'a list list -> 'a list - val fold_right : ('a -> 'b -> 'b) -> 'a list -> 'b -> 'b - val remove_assoc : 'a -> ('a * 'b) list -> ('a * 'b) list - val remove_assq : 'a -> ('a * 'b) list -> ('a * 'b) list - val split : ('a * 'b) list -> 'a list * 'b list - - (** The following functions were already tail-recursive in the [List] - module but were using [List.rev] calls. The new implementations - have better performances. *) - - val filter : ('a -> bool) -> 'a list -> 'a list - val find_all : ('a -> bool) -> 'a list -> 'a list - val partition : ('a -> bool) -> 'a list -> 'a list * 'a list - - (** {6 Older functions} *) - - (** These functions are already part of the Ocaml standard library - and have not been modified. Please refer to the Ocaml Manual for - documentation. *) - - val length : 'a list -> int - val rev_append : 'a list -> 'a list -> 'a list - val rev : 'a list -> 'a list - val rev_map : ('a -> 'b) -> 'a list -> 'b list - val iter : ('a -> unit) -> 'a list -> unit - val fold_left : ('b -> 'a -> 'b) -> 'b -> 'a list -> 'b - val for_all : ('a -> bool) -> 'a list -> bool - val exists : ('a -> bool) -> 'a list -> bool - val find : ('a -> bool) -> 'a list -> 'a - - val mem : 'a -> 'a list -> bool - val memq : 'a -> 'a list -> bool - val assoc : 'a -> ('a * 'b) list -> 'b - val assq : 'a -> ('a * 'b) list -> 'b - val mem_assoc : 'a -> ('a * 'b) list -> bool - val mem_assq : 'a -> ('a * 'b) list -> bool - - - val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list - val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list - val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list - - (** {6 Exceptions} *) - - exception Empty_list - (** [Empty_list] is raised when an operation applied on an empty list - is invalid : [hd] for example. *) - - exception Invalid_index of int - (** [Invalid_index] is raised when an indexed access on a list is - out of list bounds. *) - - exception Different_list_size of string - (** [Different_list_size] is raised when applying functions such as - [iter2] on two lists having different size. *) - - -end - -val ( @ ) : 'a list -> 'a list -> 'a list -(** the new implementation for ( @ ) operator, see [List.append]. *) diff --git a/bundles/extlib/extlib-1.5.2/extString.ml b/bundles/extlib/extlib-1.5.2/extString.ml deleted file mode 100644 index 7cbd1c2..0000000 --- a/bundles/extlib/extlib-1.5.2/extString.ml +++ /dev/null @@ -1,251 +0,0 @@ -(* - * ExtString - Additional functions for string manipulations. - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -exception Invalid_string - -module String = struct - -include String - -let init len f = - let s = create len in - for i = 0 to len - 1 do - unsafe_set s i (f i) - done; - s - -let starts_with str p = - if length str < length p then - false - else - let rec loop str p i = - if i = length p then true else - if unsafe_get str i <> unsafe_get p i then false - else loop str p (i+1) - in - loop str p 0 - -let ends_with s e = - if length s < length e then - false - else - let rec loop s e i = - if i = length e then true else - if unsafe_get s (length s - length e + i) <> unsafe_get e i then false - else loop s e (i+1) - in - loop s e 0 - -let find str sub = - let sublen = length sub in - if sublen = 0 then - 0 - else - let found = ref 0 in - let len = length str in - try - for i = 0 to len - sublen do - let j = ref 0 in - while unsafe_get str (i + !j) = unsafe_get sub !j do - incr j; - if !j = sublen then begin found := i; raise Exit; end; - done; - done; - raise Invalid_string - with - Exit -> !found - -let exists str sub = - try - ignore(find str sub); - true - with - Invalid_string -> false - -let strip ?(chars=" \t\r\n") s = - let p = ref 0 in - let l = length s in - while !p < l && contains chars (unsafe_get s !p) do - incr p; - done; - let p = !p in - let l = ref (l - 1) in - while !l >= p && contains chars (unsafe_get s !l) do - decr l; - done; - sub s p (!l - p + 1) - -let split str sep = - let p = find str sep in - let len = length sep in - let slen = length str in - sub str 0 p, sub str (p + len) (slen - p - len) - -let nsplit str sep = - if str = "" then [] - else if sep = "" then raise Invalid_string - else ( - let rec nsplit str sep = - try - let s1 , s2 = split str sep in - s1 :: nsplit s2 sep - with - Invalid_string -> [str] - in - nsplit str sep - ) - -let join = concat - -let slice ?(first=0) ?(last=Sys.max_string_length) s = - let clip _min _max x = max _min (min _max x) in - let i = clip 0 (length s) - (if (first<0) then (length s) + first else first) - and j = clip 0 (length s) - (if (last<0) then (length s) + last else last) - in - if i>=j || i=length s then - create 0 - else - sub s i (j-i) - -let lchop s = - if s = "" then "" else sub s 1 (length s - 1) - -let rchop s = - if s = "" then "" else sub s 0 (length s - 1) - -let of_int = string_of_int - -let of_float = string_of_float - -let of_char = make 1 - -let to_int s = - try - int_of_string s - with - _ -> raise Invalid_string - -let to_float s = - try - float_of_string s - with - _ -> raise Invalid_string - -let enum s = - let l = length s in - let rec make i = - Enum.make - ~next:(fun () -> - if !i = l then - raise Enum.No_more_elements - else - let p = !i in - incr i; - unsafe_get s p - ) - ~count:(fun () -> l - !i) - ~clone:(fun () -> make (ref !i)) - in - make (ref 0) - -let of_enum e = - let l = Enum.count e in - let s = create l in - let i = ref 0 in - Enum.iter (fun c -> unsafe_set s !i c; incr i) e; - s - -let map f s = - let len = length s in - let sc = create len in - for i = 0 to len - 1 do - unsafe_set sc i (f (unsafe_get s i)) - done; - sc - -(* fold_left and fold_right by Eric C. Cooper *) -let fold_left f init str = - let n = String.length str in - let rec loop i result = - if i = n then result - else loop (i + 1) (f result str.[i]) - in - loop 0 init - -let fold_right f str init = - let n = String.length str in - let rec loop i result = - if i = 0 then result - else - let i' = i - 1 in - loop i' (f str.[i'] result) - in - loop n init - -(* explode and implode from the OCaml Expert FAQ. *) -let explode s = - let rec exp i l = - if i < 0 then l else exp (i - 1) (s.[i] :: l) in - exp (String.length s - 1) [] - -let implode l = - let res = String.create (List.length l) in - let rec imp i = function - | [] -> res - | c :: l -> res.[i] <- c; imp (i + 1) l in - imp 0 l - - -let replace_chars f s = - let len = String.length s in - let tlen = ref 0 in - let rec loop i acc = - if i = len then - acc - else - let s = f (unsafe_get s i) in - tlen := !tlen + length s; - loop (i+1) (s :: acc) - in - let strs = loop 0 [] in - let sbuf = create !tlen in - let pos = ref !tlen in - let rec loop2 = function - | [] -> () - | s :: acc -> - let len = length s in - pos := !pos - len; - blit s 0 sbuf !pos len; - loop2 acc - in - loop2 strs; - sbuf - -let replace ~str ~sub ~by = - try - let i = find str sub in - (true, (slice ~last:i str) ^ by ^ - (slice ~first:(i+(String.length sub)) str)) - with - Invalid_string -> (false, String.copy str) - -end diff --git a/bundles/extlib/extlib-1.5.2/extString.mli b/bundles/extlib/extlib-1.5.2/extString.mli deleted file mode 100644 index cc88f9b..0000000 --- a/bundles/extlib/extlib-1.5.2/extString.mli +++ /dev/null @@ -1,182 +0,0 @@ -(* - * ExtString - Additional functions for string manipulations. - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Additional functions for string manipulations. *) - -exception Invalid_string - -module String : - sig - - (** {6 New Functions} *) - - val init : int -> (int -> char) -> string - (** [init l f] returns the string of length [l] with the chars - f 0 , f 1 , f 2 ... f (l-1). *) - - val find : string -> string -> int - (** [find s x] returns the starting index of the string [x] - within the string [s] or raises [Invalid_string] if [x] - is not a substring of [s]. *) - - val split : string -> string -> string * string - (** [split s sep] splits the string [s] between the first - occurrence of [sep]. - raises [Invalid_string] if the separator is not found. *) - - val nsplit : string -> string -> string list - (** [nsplit s sep] splits the string [s] into a list of strings - which are separated by [sep]. - [nsplit "" _] returns the empty list. - @raise Invalid_string if [sep] is empty string. *) - - val join : string -> string list -> string - (** Same as [concat] *) - - val slice : ?first:int -> ?last:int -> string -> string - (** [slice ?first ?last s] returns a "slice" of the string - which corresponds to the characters [s.[first]], - [s.[first+1]], ..., [s[last-1]]. Note that the character at - index [last] is {b not} included! If [first] is omitted it - defaults to the start of the string, i.e. index 0, and if - [last] is omitted is defaults to point just past the end of - [s], i.e. [length s]. Thus, [slice s] is equivalent to - [copy s]. - - Negative indexes are interpreted as counting from the end of - the string. For example, [slice ~last:-2 s] will return the - string [s], but without the last two characters. - - This function {b never} raises any exceptions. If the - indexes are out of bounds they are automatically clipped. - *) - - val lchop : string -> string - (** Returns the same string but without the first character. - does nothing if the string is empty. *) - - val rchop : string -> string - (** Returns the same string but without the last character. - does nothing if the string is empty. *) - - val of_int : int -> string - (** Returns the string representation of an int. *) - - val of_float : float -> string - (** Returns the string representation of an float. *) - - val of_char : char -> string - (** Returns a string containing one given character. *) - - val to_int : string -> int - (** Returns the integer represented by the given string or - raises [Invalid_string] if the string does not represent an integer.*) - - val to_float : string -> float - (** Returns the float represented by the given string or - raises Invalid_string if the string does not represent a float. *) - - val ends_with : string -> string -> bool - (** [ends_with s x] returns true if the string [s] is ending with [x]. *) - - val starts_with : string -> string -> bool - (** [starts_with s x] return true if [s] is starting with [x]. *) - - val enum : string -> char Enum.t - (** Returns an enumeration of the characters of a string.*) - - val of_enum : char Enum.t -> string - (** Creates a string from a character enumeration. *) - - val map : (char -> char) -> string -> string - (** [map f s] returns a string where all characters [c] in [s] have been - replaced by [f c]. **) - - val fold_left : ('a -> char -> 'a) -> 'a -> string -> 'a - (** [fold_left f a s] is - [f (... (f (f a s.[0]) s.[1]) ...) s.[n-1]] *) - val fold_right : (char -> 'a -> 'a) -> string -> 'a -> 'a - (** [fold_right f s b] is - [f s.[0] (f s.[1] (... (f s.[n-1] b) ...))] *) - - val explode : string -> char list - (** [explode s] returns the list of characters in the string [s]. *) - val implode : char list -> string - (** [implode cs] returns a string resulting from concatenating - the characters in the list [cs]. *) - - val strip : ?chars:string -> string -> string - (** Returns the string without the chars if they are at the beginning or - at the end of the string. By default chars are " \t\r\n". *) - - val exists : string -> string -> bool - (** [exists str sub] returns true if [sub] is a substring of [str] or - false otherwise. *) - - val replace_chars : (char -> string) -> string -> string - (** [replace_chars f s] returns a string where all chars [c] of [s] have been - replaced by the string returned by [f c]. *) - - val replace : str:string -> sub:string -> by:string -> bool * string - (** [replace ~str ~sub ~by] returns a tuple constisting of a boolean - and a string where the first occurrence of the string [sub] - within [str] has been replaced by the string [by]. The boolean - is true if a subtitution has taken place. *) - - (** {6 Older Functions} *) - - (** Please refer to the Ocaml Manual for documentation of these - functions. *) - - val length : string -> int - val get : string -> int -> char - val set : string -> int -> char -> unit - val create : int -> string - val make : int -> char -> string - val copy : string -> string - val sub : string -> int -> int -> string - val fill : string -> int -> int -> char -> unit - val blit : string -> int -> string -> int -> int -> unit - val concat : string -> string list -> string - val iter : (char -> unit) -> string -> unit - val escaped : string -> string - val index : string -> char -> int - val rindex : string -> char -> int - val index_from : string -> int -> char -> int - val rindex_from : string -> int -> char -> int - val contains : string -> char -> bool - val contains_from : string -> int -> char -> bool - val rcontains_from : string -> int -> char -> bool - val uppercase : string -> string - val lowercase : string -> string - val capitalize : string -> string - val uncapitalize : string -> string - - type t = string - val compare : t -> t -> int - - (**/**) - - external unsafe_get : string -> int -> char = "%string_unsafe_get" - external unsafe_set : string -> int -> char -> unit = "%string_unsafe_set" - external unsafe_blit : string -> int -> string -> int -> int -> unit = "caml_blit_string" "noalloc" - external unsafe_fill : string -> int -> int -> char -> unit = "caml_fill_string" "noalloc" - - end diff --git a/bundles/extlib/extlib-1.5.2/global.ml b/bundles/extlib/extlib-1.5.2/global.ml deleted file mode 100644 index 16d2af7..0000000 --- a/bundles/extlib/extlib-1.5.2/global.ml +++ /dev/null @@ -1,40 +0,0 @@ -(* - * Global - Mutable global variable - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -exception Global_not_initialized of string - -type 'a t = ('a option ref * string) - -let empty name = ref None,name - -let name = snd - -let set (r,_) v = r := Some v - -let get (r,name) = - match !r with - | None -> raise (Global_not_initialized name) - | Some v -> v - -let undef (r,_) = r := None - -let isdef (r,_) = !r <> None - -let opt (r,_) = !r diff --git a/bundles/extlib/extlib-1.5.2/global.mli b/bundles/extlib/extlib-1.5.2/global.mli deleted file mode 100644 index 904a7d4..0000000 --- a/bundles/extlib/extlib-1.5.2/global.mli +++ /dev/null @@ -1,58 +0,0 @@ -(* - * Global - Mutable global variable - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Mutable global variable. - - Often in OCaml you want to have a global variable, which is mutable - and uninitialized when declared. You can use a ['a option ref] but - this is not very convenient. The Global module provides functions - to easily create and manipulate such variables. -*) - -type 'a t -(** Abstract type of a global *) - -exception Global_not_initialized of string -(** Raised when a global variable is accessed without first having been - assigned a value. The parameter contains the name of the global. *) - -val empty : string -> 'a t -(** Returns an new named empty global. The name of the global can be any - string. It identifies the global and makes debugging easier. *) - -val name : 'a t -> string -(** Retrieve the name of a global. *) - -val set : 'a t -> 'a -> unit -(** Set the global value contents. *) - -val get : 'a t -> 'a -(** Get the global value contents - raise Global_not_initialized if not - defined. *) - -val undef : 'a t -> unit -(** Reset the global value contents to undefined. *) - -val isdef : 'a t -> bool - (** Return [true] if the global value has been set. *) - -val opt : 'a t -> 'a option - (** Return [None] if the global is undefined, else [Some v] where v is the - current global value contents. *) diff --git a/bundles/extlib/extlib-1.5.2/install.ml b/bundles/extlib/extlib-1.5.2/install.ml deleted file mode 100644 index 193f683..0000000 --- a/bundles/extlib/extlib-1.5.2/install.ml +++ /dev/null @@ -1,216 +0,0 @@ -(* - * Install - ExtLib installation - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -open Printf - -type path = - | PathUnix - | PathDos - -let modules = [ - "enum"; - "bitSet"; - "dynArray"; - "extArray"; - "extHashtbl"; - "extList"; - "extString"; - "global"; - "IO"; - "option"; - "pMap"; - "std"; - "uChar"; - "uTF8"; - "base64"; - "unzip"; - "refList"; - "optParse"; - "dllist"; -] - -let m_list suffix = - String.concat " " (List.map (fun m -> m ^ suffix) modules) - -let obj_ext , lib_ext , cp_cmd , path_type = match Sys.os_type with - | "Unix" | "Cygwin" | "MacOS" -> ".o" , ".a" , "cp", PathUnix - | "Win32" -> ".obj" , ".lib" , "copy", PathDos - | _ -> failwith "Unknown OS" - -let run cmd = - print_endline cmd; - let ecode = Sys.command cmd in - if ecode <> 0 then failwith (sprintf "Exit Code %d - Stopped" ecode) - -let copy file dest = - if dest <> "" && dest <> "." then begin - print_endline ("Installing " ^ file); - let path = dest ^ file in - (try Sys.remove path with _ -> ()); - try - Sys.rename file path; - with - _ -> failwith "Aborted" - end - -let complete_path p = - if p = "" then - p - else - let c = p.[String.length p - 1] in - if c = '/' || c = '\\' then - p - else - p ^ (match path_type with PathUnix -> "/" | PathDos -> "\\") - -let remove file = - try - Sys.remove file - with - _ -> prerr_endline ("Warning : failed to delete " ^ file) - -let is_findlib() = - let findlib = Sys.command (if Sys.os_type = "Win32" then "ocamlfind printconf 2>NUL" else "ocamlfind printconf") = 0 in - if findlib then print_endline "Using Findlib"; - findlib - -type install_dir = Findlib | Dir of string - -let install() = - let autodir = ref None in - let docflag = ref None in - let autodoc = ref false in - let autobyte = ref false in - let autonative = ref false in - let usage = "ExtLib installation program v1.3\n(c)2003,2004 Nicolas Cannasse" in - Arg.parse [ - ("-d", Arg.String (fun s -> autodir := Some s) , " : install in target directory"); - ("-b", Arg.Unit (fun () -> autobyte := true) , ": byte code installation"); - ("-n", Arg.Unit (fun () -> autonative := true) , ": native code installation"); - ("-doc", Arg.Unit (fun () -> docflag := Some true) , ": documentation installation"); - ("-nodoc", Arg.Unit (fun () -> docflag := Some false) , ": documentation installation"); - ] (fun s -> raise (Arg.Bad s)) usage; - let findlib = is_findlib () in - let install_dir = ( - match !autodir with - | Some dir -> - if not !autobyte && not !autonative && not !autodoc then failwith "Nothing to do."; - Dir (complete_path dir) - | None -> - let byte, native = - if !autobyte || !autonative then - (!autobyte, !autonative) - else begin - printf "Choose one of the following :\n1- Bytecode installation only\n2- Native installation only\n3- Both Native and Bytecode installation\n> "; - (match read_line() with - | "1" -> true, false - | "2" -> false, true - | "3" -> true, true - | _ -> failwith "Invalid choice, exit.") - end - in - let dest = - if not findlib then begin - printf "Choose installation directory :\n> "; - let dest = complete_path (read_line()) in - (try - close_out (open_out (dest ^ "test.file")); - Sys.remove (dest ^ "test.file"); - with - _ -> failwith ("Directory " ^ dest ^ " does not exists or cannot be written.")); - Dir dest; - end else Findlib in - autobyte := byte; - autonative := native; - dest - ) in - let doc = - match !docflag with - Some doc -> doc - | None -> - printf "Do you want to generate ocamldoc documentation (Y/N) ?\n> "; - (match read_line() with - | "y" | "Y" -> true - | "n" | "N" -> false - | _ -> failwith "Invalid choice, exit.") - in - autodoc := doc; - let doc_dir = - match install_dir with - Findlib -> "extlib-doc" - | Dir install_dir -> - sprintf "%sextlib-doc" install_dir in - if !autodoc && not (Sys.file_exists doc_dir) then run (sprintf "mkdir %s" doc_dir); - run (sprintf "ocamlc -c %s" (m_list ".mli")); - if !autobyte then begin - List.iter (fun m -> run (sprintf "ocamlc -c %s.ml" m)) modules; - run (sprintf "ocamlc -a -o extLib.cma %s extLib.ml" (m_list ".cmo")); - List.iter (fun m -> remove (m ^ ".cmo")) modules; - remove "extLib.cmo"; - end; - if !autonative then begin - List.iter (fun m -> run (sprintf "ocamlopt -c %s.ml" m)) modules; - run (sprintf "ocamlopt -a -o extLib.cmxa %s extLib.ml" (m_list ".cmx")); - List.iter (fun m -> remove (m ^ obj_ext)) modules; - remove ("extLib" ^ obj_ext); - end; - if !autodoc then begin - run (sprintf "ocamldoc -sort -html -d %s %s" doc_dir (m_list ".mli")); - run ((match path_type with - | PathDos -> sprintf "%s odoc_style.css %s\\style.css"; - | PathUnix -> sprintf "%s odoc_style.css %s/style.css") cp_cmd doc_dir); - end; - match install_dir with - Findlib -> - let files = Buffer.create 0 in - List.iter (fun m -> - Buffer.add_string files (m ^ ".cmi"); - Buffer.add_char files ' '; - Buffer.add_string files (m ^ ".mli"); - Buffer.add_char files ' ') - modules; - Buffer.add_string files "extLib.cmi "; - if !autobyte then Buffer.add_string files "extLib.cma "; - if !autonative then begin - Buffer.add_string files "extLib.cmxa "; - Buffer.add_string files ("extLib" ^ lib_ext^ " "); - end; - let files = Buffer.contents files in - run (sprintf "ocamlfind install extlib %s META" files); - | Dir install_dir -> - List.iter (fun m -> - copy (m ^ ".cmi") install_dir; - if !autonative then copy (m ^ ".cmx") install_dir - ) ("extLib" :: modules); - if !autobyte then copy "extLib.cma" install_dir; - if !autonative then begin - copy "extLib.cmxa" install_dir; - copy ("extLib" ^ lib_ext) install_dir; - end; -;; -try - install(); - printf "Done."; -with - Failure msg -> - prerr_endline msg; - exit 1 - - diff --git a/bundles/extlib/extlib-1.5.2/odoc_style.css b/bundles/extlib/extlib-1.5.2/odoc_style.css deleted file mode 100644 index e1db9ad..0000000 --- a/bundles/extlib/extlib-1.5.2/odoc_style.css +++ /dev/null @@ -1,24 +0,0 @@ -body { padding: 0px 20px 0px 26px; background: #ffffff; color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 90%; } -h1 { padding : 5px 0px 5px 0px; font-size : 16pt; font-weight : normal; background-color : #E0E0FF } -h6 { padding : 5px 0px 5px 20px; font-size : 16pt; font-weight : normal; background-color : #E0E0FF } -a:link, a:visited, a:active { text-decoration: none; } -a:link { color: #000077; } -a:visited { color: #000077; } -a:hover { color: #cc9900; } -.keyword { font-weight : bold ; color : Blue } -.keywordsign { color : #606060 } -.superscript { font-size : 4 } -.subscript { font-size : 4 } -.comment { color : #606060 } -.constructor { color : #808080; } -.type { color : #606060 } -.string { color : Red } -.warning { color : Red ; font-weight : bold } -.info { margin-left : 3em; margin-right : 3em } -.code { color : #606060 ; } -.title1 { font-size : 16pt ; background-color : #E0E0E0 } -.title2 { font-size : 16pt ; background-color : #E0E0E0 } -.title3 { font-size : 16pt ; background-color : #E0E0E0 } -.title4 { font-size : 16pt ; background-color : #E0E0E0 } -.title5 { font-size : 16pt ; background-color : #E0E0E0 } -.title6 { font-size : 16pt ; background-color : #E0E0E0; } \ No newline at end of file diff --git a/bundles/extlib/extlib-1.5.2/optParse.ml b/bundles/extlib/extlib-1.5.2/optParse.ml deleted file mode 100644 index 4ff4488..0000000 --- a/bundles/extlib/extlib-1.5.2/optParse.ml +++ /dev/null @@ -1,720 +0,0 @@ -(* - * optParse - Functions for parsing command line arguments. - * Copyright (C) 2004 Bardur Arantsson - * - * Heavily influenced by the optparse.py module from the Python - * standard library, but with lots of adaptation to the 'Ocaml Way' - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) -open Printf -open ExtString -open ExtList - - -let terminal_width = - try - int_of_string (Sys.getenv "COLUMNS") (* Might as well use it if it's there... *) - with - Failure _ -> 80 - | Not_found -> 80 - -module GetOpt = - struct - - type action = string -> string list -> unit - type long_opt = string * int * action - type short_opt = char * int * action - - exception Error of (string * string) - - let split1 haystack needle = - try - let (h, x) = String.split haystack needle in h, [x] - with - Invalid_string -> haystack, [] - - let find_opt format_name options s = - let rec loop l = - match l with - (x, y, z) :: t -> if x = s then x, y, z else loop t - | [] -> raise (Error (format_name s, "no such option")) - in - loop options - - let find_short_opt options = find_opt (fun c -> sprintf "-%c" c) options - - let find_long_opt options = find_opt (fun s -> "--" ^ s) options - - let parse other find_short_opt find_long_opt args = - let rec loop args = - let rec gather_args name n args = - try - List.split_nth n args - with - List.Invalid_index _ -> - raise (Error (name, "missing required arguments")) - in - let gather_long_opt s args = - let (h, t) = split1 s "=" in - let (_, nargs, action) = find_long_opt (String.slice ~first:2 h) in - let (accum, args') = gather_args h (nargs - List.length t) args in - action h (t @ accum); args' - in - let rec gather_short_opt_concat seen_args s k args = - if k < String.length s then - let ostr = sprintf "-%c" s.[k] - and (_, nargs, action) = find_short_opt s.[k] in - if nargs = 0 then - begin - action ostr []; - gather_short_opt_concat seen_args s (k + 1) args - end - else if not seen_args then - let (accum, args') = gather_args ostr nargs args in - action ostr accum; gather_short_opt_concat true s (k + 1) args' - else - raise - (Error - (sprintf "-%c" s.[k], - sprintf "option list '%s' already contains an option requiring an argument" - s)) - else args - in - let gather_short_opt s k args = - let ostr = sprintf "-%c" s.[k] in - let (_, nargs, action) = find_short_opt s.[k] in - if nargs = 0 then gather_short_opt_concat false s k args - else - let (accum, args') = - let h = String.slice ~first:(k+1) s in - if String.length h = 0 then gather_args ostr nargs args - else - let (t, args'') = gather_args ostr (nargs - 1) args in - h :: t, args'' - in - action ostr accum; args' - in - match args with - [] -> [] - | arg :: args' -> - if arg = "--" then args' - else if String.starts_with arg "--" then - loop (gather_long_opt arg args') - else if arg = "-" then begin other arg; loop args' end - else if String.starts_with arg "-" then - loop (gather_short_opt arg 1 args') - else begin other arg; loop args' end - in - let args' = loop args in List.iter other args' - end - - -module Opt = - struct - - exception No_value - exception Option_error of string * string - exception Option_help - - type 'a t = { - option_set : string -> string list -> unit; - option_set_value : 'a -> unit; - option_get : unit -> 'a option; - option_metavars : string list; - option_defhelp : string option - } - - let get opt = - match opt.option_get () with - Some x -> x - | None -> raise No_value - - let set opt v = - opt.option_set_value v - - let is_set opt = Option.is_some (opt.option_get ()) - - let opt opt = opt.option_get () - - let value_option metavar default coerce errfmt = - let data = ref default in - { - option_metavars = [metavar]; - option_defhelp = None; - option_get = (fun _ -> !data); - option_set_value = (fun x -> data := Some x); - option_set = - (fun option args -> - let arg = List.hd args in - try - data := Some (coerce arg) - with - exn -> raise (Option_error (option, errfmt exn arg))) - } - - let callback_option metavar coerce errfmt f = - { - option_metavars = [metavar]; - option_defhelp = None; - option_get = (fun _ -> Some ()); - option_set_value = (fun () -> ()); - option_set = - (fun option args -> - let arg = List.hd args in - let datum = ref None in - begin - try - datum := Some (coerce arg) - with - exn -> raise (Option_error (option, errfmt exn arg)) - end; - - Option.may f !datum) - } - end - -module StdOpt = - struct - - open Opt - - let store_const ?default const = - let data = ref default in - { - option_metavars = []; - option_defhelp = None; - option_get = (fun _ -> !data); - option_set_value = (fun x -> data := Some x); - option_set = fun _ _ -> data := Some const - } - - let store_true () = store_const ~default:false true - - let store_false () = store_const ~default:true false - - let int_option ?default ?(metavar = "INT") () = - value_option metavar default int_of_string - (fun _ s -> sprintf "invalid integer value '%s'" s) - - let int_callback ?(metavar = "INT") = - callback_option metavar int_of_string - (fun _ s -> sprintf "invalid integer value '%s'" s) - - let float_option ?default ?(metavar = "FLOAT") () = - value_option metavar default float_of_string - (fun _ s -> sprintf "invalid floating point value '%s'" s) - - let float_callback ?(metavar = "FLOAT") = - callback_option metavar float_of_string - (fun _ s -> sprintf "invalid floating point value '%s'" s) - - let str_option ?default ?(metavar = "STR") () = - value_option metavar default (fun s -> s) (fun _ _ -> "cannot happen") - - let str_callback ?(metavar = "STR") = - callback_option metavar (fun s -> s) (fun _ _ -> "cannot happen") - - let count_option ?(dest = ref 0) ?(increment = 1) () = - { - option_metavars = []; - option_defhelp = None; - option_get = (fun _ -> Some !dest); - option_set_value = (fun x -> dest := x); - option_set = fun _ _ -> dest := !dest + increment - } - - let incr_option ?(dest = ref 0) = - count_option ~dest ~increment:1 - - let decr_option ?(dest = ref 0) = - count_option ~dest ~increment:(-1) - - let help_option () = - { - option_metavars = []; - option_defhelp = Some "show this help message and exit"; - option_get = (fun _ -> raise No_value); - option_set_value = (fun _ -> ()); - option_set = fun _ _ -> raise Option_help - } - - let version_option vfunc = - { - option_metavars = []; - option_defhelp = Some "show program's version and exit"; - option_get = (fun _ -> raise No_value); - option_set_value = (fun _ -> ()); - option_set = fun _ _ -> print_endline (vfunc ()); exit 0 - } - end - - - - -module Formatter = - struct - - (* Note that the whitespace regexps must NOT treat the non-breaking - space character as whitespace. *) - let whitespace = "\t\n\013\014\r " - - let split_into_chunks s = - let buf = Buffer.create (String.length s) in - let flush () = - let s = Buffer.contents buf - in - Buffer.clear buf; - s - in - let rec loop state accum i = - if (i 0 then - loop (not state) (flush () :: accum) i - else - loop (not state) accum i - else - begin - Buffer.add_char buf s.[i]; - loop state accum (i+1) - end - else - if Buffer.length buf > 0 then - flush () :: accum - else - accum - in - List.rev (loop false [] 0) - - let is_whitespace s = - let rec loop i = - if i - let n = tab_size - col mod tab_size in - Buffer.add_string b (spaces n); - expand (i + 1) (col + n) - | '\n' -> - Buffer.add_string b "\n"; - expand (i + 1) 0 - | c -> - Buffer.add_char b c; - expand (i + 1) (col + 1) - in - expand 0 0; - Buffer.contents b - - let wrap ?(initial_indent = 0) ?(subsequent_indent = 0) text _width = - let wrap_chunks_line width acc = - let rec wrap (chunks, cur_line, cur_len) = - match chunks with - [] -> [], cur_line, cur_len - | hd :: tl -> - let l = String.length hd in - if cur_len + l <= width then - wrap (tl, hd :: cur_line, cur_len + l) - else chunks, cur_line, cur_len - in - wrap acc - in - let wrap_long_last_word width (chunks, cur_line, cur_len) = - match chunks with - [] -> [], cur_line, cur_len - | hd :: tl -> - let l = String.length hd in - if l > width then - match cur_line with - [] -> tl, [hd], cur_len + l - | _ -> chunks, cur_line, cur_len - else chunks, cur_line, cur_len - in - let wrap_remove_last_ws (chunks, cur_line, cur_len) = - match cur_line with - [] -> chunks, cur_line, cur_len - | hd :: tl -> - if is_whitespace hd then chunks, tl, cur_len - String.length hd - else chunks, cur_line, cur_len - in - let rec wrap_chunks_lines chunks lines = - let indent = - match lines with - [] -> initial_indent - | _ -> subsequent_indent - in - let width = _width - indent in - match chunks with - hd :: tl -> - if is_whitespace hd && lines <> [] then wrap_chunks_lines tl lines - else (* skip *) - let (chunks', cur_line, _) = - wrap_remove_last_ws - (wrap_long_last_word width - (wrap_chunks_line width (chunks, [], 0))) - in - wrap_chunks_lines chunks' - ((String.make indent ' ' ^ - String.concat "" (List.rev cur_line)) :: - lines) - | [] -> List.rev lines - in - let chunks = split_into_chunks (expand_tabs text) in - wrap_chunks_lines chunks [] - - - let fill ?(initial_indent = 0) ?(subsequent_indent = 0) text width = - String.concat "\n" (wrap ~initial_indent ~subsequent_indent text width) - - - - type t = { - indent : unit -> unit; - dedent : unit -> unit; - format_usage : string -> string; - format_heading : string -> string; - format_description : string -> string; - format_option : char list * string list -> string list -> - string option -> string - } - - let format_option_strings short_first (snames, lnames) metavars = - let metavar = String.concat " " metavars in - let lopts = - List.map - (match metavar with - "" -> (fun z -> sprintf "--%s" z) - | _ -> fun z -> sprintf "--%s=%s" z metavar) - lnames - and sopts = List.map (fun x -> sprintf "-%c%s" x metavar) snames in - match short_first with - true -> String.concat ", " (sopts @ lopts) - | false -> String.concat ", " (lopts @ sopts) - - - let indented_formatter ?level:(extlevel = ref 0) - ?indent:(extindent = ref 0) ?(indent_increment = 2) - ?(max_help_position = 24) ?(width = terminal_width - 1) - ?(short_first = true) () = - let indent = ref 0 - and level = ref 0 in - let help_position = ref max_help_position - and help_width = ref (width - max_help_position) in - { - indent = - (fun () -> - indent := !indent + indent_increment; - level := !level + 1; - extindent := !indent; - extlevel := !level); - - dedent = - (fun () -> - indent := !indent - indent_increment; - level := !level - 1; - assert (!level >= 0); - extindent := !indent; - extlevel := !level); - - format_usage = (fun usage -> sprintf "usage: %s\n" usage); - - format_heading = - (fun heading -> sprintf "%*s%s:\n\n" !indent "" heading); - - format_description = - (fun description -> - let x = - fill ~initial_indent:(!indent) ~subsequent_indent:(!indent) - description (width - !indent) - in - if not (String.ends_with x "\n") then x ^ "\n\n" else x ^ "\n"); - - format_option = - fun names metavars help -> - let opt_width = !help_position - !indent - 2 in - let opt_strings = - format_option_strings short_first names metavars - in - let buf = Buffer.create 256 in - let indent_first = - if String.length opt_strings > opt_width then - begin - bprintf buf "%*s%s\n" !indent "" opt_strings; !help_position - end - else - begin - bprintf buf "%*s%-*s " !indent "" opt_width opt_strings; 0 - end - in - Option.may - (fun option_help -> - let lines = wrap option_help !help_width in - match lines with - h :: t -> - bprintf buf "%*s%s\n" indent_first "" h; - List.iter - (fun x -> bprintf buf "%*s%s\n" !help_position "" x) t - | [] -> ()) - help; - - let contents = - Buffer.contents buf - in - if String.length contents > 0 && not (String.ends_with contents "\n") then - contents ^ "\n" - else - contents - } - - let titled_formatter ?(level = ref 0) ?(indent = ref 0) - ?(indent_increment = 0) ?(max_help_position = 24) - ?(width = terminal_width - 1) ?(short_first = true) - () = - let formatter = - indented_formatter ~level ~indent ~indent_increment ~max_help_position - ~width ~short_first () - in - let format_heading h = - let c = - match !level with - 0 -> '=' - | 1 -> '-' - | _ -> failwith "titled_formatter: Too much indentation" - in - sprintf "%*s%s\n%*s%s\n\n" !indent "" (String.capitalize h) !indent "" - (String.make (String.length h) c) - in - let format_usage usage = - sprintf "%s %s\n" (format_heading "Usage") usage - in - { formatter with - format_usage = format_usage; - format_heading = format_heading - } - end - - - -open Opt -open Formatter - -module OptParser = - struct - - exception Option_conflict of string - - type group = { - og_heading : string; - og_description : string option; - og_options : - ((char list * string list) * string list * string option) RefList.t; - og_children : group RefList.t - } - - type t = { - op_usage : string; - op_suppress_usage : bool; - op_prog : string; - - op_formatter : Formatter.t; - - op_long_options : GetOpt.long_opt RefList.t; - op_short_options : GetOpt.short_opt RefList.t; - - op_groups : group - } - - let unprogify optparser s = - (snd (String.replace ~str:s ~sub:"%prog" ~by:optparser.op_prog)) - - let add optparser ?(group = optparser.op_groups) ?help ?(hide = false) - ?short_name ?(short_names = []) ?long_name ?(long_names = []) opt = - let lnames = - match long_name with - None -> long_names - | Some x -> x :: long_names - and snames = - match short_name with - None -> short_names - | Some x -> x :: short_names - in - if lnames = [] && snames = [] then - failwith "Options must have at least one name" - else - (* Checking for duplicates: *) - let snames' = - List.fold_left (fun r (x, _, _) -> x :: r) [] - (RefList.to_list optparser.op_short_options) - and lnames' = - List.fold_left (fun r (x, _, _) -> x :: r) [] - (RefList.to_list optparser.op_long_options) - in - let sconf = - List.filter (fun e -> List.exists (( = ) e) snames') snames - and lconf = - List.filter (fun e -> List.exists (( = ) e) lnames') lnames - in - if List.length sconf > 0 then - raise (Option_conflict (sprintf "-%c" (List.hd sconf))) - else if List.length lconf > 0 then - raise (Option_conflict (sprintf "--%s" (List.hd lconf))); - - (* Add to display list. *) - if not hide then - RefList.add group.og_options - ((snames, lnames), opt.option_metavars, - (match help with - None -> opt.option_defhelp - | Some _ -> help)); - - (* Getopt: *) - let nargs = List.length opt.option_metavars in - List.iter - (fun short -> - RefList.add optparser.op_short_options - (short, nargs, opt.option_set)) - snames; - List.iter - (fun long -> - RefList.add optparser.op_long_options - (long, nargs, opt.option_set)) - lnames - - let add_group optparser ?(parent = optparser.op_groups) ?description heading = - let g = - { - og_heading = heading; - og_description = description; - og_options = RefList.empty (); - og_children = RefList.empty () - } - in - RefList.add parent.og_children g; g - - let make ?(usage = "%prog [options]") ?description ?version - ?(suppress_usage = false) ?(suppress_help = false) ?prog - ?(formatter = Formatter.indented_formatter ()) () = - let optparser = - { - op_usage = usage; - op_suppress_usage = suppress_usage; - op_prog = Option.default (Filename.basename Sys.argv.(0)) prog; - op_formatter = formatter; - op_short_options = RefList.empty (); - op_long_options = RefList.empty (); - op_groups = { - og_heading = "options"; - og_options = RefList.empty (); - og_children = RefList.empty (); - og_description = description - } - } - in - Option.may (* Add version option? *) - (fun version -> - add optparser ~long_name:"version" - (StdOpt.version_option - (fun () -> unprogify optparser version))) - version; - if not suppress_help then (* Add help option? *) - add optparser ~short_name:'h' ~long_name:"help" - (StdOpt.help_option ()); - - optparser - - let format_usage optparser eol = - match optparser.op_suppress_usage with - true -> "" - | false -> - unprogify optparser - (optparser.op_formatter.format_usage optparser.op_usage) ^ eol - - let error optparser ?(chn = stderr) ?(status = 1) message = - fprintf chn "%s%s: %s\n" (format_usage optparser "\n") optparser.op_prog - message; - flush chn; - exit status - - let usage optparser ?(chn = stdout) () = - let rec loop g = - (* Heading: *) - output_string chn - (optparser.op_formatter.format_heading g.og_heading); - - optparser.op_formatter.indent (); - (* Description: *) - Option.may - (fun x -> - output_string chn (optparser.op_formatter.format_description x)) - g.og_description; - (* Options: *) - RefList.iter - (fun (names, metavars, help) -> - output_string chn - (optparser.op_formatter.format_option names metavars help)) - g.og_options; - (* Child groups: *) - output_string chn "\n"; - RefList.iter loop g.og_children; - - optparser.op_formatter.dedent () - in - output_string chn (format_usage optparser "\n"); - loop optparser.op_groups; - flush chn - - let parse optparser ?(first = 0) ?last argv = - let args = RefList.empty () - and n = - match last with - None -> Array.length argv - first - | Some m -> m - first + 1 - in - begin - try - GetOpt.parse (RefList.push args) - (GetOpt.find_short_opt - (RefList.to_list optparser.op_short_options)) - (GetOpt.find_long_opt (RefList.to_list optparser.op_long_options)) - (Array.to_list (Array.sub argv first n)) - with - GetOpt.Error (opt, errmsg) -> - error optparser (sprintf "option '%s': %s" opt errmsg) - | Option_error (opt, errmsg) -> - error optparser (sprintf "option '%s': %s" opt errmsg) - | Option_help -> usage optparser (); exit 0 - end; - List.rev (RefList.to_list args) - - let parse_argv optparser = - parse optparser ~first:1 Sys.argv - end diff --git a/bundles/extlib/extlib-1.5.2/optParse.mli b/bundles/extlib/extlib-1.5.2/optParse.mli deleted file mode 100644 index 92b9f9c..0000000 --- a/bundles/extlib/extlib-1.5.2/optParse.mli +++ /dev/null @@ -1,466 +0,0 @@ -(* - * optParse - Functions for parsing command line arguments. - * Copyright (C) 2004 Bardur Arantsson - * - * Heavily influenced by the optparse.py module from the Python - * standard library, but with lots of adaptation to the 'Ocaml Way' - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Modules for GNU [getopt(3)]-style command line parsing. *) - - -(** This module contains the basic functions and types for defining - new option types and accessing the values of options. *) -module Opt : - sig - - (** {6 Exceptions} *) - - exception No_value - (** [No_value] gets raised by {!OptParse.Opt.get} when an option - value is not available. *) - - exception Option_error of string * string - (** This exception signals that an option value is invalid. The - first string contains the option string ('-x' or '--long-name') - and the second string contains an error message. - - This exception is only used when implementing custom option types - and can never "escape" the scope of a {!OptParse.OptParser.parse}. - The user should therefore not attempt to catch it. *) - - exception Option_help - (** When an option wants to display a usage message, this exception - may be raised. It can never "escape" the scope of a - {!OptParse.OptParser.parse} call and the user should therefore not - attempt to catch it. *) - - - (** {6 Types} *) - - type 'a t = { - option_set : string -> string list -> unit; - option_set_value : 'a -> unit; - option_get : unit -> 'a option; - option_metavars : string list; - option_defhelp : string option - } - (** Option type. - - [option_set] is a closure which converts and records the value of - an option so that it can be retrieved with a later call to the - [option_get] closure. It is called with the option name which was - given on the command line and a list of strings, each representing - one of the argument values given on the command line. It may raise - [Option_error] if the value is invalid (for whatever reason). - - [option_set_value] is a closure which sets the value of an option - to a particular value. - - [option_get] is a closure which retrieves the recorded value - of the option. If the option value has not been set from the - command line, the default value is used. If there is no default - value, then [None] should be returned. - - [option_metavars] is a list of "meta-variables" (arguments) - which this option accepts. This is mainly for display purposes, - but the length of this list determines how many arguments the - option parser accepts for this option (currently only lists of - length 0 or 1 are supported). - - [option_defhelp] is the default help string (if any). It is - used for displaying help messages whenever the user does {b - not} specify a help string manually when adding this - option. Using a non-None value here only makes sense for - completely generic options like {!OptParse.StdOpt.help_option}. - - *) - - - (** {6 Option value retrieval} *) - - val get : 'a t -> 'a - (** Get the value of an option. - - @return the value of the option. If the option has not been - encountered while parsing the command line, the default value is - returned. - - @raise No_value if no default values has been given - and the option value has not been set from the command line. - - *) - - val set : 'a t -> 'a -> unit - (** Set the value of an option. *) - - val opt : 'a t -> 'a option - (** Get the value of an option as an optional value. - - @return [Some x] if the option has value [x] (either by default or - from the command line). If the option doesn't have a value [None] - is returned. *) - - val is_set : 'a t -> bool - (** Find out if the option has a value (either by default or - from the command line). - - @return [True] iff the option has a value. - *) - - - - (** {6 Option creation} *) - - val value_option : - string -> 'a option -> (string -> 'a) -> (exn -> string -> string) -> - 'a t - (** Make an option which takes a single argument. - - [value_option metavar default coerce errfmt] returns an option - which takes a single argument from the command line and calls - [coerce] to coerce it to the proper type. If [coerce] raises an - exception, [exn], then [errfmt exn argval] is called to generate - an error message for display. [metavar] is the name of the - metavariable of the option. - - [default] is the default value of the option. If [None], the the - option has no default value. - - @return the newly created option. - - *) - - val callback_option : - string -> (string -> 'a) -> (exn -> string -> string) -> ('a -> unit) -> - unit t - (** Make a callback option which takes a single argument. - - [callback_option metavar coerce errfmt f] returns an option which - takes a single argument from the command line and calls [coerce] - to coerce it to the proper type. If [coerce] raises an exception - [errfmt exn argval] is called to format an error message for - display. If [coerce] succeeds, the callback function [f] is called - with the coerced value. Finally, [metavar] is the name of the - metavariable of the option. - - @return the newly created option. - *) - - - end - - -(** This module contains various standard options. *) -module StdOpt : - sig - - (** {6 Flag options} *) - - val store_const : ?default: 'a -> 'a -> 'a Opt.t - (** [store_const ?default const] returns a flag option which - stores the constant value [const] when the option is - encountered on the command line. *) - - val store_true : unit -> bool Opt.t - (** [store_true ()] returns an option which is set to true when - it is encountered on the command line. The default value is - false. *) - - val store_false : unit -> bool Opt.t - (** [store_false ()] returns an option which is set to false when - it is encountered on the command line. The default value is - true. *) - - val count_option : ?dest: int ref -> ?increment: int -> unit -> int Opt.t - (** Create a counting option which increments its value each time the - option is encountered on the command line. - - @param increment Increment to add to the option value each - time the option is encountered. - - @param dest Reference to the option value. Useful for making - options like '--quiet' and '--verbose' sharing a single value. - - @return the newly created option. - *) - - val incr_option : ?dest: int ref -> unit -> int Opt.t - (** Exactly identical to [count_option ~dest:dest ~increment:1 ()]. *) - - val decr_option : ?dest: int ref -> unit -> int Opt.t - (** Exactly identical to [count_option ~dest:dest ~increment:(-1) ()]. *) - - - (** {6 Value options} *) - - val int_option : ?default: int -> ?metavar: string -> unit -> int Opt.t - (** [int_option ?default ?metavar ()] returns an option which takes - a single integer argument. If [~default] is given it is the - default value returned when the option has not been encountered - on the command line. *) - - val float_option : - ?default: float -> ?metavar: string -> unit -> float Opt.t - (** See {!OptParse.StdOpt.int_option}. *) - - val str_option : - ?default: string -> ?metavar: string -> unit -> string Opt.t - (** See {!OptParse.StdOpt.int_option}. *) - - - (** {6 Callback options} *) - - val int_callback : ?metavar: string -> (int -> unit) -> unit Opt.t - (** [int_callback ?metavar f] returns an option which takes a single - integer argument and calls [f] with that argument when encountered - on the command line. *) - - val float_callback : ?metavar: string -> (float -> unit) -> unit Opt.t - (** See {!OptParse.StdOpt.int_callback}. *) - - val str_callback : ?metavar: string -> (string -> unit) -> unit Opt.t - (** See {!OptParse.StdOpt.int_callback}. *) - - - (** {6 Special options} *) - - val help_option : unit -> 'a Opt.t - (** [help_option ()] returns the standard help option which - displays a usage message and exits the program when encountered - on the command line. *) - - val version_option : (unit -> string) -> 'a Opt.t - (** [version_option f] returns the standard version option which - displays the string returned by [f ()] (and nothing else) on - standard output and exits. *) - - end - - -(** This module contains the types and functions for implementing - custom usage message formatters. *) -module Formatter : - sig - type t = { - indent : unit -> unit; (** Increase the indentation level. *) - dedent : unit -> unit; (** Decrease the indentation level. *) - format_usage : string -> string; (** Format usage string into style of this formatter. *) - format_heading : string -> string; (** Format heading into style of this formatter. *) - format_description : string -> string; (** Format description into style of this formatter. *) - format_option : - char list * string list -> string list -> string option -> string (** Format option into style of this formatter (see explanation below). *) - } - - (** This is the type of a formatter. The [format_option] has - signature [format_option (snames,lnames) metavars help], where - [snames] is a list of the short option names, [lnames] is a - list of the long option names, [metavars] is a list of the - metavars the option takes as arguments, and [help] is the help - string supplied by the user. *) - - - (** {6 Standard formatters} *) - - - val indented_formatter : - ?level: int ref -> ?indent: int ref -> ?indent_increment: int -> - ?max_help_position: int -> ?width: int -> ?short_first: bool -> - unit -> t - (** Create an "indented" formatter with the given options. - - @param width Total with of the usage messages printed. - - @param max_help_position Maximum starting column for the help - messages relating to each option. - - @param short_first List all the short option names first? - - @param indent_increment Number of columns to indent by when - more indentation is required. - - @param indent Reference to the current indentation amount. Its - value reflects changes in indentation level. - - @param level Reference to the current indentation level. Its - value reflects changes in indentation level. *) - - val titled_formatter : ?level: int ref -> ?indent: int ref -> - ?indent_increment: int -> ?max_help_position: int -> - ?width: int -> ?short_first: bool -> unit -> t - (** Creates a titled formatter which is quite similar to the - indented formatter. See - {!OptParse.Formatter.indented_formatter} for a description of - the options. *) - - - (** {6 Low-level formatting} *) - - - val wrap : ?initial_indent: int -> ?subsequent_indent: int -> - string -> int -> string list - (** [wrap text width] reflows the given text paragraph into lines - of width at most [width] (lines may exceed this if the are - single words that exceed this limit). - - @param initial_indent Indentation of the first line. - - @param subsequent_indent Indentation of the following lines. - - @return a list of lines making up the reformatted paragraph. *) - - val fill : ?initial_indent: int -> ?subsequent_indent: int -> - string -> int -> string - (** See {!OptParse.Formatter.wrap}. - - @return a string containing the reformatted paragraph. *) - - end - - - -(** This module contains the option parser itself. - - It provides functions to create, populate and use option parsers to - parse command line arguments. *) -module OptParser : - sig - - (** {6 Exceptions} *) - - - exception Option_conflict of string - (** [Option_conflict name] is raised by {!OptParse.OptParser.add} - when two different options are added with identical - names. Usually this doesn't need to be caught since this error - is usually easily fixed permanently by removing/renaming the - conflicting option names. *) - - - (** {6 Types} *) - - - type t - (** The type of an option parser. *) - - type group - (** The type of an option group. *) - - - (** {6 Option parser creation} *) - - val make : ?usage: string -> ?description: string -> ?version: string -> - ?suppress_usage: bool -> ?suppress_help: bool -> ?prog: string -> - ?formatter: Formatter.t -> unit -> t - (** Creates a new option parser with the given options. - - @param usage Usage message. The default is a reasonable usage - message for most programs. Any occurrence of the substring - ["%prog"] in [usage] is replaced with the name of the program - (see [prog]). - - @param prog Program name. The default is the base name of the - executable. - - @param suppress_usage Suppress the usage message if set. - - @param suppress_help Suppress the 'help' option which is - otherwise added by default. - - @param version Version string. If set, a '--version' option is - automatically added. When encountered on the command line it - causes [version] to be printed to the standard output and the - program to exit. - - @param description: description of the main purpose of the - program. - - @return the new option parser. - - *) - - - val add : t -> ?group: group -> ?help: string -> ?hide: bool -> - ?short_name: char -> ?short_names: char list -> ?long_name: string -> - ?long_names: string list -> 'a Opt.t -> unit - (** Add an option to the option parser. - - @raise Option_conflict if the short name(s) or long name(s) - have alread been used for some other option. - - @param help Short help message describing the option (for the usage message). - - @param hide If true, hide the option from the usage - message. This can be used to implement "secret" options which - are not shown, but work just the same as regular options in all - other respects. - - @param short_name is the name for the short form of the option - (e.g. ['x'] means that the option is invoked with [-x] on the - command line). - - @param short_names is a list of names for the short form of the - option (see [short_name]). - - @param long_name is the name for the long form of the option - (e.g. ["xyzzy"] means that the option is invoked with [--xyzzy] - on the command line). - - @param long_names is a list of names for the long form of the - option (see [long_name]). - *) - - - val add_group : t -> ?parent: group -> ?description: string -> - string -> group - (** Add a group to the option parser. - - @param parent is the parent group (if any). - - @param description is a description of the group. - - @return the new group. - - *) - - (** {6 Output and error handling} *) - - val error : t -> ?chn: out_channel -> ?status: int -> string -> unit - (** Display an error message and exit the program. The error - message is printed to the channel [chn] (default is - [Pervasives.stderr]) and the program exits with exit status - [status] (default is 1). *) - - val usage : t -> ?chn: out_channel -> unit -> unit - (** Display the usage message to the channel [chn] (default is - [Pervasives.stdout]) and return. *) - - - (** {6 Option parsing} *) - - val parse : t -> ?first: int -> ?last: int -> string array -> string list - (** Parse arguments as if the arguments [args.(first)], - [args.(first+1)], ..., [args.(last)] had been given on the - command line. By default [first] is 0 and [last] is the index - of the last element of the array. *) - - val parse_argv : t -> string list - (** Parse all the arguments in [Sys.argv]. *) - - end diff --git a/bundles/extlib/extlib-1.5.2/option.ml b/bundles/extlib/extlib-1.5.2/option.ml deleted file mode 100644 index ab6fffd..0000000 --- a/bundles/extlib/extlib-1.5.2/option.ml +++ /dev/null @@ -1,49 +0,0 @@ -(* - * Option - functions for the option type - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -exception No_value - -let may f = function - | None -> () - | Some v -> f v - -let map f = function - | None -> None - | Some v -> Some (f v) - -let default v = function - | None -> v - | Some v -> v - -let is_some = function - | None -> false - | _ -> true - -let is_none = function - | None -> true - | _ -> false - -let get = function - | None -> raise No_value - | Some v -> v - -let map_default f v = function - | None -> v - | Some v2 -> f v2 diff --git a/bundles/extlib/extlib-1.5.2/option.mli b/bundles/extlib/extlib-1.5.2/option.mli deleted file mode 100644 index 0fba89e..0000000 --- a/bundles/extlib/extlib-1.5.2/option.mli +++ /dev/null @@ -1,53 +0,0 @@ -(* - * Options - functions for the option type - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Functions for the option type. - - Options are an Ocaml standard type that can be either [None] (undefined) - or [Some x] where x can be any value. Options are widely used in Ocaml - to represent undefined values (a little like NULL in C, but in a type - and memory safe way). This module adds some functions for working with - options. -*) - -val may : ('a -> unit) -> 'a option -> unit -(** [may f (Some x)] calls [f x] and [may f None] does nothing. *) - -val map : ('a -> 'b) -> 'a option -> 'b option -(** [map f (Some x)] returns [Some (f x)] and [map None] returns [None]. *) - -val default : 'a -> 'a option -> 'a -(** [default x (Some v)] returns [v] and [default x None] returns [x]. *) - -val map_default : ('a -> 'b) -> 'b -> 'a option -> 'b -(** [map_default f x (Some v)] returns [f v] and [map_default f x None] - returns [x]. *) - -val is_none : 'a option -> bool -(** [is_none None] returns [true] otherwise it returns [false]. *) - -val is_some : 'a option -> bool -(** [is_some (Some x)] returns [true] otherwise it returns [false]. *) - -val get : 'a option -> 'a -(** [get (Some x)] returns [x] and [get None] raises [No_value]. *) - -exception No_value -(** Raised when calling [get None]. *) diff --git a/bundles/extlib/extlib-1.5.2/pMap.ml b/bundles/extlib/extlib-1.5.2/pMap.ml deleted file mode 100644 index b63c64e..0000000 --- a/bundles/extlib/extlib-1.5.2/pMap.ml +++ /dev/null @@ -1,197 +0,0 @@ -(* - * PMap - Polymorphic maps - * Copyright (C) 1996-2003 Xavier Leroy, Nicolas Cannasse, Markus Mottl - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type ('k, 'v) map = - | Empty - | Node of ('k, 'v) map * 'k * 'v * ('k, 'v) map * int - -type ('k, 'v) t = - { - cmp : 'k -> 'k -> int; - map : ('k, 'v) map; - } - -let height = function - | Node (_, _, _, _, h) -> h - | Empty -> 0 - -let make l k v r = Node (l, k, v, r, max (height l) (height r) + 1) - -let bal l k v r = - let hl = height l in - let hr = height r in - if hl > hr + 2 then - match l with - | Node (ll, lk, lv, lr, _) -> - if height ll >= height lr then make ll lk lv (make lr k v r) - else - (match lr with - | Node (lrl, lrk, lrv, lrr, _) -> - make (make ll lk lv lrl) lrk lrv (make lrr k v r) - | Empty -> assert false) - | Empty -> assert false - else if hr > hl + 2 then - match r with - | Node (rl, rk, rv, rr, _) -> - if height rr >= height rl then make (make l k v rl) rk rv rr - else - (match rl with - | Node (rll, rlk, rlv, rlr, _) -> - make (make l k v rll) rlk rlv (make rlr rk rv rr) - | Empty -> assert false) - | Empty -> assert false - else Node (l, k, v, r, max hl hr + 1) - -let rec min_binding = function - | Node (Empty, k, v, _, _) -> k, v - | Node (l, _, _, _, _) -> min_binding l - | Empty -> raise Not_found - -let rec remove_min_binding = function - | Node (Empty, _, _, r, _) -> r - | Node (l, k, v, r, _) -> bal (remove_min_binding l) k v r - | Empty -> invalid_arg "PMap.remove_min_binding" - -let merge t1 t2 = - match t1, t2 with - | Empty, _ -> t2 - | _, Empty -> t1 - | _ -> - let k, v = min_binding t2 in - bal t1 k v (remove_min_binding t2) - -let create cmp = { cmp = cmp; map = Empty } -let empty = { cmp = compare; map = Empty } - -let is_empty x = - x.map = Empty - -let add x d { cmp = cmp; map = map } = - let rec loop = function - | Node (l, k, v, r, h) -> - let c = cmp x k in - if c = 0 then Node (l, x, d, r, h) - else if c < 0 then - let nl = loop l in - bal nl k v r - else - let nr = loop r in - bal l k v nr - | Empty -> Node (Empty, x, d, Empty, 1) in - { cmp = cmp; map = loop map } - -let find x { cmp = cmp; map = map } = - let rec loop = function - | Node (l, k, v, r, _) -> - let c = cmp x k in - if c < 0 then loop l - else if c > 0 then loop r - else v - | Empty -> raise Not_found in - loop map - -let remove x { cmp = cmp; map = map } = - let rec loop = function - | Node (l, k, v, r, _) -> - let c = cmp x k in - if c = 0 then merge l r else - if c < 0 then bal (loop l) k v r else bal l k v (loop r) - | Empty -> Empty in - { cmp = cmp; map = loop map } - -let mem x { cmp = cmp; map = map } = - let rec loop = function - | Node (l, k, v, r, _) -> - let c = cmp x k in - c = 0 || loop (if c < 0 then l else r) - | Empty -> false in - loop map - -let exists = mem - -let iter f { map = map } = - let rec loop = function - | Empty -> () - | Node (l, k, v, r, _) -> loop l; f k v; loop r in - loop map - -let map f { cmp = cmp; map = map } = - let rec loop = function - | Empty -> Empty - | Node (l, k, v, r, h) -> - let l = loop l in - let r = loop r in - Node (l, k, f v, r, h) in - { cmp = cmp; map = loop map } - -let mapi f { cmp = cmp; map = map } = - let rec loop = function - | Empty -> Empty - | Node (l, k, v, r, h) -> - let l = loop l in - let r = loop r in - Node (l, k, f k v, r, h) in - { cmp = cmp; map = loop map } - -let fold f { cmp = cmp; map = map } acc = - let rec loop acc = function - | Empty -> acc - | Node (l, k, v, r, _) -> - loop (f v (loop acc l)) r in - loop acc map - -let foldi f { cmp = cmp; map = map } acc = - let rec loop acc = function - | Empty -> acc - | Node (l, k, v, r, _) -> - loop (f k v (loop acc l)) r in - loop acc map - -let rec enum m = - let rec make l = - let l = ref l in - let rec next() = - match !l with - | [] -> raise Enum.No_more_elements - | Empty :: tl -> l := tl; next() - | Node (m1, key, data, m2, h) :: tl -> - l := m1 :: m2 :: tl; - (key, data) - in - let count() = - let n = ref 0 in - let r = !l in - try - while true do - ignore (next()); - incr n - done; - assert false - with - Enum.No_more_elements -> l := r; !n - in - let clone() = make !l in - Enum.make ~next ~count ~clone - in - make [m.map] - - -let uncurry_add (k, v) m = add k v m -let of_enum ?(cmp = compare) e = Enum.fold uncurry_add (create cmp) e diff --git a/bundles/extlib/extlib-1.5.2/pMap.mli b/bundles/extlib/extlib-1.5.2/pMap.mli deleted file mode 100644 index 01f2c8c..0000000 --- a/bundles/extlib/extlib-1.5.2/pMap.mli +++ /dev/null @@ -1,92 +0,0 @@ -(* - * PMap - Polymorphic maps - * Copyright (C) 1996-2003 Xavier Leroy, Nicolas Cannasse, Markus Mottl - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Polymorphic Map. - - This is a polymorphic map, similar to standard library [Map] module - but in a defunctorized style. -*) - -type ('a, 'b) t - -val empty : ('a, 'b) t -(** The empty map, using [compare] as key comparison function. *) - -val is_empty : ('a, 'b) t -> bool -(** returns true if the map is empty. *) - -val create : ('a -> 'a -> int) -> ('a, 'b) t -(** creates a new empty map, using the provided function for key comparison.*) - -val add : 'a -> 'b -> ('a, 'b) t -> ('a, 'b) t -(** [add x y m] returns a map containing the same bindings as - [m], plus a binding of [x] to [y]. If [x] was already bound - in [m], its previous binding disappears. *) - -val find : 'a -> ('a, 'b) t -> 'b -(** [find x m] returns the current binding of [x] in [m], - or raises [Not_found] if no such binding exists. *) - -val remove : 'a -> ('a, 'b) t -> ('a, 'b) t -(** [remove x m] returns a map containing the same bindings as - [m], except for [x] which is unbound in the returned map. *) - -val mem : 'a -> ('a, 'b) t -> bool -(** [mem x m] returns [true] if [m] contains a binding for [x], - and [false] otherwise. *) - -val exists : 'a -> ('a, 'b) t -> bool -(** same as [mem]. *) - -val iter : ('a -> 'b -> unit) -> ('a, 'b) t -> unit -(** [iter f m] applies [f] to all bindings in map [m]. - [f] receives the key as first argument, and the associated value - as second argument. The order in which the bindings are passed to - [f] is unspecified. Only current bindings are presented to [f]: - bindings hidden by more recent bindings are not passed to [f]. *) - -val map : ('b -> 'c) -> ('a, 'b) t -> ('a, 'c) t -(** [map f m] returns a map with same domain as [m], where the - associated value [a] of all bindings of [m] has been - replaced by the result of the application of [f] to [a]. - The order in which the associated values are passed to [f] - is unspecified. *) - -val mapi : ('a -> 'b -> 'c) -> ('a, 'b) t -> ('a, 'c) t -(** Same as [map], but the function receives as arguments both the - key and the associated value for each binding of the map. *) - -val fold : ('b -> 'c -> 'c) -> ('a , 'b) t -> 'c -> 'c -(** [fold f m a] computes [(f kN dN ... (f k1 d1 a)...)], - where [k1 ... kN] are the keys of all bindings in [m], - and [d1 ... dN] are the associated data. - The order in which the bindings are presented to [f] is - unspecified. *) - -val foldi : ('a -> 'b -> 'c -> 'c) -> ('a , 'b) t -> 'c -> 'c -(** Same as [fold], but the function receives as arguments both the - key and the associated value for each binding of the map. *) - -val enum : ('a, 'b) t -> ('a * 'b) Enum.t -(** creates an enumeration for this map. *) - -val of_enum : ?cmp:('a -> 'a -> int) -> ('a * 'b) Enum.t -> ('a, 'b) t -(** creates a map from an enumeration, using the specified function - for key comparison or [compare] by default. *) diff --git a/bundles/extlib/extlib-1.5.2/refList.ml b/bundles/extlib/extlib-1.5.2/refList.ml deleted file mode 100644 index b16b6f2..0000000 --- a/bundles/extlib/extlib-1.5.2/refList.ml +++ /dev/null @@ -1,139 +0,0 @@ -(* - * RefList - List reference - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) -open ExtList - -exception Empty_list -exception Invalid_index of int - -type 'a t = 'a list ref - -let empty () = ref [] - -let is_empty x = - match !x with - | [] -> true - | _ -> false - -let of_list l = ref l -let to_list rl = !rl -let copy ~dst ~src = dst := !src -let copy_list ~dst ~src = dst := src - -let add rl item = rl := List.append !rl [item] -let push rl item = rl := item::!rl - -let clear rl = rl := [] - -let length rl = List.length !rl -let hd rl = try List.hd !rl with _ -> raise Empty_list -let tl rl = try ref (List.tl !rl) with _ -> raise Empty_list -let iter f rl = List.iter f !rl -let for_all f rl = List.for_all f !rl -let map f rl = ref (List.map f !rl) -let transform f rl = rl := List.map f !rl -let map_list f rl = List.map f !rl -let find f rl = List.find f !rl -let rev rl = rl := List.rev !rl -let find_exc f exn rl = try List.find f !rl with _ -> raise exn -let exists f rl = List.exists f !rl -let sort ?(cmp=compare) rl = rl := List.sort ~cmp !rl - -let rfind f rl = List.rfind f !rl - -let first = hd - -let last rl = - let rec loop = function - | x :: [] -> x - | x :: l -> loop l - | [] -> assert false - in - match !rl with - | [] -> raise Empty_list - | l -> loop l - -let remove rl item = rl := List.remove !rl item -let remove_if pred rl = rl := List.remove_if pred !rl -let remove_all rl item = rl := List.remove_all !rl item -let filter pred rl = rl := List.filter pred !rl - -let add_sort ?(cmp=compare) rl item = - let rec add_aux = function - | x::lnext as l -> - let r = cmp x item in - if r < 0 then item::l else x::(add_aux lnext) - | [] -> [item] - in - rl := add_aux !rl - -let pop rl = - match !rl with - | [] -> raise Empty_list - | e::l -> rl := l; e - -let npop rl n = - let rec pop_aux l n = - if n = 0 then begin - rl := l; - [] - end else - match l with - | [] -> raise Empty_list - | x::l -> x::(pop_aux l (n-1)) - in - pop_aux !rl n - -let copy_enum ~dst ~src = dst := List.of_enum src -let enum rl = List.enum !rl -let of_enum e = ref (List.of_enum e) - -module Index = struct - - let remove_at rl pos = - let p = ref (-1) in - let rec del_aux = function - | x::l -> incr p; if !p = pos then l else x::(del_aux l) - | [] -> raise (Invalid_index pos) - in - rl := del_aux !rl - - let index pred rl = - let index = ref (-1) in - List.find (fun it -> incr index; pred it; ) !rl; - !index - - let index_of rl item = - let index = ref (-1) in - List.find (fun it -> incr index; it = item; ) !rl; - !index - - let at_index rl pos = - try - List.nth !rl pos - with - _ -> raise (Invalid_index pos) - - let set rl pos newitem = - let p = ref (-1) in - rl := List.map (fun item -> incr p; if !p = pos then newitem else item) !rl; - if !p < pos || pos < 0 then raise (Invalid_index pos) - - -end diff --git a/bundles/extlib/extlib-1.5.2/refList.mli b/bundles/extlib/extlib-1.5.2/refList.mli deleted file mode 100644 index ea7bc06..0000000 --- a/bundles/extlib/extlib-1.5.2/refList.mli +++ /dev/null @@ -1,201 +0,0 @@ -(* - * RefList - List reference - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Reference on lists. - - RefList is a extended set of functions that manipulate list - references. -*) - -exception Empty_list -exception Invalid_index of int - -type 'a t - -val empty : unit -> 'a t -(** Returns a new empty ref list *) - -val is_empty : 'a t -> bool -(** Return [true] if a ref list is empty *) - -val clear : 'a t -> unit -(** Removes all elements *) - -val length : 'a t -> int -(** Returns the number of elements - O(n) *) - -val copy : dst:'a t -> src:'a t -> unit -(** Makes a copy of a ref list - O(1) *) - -val copy_list : dst:'a t -> src:'a list -> unit -(** Makes a copy of a list - O(1) *) - -val copy_enum : dst:'a t -> src:'a Enum.t -> unit -(** Makes a copy of a enum *) - -val of_list : 'a list -> 'a t -(** Creates a ref list from a list - O(1) *) - -val to_list : 'a t -> 'a list -(** Returns the current elements as a list - O(1) *) - -val of_enum : 'a Enum.t -> 'a t -(** Creates a ref list from an enumeration *) - -val enum : 'a t -> 'a Enum.t -(** Returns an enumeration of current elements in the ref list *) - -val add : 'a t -> 'a -> unit -(** Adds an element at the end - O(n) *) - -val push : 'a t -> 'a -> unit -(** Adds an element at the head - O(1) *) - -val add_sort : ?cmp:('a -> 'a -> int) -> 'a t -> 'a -> unit -(** Adds an element in a sorted list, using optional comparator - or 'compare' as default. *) - -val first : 'a t -> 'a -(** Returns the first element or - raises [Empty_list] if the ref list is empty *) - -val last : 'a t -> 'a -(** Returns the last element - O(n) or - raises Empty_list if the ref list is empty *) - -val pop : 'a t -> 'a -(** Removes and returns the first element or - raises [Empty_list] if the ref list is empty *) - -val npop : 'a t -> int -> 'a list -(** Removes and returns the n first elements or - raises [Empty_list] if the ref list does not - contain enough elements *) - -val hd : 'a t -> 'a -(** same as [first] *) - -val tl : 'a t -> 'a t -(** Returns a ref list containing the same elements - but without the first one or - raises [Empty_list] if the ref list is empty *) - -val rev : 'a t -> unit -(** Reverses the ref list - O(n) *) - -(** {6 Functional Operations} *) - -val iter : ('a -> unit) -> 'a t -> unit -(** Apply the given function to all elements of the - ref list, in respect with the order of the list *) - -val find : ('a -> bool) -> 'a t -> 'a -(** Find the first element matching - the specified predicate - raise [Not_found] if no element is found *) - -val rfind : ('a -> bool) -> 'a t -> 'a -(** Find the first element in the reversed ref list matching - the specified predicate - raise [Not_found] if no element is found *) - -val find_exc : ('a -> bool) -> exn -> 'a t -> 'a -(** Same as find but takes an exception to be raised when - no element is found as additional parameter *) - -val exists : ('a -> bool) -> 'a t -> bool -(** Return [true] if an element matches the specified - predicate *) - -val for_all : ('a -> bool) -> 'a t -> bool -(** Return [true] if all elements match the specified - predicate *) - -val map : ('a -> 'b) -> 'a t -> 'b t -(** Apply a function to all elements - and return the ref list constructed with - the function returned values *) - -val transform : ('a -> 'a) -> 'a t -> unit -(** transform all elements in the ref list - using a function. *) - -val map_list : ('a -> 'b) -> 'a t -> 'b list -(** Apply a function to all elements - and return the list constructed with - the function returned values *) - -val sort : ?cmp:('a -> 'a -> int) -> 'a t -> unit -(** Sort elements using the specified comparator - or compare as default comparator *) - -val filter : ('a -> bool) -> 'a t -> unit -(** Remove all elements that do not match the - specified predicate *) - -val remove : 'a t -> 'a -> unit -(** Remove an element from the ref list - raise [Not_found] if the element is not found *) - -val remove_if : ('a -> bool) -> 'a t -> unit -(** Remove the first element matching the - specified predicate - raise [Not_found] if no element has been removed *) - -val remove_all : 'a t -> 'a -> unit -(** Remove all elements equal to the specified - element from the ref list *) - - - -(** Functions that operate on the [i]th element of a list. - - While it is sometimes necessary to perform these - operations on lists (hence their inclusion here), the - functions were moved to an inner module to prevent - their overuse: all functions work in O(n) time. You - might prefer to use [Array] or [DynArray] for constant - time indexed element access. -*) -module Index : sig - - val index_of : 'a t -> 'a -> int - (** Return the index (position : 0 starting) of an element in - a ref list, using ( = ) for testing element equality - raise [Not_found] if no element was found *) - - val index : ('a -> bool) -> 'a t -> int - (** Return the index (position : 0 starting) of an element in - a ref list, using the specified comparator - raise [Not_found] if no element was found *) - - val at_index : 'a t -> int -> 'a - (** Return the element of ref list at the specified index - raise [Invalid_index] if the index is outside [0 ; length-1] *) - - val set : 'a t -> int -> 'a -> unit - (** Change the element at the specified index - raise [Invalid_index] if the index is outside [0 ; length-1] *) - - val remove_at : 'a t -> int -> unit - (** Remove the element at the specified index - raise [Invalid_index] if the index is outside [0 ; length-1] *) - -end diff --git a/bundles/extlib/extlib-1.5.2/std.ml b/bundles/extlib/extlib-1.5.2/std.ml deleted file mode 100644 index 4903b82..0000000 --- a/bundles/extlib/extlib-1.5.2/std.ml +++ /dev/null @@ -1,185 +0,0 @@ -(* - * Std - Additional functions - * Copyright (C) 2003 Nicolas Cannasse and Markus Mottl - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -let input_lines ch = - Enum.from (fun () -> - try input_line ch with End_of_file -> raise Enum.No_more_elements) - -let input_chars ch = - Enum.from (fun () -> - try input_char ch with End_of_file -> raise Enum.No_more_elements) - -type 'a _mut_list = { - hd : 'a; - mutable tl : 'a _mut_list; -} - -let input_list ch = - let _empty = Obj.magic [] in - let rec loop dst = - let r = { hd = input_line ch; tl = _empty } in - dst.tl <- r; - loop r in - let r = { hd = Obj.magic(); tl = _empty } in - try loop r - with - End_of_file -> - Obj.magic r.tl - -let buf_len = 8192 - -let input_all ic = - let rec loop acc total buf ofs = - let n = input ic buf ofs (buf_len - ofs) in - if n = 0 then - let res = String.create total in - let pos = total - ofs in - let _ = String.blit buf 0 res pos ofs in - let coll pos buf = - let new_pos = pos - buf_len in - String.blit buf 0 res new_pos buf_len; - new_pos in - let _ = List.fold_left coll pos acc in - res - else - let new_ofs = ofs + n in - let new_total = total + n in - if new_ofs = buf_len then - loop (buf :: acc) new_total (String.create buf_len) 0 - else loop acc new_total buf new_ofs in - loop [] 0 (String.create buf_len) 0 - -let input_file ?(bin=false) fname = - let ch = (if bin then open_in_bin else open_in) fname in - let str = input_all ch in - close_in ch; - str - -let output_file ~filename ~text = - let ch = open_out filename in - output_string ch text; - close_out ch - -let print_bool = function - | true -> print_string "true" - | false -> print_string "false" - -let prerr_bool = function - | true -> prerr_string "true" - | false -> prerr_string "false" - -let string_of_char c = String.make 1 c - -external identity : 'a -> 'a = "%identity" - -let rec dump r = - if Obj.is_int r then - string_of_int (Obj.magic r : int) - else (* Block. *) - let rec get_fields acc = function - | 0 -> acc - | n -> let n = n-1 in get_fields (Obj.field r n :: acc) n - in - let rec is_list r = - if Obj.is_int r then - r = Obj.repr 0 (* [] *) - else - let s = Obj.size r and t = Obj.tag r in - t = 0 && s = 2 && is_list (Obj.field r 1) (* h :: t *) - in - let rec get_list r = - if Obj.is_int r then - [] - else - let h = Obj.field r 0 and t = get_list (Obj.field r 1) in - h :: t - in - let opaque name = - (* XXX In future, print the address of value 'r'. Not possible in - * pure OCaml at the moment. - *) - "<" ^ name ^ ">" - in - let s = Obj.size r and t = Obj.tag r in - (* From the tag, determine the type of block. *) - match t with - | _ when is_list r -> - let fields = get_list r in - "[" ^ String.concat "; " (List.map dump fields) ^ "]" - | 0 -> - let fields = get_fields [] s in - "(" ^ String.concat ", " (List.map dump fields) ^ ")" - | x when x = Obj.lazy_tag -> - (* Note that [lazy_tag .. forward_tag] are < no_scan_tag. Not - * clear if very large constructed values could have the same - * tag. XXX *) - opaque "lazy" - | x when x = Obj.closure_tag -> - opaque "closure" - | x when x = Obj.object_tag -> - let fields = get_fields [] s in - let clasz, id, slots = - match fields with - | h::h'::t -> h, h', t - | _ -> assert false - in - (* No information on decoding the class (first field). So just print - * out the ID and the slots. *) - "Object #" ^ dump id ^ " (" ^ String.concat ", " (List.map dump slots) ^ ")" - | x when x = Obj.infix_tag -> - opaque "infix" - | x when x = Obj.forward_tag -> - opaque "forward" - | x when x < Obj.no_scan_tag -> - let fields = get_fields [] s in - "Tag" ^ string_of_int t ^ - " (" ^ String.concat ", " (List.map dump fields) ^ ")" - | x when x = Obj.string_tag -> - "\"" ^ String.escaped (Obj.magic r : string) ^ "\"" - | x when x = Obj.double_tag -> - string_of_float (Obj.magic r : float) - | x when x = Obj.abstract_tag -> - opaque "abstract" - | x when x = Obj.custom_tag -> - opaque "custom" - | x when x = Obj.final_tag -> - opaque "final" - | _ -> - failwith ("Std.dump: impossible tag (" ^ string_of_int t ^ ")") - -let dump v = dump (Obj.repr v) - -let print v = print_endline (dump v) - -let finally handler f x = - let r = ( - try - f x - with - e -> handler(); raise e - ) in - handler(); - r - -let __unique_counter = ref 0 - -let unique() = - incr __unique_counter; - !__unique_counter \ No newline at end of file diff --git a/bundles/extlib/extlib-1.5.2/std.mli b/bundles/extlib/extlib-1.5.2/std.mli deleted file mode 100644 index 5328380..0000000 --- a/bundles/extlib/extlib-1.5.2/std.mli +++ /dev/null @@ -1,69 +0,0 @@ -(* - * Std - Additional functions - * Copyright (C) 2003 Nicolas Cannasse - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Additional functions. *) - -val input_lines : in_channel -> string Enum.t -(** Returns an enumeration over lines of an input channel, as read by the - [input_line] function. *) - -val input_chars : in_channel -> char Enum.t -(** Returns an enumeration over characters of an input channel. *) - -val input_list : in_channel -> string list -(** Returns the list of lines read from an input channel. *) - -val input_all : in_channel -> string -(** Return the whole contents of an input channel as a single - string. *) - -val print_bool : bool -> unit -(** Print a boolean to stdout. *) - -val prerr_bool : bool -> unit -(** Print a boolean to stderr. *) - -val input_file : ?bin:bool -> string -> string -(** returns the data of a given filename. *) - -val output_file : filename:string -> text:string -> unit -(** creates a filename, write text into it and close it. *) - -val string_of_char : char -> string -(** creates a string from a char. *) - -external identity : 'a -> 'a = "%identity" -(** the identity function. *) - -val unique : unit -> int -(** returns an unique identifier every time it is called. *) - -val dump : 'a -> string -(** represent a runtime value as a string. Since types are lost at compile - time, the representation might not match your type. For example, None - will be printed 0 since they share the same runtime representation. *) - -val print : 'a -> unit -(** print the representation of a runtime value on stdout. - See remarks for [dump]. *) - -val finally : (unit -> unit) -> ('a -> 'b) -> 'a -> 'b -(** [finally fend f x] calls [f x] and then [fend()] even if [f x] raised - an exception. *) diff --git a/bundles/extlib/extlib-1.5.2/uChar.ml b/bundles/extlib/extlib-1.5.2/uChar.ml deleted file mode 100644 index 194a753..0000000 --- a/bundles/extlib/extlib-1.5.2/uChar.ml +++ /dev/null @@ -1,48 +0,0 @@ -(* - * UChar - Unicode (ISO-UCS) characters - * Copyright (C) 2002, 2003 Yamagata Yoriyuki - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type t = int - -exception Out_of_range - -external unsafe_chr_of_uint : int -> t = "%identity" -external uint_code : t -> int = "%identity" - -let char_of c = - if c >= 0 && c < 0x100 then Char.chr c else raise Out_of_range - -let of_char = Char.code - -let code c = if c >= 0 then c else raise Out_of_range - -let chr n = - if n >= 0 && n lsr 31 = 0 then n else invalid_arg "UChar.chr" - -let chr_of_uint n = if n lsr 31 = 0 then n else invalid_arg "UChar.uint_chr" - -let eq (u1 : t) (u2 : t) = u1 = u2 -let compare u1 u2 = - let sgn = (u1 lsr 16) - (u2 lsr 16) in - if sgn = 0 then (u1 land 0xFFFF) - (u2 land 0xFFFF) else sgn - -type uchar = t - -let int_of_uchar u = uint_code u -let uchar_of_int n = chr_of_uint n diff --git a/bundles/extlib/extlib-1.5.2/uChar.mli b/bundles/extlib/extlib-1.5.2/uChar.mli deleted file mode 100644 index 2301505..0000000 --- a/bundles/extlib/extlib-1.5.2/uChar.mli +++ /dev/null @@ -1,79 +0,0 @@ -(* - * UChar - Unicode (ISO-UCS) characters - * Copyright (C) 2002, 2003 Yamagata Yoriyuki - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Unicode (ISO-UCS) characters. - - This module implements Unicode (actually ISO-UCS) characters. All - 31-bit code points are allowed. -*) - -(** Unicode characters. All 31-bit code points are allowed.*) -type t - -exception Out_of_range - -(** [char_of u] returns the Latin-1 representation of [u]. - If [u] can not be represented by Latin-1, raises Out_of_range *) -val char_of : t -> char - -(** [of_char c] returns the Unicode character of the Latin-1 character [c] *) -val of_char : char -> t - -(** [code u] returns the Unicode code number of [u]. - If the value can not be represented by a positive integer, - raise Out_of_range *) -val code : t -> int - -(** [code n] returns the Unicode character with the code number [n]. - If n >= 2^32 or n < 0, raises [invalid_arg] *) -val chr : int -> t - -(** [uint_code u] returns the Unicode code number of [u]. - The returned int is unsigned, that is, on 32-bit platforms, - the sign bit is used for storing the 31-th bit of the code number. *) -external uint_code : t -> int = "%identity" - -(** [chr_of_uint n] returns the Unicode character of the code number [n]. - [n] is interpreted as unsigned, that is, on 32-bit platforms, - the sign bit is treated as the 31-th bit of the code number. - If n exceeds 31-bit values, then raise [Invalid_arg]. *) -val chr_of_uint : int -> t - -(** Unsafe version of {!UChar.chr_of_uint}. - No check of its argument is performed. *) -external unsafe_chr_of_uint : int -> t = "%identity" - -(** Equality by code point comparison *) -val eq : t -> t -> bool - -(** [compare u1 u2] returns, - a value > 0 if [u1] has a larger Unicode code number than [u2], - 0 if [u1] and [u2] are the same Unicode character, - a value < 0 if [u1] has a smaller Unicode code number than [u2]. *) -val compare : t -> t -> int - -(** Aliases of [type t] *) -type uchar = t - -(** Alias of [uint_code] *) -val int_of_uchar : uchar -> int - -(** Alias of [chr_of_uint] *) -val uchar_of_int : int -> uchar diff --git a/bundles/extlib/extlib-1.5.2/uTF8.ml b/bundles/extlib/extlib-1.5.2/uTF8.ml deleted file mode 100644 index b7da7b9..0000000 --- a/bundles/extlib/extlib-1.5.2/uTF8.ml +++ /dev/null @@ -1,220 +0,0 @@ -(* - * UTF-8 - UTF-8 encoded Unicode string - * Copyright 2002, 2003 (C) Yamagata Yoriyuki. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -open UChar - -type t = string -type index = int - -let look s i = - let n' = - let n = Char.code s.[i] in - if n < 0x80 then n else - if n <= 0xdf then - (n - 0xc0) lsl 6 lor (0x7f land (Char.code s.[i + 1])) - else if n <= 0xef then - let n' = n - 0xe0 in - let m0 = Char.code s.[i + 2] in - let m = Char.code (String.unsafe_get s (i + 1)) in - let n' = n' lsl 6 lor (0x7f land m) in - n' lsl 6 lor (0x7f land m0) - else if n <= 0xf7 then - let n' = n - 0xf0 in - let m0 = Char.code s.[i + 3] in - let m = Char.code (String.unsafe_get s (i + 1)) in - let n' = n' lsl 6 lor (0x7f land m) in - let m = Char.code (String.unsafe_get s (i + 2)) in - let n' = n' lsl 6 lor (0x7f land m) in - n' lsl 6 lor (0x7f land m0) - else if n <= 0xfb then - let n' = n - 0xf8 in - let m0 = Char.code s.[i + 4] in - let m = Char.code (String.unsafe_get s (i + 1)) in - let n' = n' lsl 6 lor (0x7f land m) in - let m = Char.code (String.unsafe_get s (i + 2)) in - let n' = n' lsl 6 lor (0x7f land m) in - let m = Char.code (String.unsafe_get s (i + 3)) in - let n' = n' lsl 6 lor (0x7f land m) in - n' lsl 6 lor (0x7f land m0) - else if n <= 0xfd then - let n' = n - 0xfc in - let m0 = Char.code s.[i + 5] in - let m = Char.code (String.unsafe_get s (i + 1)) in - let n' = n' lsl 6 lor (0x7f land m) in - let m = Char.code (String.unsafe_get s (i + 2)) in - let n' = n' lsl 6 lor (0x7f land m) in - let m = Char.code (String.unsafe_get s (i + 3)) in - let n' = n' lsl 6 lor (0x7f land m) in - let m = Char.code (String.unsafe_get s (i + 4)) in - let n' = n' lsl 6 lor (0x7f land m) in - n' lsl 6 lor (0x7f land m0) - else invalid_arg "UTF8.look" - in - Obj.magic n' - -let rec search_head s i = - if i >= String.length s then i else - let n = Char.code (String.unsafe_get s i) in - if n < 0x80 || n >= 0xc2 then i else - search_head s (i + 1) - -let next s i = - let n = Char.code s.[i] in - if n < 0x80 then i + 1 else - if n < 0xc0 then search_head s (i + 1) else - if n <= 0xdf then i + 2 - else if n <= 0xef then i + 3 - else if n <= 0xf7 then i + 4 - else if n <= 0xfb then i + 5 - else if n <= 0xfd then i + 6 - else invalid_arg "UTF8.next" - -let rec search_head_backward s i = - if i < 0 then -1 else - let n = Char.code s.[i] in - if n < 0x80 || n >= 0xc2 then i else - search_head_backward s (i - 1) - -let prev s i = search_head_backward s (i - 1) - -let move s i n = - if n >= 0 then - let rec loop i n = if n <= 0 then i else loop (next s i) (n - 1) in - loop i n - else - let rec loop i n = if n >= 0 then i else loop (prev s i) (n + 1) in - loop i n - -let rec nth_aux s i n = - if n = 0 then i else - nth_aux s (next s i) (n - 1) - -let nth s n = nth_aux s 0 n - -let last s = search_head_backward s (String.length s - 1) - -let out_of_range s i = i < 0 || i >= String.length s - -let compare_index _ i j = i - j - -let get s n = look s (nth s n) - -let add_uchar buf u = - let masq = 0b111111 in - let k = int_of_uchar u in - if k < 0 || k >= 0x4000000 then begin - Buffer.add_char buf (Char.chr (0xfc + (k lsr 30))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 24) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 18) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 12) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); - end else if k <= 0x7f then - Buffer.add_char buf (Char.unsafe_chr k) - else if k <= 0x7ff then begin - Buffer.add_char buf (Char.unsafe_chr (0xc0 lor (k lsr 6))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))) - end else if k <= 0xffff then begin - Buffer.add_char buf (Char.unsafe_chr (0xe0 lor (k lsr 12))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); - end else if k <= 0x1fffff then begin - Buffer.add_char buf (Char.unsafe_chr (0xf0 + (k lsr 18))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 12) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); - end else begin - Buffer.add_char buf (Char.unsafe_chr (0xf8 + (k lsr 24))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 18) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 12) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); - Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); - end - -let init len f = - let buf = Buffer.create len in - for c = 0 to len - 1 do add_uchar buf (f c) done; - Buffer.contents buf - -let rec length_aux s c i = - if i >= String.length s then c else - let n = Char.code (String.unsafe_get s i) in - let k = - if n < 0x80 then 1 else - if n < 0xc0 then invalid_arg "UTF8.length" else - if n < 0xe0 then 2 else - if n < 0xf0 then 3 else - if n < 0xf8 then 4 else - if n < 0xfc then 5 else - if n < 0xfe then 6 else - invalid_arg "UTF8.length" in - length_aux s (c + 1) (i + k) - -let length s = length_aux s 0 0 - -let rec iter_aux proc s i = - if i >= String.length s then () else - let u = look s i in - proc u; - iter_aux proc s (next s i) - -let iter proc s = iter_aux proc s 0 - -let compare s1 s2 = Pervasives.compare s1 s2 - -exception Malformed_code - -let validate s = - let rec trail c i a = - if c = 0 then a else - if i >= String.length s then raise Malformed_code else - let n = Char.code (String.unsafe_get s i) in - if n < 0x80 || n >= 0xc0 then raise Malformed_code else - trail (c - 1) (i + 1) (a lsl 6 lor (n - 0x80)) in - let rec main i = - if i >= String.length s then () else - let n = Char.code (String.unsafe_get s i) in - if n < 0x80 then main (i + 1) else - if n < 0xc2 then raise Malformed_code else - if n <= 0xdf then - if trail 1 (i + 1) (n - 0xc0) < 0x80 then raise Malformed_code else - main (i + 2) - else if n <= 0xef then - if trail 2 (i + 1) (n - 0xe0) < 0x800 then raise Malformed_code else - main (i + 3) - else if n <= 0xf7 then - if trail 3 (i + 1) (n - 0xf0) < 0x10000 then raise Malformed_code else - main (i + 4) - else if n <= 0xfb then - if trail 4 (i + 1) (n - 0xf8) < 0x200000 then raise Malformed_code else - main (i + 5) - else if n <= 0xfd then - let n = trail 5 (i + 1) (n - 0xfc) in - if n lsr 16 < 0x400 then raise Malformed_code else - main (i + 6) - else raise Malformed_code in - main 0 - -module Buf = - struct - include Buffer - type buf = t - let add_char = add_uchar - end diff --git a/bundles/extlib/extlib-1.5.2/uTF8.mli b/bundles/extlib/extlib-1.5.2/uTF8.mli deleted file mode 100644 index 72d9a13..0000000 --- a/bundles/extlib/extlib-1.5.2/uTF8.mli +++ /dev/null @@ -1,144 +0,0 @@ -(* - * UTF-8 - UTF-8 encoded Unicode string - * Copyright 2002, 2003 (C) Yamagata Yoriyuki. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** UTF-8 encoded Unicode strings. - - The Module for UTF-8 encoded Unicode strings. -*) - -open UChar - -(** UTF-8 encoded Unicode strings. the type is normal string. *) -type t = string - -exception Malformed_code - -(** [validate s] - Succeeds if s is valid UTF-8, otherwise raises Malformed_code. - Other functions assume strings are valid UTF-8, so it is prudent - to test their validity for strings from untrusted origins. *) -val validate : t -> unit - -(* All functions below assume string are valid UTF-8. If not, - * the result is unspecified. *) - -(** [get s n] returns [n]-th Unicode character of [s]. - The call requires O(n)-time. *) -val get : t -> int -> uchar - -(** [init len f] - returns a new string which contains [len] Unicode characters. - The i-th Unicode character is initialized by [f i] *) -val init : int -> (int -> uchar) -> t - -(** [length s] returns the number of Unicode characters contained in s *) -val length : t -> int - -(** Positions in the string represented by the number of bytes from the head. - The location of the first character is [0] *) -type index = int - -(** [nth s n] returns the position of the [n]-th Unicode character. - The call requires O(n)-time *) -val nth : t -> int -> index - -(** The position of the head of the last Unicode character. *) -val last : t -> index - -(** [look s i] - returns the Unicode character of the location [i] in the string [s]. *) -val look : t -> index -> uchar - -(** [out_of_range s i] - tests whether [i] is a position inside of [s]. *) -val out_of_range : t -> index -> bool - -(** [compare_index s i1 i2] returns - a value < 0 if [i1] is the position located before [i2], - 0 if [i1] and [i2] points the same location, - a value > 0 if [i1] is the position located after [i2]. *) -val compare_index : t -> index -> index -> int - -(** [next s i] - returns the position of the head of the Unicode character - located immediately after [i]. - If [i] is inside of [s], the function always successes. - If [i] is inside of [s] and there is no Unicode character after [i], - the position outside [s] is returned. - If [i] is not inside of [s], the behaviour is unspecified. *) -val next : t -> index -> index - -(** [prev s i] - returns the position of the head of the Unicode character - located immediately before [i]. - If [i] is inside of [s], the function always successes. - If [i] is inside of [s] and there is no Unicode character before [i], - the position outside [s] is returned. - If [i] is not inside of [s], the behaviour is unspecified. *) -val prev : t -> index -> index - -(** [move s i n] - returns [n]-th Unicode character after [i] if n >= 0, - [n]-th Unicode character before [i] if n < 0. - If there is no such character, the result is unspecified. *) -val move : t -> index -> int -> index - -(** [iter f s] - applies [f] to all Unicode characters in [s]. - The order of application is same to the order - of the Unicode characters in [s]. *) -val iter : (uchar -> unit) -> t -> unit - -(** Code point comparison by the lexicographic order. - [compare s1 s2] returns - a positive integer if [s1] > [s2], - 0 if [s1] = [s2], - a negative integer if [s1] < [s2]. *) -val compare : t -> t -> int - -(** Buffer module for UTF-8 strings *) -module Buf : sig - (** Buffers for UTF-8 strings. *) - type buf - - (** [create n] creates a buffer with the initial size [n]-bytes. *) - val create : int -> buf - - (* The rest of functions is similar to the ones of Buffer in stdlib. *) - (** [contents buf] returns the contents of the buffer. *) - val contents : buf -> t - - (** Empty the buffer, - but retains the internal storage which was holding the contents *) - val clear : buf -> unit - - (** Empty the buffer and de-allocate the internal storage. *) - val reset : buf -> unit - - (** Add one Unicode character to the buffer. *) - val add_char : buf -> uchar -> unit - - (** Add the UTF-8 string to the buffer. *) - val add_string : buf -> t -> unit - - (** [add_buffer b1 b2] adds the contents of [b2] to [b1]. - The contents of [b2] is not changed. *) - val add_buffer : buf -> buf -> unit -end diff --git a/bundles/extlib/extlib-1.5.2/unzip.ml b/bundles/extlib/extlib-1.5.2/unzip.ml deleted file mode 100644 index c1b125c..0000000 --- a/bundles/extlib/extlib-1.5.2/unzip.ml +++ /dev/null @@ -1,449 +0,0 @@ -(* - * Unzip - inflate format decompression algorithm - * Copyright (C) 2004 Nicolas Cannasse - * Compliant with RFC 1950 and 1951 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -type huffman = - | Found of int - | NeedBit of huffman * huffman - | NeedBits of int * huffman array - - -type adler32 = { - mutable a1 : int; - mutable a2 : int; -} - -type window = { - mutable wbuffer : string; - mutable wpos : int; - wcrc : adler32; -} - -type state = - | Head - | Block - | CData - | Flat - | Crc - | Dist - | DistOne - | Done - -type t = { - mutable znbits : int; - mutable zbits : int; - mutable zstate : state; - mutable zfinal : bool; - mutable zhuffman : huffman; - mutable zhuffdist : huffman option; - mutable zlen : int; - mutable zdist : int; - mutable zneeded : int; - mutable zoutput : string; - mutable zoutpos : int; - zinput : IO.input; - zlengths : int array; - zwindow : window; -} - -type error_msg = - | Invalid_huffman - | Invalid_data - | Invalid_crc - | Truncated_data - | Unsupported_dictionary - -exception Error of error_msg - -let error msg = raise (Error msg) - -(* ************************************************************************ *) -(* HUFFMAN TREES *) - -let rec tree_depth = function - | Found _ -> 0 - | NeedBits _ -> assert false - | NeedBit (a,b) -> - 1 + min (tree_depth a) (tree_depth b) - -let rec tree_compress t = - match tree_depth t with - | 0 -> t - | 1 -> - (match t with - | NeedBit (a,b) -> NeedBit (tree_compress a,tree_compress b) - | _ -> assert false) - | d -> - let size = 1 lsl d in - let tbl = Array.make size (Found (-1)) in - tree_walk tbl 0 0 d t; - NeedBits (d,tbl) - -and tree_walk tbl p cd d = function - | NeedBit (a,b) when d > 0 -> - tree_walk tbl p (cd + 1) (d-1) a; - tree_walk tbl (p lor (1 lsl cd)) (cd + 1) (d-1) b; - | t -> - Array.set tbl p (tree_compress t) - -let make_huffman lengths pos nlengths maxbits = - let counts = Array.make maxbits 0 in - for i = 0 to nlengths - 1 do - let p = Array.unsafe_get lengths (i + pos) in - if p >= maxbits then error Invalid_huffman; - Array.unsafe_set counts p (Array.unsafe_get counts p + 1); - done; - let code = ref 0 in - let tmp = Array.make maxbits 0 in - for i = 1 to maxbits - 2 do - code := (!code + Array.unsafe_get counts i) lsl 1; - Array.unsafe_set tmp i !code; - done; - let bits = Hashtbl.create 0 in - for i = 0 to nlengths - 1 do - let l = Array.unsafe_get lengths (i + pos) in - if l <> 0 then begin - let n = Array.unsafe_get tmp (l - 1) in - Array.unsafe_set tmp (l - 1) (n + 1); - Hashtbl.add bits (n,l) i; - end; - done; - let rec tree_make v l = - if l > maxbits then error Invalid_huffman; - try - Found (Hashtbl.find bits (v,l)) - with - Not_found -> - NeedBit (tree_make (v lsl 1) (l + 1) , tree_make (v lsl 1 lor 1) (l + 1)) - in - tree_compress (NeedBit (tree_make 0 1 , tree_make 1 1)) - -(* ************************************************************************ *) -(* ADLER32 (CRC) *) - -let adler32_create() = { - a1 = 1; - a2 = 0; -} - -let adler32_update a s p l = - let p = ref p in - for i = 0 to l - 1 do - let c = int_of_char (String.unsafe_get s !p) in - a.a1 <- (a.a1 + c) mod 65521; - a.a2 <- (a.a2 + a.a1) mod 65521; - incr p; - done - -let adler32_read ch = - let a2a = IO.read_byte ch in - let a2b = IO.read_byte ch in - let a1a = IO.read_byte ch in - let a1b = IO.read_byte ch in - { - a1 = (a1a lsl 8) lor a1b; - a2 = (a2a lsl 8) lor a2b; - } - -(* ************************************************************************ *) -(* WINDOW *) - -let window_size = 1 lsl 15 -let buffer_size = 1 lsl 16 - -let window_create size = { - wbuffer = String.create buffer_size; - wpos = 0; - wcrc = adler32_create() - } - -let window_slide w = - adler32_update w.wcrc w.wbuffer 0 window_size; - let b = String.create buffer_size in - w.wpos <- w.wpos - window_size; - String.unsafe_blit w.wbuffer window_size b 0 w.wpos; - w.wbuffer <- b - -let window_add_string w s p len = - if w.wpos + len > buffer_size then window_slide w; - String.unsafe_blit s p w.wbuffer w.wpos len; - w.wpos <- w.wpos + len - -let window_add_char w c = - if w.wpos = buffer_size then window_slide w; - String.unsafe_set w.wbuffer w.wpos c; - w.wpos <- w.wpos + 1 - -let window_get_last_char w = - String.unsafe_get w.wbuffer (w.wpos - 1) - -let window_available w = - w.wpos - -let window_checksum w = - adler32_update w.wcrc w.wbuffer 0 w.wpos; - w.wcrc - -(* ************************************************************************ *) - -let len_extra_bits_tbl = [|0;0;0;0;0;0;0;0;1;1;1;1;2;2;2;2;3;3;3;3;4;4;4;4;5;5;5;5;0;-1;-1|] -let len_base_val_tbl = [|3;4;5;6;7;8;9;10;11;13;15;17;19;23;27;31;35;43;51;59;67;83;99;115;131;163;195;227;258|] -let dist_extra_bits_tbl = [|0;0;0;0;1;1;2;2;3;3;4;4;5;5;6;6;7;7;8;8;9;9;10;10;11;11;12;12;13;13;-1;-1|] -let dist_base_val_tbl = [|1;2;3;4;5;7;9;13;17;25;33;49;65;97;129;193;257;385;513;769;1025;1537;2049;3073;4097;6145;8193;12289;16385;24577|] -let code_lengths_pos = [|16;17;18;0;8;7;9;6;10;5;11;4;12;3;13;2;14;1;15|] - -let fixed_huffman = make_huffman (Array.init 288 (fun n -> - if n <= 143 then 8 - else if n <= 255 then 9 - else if n <= 279 then 7 - else 8 - )) 0 288 10 - -let get_bits z n = - while z.znbits < n do - z.zbits <- z.zbits lor ((IO.read_byte z.zinput) lsl z.znbits); - z.znbits <- z.znbits + 8; - done; - let b = z.zbits land (1 lsl n - 1) in - z.znbits <- z.znbits - n; - z.zbits <- z.zbits lsr n; - b - -let get_bit z = - if z.znbits = 0 then begin - z.znbits <- 8; - z.zbits <- IO.read_byte z.zinput; - end; - let b = z.zbits land 1 = 1 in - z.znbits <- z.znbits - 1; - z.zbits <- z.zbits lsr 1; - b - -let rec get_rev_bits z n = - if n = 0 then - 0 - else if get_bit z then - (1 lsl (n - 1)) lor (get_rev_bits z (n-1)) - else - get_rev_bits z (n-1) - -let reset_bits z = - z.zbits <- 0; - z.znbits <- 0 - -let add_string z s p l = - window_add_string z.zwindow s p l; - String.unsafe_blit s p z.zoutput z.zoutpos l; - z.zneeded <- z.zneeded - l; - z.zoutpos <- z.zoutpos + l - -let add_char z c = - window_add_char z.zwindow c; - String.unsafe_set z.zoutput z.zoutpos c; - z.zneeded <- z.zneeded - 1; - z.zoutpos <- z.zoutpos + 1 - -let add_dist_one z n = - let c = window_get_last_char z.zwindow in - let s = String.make n c in - add_string z s 0 n - -let add_dist z d l = - add_string z z.zwindow.wbuffer (z.zwindow.wpos - d) l - -let rec apply_huffman z = function - | Found n -> n - | NeedBit (a,b) -> apply_huffman z (if get_bit z then b else a) - | NeedBits (n,t) -> apply_huffman z (Array.unsafe_get t (get_bits z n)) - -let inflate_lengths z a max = - let i = ref 0 in - let prev = ref 0 in - while !i < max do - match apply_huffman z z.zhuffman with - | n when n <= 15 -> - prev := n; - Array.unsafe_set a !i n; - incr i - | 16 -> - let n = 3 + get_bits z 2 in - if !i + n > max then error Invalid_data; - for k = 0 to n - 1 do - Array.unsafe_set a !i !prev; - incr i; - done; - | 17 -> - let n = 3 + get_bits z 3 in - i := !i + n; - if !i > max then error Invalid_data; - | 18 -> - let n = 11 + get_bits z 7 in - i := !i + n; - if !i > max then error Invalid_data; - | _ -> - error Invalid_data - done - -let rec inflate_loop z = - match z.zstate with - | Head -> - let cmf = IO.read_byte z.zinput in - let cm = cmf land 15 in - let cinfo = cmf lsr 4 in - if cm <> 8 || cinfo <> 7 then error Invalid_data; - let flg = IO.read_byte z.zinput in - (*let fcheck = flg land 31 in*) - let fdict = flg land 32 <> 0 in - (*let flevel = flg lsr 6 in*) - if (cmf lsl 8 + flg) mod 31 <> 0 then error Invalid_data; - if fdict then error Unsupported_dictionary; - z.zstate <- Block; - inflate_loop z - | Crc -> - let calc = window_checksum z.zwindow in - let crc = adler32_read z.zinput in - if calc <> crc then error Invalid_crc; - z.zstate <- Done; - inflate_loop z - | Done -> - () - | Block -> - z.zfinal <- get_bit z; - let btype = get_bits z 2 in - (match btype with - | 0 -> (* no compression *) - z.zlen <- IO.read_ui16 z.zinput; - let nlen = IO.read_ui16 z.zinput in - if nlen <> 0xffff - z.zlen then error Invalid_data; - z.zstate <- Flat; - inflate_loop z; - reset_bits z - | 1 -> (* fixed Huffman *) - z.zhuffman <- fixed_huffman; - z.zhuffdist <- None; - z.zstate <- CData; - inflate_loop z - | 2 -> (* dynamic Huffman *) - let hlit = get_bits z 5 + 257 in - let hdist = get_bits z 5 + 1 in - let hclen = get_bits z 4 + 4 in - for i = 0 to hclen - 1 do - Array.unsafe_set z.zlengths (Array.unsafe_get code_lengths_pos i) (get_bits z 3); - done; - for i = hclen to 18 do - Array.unsafe_set z.zlengths (Array.unsafe_get code_lengths_pos i) 0; - done; - z.zhuffman <- make_huffman z.zlengths 0 19 8; - let lengths = Array.make (hlit + hdist) 0 in - inflate_lengths z lengths (hlit + hdist); - z.zhuffdist <- Some (make_huffman lengths hlit hdist 16); - z.zhuffman <- make_huffman lengths 0 hlit 16; - z.zstate <- CData; - inflate_loop z - | _ -> - error Invalid_data) - | Flat -> - let rlen = min z.zlen z.zneeded in - let str = IO.nread z.zinput rlen in - let len = String.length str in - z.zlen <- z.zlen - len; - add_string z str 0 len; - if z.zlen = 0 then z.zstate <- (if z.zfinal then Crc else Block); - if z.zneeded > 0 then inflate_loop z - | DistOne -> - let len = min z.zlen z.zneeded in - add_dist_one z len; - z.zlen <- z.zlen - len; - if z.zlen = 0 then z.zstate <- CData; - if z.zneeded > 0 then inflate_loop z - | Dist -> - while z.zlen > 0 && z.zneeded > 0 do - let len = min z.zneeded (min z.zlen z.zdist) in - add_dist z z.zdist len; - z.zlen <- z.zlen - len; - done; - if z.zlen = 0 then z.zstate <- CData; - if z.zneeded > 0 then inflate_loop z - | CData -> - match apply_huffman z z.zhuffman with - | n when n < 256 -> - add_char z (Char.unsafe_chr n); - if z.zneeded > 0 then inflate_loop z - | 256 -> - z.zstate <- if z.zfinal then Crc else Block; - inflate_loop z - | n -> - let n = n - 257 in - let extra_bits = Array.unsafe_get len_extra_bits_tbl n in - if extra_bits = -1 then error Invalid_data; - z.zlen <- (Array.unsafe_get len_base_val_tbl n) + (get_bits z extra_bits); - let dist_code = (match z.zhuffdist with None -> get_rev_bits z 5 | Some h -> apply_huffman z h) in - let extra_bits = Array.unsafe_get dist_extra_bits_tbl dist_code in - if extra_bits = -1 then error Invalid_data; - z.zdist <- (Array.unsafe_get dist_base_val_tbl dist_code) + (get_bits z extra_bits); - if z.zdist > window_available z.zwindow then error Invalid_data; - z.zstate <- (if z.zdist = 1 then DistOne else Dist); - inflate_loop z - -let inflate_data z s pos len = - if pos < 0 || len < 0 || pos + len > String.length s then invalid_arg "inflate_data"; - z.zneeded <- len; - z.zoutpos <- pos; - z.zoutput <- s; - try - if len > 0 then inflate_loop z; - len - z.zneeded - with - IO.No_more_input -> error Truncated_data - -let inflate_init ?(header=true) ch = - { - zfinal = false; - zhuffman = fixed_huffman; - zhuffdist = None; - zlen = 0; - zdist = 0; - zstate = (if header then Head else Block); - zinput = ch; - zbits = 0; - znbits = 0; - zneeded = 0; - zoutput = ""; - zoutpos = 0; - zlengths = Array.make 19 (-1); - zwindow = window_create (1 lsl 15) - } - -let inflate ?(header=true) ch = - let z = inflate_init ~header ch in - let s = String.create 1 in - IO.create_in - ~read:(fun() -> - let l = inflate_data z s 0 1 in - if l = 1 then String.unsafe_get s 0 else raise IO.No_more_input - ) - ~input:(fun s p l -> - let n = inflate_data z s p l in - if n = 0 then raise IO.No_more_input; - n - ) - ~close:(fun () -> - IO.close_in ch - ) diff --git a/bundles/extlib/extlib-1.5.2/unzip.mli b/bundles/extlib/extlib-1.5.2/unzip.mli deleted file mode 100644 index 5a21cfc..0000000 --- a/bundles/extlib/extlib-1.5.2/unzip.mli +++ /dev/null @@ -1,45 +0,0 @@ -(* - * Unzip - inflate format decompression algorithm - * Copyright (C) 2004 Nicolas Cannasse - * Compliant with RFC 1950 and 1951 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version, - * with the special exception on linking described in file LICENSE. - * - * This library 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 GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - *) - -(** Decompression algorithm. - - Unzip decompression algorithm is compliant with RFC 1950 and 1951 which - are describing the "inflate" algorithm used in most popular file formats. - This format is also the one used by the popular ZLib library. -*) - -type error_msg = - | Invalid_huffman - | Invalid_data - | Invalid_crc - | Truncated_data - | Unsupported_dictionary - -exception Error of error_msg - -val inflate : ?header:bool -> IO.input -> IO.input -(** wrap an input using "inflate" decompression algorithm. raises [Error] if - an error occurs (this can only be caused by malformed input data). *) - -type t - -val inflate_init : ?header:bool -> IO.input -> t -val inflate_data : t -> string -> int -> int -> int diff --git a/bundles/extlib/hashtable-ocaml4-compat.patch b/bundles/extlib/hashtable-ocaml4-compat.patch new file mode 100644 index 0000000..c587f2b --- /dev/null +++ b/bundles/extlib/hashtable-ocaml4-compat.patch @@ -0,0 +1,12 @@ +Revision 396 from the official extlib repository. + +--- extlib/extHashtbl.ml (revision 395) ++++ extlib/extHashtbl.ml (working copy) +@@ -32,6 +32,7 @@ + } + + include Hashtbl ++ let create n = Hashtbl.create (* no seed *) n + + external h_conv : ('a, 'b) t -> ('a, 'b) h_t = "%identity" + external h_make : ('a, 'b) h_t -> ('a, 'b) t = "%identity" \ No newline at end of file diff --git a/bundles/menhirLib/Makefile b/bundles/menhirLib/Makefile index b174c61..f620585 100644 --- a/bundles/menhirLib/Makefile +++ b/bundles/menhirLib/Makefile @@ -9,16 +9,16 @@ ifneq ($(MAKECMDGOALS),distclean) include ../../Makefile.config endif -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g VERSION=20120123 MENHIRDIR=menhir-$(VERSION) MENHIRLIB=$(MENHIRDIR)/src MENHIRMARKER=$(MENHIRLIB)/.marker -OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -I $(MENHIRLIB) -thread -OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -I $(MENHIRLIB) -thread +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -I $(MENHIRLIB) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -I $(MENHIRLIB) OCAMLDEP_CMD=$(OCAMLDEP) -I $(MENHIRLIB) all: .depend diff --git a/bundles/pcre/Makefile b/bundles/pcre/Makefile index d797d7a..a991a4a 100644 --- a/bundles/pcre/Makefile +++ b/bundles/pcre/Makefile @@ -5,16 +5,16 @@ ifneq ($(MAKECMDGOALS),distclean) include ../../Makefile.config endif -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g # note: the extra linker flags are needed so that the produced shared # library gets dynamically linked to libpcre. EXTRACFLAGS=$(PCRE_CFLAGS:%=-ccopt %) $(PCRE_LIBS:%=-ccopt %) EXTRALNKFLAGS=$(PCRE_LIBS:%=-ldopt %) -OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -thread $(EXTRACFLAGS) -cc "${CC} ${CFLAGS}" -OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -thread $(EXTRACFLAGS) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(EXTRACFLAGS) -cc "${CC} ${CFLAGS}" +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(EXTRACFLAGS) OCAMLMKLIB_CMD=$(OCAMLMKLIB) $(EXTRALNKFLAGS) PCRE_VERSION=6.2.5 diff --git a/bundles/pycaml/Makefile b/bundles/pycaml/Makefile index 9c5825a..e3f75a5 100644 --- a/bundles/pycaml/Makefile +++ b/bundles/pycaml/Makefile @@ -2,8 +2,8 @@ ifneq ($(MAKECMDGOALS),distclean) include ../../Makefile.config endif -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g PYCAMLDIR=chemoelectric-pycaml-8614105 PYCAMLFILE=$(PYCAMLDIR).tar.gz @@ -16,8 +16,8 @@ EXTRALNKFLAGS=$(PYTHON_LIBS:%=-ldopt %) export PYMAJOR=$(shell echo ${PYTHON_VERSION} | sed -e 's/\..*//') OCAMLFLAGS = -pp "camlp4o -parser Camlp4MacroParser -D PYMAJOR${PYMAJOR}" -OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(OCAMLFLAGS) -g -thread $(EXTRACFLAGS) -cc "${CC} ${CFLAGS}" -I $(PYCAMLDIR) -OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(OCAMLFLAGS) -g -thread $(EXTRACFLAGS) -I $(PYCAMLDIR) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(OCAMLFLAGS) -g $(EXTRACFLAGS) -cc "${CC} ${CFLAGS}" -I $(PYCAMLDIR) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(OCAMLFLAGS) -g $(EXTRACFLAGS) -I $(PYCAMLDIR) OCAMLMKLIB_CMD=$(OCAMLMKLIB) -linkall $(EXTRALNKFLAGS) OCAMLDEP_CMD=$(OCAMLDEP) $(OCAMLFLAGS) diff --git a/bundles/sexplib/Makefile b/bundles/sexplib/Makefile index 1db3885..e8ad53a 100644 --- a/bundles/sexplib/Makefile +++ b/bundles/sexplib/Makefile @@ -13,8 +13,8 @@ ifneq ($(MAKECMDGOALS),distclean) include ../../Makefile.config endif -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g VERSION=7.0.5 SEXPDIR=sexplib-$(VERSION) @@ -22,8 +22,8 @@ SEXPLIB=$(SEXPDIR)/lib SEXPMARKER=$(SEXPDIR)/.marker PP_CMD=$(CPP) -x c -w -traditional -undef -OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -I $(SEXPLIB) -thread -pp "${PP_CMD}" -OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -I $(SEXPLIB) -thread -pp "${PP_CMD}" +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -I $(SEXPLIB) -pp "${PP_CMD}" +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -I $(SEXPLIB) -pp "${PP_CMD}" OCAMLDEP_CMD=$(OCAMLDEP) -I $(SEXPLIB) -pp "${PP_CMD}" all: .depend diff --git a/bundles/sexplib/sexplib-7.0.5/.hg_archival.txt b/bundles/sexplib/sexplib-7.0.5/.hg_archival.txt deleted file mode 100644 index ea0694d..0000000 --- a/bundles/sexplib/sexplib-7.0.5/.hg_archival.txt +++ /dev/null @@ -1,4 +0,0 @@ -repo: 3f3ede295629c1705d0d9cacc5eb2987690a5e09 -node: 66fbcdf675878b902292050afc697ac5ed26bee0 -branch: default -tag: forge-release-7.0.5 diff --git a/bundles/sexplib/sexplib-7.0.5/.marker b/bundles/sexplib/sexplib-7.0.5/.marker deleted file mode 100644 index e69de29..0000000 diff --git a/bundles/sexplib/sexplib-7.0.5/COPYRIGHT b/bundles/sexplib/sexplib-7.0.5/COPYRIGHT deleted file mode 100644 index 49c4471..0000000 --- a/bundles/sexplib/sexplib-7.0.5/COPYRIGHT +++ /dev/null @@ -1,19 +0,0 @@ -Most of this library was written by: - - Markus Mottl - -This work is derived from the library "Tywith", version 0.45. The library -"Tywith" was written and is distributed by: - - Martin Sandin - -The original license of "Tywith" can be found in the file -"LICENSE.Tywith". Files that were derived from "Tywith" contain a -reference to the original author. - -The following company has sponsored and has copyright in part of this work: - - Jane Street Holding, LLC - 1 New York Plaza, 33rd Floor - New York, NY 10004 - USA diff --git a/bundles/sexplib/sexplib-7.0.5/Changelog b/bundles/sexplib/sexplib-7.0.5/Changelog deleted file mode 100644 index f18be0e..0000000 --- a/bundles/sexplib/sexplib-7.0.5/Changelog +++ /dev/null @@ -1,254 +0,0 @@ -2012-03-20: Updated to latest Oasis release and a package dependency to - type_conv. - -2011-09-18: Improved documentation. - -2011-09-15: Fixes to improve package dependency resolution. - -2011-07-05: Fixed a parser position bug. Parser positions passed by the user - were not updated correctly. - - Internal code beautification. - -2011-07-04: Internal updates to sync with Jane Street. - -2011-01-30: Fixed a code generation bug with toplevel entries. - - Thanks to Yong Lu for the report! - -2010-12-27: Added support for MoreLabels.Hashtbl and improved reporting of - error locations with preprocessor. - -2010-12-26: Worked around a compiler bug that is expected to be fixed in - OCaml 3.12.1. This workaround temporarily removes the interface - for module Conv (conv.mli), thus exposing the internals. - This should not cause any problems for end users as long as - they do not depend on the exported internal representations. - The interface will become constrained again as soon as the - fixed compiler is out. - -2010-12-22: Major release. - - Merged with Jane Street version. This has caused an API-change - that requires "open Sexplib.Conv" at the top of files that use the - syntax extension. - - Renamed functions: - - * sexp_of_lazy -> sexp_of_lazy_t - * lazy_of_sexp -> lazy_t_of_sexp - - Some standard library modules are now re-exported with predefined - S-expression converters in module Conv. - -2010-09-25: Fixed inferred types of generated functions when dealing with arrow - types. - -2010-08-26: Fixed a lexer bug when parsing comments. - -2010-05-21: Added support for sexp_bool record field annotations. - -2010-05-18: Improved performance of converting S-expressions to strings. - -2010-04-12: Changed API of Of_sexp_error exception. - -2010-04-07: Added of_(big)string_conv_exn functions. - -2010-04-01: Merged with Jane Street version. - - Major new features (various functions): - - * Type-annotated parsing for better error messages - * Greatly improved performance of exception converters - -2009-12-21: Improved saving of files. - -2009-10-12: Added sexp_array record field extension. - -2009-09-19: Added missing variant type cases. - - Fixed handling of variance annotations. - -2009-09-15: Internal cleanups. - -2009-07-28: Added better support for conversion of exception types. - -2009-06-23: Fixed build problem. - - Thanks to Sylvain Le Gall for - the patch! - -2009-05-08: Fixed build problems on Windows and OCamlMakefile issues. - - Thanks to Sylvain Le Gall for - the patch! - -2009-04-22: Added macro support for all types of vectors, matrices, - and for bigstrings. - -2009-04-21: Merged with Jane Street version, no user-relevant changes. - -2009-03-09: Merged with Jane Street version, no user-relevant changes. - -2009-03-01: Fixed build problem on Mac OS X by updating OCamlMakefile. - -2009-01-20: Automatically add S-expression pretty-printers to toplevels. - -2008-09-30: Added a new feature: sexp_opaque. It prevents the need for / - use of type converters for a given type in a particular - type context. - - Removed abstract types to unify them with this new concept. - -2008-09-29: Added a new feature: sexp_list. This is similar to - the handling of sexp_option. By default an empty list is - assumed for unspecified records using sexp_list as qualifier. - Such record fields bound to empty lists will also not be - printed anymore for better readability. - -2008-09-23: Added missing Not_found-exception to standard exception - converters. - -2008-08-20: Removed dependency on threads. Fixed build problems. - -2008-08-08: Nifty new feature: exceptions can now be converted to - S-expressions, too! The "with sexp" syntax extension can be - used with exceptions, thus registering a conversion function. - A global exception conversion function can then be called - to convert an arbitrary exception into an S-expression, - which can then be printed out. This should greatly - improve readability of uncaught exceptions while making - life extremely easy for the developer. - - Renamed the ParseError exception to Parse_error to be more - compliant with Jane Street naming conventions. - -2008-07-25: Added utilities for conversion error handling. Minor fixes. - -2008-04-24: Made Sexp-interface manifest. - -2008-03-20: Fixed META-file (missing num dependency). - -2008-03-17: Improved META-file. - -2008-03-13: Fully allow function types in converters. Raise runtime - exceptions on converting from S-expressions instead when - function type encountered. - -2008-02-11: Fixed code generation problems with variance annotations - in signatures, and empty types. - -2007-12-17: Added support for generating signature entries for - S-expression converters. Thanks to Till Varoquaux - for the patch! - -2007-11-29: Added support for converting big_int, nat, num, and ratio. - -2007-11-26: Added support for parsing from bigstrings (char bigarrays). - -2007-11-02: Added syntax support for option types to use the ordinary - sum type syntax. This should improve readability. - The old syntax will be accepted, too, if - Conv.read_old_option_format is set to true (this is - currently the default). The old format will be used for - writing if Conv.write_old_option_format is true (currently - the default). The old syntax is deprecated and will - probably not be supported by default in the near future. - Reading new-style option values will always succeed. - -2007-09-14: Fixed bug in S-expression preprocessor concerning record - field names. - -2007-08-06: Added support for converting functions to S-expressions. - -2007-07-20: Fixed position information and improved speed of S-expression - parser. Fixed S-expression macro bug concerning contained - polymorphic variants. - -2007-06-28: Improved Sexplib code generation. - -2007-06-22: Fixed escaping bug in S-expression parser. - -2007-06-01: Added correct handling of recursive types + test case. - -2007-04-18: Added missing conversion functions from S-expressions to - pairs and triples. - -2007-03-21: Updated OCamlMakefile. - -2007-03-02: Improved error messages when parsing illegal type definitions. - -2007-01-30: Added triple conversions. - -2006-11-22: Updated OCamlMakefile. - -2006-10-13: Improved checking of records for extra or duplicate fields. - -2006-09-06: Added support for polymorphic record fields. - -2006-09-05: Added support for manifest types. - -2006-08-16: Improved error messages. - -2006-07-28: Added a new, hand-written S-expression parser that supports - partial parsing and should be approx. 10x faster than the - previous one. - -2006-06-20: Fixed a code generation problem leading to compilation - errors concerning the use of type aliases within polymorphic - variant type definitions. - - This fix also solves potential erroneous appearances of - backtracking exceptions in user code. - -2006-03-21: Added -for-pack option to Makefile and cleaned up - distribution for a new public release. - -2006-03-13: Sexplib now accepts capitalized booleans. - -2006-03-03: Added customizable indentation levels. - Improved documentation. - Fixed API-problem concerning backward compatibility. - -2006-03-03: Added customizable indentation levels. - Improved documentation. - -2006-03-01: Added a missing flush for string conversions with a buffer. - -2006-02-08: Eliminated unused variable warnings in Sexplib-generated code. - -2006-01-11: Added functions for pretty-printing to buffers. Improved - performance of outputting S-expressions to channels. - -2006-01-09: Added functions load_sexp and load_sexps. - -2006-01-04: Changed float conversion from %E to %G (more readable). - -2005-12-28: Made machine representation for S-expressions more compact - -2005-12-15: Fixed a problem appearing with OCaml-release 3.08.4: CamlP4 - obviously performs more strict checking on some constructs - now and crashed with an exception when generating - S-expression code for records containing only one field - ("singleton tuple problem"). This problem is fixed now. - -2005-11-25: Fixed problem with type variables that could not be generalized. - -2005-11-23: Added a missing case in type definitions (path alias) - -2005-11-17: Major release: 2.0 - - Fixed a major design problem. The user now has to pass lex - buffers instead of channels to input-functions. Reason: - trailing characters in channels were lost due to ocamllex - buffering them in the non-exposed lex buffer. This lex - buffer is now exposed. The functions have been renamed - ("input_X" -> "scan_X") to reflect this change. - -2005-11-16: Added label to conversion function "input_cnv_sexps". - -2005-11-11: Fixed a bug in the pretty-printer: strings in atoms were - not escaped in the function "to_string_mach" (and therefore - also "to_string"). - -2005-11-07: Initial release. diff --git a/bundles/sexplib/sexplib-7.0.5/INSTALL b/bundles/sexplib/sexplib-7.0.5/INSTALL deleted file mode 100644 index 02dde66..0000000 --- a/bundles/sexplib/sexplib-7.0.5/INSTALL +++ /dev/null @@ -1,37 +0,0 @@ -(* OASIS_START *) -(* DO NOT EDIT (digest: b4b9b34e94dfc4c6914f87aae494ed32) *) -This is the INSTALL file for the sexplib distribution. - -This package uses OASIS to generate its build system. See section OASIS for -full information. - -Dependencies -============ - -In order to compile this package, you will need: -* ocaml (>= 3.12) for all, test conv, test sexp, doc sexplib -* findlib -* type_conv (>= 3.0.5) for library pa_sexp_conv - -Installing -========== - -1. Uncompress the source archive and go to the root of the package -2. Run 'ocaml setup.ml -configure' -3. Run 'ocaml setup.ml -build' -4. Run 'ocaml setup.ml -install' - -Uninstalling -============ - -1. Go to the root of the package -2. Run 'ocaml setup.ml -uninstall' - -OASIS -===== - -OASIS is a program that generates a setup.ml file using a simple '_oasis' -configuration file. The generated setup only depends on the standard OCaml -installation: no additional library is required. - -(* OASIS_STOP *) diff --git a/bundles/sexplib/sexplib-7.0.5/LICENSE b/bundles/sexplib/sexplib-7.0.5/LICENSE deleted file mode 100644 index 67b72ca..0000000 --- a/bundles/sexplib/sexplib-7.0.5/LICENSE +++ /dev/null @@ -1,520 +0,0 @@ -The Library is distributed under the terms of the GNU Lesser General -Public License version 2.1 (included below). - -As a special exception to the GNU Lesser General Public License, you -may link, statically or dynamically, a "work that uses the Library" -with a publicly distributed version of the Library to produce an -executable file containing portions of the Library, and distribute that -executable file under terms of your choice, without any of the additional -requirements listed in clause 6 of the GNU Lesser General Public License. -By "a publicly distributed version of the Library", we mean either the -unmodified Library as distributed by the authors, or a modified version -of the Library that is distributed under the conditions defined in clause -3 of the GNU Lesser General Public License. This exception does not -however invalidate any other reasons why the executable file might be -covered by the GNU Lesser General Public License. - ---------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/bundles/sexplib/sexplib-7.0.5/LICENSE.Tywith b/bundles/sexplib/sexplib-7.0.5/LICENSE.Tywith deleted file mode 100644 index 6a82ee3..0000000 --- a/bundles/sexplib/sexplib-7.0.5/LICENSE.Tywith +++ /dev/null @@ -1,26 +0,0 @@ ---------------------------------------------------------------------------- -Copyright (c) 2004 Martin Sandin -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------- diff --git a/bundles/sexplib/sexplib-7.0.5/Makefile b/bundles/sexplib/sexplib-7.0.5/Makefile deleted file mode 100644 index 68f2e0e..0000000 --- a/bundles/sexplib/sexplib-7.0.5/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# OASIS_START -# DO NOT EDIT (digest: bc1e05bfc8b39b664f29dae8dbd3ebbb) - -SETUP = ocaml setup.ml - -build: setup.data - $(SETUP) -build $(BUILDFLAGS) - -doc: setup.data build - $(SETUP) -doc $(DOCFLAGS) - -test: setup.data build - $(SETUP) -test $(TESTFLAGS) - -all: - $(SETUP) -all $(ALLFLAGS) - -install: setup.data - $(SETUP) -install $(INSTALLFLAGS) - -uninstall: setup.data - $(SETUP) -uninstall $(UNINSTALLFLAGS) - -reinstall: setup.data - $(SETUP) -reinstall $(REINSTALLFLAGS) - -clean: - $(SETUP) -clean $(CLEANFLAGS) - -distclean: - $(SETUP) -distclean $(DISTCLEANFLAGS) - -setup.data: - $(SETUP) -configure $(CONFIGUREFLAGS) - -.PHONY: build doc test all install uninstall reinstall clean distclean configure - -# OASIS_STOP diff --git a/bundles/sexplib/sexplib-7.0.5/README.txt b/bundles/sexplib/sexplib-7.0.5/README.txt deleted file mode 100644 index 17c02c0..0000000 --- a/bundles/sexplib/sexplib-7.0.5/README.txt +++ /dev/null @@ -1,457 +0,0 @@ - - - README: library "Sexplib" - ************************* - Copyright (C) 2012 Jane Street Holding, LLC (1) - ===================================================== - Author: Markus Mottl - ====================== - New York, 2012-03-20 - ==================== - - -1 Directory contents -*=*=*=*=*=*=*=*=*=*=* - - - - ------------------------------------------------------------------------ - | CHANGES | History of code changes | - ------------------------------------------------------------------------ - | COPYRIGHT | Notes on copyright | - ------------------------------------------------------------------------ - | INSTALL | Short notes on compiling and | - | | installing the library | - ------------------------------------------------------------------------ - | LICENSE | "GNU LESSER GENERAL PUBLIC LICENSE" | - ------------------------------------------------------------------------ - | LICENSE.Tywith | License of Tywith, from which Sexplib is derived| - ------------------------------------------------------------------------ - | Makefile | Top Makefile | - ------------------------------------------------------------------------ - | OCamlMakefile | Generic Makefile for OCaml-projects | - ------------------------------------------------------------------------ - | OMakefile | Ignore this file | - ------------------------------------------------------------------------ - | README.txt | This file | - ------------------------------------------------------------------------ - | lib/ | OCaml-library for S-expression conversions | - ------------------------------------------------------------------------ - | lib_test/ | Test applications for the Sexplib-library | - ------------------------------------------------------------------------ - - - - -2 What is "Sexplib"? -*=*=*=*=*=*=*=*=*=*=* - - - This library contains functionality for parsing and pretty-printing -S-expressions. In addition to that it contains a preprocessing module for -Camlp4, which can be used to automatically generate code from type definitions -for efficiently converting OCaml-values to S-expressions and vice versa. In -combination with the parsing and pretty-printing functionality this frees -users from having to write their own I/O-routines for datastructures they -define. Possible errors during automatic conversions from S-expressions to -OCaml-values are reported in human-readable ways with exact location -information. Another module in this library allows you to extract and replace -sub-expressions in S-expressions. - - -3 How can you use it? -*=*=*=*=*=*=*=*=*=*=*= - - - Make sure you have installed the 'type_conv' package on your system, too. It -should be obtainable at the same site as 'sexplib'. - - The API (.mli-files) in the 'sexplib' library directory is fully documented. -Module 'Sexp' contains all I/O-functions for S-expressions, module 'Conv' -helper functions for converting OCaml-values of standard types to -S-expressions. Module 'Path' supports sub-expression extraction and -substitution. - - Module 'pa_sexp_conv.ml' contains the extensions for the -Camlp4-preprocessor. It adds the new construct 'with sexp' (and 'with sexp_of' -and 'with of_sexp', which are implied by the first). When using this construct -right after a type definition, function definitions will be generated -automatically, which perform S-expression conversions. - - E.g. given the following type definition: -<< type t = A | B - with sexp ->> - - The above will generate the functions 'sexp_of_t' and 't_of_sexp'. The -preprocessor also supports automatic addition of conversion functions to -signatures. Just add 'with sexp' to the type in a signature, and the -appropriate function signatures will be generated. - - Converters for standard types (int, list, Hashtbl.t, etc.) become visible to -the macro-generated code by opening the standard module before their first use -in a type definition. Users will therefore usually want to place the following -at the top of their files: -<< open Sexplib.Std ->> - - See the file 'lib_test/conv_test.ml' for example usage. It also demonstrates -how to extract and substitute sub-expressions. - - -3.1 Compiling and linking -========================== - - To compile a file you will have to add a preprocessing flag to the compiler -invocation, e.g. for foo.ml: -<< ocamlc -pp "camlp4o -I {path to type_conv} \ - -I {path to sexplib} pa_type_conv.cmo pa_sexp_conv.cmo" \ - -I {path to sexplib} foo.ml ->> - - If you are using OCamlMakefile, just put the following line at the top of -the file, assuming you have installed both 'type_conv' and 'sexplib' with -ocamlfind. The comment must start at the beginning of the line, and you must -not break lines (here broken for readability only): -<< (*pp camlp4o -I `ocamlfind query type_conv` \ - -I `ocamlfind query sexplib` \ - pa_type_conv.cmo pa_sexp_conv.cmo *) ->> - - Don't forget to place the macro 'TYPE_CONV_PATH', which takes a string -argument, at the top of the file to be preprocessed (see example -'conv_test.ml'). It is supposed to set the module path to the given module -file. This is necessary, because modules may get packed at a later stage, and -error messages generated by Sexplib will refer to this location to help -pinpointing the associated type. - - In the linking stage you will only have to link with 'sexplib'. E.g. when -using OCamlMakefile just add it to the 'PACKS'-variable. - - -4 Syntax Specification of S-expressions -*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= - - - - -4.1 Lexical conventions of S-expression -======================================== - - Whitespace, which consists of space, newline, carriage return, horizontal -tab and form feed, is ignored unless within an OCaml-string, where it is -treated according to OCaml-conventions. The semicolon introduces comments. -Comments are ignored, and range up to the next newline character. The left -parenthesis opens a new list, the right parenthesis closes it again. Lists can -be empty. The double quote denotes the beginning and end of a string following -the lexical conventions of OCaml (see OCaml-manual for details). All -characters other than double quotes, left- and right parentheses, and -whitespace are considered part of a contiguous string. - - -4.2 Grammar of S-expressions -============================= - - S-expressions are either strings (= atoms) or lists. The lists can -recursively contain further S-expressions or be empty, and must be balanced, -i.e. parentheses must match. - - -4.3 Examples -============= - -<< this_is_an_atom_123'&^%! ; this is a comment - "another atom in an OCaml-string \"string in a string\" \123" - - ; empty list follows below - () - - ; a more complex example - ( - ( - list in a list ; comment within a list - (list in a list in a list) - 42 is the answer to all questions - ) - ) ->> - - - -4.4 Conversion of basic OCaml-values -===================================== - - Basic OCaml-values like the unit-value, integers (in all representations), -floats, strings, and booleans are represented in S-exp syntax in the same way -as in OCaml. Strings may also appear without quotes if this does not clash -with the lexical conventions for S-expressions. - - -4.5 Conversion of OCaml-tuples -=============================== - - OCaml-tuples are simple lists of values in the same order as in the tuple. -E.g.: -<< (3.14, "foo", "bar bla", 27) <===> (3.14 foo "bar bla" 27) ->> - - - -4.6 Conversion of OCaml-records -================================ - - OCaml-records are represented as lists of pairs in S-expression syntax. Each -pair consists of the name of the record field (first element), and its value -(second element). E.g.: -<< { - foo = 3; - bar = "some string"; - } - - <===> - - ( - (foo 3) - (bar "some string") - ) ->> - - Type specifications of records allow the use of a special type 'sexp_option' -which indicates that a record field should be optional. E.g.: -<< type t = - { - x : int option; - y : int sexp_option; - } ->> - - The type 'sexp_option' is equivalent to ordinary options, but is treated -specially by the code generator. The above would lead to the following -equivalences of values and S-expressions: -<< { - x = Some 1; - y = Some 2; - } - - <===> - - ( - (x (some 1)) - (y 2) - ) ->> - - And: -<< { - x = None; - y = None; - } - - <===> - - ( - (x none) - ) ->> - - Note how 'sexp_option' allows you to leave away record fields that should -default to 'None'. It is also unnecessary (and actually wrong) now to write -down such a value as an option, i.e. the 'some'-tag must be dropped if the -field should be defined. - - The types 'sexp_list', 'sexp_array', and 'sexp_bool' can be used in ways -similar to the type 'sexp_option'. They assume the empty list, empty array, -and false value respectively as default values. - - -4.7 Conversion of sum types -============================ - - Constant constructors in sum types are represented as strings. Constructors -with arguments are represented as lists, the first element being the -constructor name, the rest being its arguments. Constructors may also be -started in lowercase in S-expressions, but will always be converted to -uppercase when converting from OCaml-values. - - For example: -<< type t = A | B of int * float * t with sexp - - B (42, 3.14, B (-1, 2.72, A)) <===> (B 42 3.14 (B -1 2.72 A)) ->> - - The above example also demonstrates recursion in datastructures. - - -4.8 Conversion of variant types -================================ - - The conversion of polymorphic variants is almost the same as with sum types. -The notable difference is that variant constructors must always start with an -either lower- or uppercase character, matching the way it was specified in the -type definition. This is because OCaml also distinguishes between upper- and -lowercase variant constructors. Note that type specifications containing -unions of variant types are also supported by the S-expression converter. - - -4.9 Conversion of OCaml-lists and arrays -========================================= - - OCaml-lists and arrays are straightforwardly represented as S-expression -lists. - - -4.10 Conversion of option types -================================ - - The option type is converted like ordinary polymorphic sum types, i.e.: -<< None <===> none - Some value <===> (some value) ->> - - There is a deprecated version of the syntax in which values of option type -are represented as lists in S-expressions: -<< None <===> () - Some value <===> (value) ->> - - Reading of the old-style S-expression syntax for option values is only -supported if the reference 'Conv.read_old_option_format' is set to 'true' -(currently the default, which may change soon). A conversion exception is -raised otherwise. The old format will be written only if -'Conv.write_old_option_format' is true (also currently the default). Reading -of the new format is always supported. - - -4.11 Conversion of polymorphic values -====================================== - - There is nothing special about polymorphic values as long as there are -conversion functions for the type parameters. E.g.: -<< type 'a t = A | B of 'a with sexp - type foo = int t with sexp ->> - - In the above case the conversion functions will behave as if 'foo' had been -defined as a monomorphic version of 't' with ''a' replaced by 'int' on the -right hand side. - - If a datastructure is indeed polymorphic, and you want to convert it, you -will have to supply the conversion functions for the type parameters at -runtime. E.g. in the above example, if you wanted to convert a value of type -''a t', you would have to write something like this: -<< sexp_of_t sexp_of_a v ->> - - where 'sexp_of_a', which may also be named differently in this particular -case, is a function that converts values of type ''a' to an S-expression. -Types with more than one parameter require passing conversion functions for -those parameters in the order of their appearance on the left hand side of the -type definition. - - -4.12 Conversion of abstract datatypes -====================================== - - Of course, if you want to convert an abstract datatype to an S-expression, -you will have to roll your own conversion function, which should produce -values of type 'Sexp.t' directly. If, however, you want to make use of your -abstract type within definitions of other types, make sure that you call your -conversion function appropriately: it should be in the same scope as the -typename, and must be named 'sexp_of_{typename}'. - - -4.13 Conversion of hashtables -============================== - - Hashtables, which are abstract values in OCaml, are represented as -association lists, i.e. lists of key-value pairs, e.g.: -<< ((foo 42) (bar 3)) ->> - - Reading in the above S-expression as hashtable mapping strings to integers -('(string, int) Hashtbl.t') will map '"foo"' to 42 and '"bar"' to 3. - - Note that the order of elements in the list may matter, because duplicates -are kept: bindings will be inserted into the hashtable in order of appearence. -Therefore, the last binding of a key will be the "visible" one, the others are -"hidden". See the OCaml-documentation on hashtables for details. - - Note, too, that polymorphic equality may not hold between conversions. You -will have to use a function implementing logical equality for that purpose. - - -4.14 Conversion of opaque values -================================= - - Opaque values are ones for which we do not want to perform conversions. This -may be, because we do not have S-expression converters for them, or because we -do not want to apply them in a particular type context, e.g. if the resulting -S-expression should be printed out but without superfluous information. To -prevent the preprocessor from generating calls to converters, simply apply the -qualifier 'sexp_opaque' as if it were a type constructor, e.g.: -<< type foo = int * stuff sexp_opaque with sexp ->> - - Thus, there is no need to specify converters for type 'stuff', and if there -are any, they will not be used in this particular context. Needless to say, it -is not possible to convert such an S-expression back to the original value. -Here is an example conversion: -<< (42, some_stuff) ===> (42, ) ->> - - - -4.15 Conversion of exceptions -============================== - - S-expression converters for exceptions can be automatically registered using -the 'with sexp' macro, e.g.: -<< module M = struct - exception Foo of int with sexp - end ->> - - Such exceptions will be translated in a similar way as sum types, but their -constructor will be prefixed with the fully qualified module path (here: -'M.Foo') so as to be able to discriminate between them without problems. - The user can then easily convert an exception matching the above one to an -S-expression using 'Sexplib.Conv.sexp_of_exn'. User-defined conversion -functions can be registered, too, by calling 'Sexplib.Conv.add_exn_converter'. -This should make it very convenient for users to catch arbitrary exceptions -escaping their program and pretty-printing them, including all arguments, as -S-expressions. The library already contains mappings for all known exceptions -that can escape functions in the OCaml standard library. - - -5 I/O and type conversions -*=*=*=*=*=*=*=*=*=*=*=*=*=* - - - There are multiple ways of performing I/O with S-expressions. If exact error -locations are required when type conversions fail, S-expressions need to be -parsed with location annotations. In most cases users may want to use -functions like e.g. 'load_sexp_conv' or 'load_sexp_conv_exn', which load -S-expressions from files and convert them. Only when conversions fail, the -file will be reparsed with annotations, which is slower, and type errors will -be reported accurately with file, line number, column, and file position. - - -6 Contact information -*=*=*=*=*=*=*=*=*=*=*= - - - In the case of bugs, feature requests and similar, you can contact us here: - opensource@janestreet.com - Up-to-date information concerning this library should be available here: - http://www.janestreet.com/ocaml - Enjoy!! - ------------------------------------------------------------------------------ - - This document was translated from LaTeX by HeVeA (2). --------------------------------------- - - - (1) http://www.janestreet.com - - (2) http://hevea.inria.fr/index.html diff --git a/bundles/sexplib/sexplib-7.0.5/_oasis b/bundles/sexplib/sexplib-7.0.5/_oasis deleted file mode 100644 index b0a1400..0000000 --- a/bundles/sexplib/sexplib-7.0.5/_oasis +++ /dev/null @@ -1,84 +0,0 @@ -OASISFormat: 0.3 -OCamlVersion: >= 3.12 -Name: sexplib -Version: 7.0.5 -Synopsis: automated S-expression conversion -Authors: Markus Mottl, - Martin Sandin -Copyrights: (C) 2005-2011 Jane Street Capital LLC -License: LGPL-2.1 with OCaml linking exception -LicenseFile: LICENSE -Plugins: StdFiles (0.3), - DevFiles (0.3), - META (0.3) -BuildTools: ocamlbuild, camlp4o -XStdFilesAUTHORS: false -XStdFilesINSTALLFilename: INSTALL -XStdFilesREADME: false - -Library sexplib - Path: lib - Pack: true - Modules: Type, - Parser, - Lexer, - Pre_sexp, - Sexp_intf, - Sexp, - Path, - Conv, - Conv_error, - Exn_magic, - Std - BuildDepends: unix,bigarray,num - XMETARequires: unix,bigarray,num - -Library pa_sexp_conv - Path: syntax - FindlibName: syntax - FindlibParent: sexplib - Modules: Pa_sexp_conv - BuildDepends: camlp4.quotations,camlp4.extend,type_conv (>= 3.0.5) - CompiledObject: byte - XMETAType: syntax - XMETARequires: type_conv,sexplib - XMETADescription: Syntax extension for Sexplib - -Library sexplib_top - Path: top - FindlibName: top - FindlibParent: sexplib - Modules: Install_printers - XMETARequires: sexplib - XMETADescription: Toplevel printers for S-expressions - -Executable sexp_test - Path: lib_test - MainIs: sexp_test.ml - Build$: flag(tests) - Install: false - BuildDepends: sexplib - -Executable conv_test - Path: lib_test - MainIs: conv_test.ml - Build$: flag(tests) - Install: false - BuildDepends: sexplib, sexplib.syntax - -Test sexp - Run$: flag(tests) - Command: $sexp_test < test.sexp - WorkingDirectory: lib_test - -Test conv - Run$: flag(tests) - Command: $conv_test - WorkingDirectory: lib_test - -Document "sexplib" - Title: API reference for sexplib - Type: ocamlbuild (0.3) - BuildTools+: ocamldoc - XOCamlbuildPath: lib - XOCamlbuildLibraries: sexplib diff --git a/bundles/sexplib/sexplib-7.0.5/_tags b/bundles/sexplib/sexplib-7.0.5/_tags deleted file mode 100644 index 0c03080..0000000 --- a/bundles/sexplib/sexplib-7.0.5/_tags +++ /dev/null @@ -1,68 +0,0 @@ -# OASIS_START -# DO NOT EDIT (digest: a1d81a7e4d410a35183ff1a62ca59486) -# Ignore VCS directories, you can use the same kind of rule outside -# OASIS_START/STOP if you want to exclude directories that contains -# useless stuff for the build process -<**/.svn>: -traverse -<**/.svn>: not_hygienic -".bzr": -traverse -".bzr": not_hygienic -".hg": -traverse -".hg": not_hygienic -".git": -traverse -".git": not_hygienic -"_darcs": -traverse -"_darcs": not_hygienic -# Library sexplib -"lib": include -"lib/type.cmx": for-pack(Sexplib) -"lib/parser.cmx": for-pack(Sexplib) -"lib/lexer.cmx": for-pack(Sexplib) -"lib/pre_sexp.cmx": for-pack(Sexplib) -"lib/sexp_intf.cmx": for-pack(Sexplib) -"lib/sexp.cmx": for-pack(Sexplib) -"lib/path.cmx": for-pack(Sexplib) -"lib/conv.cmx": for-pack(Sexplib) -"lib/conv_error.cmx": for-pack(Sexplib) -"lib/exn_magic.cmx": for-pack(Sexplib) -"lib/std.cmx": for-pack(Sexplib) -: pkg_unix -: pkg_num -: pkg_bigarray -# Library pa_sexp_conv -"syntax": include -: pkg_type_conv -: pkg_camlp4.quotations -: pkg_camlp4.extend -# Executable conv_test -"lib_test/conv_test.byte": use_pa_sexp_conv -"lib_test/conv_test.byte": use_sexplib -"lib_test/conv_test.byte": pkg_unix -"lib_test/conv_test.byte": pkg_type_conv -"lib_test/conv_test.byte": pkg_num -"lib_test/conv_test.byte": pkg_camlp4.quotations -"lib_test/conv_test.byte": pkg_camlp4.extend -"lib_test/conv_test.byte": pkg_bigarray -: use_pa_sexp_conv -: pkg_type_conv -: pkg_camlp4.quotations -: pkg_camlp4.extend -# Library sexplib_top -"top": include -# Executable sexp_test -"lib_test/sexp_test.byte": use_sexplib -"lib_test/sexp_test.byte": pkg_unix -"lib_test/sexp_test.byte": pkg_num -"lib_test/sexp_test.byte": pkg_bigarray -: use_sexplib -: pkg_unix -: pkg_num -: pkg_bigarray -# OASIS_STOP -: syntax_camlp4o -:pp(cpp -traditional -undef) - -"lib_test/conv_test.ml": syntax_camlp4o, pkg_type_conv.syntax -# Remove this line, once BuildDepends: sexplib... will be taken -# into account -"lib_test/conv_test.byte": use_sexplib, pkg_unix, pkg_num, pkg_bigarray diff --git a/bundles/sexplib/sexplib-7.0.5/configure b/bundles/sexplib/sexplib-7.0.5/configure deleted file mode 100755 index 97ed012..0000000 --- a/bundles/sexplib/sexplib-7.0.5/configure +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -# OASIS_START -# DO NOT EDIT (digest: 425187ed8bfdbdd207fd76392dd243a7) -set -e - -FST=true -for i in "$@"; do - if $FST; then - set -- - FST=false - fi - - case $i in - --*=*) - ARG=${i%%=*} - VAL=${i##*=} - set -- "$@" "$ARG" "$VAL" - ;; - *) - set -- "$@" "$i" - ;; - esac -done - -ocaml setup.ml -configure "$@" -# OASIS_STOP diff --git a/bundles/sexplib/sexplib-7.0.5/doc/Makefile b/bundles/sexplib/sexplib-7.0.5/doc/Makefile deleted file mode 100644 index 589be16..0000000 --- a/bundles/sexplib/sexplib-7.0.5/doc/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -NAME := README -HEVEAFLAGS := -w 78 -fix -exec ~/bin/xxdate.exe custom.hva - -all: text pdf - -$(NAME).tex: - touch $@ - --include HeveaMakefile diff --git a/bundles/sexplib/sexplib-7.0.5/doc/OMakefile b/bundles/sexplib/sexplib-7.0.5/doc/OMakefile deleted file mode 100644 index 671931e..0000000 --- a/bundles/sexplib/sexplib-7.0.5/doc/OMakefile +++ /dev/null @@ -1,8 +0,0 @@ -USEPDFLATEX = true -DOC = README - -LaTeXDocument($(DOC), $(DOC)) - -doc: $(DOC).pdf - -.DEFAULT: $(DOC).pdf diff --git a/bundles/sexplib/sexplib-7.0.5/doc/README.tex b/bundles/sexplib/sexplib-7.0.5/doc/README.tex deleted file mode 100644 index 8a4db46..0000000 --- a/bundles/sexplib/sexplib-7.0.5/doc/README.tex +++ /dev/null @@ -1,473 +0,0 @@ -\documentclass[a4paper]{article} - -\usepackage{hevea} - -%BEGIN LATEX -\usepackage{natbib} -%END LATEX - -\newcommand{\mail}{\mailto{opensource@janestreet.com}} -\newcommand{\homeurl}{http://www.janestreet.com} -\newcommand{\athome}[2]{\ahref{\homeurl/#1}{#2}} -\newcommand{\www}{\athome{}{Markus Mottl}} - -\newcommand{\ocaml}{\ahref{http://www.ocaml.org}{OCaml}} - -\newcommand{\myhref}[1]{\ahref{#1}{#1}} -\newcommand{\ocsrc}[2]{\athome{ocaml/#1}{#2}} -\newcommand{\myocsrc}[1]{\athome{ocaml/#1}{#1}} - -\newcommand{\janeshort} - {\ahref{http://www.janestreet.com}{Jane Street Holding, LLC}} - -\newcommand{\trow}[2]{\quad #1 \quad&\quad #2 \quad\\} -\newcommand{\trowl}[2]{\trow{#1}{#2}\hline} - -%BEGIN LATEX -\newcommand{\theyear}{\number\year} -%END LATEX - -\title{README: library ``Sexplib''} -\author{ - Copyright \quad (C) \quad \theyear \quad \janeshort \quad\\ - Author: Markus Mottl -} -\date{New York, 2012-03-20} - -% DOCUMENT -\begin{document} -\maketitle -\section{Directory contents} -\begin{center} -\begin{tabular}{|c|c|} -\hline -\trowl{CHANGES}{History of code changes} -\trowl{COPYRIGHT}{Notes on copyright} -\trow{INSTALL}{Short notes on compiling and} -\trowl{}{installing the library} -\trowl{LICENSE}{``GNU LESSER GENERAL PUBLIC LICENSE''} -\trowl{LICENSE.Tywith}{License of Tywith, from which Sexplib is derived} -\trowl{Makefile}{Top Makefile} -\trowl{OCamlMakefile}{Generic Makefile for OCaml-projects} -\trowl{OMakefile}{Ignore this file} -\trowl{README.txt}{This file} -\trowl{lib/}{OCaml-library for S-expression conversions} -\trowl{lib\_test/}{Test applications for the Sexplib-library} -\end{tabular} -\end{center} - -\section{What is ``Sexplib''?} - -This library contains functionality for parsing and pretty-printing -S-expressions. In addition to that it contains a preprocessing module for -Camlp4, which can be used to automatically generate code from type definitions -for efficiently converting OCaml-values to S-expressions and vice versa. -In combination with the parsing and pretty-printing functionality this frees -users from having to write their own I/O-routines for datastructures they -define. Possible errors during automatic conversions from S-expressions -to OCaml-values are reported in human-readable ways with exact location -information. Another module in this library allows you to extract and -replace sub-expressions in S-expressions. - -\section{How can you use it?} - -Make sure you have installed the \verb=type_conv= package on your system, -too. It should be obtainable at the same site as \verb=sexplib=.\\ -\\ -The API (.mli-files) in the \verb=sexplib= library directory is -fully documented. Module \verb=Sexp= contains all I/O-functions for -S-expressions, module \verb=Conv= helper functions for converting -OCaml-values of standard types to S-expressions. Module \verb=Path= -supports sub-expression extraction and substitution.\\ -\\ -Module \verb=pa_sexp_conv.ml= contains the extensions for the -Camlp4-preprocessor. It adds the new construct \verb=with sexp= -(and \verb=with sexp_of= and \verb=with of_sexp=, which are implied by -the first). When using this construct right after a type definition, -function definitions will be generated automatically, which perform -S-expression conversions.\\ -\\ -E.g.\ given the following type definition: - -\begin{verbatim} - type t = A | B - with sexp -\end{verbatim} - -The above will generate the functions \verb=sexp_of_t= and -\verb=t_of_sexp=. The preprocessor also supports automatic addition -of conversion functions to signatures. Just add \verb=with sexp= to -the type in a signature, and the appropriate function signatures will -be generated.\\ -\\ -Converters for standard types (int, list, Hashtbl.t, etc.) become visible to -the macro-generated code by opening the standard module before their first -use in a type definition. Users will therefore usually want to place the -following at the top of their files: - -\begin{verbatim} - open Sexplib.Std -\end{verbatim} - -See the file \verb=lib_test/conv_test.ml= for example usage. It also -demonstrates how to extract and substitute sub-expressions. - -\subsection{Compiling and linking} - -To compile a file you will have to add a preprocessing flag to the -compiler invocation, e.g. for foo.ml: - -\begin{verbatim} - ocamlc -pp "camlp4o -I {path to type_conv} \ - -I {path to sexplib} pa_type_conv.cmo pa_sexp_conv.cmo" \ - -I {path to sexplib} foo.ml -\end{verbatim} - -If you are using OCamlMakefile, just put the following line at the -top of the file, assuming you have installed both \verb=type_conv= and -\verb=sexplib= with ocamlfind. The comment must start at the beginning of -the line, and you must not break lines (here broken for readability only): - -\begin{verbatim} - (*pp camlp4o -I `ocamlfind query type_conv` \ - -I `ocamlfind query sexplib` \ - pa_type_conv.cmo pa_sexp_conv.cmo *) -\end{verbatim} - -Don't forget to place the macro \verb=TYPE_CONV_PATH=, which takes a -string argument, at the top of the file to be preprocessed (see example -\verb=conv_test.ml=). It is supposed to set the module path to the given -module file. This is necessary, because modules may get packed at a later -stage, and error messages generated by Sexplib will refer to this location -to help pinpointing the associated type.\\ -\\ -In the linking stage you will only have to link with \verb=sexplib=. -E.g.\ when using OCamlMakefile just add it to the \verb=PACKS=-variable. - -\section{Syntax Specification of S-expressions} - -\subsection{Lexical conventions of S-expression} - -Whitespace, which consists of space, newline, carriage return, horizontal -tab and form feed, is ignored unless within an OCaml-string, where it -is treated according to OCaml-conventions. The semicolon introduces -comments. Comments are ignored, and range up to the next newline -character. The left parenthesis opens a new list, the right parenthesis -closes it again. Lists can be empty. The double quote denotes the -beginning and end of a string following the lexical conventions of OCaml -(see OCaml-manual for details). All characters other than double quotes, -left- and right parentheses, and whitespace are considered part of a -contiguous string. - -\subsection{Grammar of S-expressions} - -S-expressions are either strings (= atoms) or lists. The lists can -recursively contain further S-expressions or be empty, and must be -balanced, i.e.\ parentheses must match. - -\subsection{Examples} - -{\samepage -\begin{verbatim} - this_is_an_atom_123'&^%! ; this is a comment - "another atom in an OCaml-string \"string in a string\" \123" - - ; empty list follows below - () - - ; a more complex example - ( - ( - list in a list ; comment within a list - (list in a list in a list) - 42 is the answer to all questions - ) - ) -\end{verbatim} -} - -\subsection{Conversion of basic OCaml-values} - -Basic OCaml-values like the unit-value, integers (in all representations), -floats, strings, and booleans are represented in S-exp syntax in the -same way as in OCaml. Strings may also appear without quotes if this -does not clash with the lexical conventions for S-expressions. - -\subsection{Conversion of OCaml-tuples} - -OCaml-tuples are simple lists of values in the same order as in the tuple. -E.g.: - -\begin{verbatim} - (3.14, "foo", "bar bla", 27) <===> (3.14 foo "bar bla" 27) -\end{verbatim} - -\subsection{Conversion of OCaml-records} - -OCaml-records are represented as lists of pairs in S-expression syntax. -Each pair consists of the name of the record field (first element), -and its value (second element). E.g.: - -\begin{verbatim} - { - foo = 3; - bar = "some string"; - } - - <===> - - ( - (foo 3) - (bar "some string") - ) -\end{verbatim} - -Type specifications of records allow the use of a special type -\verb=sexp_option= which indicates that a record field should be optional. -E.g.: - -\begin{verbatim} - type t = - { - x : int option; - y : int sexp_option; - } -\end{verbatim} - -The type \verb=sexp_option= is equivalent to ordinary options, but is -treated specially by the code generator. The above would lead to the -following equivalences of values and S-expressions: - -\begin{verbatim} - { - x = Some 1; - y = Some 2; - } - - <===> - - ( - (x (some 1)) - (y 2) - ) -\end{verbatim} - -\noindent And: - -{\samepage -\begin{verbatim} - { - x = None; - y = None; - } - - <===> - - ( - (x none) - ) -\end{verbatim} -} - -Note how \verb=sexp_option= allows you to leave away record fields -that should default to \verb=None=. It is also unnecessary (and -actually wrong) now to write down such a value as an option, i.e.\ -the \verb=some=-tag must be dropped if the field should be defined.\\ -\\ -The types \verb=sexp_list=, \verb=sexp_array=, and \verb=sexp_bool= can be -used in ways similar to the type \verb=sexp_option=. They assume the empty -list, empty array, and false value respectively as default values. - -\subsection{Conversion of sum types} - -Constant constructors in sum types are represented as strings. -Constructors with arguments are represented as lists, the first element -being the constructor name, the rest being its arguments. Constructors -may also be started in lowercase in S-expressions, but will always be -converted to uppercase when converting from OCaml-values.\\ -\\ -{\samepage -\noindent For example: - -\begin{verbatim} - type t = A | B of int * float * t with sexp - - B (42, 3.14, B (-1, 2.72, A)) <===> (B 42 3.14 (B -1 2.72 A)) -\end{verbatim} - -\noindent The above example also demonstrates recursion in datastructures. -} - -\subsection{Conversion of variant types} - -The conversion of polymorphic variants is almost the same as with -sum types. The notable difference is that variant constructors must -always start with an either lower- or uppercase character, matching -the way it was specified in the type definition. This is because OCaml -also distinguishes between upper- and lowercase variant constructors. -Note that type specifications containing unions of variant types are -also supported by the S-expression converter. - -\subsection{Conversion of OCaml-lists and arrays} - -OCaml-lists and arrays are straightforwardly represented as S-expression -lists. - -\subsection{Conversion of option types} - -The option type is converted like ordinary polymorphic sum types, i.e.: - -\begin{verbatim} - None <===> none - Some value <===> (some value) -\end{verbatim} - -There is a deprecated version of the syntax in which values of option -type are represented as lists in S-expressions: - -\begin{verbatim} - None <===> () - Some value <===> (value) -\end{verbatim} - -Reading of the old-style S-expression syntax for option values is only -supported if the reference \verb=Conv.read_old_option_format= is set to -\verb=true= (currently the default, which may change soon). A conversion -exception is raised otherwise. The old format will be written only if -\verb=Conv.write_old_option_format= is true (also currently the default). -Reading of the new format is always supported. - -\subsection{Conversion of polymorphic values} - -There is nothing special about polymorphic values as long as there are -conversion functions for the type parameters. E.g.: - -\begin{verbatim} - type 'a t = A | B of 'a with sexp - type foo = int t with sexp -\end{verbatim} - -In the above case the conversion functions will behave as if \verb=foo= -had been defined as a monomorphic version of \verb=t= with \verb='a= -replaced by \verb=int= on the right hand side.\\ -\\ -If a datastructure is indeed polymorphic, and you want to convert it, -you will have to supply the conversion functions for the type parameters -at runtime. E.g.\ in the above example, if you wanted to convert a value -of type \verb='a t=, you would have to write something like this: - -\begin{verbatim} - sexp_of_t sexp_of_a v -\end{verbatim} - -\noindent where \verb=sexp_of_a=, which may also be named differently in -this particular case, is a function that converts values of type \verb='a= -to an S-expression. Types with more than one parameter require passing -conversion functions for those parameters in the order of their appearance -on the left hand side of the type definition. - -\subsection{Conversion of abstract datatypes} - -Of course, if you want to convert an abstract datatype to an S-expression, -you will have to roll your own conversion function, which should produce -values of type \verb=Sexp.t= directly. If, however, you want to make -use of your abstract type within definitions of other types, make sure -that you call your conversion function appropriately: it should be in the -same scope as the typename, and must be named \verb=sexp_of_{typename}=. - -\subsection{Conversion of hashtables} - -Hashtables, which are abstract values in OCaml, are represented as -association lists, i.e.\ lists of key-value pairs, e.g.: - -\begin{verbatim} - ((foo 42) (bar 3)) -\end{verbatim} - -Reading in the above S-expression as hashtable mapping strings to -integers (\verb=(string, int) Hashtbl.t=) will map \verb="foo"= to $42$ -and \verb="bar"= to $3$.\\ -\\ -Note that the order of elements in the list may matter, because -duplicates are kept: bindings will be inserted into the hashtable in -order of appearence. Therefore, the last binding of a key will be the -``visible'' one, the others are ``hidden''. See the OCaml-documentation -on hashtables for details.\\ -\\ -Note, too, that polymorphic equality may not hold between conversions. -You will have to use a function implementing logical equality for that -purpose. - -\subsection{Conversion of opaque values} - -Opaque values are ones for which we do not want to perform conversions. -This may be, because we do not have S-expression converters for them, -or because we do not want to apply them in a particular type context, -e.g.\ if the resulting S-expression should be printed out but without -superfluous information. To prevent the preprocessor from generating -calls to converters, simply apply the qualifier \verb=sexp_opaque= -as if it were a type constructor, e.g.: - -\begin{verbatim} - type foo = int * stuff sexp_opaque with sexp -\end{verbatim} - -Thus, there is no need to specify converters for type \verb=stuff=, -and if there are any, they will not be used in this particular context. -Needless to say, it is not possible to convert such an S-expression back -to the original value. Here is an example conversion: - -\begin{verbatim} - (42, some_stuff) ===> (42, ) -\end{verbatim} - -\subsection{Conversion of exceptions} - -S-expression converters for exceptions can be automatically registered -using the \verb=with sexp= macro, e.g.: - -\begin{verbatim} - module M = struct - exception Foo of int with sexp - end -\end{verbatim} - -Such exceptions will be translated in a similar way as sum types, but -their constructor will be prefixed with the fully qualified module path -(here: \verb=M.Foo=) so as to be able to discriminate between them -without problems.\\ - -The user can then easily convert an exception matching the above -one to an S-expression using \verb=Sexplib.Conv.sexp_of_exn=. -User-defined conversion functions can be registered, too, by calling -\verb=Sexplib.Conv.add_exn_converter=. This should make it very -convenient for users to catch arbitrary exceptions escaping their program -and pretty-printing them, including all arguments, as S-expressions. -The library already contains mappings for all known exceptions that can -escape functions in the OCaml standard library. - -\section{I/O and type conversions} - -There are multiple ways of performing I/O with S-expressions. If exact -error locations are required when type conversions fail, S-expressions need -to be parsed with location annotations. In most cases users may want to use -functions like e.g.\ \verb=load_sexp_conv= or \verb=load_sexp_conv_exn=, which -load S-expressions from files and convert them. Only when conversions fail, -the file will be reparsed with annotations, which is slower, and type errors -will be reported accurately with file, line number, column, and file position. - -\section{Contact information} - -\noindent In the case of bugs, feature requests and similar, you can -contact us here:\\ - -\hspace{2ex}\mail\\ - -\noindent Up-to-date information concerning this library should be -available here:\\ - -\hspace{2ex}\homeurl/ocaml\\ - -Enjoy!!\\ - -\end{document} diff --git a/bundles/sexplib/sexplib-7.0.5/doc/custom.hva b/bundles/sexplib/sexplib-7.0.5/doc/custom.hva deleted file mode 100644 index 81ecdb1..0000000 --- a/bundles/sexplib/sexplib-7.0.5/doc/custom.hva +++ /dev/null @@ -1,9 +0,0 @@ -% INPUT STYLE -\input{article.hva} - -% FANCY SECTION HEADERS WITH NICE COLOURS -\def\@color{194} -\input{fancysection.hva} - -% FOREGROUND AND BACKGROUND COLOURS -\renewcommand{\@bodyargs}{TEXT=black BGCOLOR=white} diff --git a/bundles/sexplib/sexplib-7.0.5/doc/hevea.sty b/bundles/sexplib/sexplib-7.0.5/doc/hevea.sty deleted file mode 100644 index 6d49aa8..0000000 --- a/bundles/sexplib/sexplib-7.0.5/doc/hevea.sty +++ /dev/null @@ -1,78 +0,0 @@ -% 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]{} -%%%% 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}} -%%% Postlude -\makeatother diff --git a/bundles/sexplib/sexplib-7.0.5/lib/META b/bundles/sexplib/sexplib-7.0.5/lib/META deleted file mode 100644 index 3cef596..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/META +++ /dev/null @@ -1,26 +0,0 @@ -# OASIS_START -# DO NOT EDIT (digest: 753f7af494baaf733d5ff4e8d89ff68b) -version = "7.0.5" -description = "automated S-expression conversion" -requires = "unix bigarray num" -archive(byte) = "sexplib.cma" -archive(native) = "sexplib.cmxa" -exists_if = "sexplib.cma" -package "top" ( - version = "7.0.5" - description = "Toplevel printers for S-expressions" - requires = "sexplib" - archive(byte) = "sexplib_top.cma" - archive(native) = "sexplib_top.cmxa" - exists_if = "sexplib_top.cma" -) - -package "syntax" ( - version = "7.0.5" - description = "Syntax extension for Sexplib" - requires = "type_conv sexplib" - archive(syntax, preprocessor) = "pa_sexp_conv.cma" - archive(syntax, toploop) = "pa_sexp_conv.cma" - exists_if = "pa_sexp_conv.cma" -) -# OASIS_STOP diff --git a/bundles/sexplib/sexplib-7.0.5/lib/conv.ml b/bundles/sexplib/sexplib-7.0.5/lib/conv.ml deleted file mode 100644 index 0a040a5..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/conv.ml +++ /dev/null @@ -1,713 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(* Conv: Utility Module for S-expression Conversions *) - -open Printf -open Bigarray -open Sexp - -type sexp_bool = bool -type 'a sexp_option = 'a option -type 'a sexp_list = 'a list -type 'a sexp_array = 'a array -type 'a sexp_opaque = 'a - -type bigstring = Sexp.bigstring -type float32_vec = (float, float32_elt, fortran_layout) Array1.t -type float64_vec = (float, float64_elt, fortran_layout) Array1.t -type vec = float64_vec -type float32_mat = (float, float32_elt, fortran_layout) Array2.t -type float64_mat = (float, float64_elt, fortran_layout) Array2.t -type mat = float64_mat - -(* Conversion of OCaml-values to S-expressions *) - -(* Some basic experiments indicate that %.20G is enough to round-trip - a float through the sexp-converter, (although that was done long ago, - and there's no real guarantee) *) -let default_string_of_float = ref (fun n -> sprintf "%.20G" n) -let read_old_option_format = ref true -let write_old_option_format = ref true - -let list_map f l = List.rev (List.rev_map f l) - -let sexp_of_unit () = List [] -let sexp_of_bool b = Atom (string_of_bool b) -let sexp_of_string str = Atom str -let sexp_of_char c = Atom (String.make 1 c) -let sexp_of_int n = Atom (string_of_int n) -let sexp_of_float n = Atom (!default_string_of_float n) -let sexp_of_int32 n = Atom (Int32.to_string n) -let sexp_of_int64 n = Atom (Int64.to_string n) -let sexp_of_nativeint n = Atom (Nativeint.to_string n) -let sexp_of_big_int n = Atom (Big_int.string_of_big_int n) -let sexp_of_nat n = Atom (Nat.string_of_nat n) -let sexp_of_num n = Atom (Num.string_of_num n) -let sexp_of_ratio n = Atom (Ratio.string_of_ratio n) -let sexp_of_ref sexp_of__a rf = sexp_of__a !rf -let sexp_of_lazy_t sexp_of__a lv = sexp_of__a (Lazy.force lv) - -let sexp_of_option sexp_of__a = function - | Some x when !write_old_option_format -> List [sexp_of__a x] - | Some x -> List [Atom "some"; sexp_of__a x] - | None when !write_old_option_format -> List [] - | None -> Atom "none" - -let sexp_of_pair sexp_of__a sexp_of__b (a, b) = - List [sexp_of__a a; sexp_of__b b] - -let sexp_of_triple sexp_of__a sexp_of__b sexp_of__c (a, b, c) = - List [sexp_of__a a; sexp_of__b b; sexp_of__c c] - -(* List.rev (List.rev_map ...) is tail recursive, the OCaml standard - library List.map is NOT. *) -let sexp_of_list sexp_of__a lst = List (List.rev (List.rev_map sexp_of__a lst)) - -let sexp_of_array sexp_of__a ar = - let lst_ref = ref [] in - for i = Array.length ar - 1 downto 0 do - lst_ref := sexp_of__a ar.(i) :: !lst_ref - done; - List !lst_ref - -let sexp_of_hashtbl sexp_of_key sexp_of_val htbl = - let coll k v acc = List [sexp_of_key k; sexp_of_val v] :: acc in - List (Hashtbl.fold coll htbl []) - -let sexp_of_float_vec vec = - let lst_ref = ref [] in - for i = Array1.dim vec downto 1 do - lst_ref := sexp_of_float vec.{i} :: !lst_ref - done; - List !lst_ref - -let sexp_of_bigstring (bstr : bigstring) = - let n = Array1.dim bstr in - let str = String.create n in - for i = 0 to n - 1 do str.[i] <- bstr.{i} done; - Atom str - -let sexp_of_float32_vec (vec : float32_vec) = sexp_of_float_vec vec -let sexp_of_float64_vec (vec : float64_vec) = sexp_of_float_vec vec -let sexp_of_vec (vec : vec) = sexp_of_float_vec vec - -let sexp_of_float_mat mat = - let m = Array2.dim1 mat in - let n = Array2.dim2 mat in - let lst_ref = ref [] in - for col = n downto 1 do - let vec = Array2.slice_right mat col in - for row = m downto 1 do - lst_ref := sexp_of_float vec.{row} :: !lst_ref - done - done; - List (sexp_of_int m :: sexp_of_int n :: !lst_ref) - -let sexp_of_float32_mat (mat : float32_mat) = sexp_of_float_mat mat -let sexp_of_float64_mat (mat : float64_mat) = sexp_of_float_mat mat -let sexp_of_mat (mat : mat) = sexp_of_float_mat mat - -let sexp_of_opaque _ = Atom "" -let sexp_of_fun _ = Atom "" - -let string_of__of__sexp_of to_sexp x = Sexp.to_string (to_sexp x) - - -(* Exception converter registration and lookup *) - -module Exn_converter = struct - type t = int64 - - module Ids = Map.Make (Int64) - - let exn_id_cnt = ref Int64.max_int - let exn_handlers : (exn -> Sexp.t option) Ids.t ref = ref Ids.empty - - (* These exception registration functions assume that context-switches - cannot happen unless there is an allocation. It is reasonable to expect - that this will remain true for the foreseeable future. That way we - avoid using mutexes and thus a dependency on the threads library. *) - - let rec add_slow sexp_of_exn = - let exn_id = !exn_id_cnt in - let new_exn_id = Int64.sub exn_id Int64.one in - let new_exn_handlers = Ids.add exn_id sexp_of_exn !exn_handlers in - (* This trick avoids mutexes and should be fairly efficient *) - if !exn_id_cnt != exn_id then add_slow sexp_of_exn - else begin - (* These two assignments should always be atomic *) - exn_id_cnt := new_exn_id; - exn_handlers := new_exn_handlers; - exn_id - end - - let rec del_slow exn_id = - let old_exn_handlers = !exn_handlers in - let new_exn_handlers = Ids.remove exn_id old_exn_handlers in - (* This trick avoids mutexes and should be fairly efficient *) - if !exn_handlers != old_exn_handlers then del_slow exn_id - else exn_handlers := new_exn_handlers - - exception Found_sexp_opt of Sexp.t option - - let find_slow exn = - try - let act _id sexp_of_exn = - let sexp_opt = sexp_of_exn exn in - if sexp_opt <> None then raise (Found_sexp_opt sexp_opt) - in - Ids.iter act !exn_handlers; - None - with Found_sexp_opt sexp_opt -> sexp_opt - - - (* Fast and automatic exception registration *) - - module Int = struct - type t = int - - let compare t1 t2 = compare (t1 : int) t2 - end - - module Addrs = Map.Make (Int) - - type weak_repr = (Obj.t Weak.t * (exn -> Sexp.t)) Ids.t - - let exn_addr_map : (int * weak_repr) Addrs.t ref = ref Addrs.empty - - let get_exn_tag (exn : exn) = Obj.field (Obj.repr exn) 0 - let get_exn_tag_str_addr exn_tag = (Obj.magic (Obj.field exn_tag 0) : int) - let get_exn_str_addr exn = get_exn_tag_str_addr (get_exn_tag exn) - - let rec clean_up_handler id exn_tag = - let old_exn_addr_map = !exn_addr_map in - let addr = get_exn_tag_str_addr exn_tag in - match - try Some (Addrs.find addr old_exn_addr_map) - with Not_found -> None - with - | Some (count, exn_handler_map) -> - let new_exn_handler_map = Ids.remove id exn_handler_map in - let new_exn_addr_map = - if Ids.is_empty new_exn_handler_map then - Addrs.remove addr old_exn_addr_map - else - Addrs.add addr (count - 1, new_exn_handler_map) old_exn_addr_map - in - (* This trick avoids mutexes and should be fairly efficient *) - if !exn_addr_map != old_exn_addr_map then clean_up_handler id exn_tag - else exn_addr_map := new_exn_addr_map - | None -> () - - let fast_id_cnt = ref Int64.max_int - - exception Found_sexp of Sexp.t - - let max_exn_tags = ref 20 - - let set_max_exn_tags n = - if n < 1 then - failwith "Sexplib.Conv.Exn_converter.set_max_exn_tags: n < 1" - else max_exn_tags := n - - let get_max_exn_tags () = !max_exn_tags - - let add_auto ?(finalise = true) exn sexp_of_exn = - let exn_tag = get_exn_tag exn in - let addr = get_exn_tag_str_addr exn_tag in - let weak_tbl = Weak.create 1 in - Weak.set weak_tbl 0 (Some exn_tag); - let new_handler = weak_tbl, sexp_of_exn in - let rec loop () = - let id = !fast_id_cnt in - let old_exn_addr_map = !exn_addr_map in - let new_id = Int64.sub id Int64.one in - let count, handler_map = - try Addrs.find addr old_exn_addr_map - with Not_found -> 0, Ids.empty - in - if count < !max_exn_tags then - let new_handler_map = Ids.add id new_handler handler_map in - let new_exn_handlers = - Addrs.add addr (count + 1, new_handler_map) old_exn_addr_map - in - (* This trick avoids mutexes and should be fairly efficient *) - if !fast_id_cnt != id || !exn_addr_map != old_exn_addr_map then loop () - else begin - exn_addr_map := new_exn_handlers; - fast_id_cnt := new_id; - if finalise then Gc.finalise (clean_up_handler id) exn_tag - end - in - loop () - - let find_auto exn = - let addr = get_exn_str_addr exn in - match try Some (Addrs.find addr !exn_addr_map) with Not_found -> None with - | None -> None - | Some (_, exn_handler_map) -> - let exn_tag = get_exn_tag exn in - try - let act _id (weak_tbl, sexp_of_exn) = - match Weak.get weak_tbl 0 with - | Some map_exn_tag when map_exn_tag == exn_tag -> - raise (Found_sexp (sexp_of_exn exn)) - | None | Some _ -> () - in - Ids.iter act exn_handler_map; - None - with Found_sexp sexp -> Some sexp -end - -let sexp_of_exn_opt exn = - let sexp_opt = Exn_converter.find_auto exn in - if sexp_opt = None then Exn_converter.find_slow exn - else sexp_opt - -let sexp_of_exn exn = - match sexp_of_exn_opt exn with - | None -> List [Atom (Printexc.to_string exn)] - | Some sexp -> sexp - -let exn_to_string e = Sexp.to_string_hum (sexp_of_exn e) - - -(* Conversion of S-expressions to OCaml-values *) - -exception Of_sexp_error = Pre_sexp.Of_sexp_error - -let record_check_extra_fields = ref true - -let of_sexp_error_exn exc sexp = raise (Of_sexp_error (exc, sexp)) - -let of_sexp_error what sexp = raise (Of_sexp_error (Failure what, sexp)) - -let unit_of_sexp sexp = match sexp with - | List [] -> () - | Atom _ | List _ -> of_sexp_error "unit_of_sexp: empty list needed" sexp - -let bool_of_sexp sexp = match sexp with - | Atom ("true" | "True") -> true - | Atom ("false" | "False") -> false - | Atom _ -> of_sexp_error "bool_of_sexp: unknown string" sexp - | List _ -> of_sexp_error "bool_of_sexp: atom needed" sexp - -let string_of_sexp sexp = match sexp with - | Atom str -> str - | List _ -> of_sexp_error "string_of_sexp: atom needed" sexp - -let char_of_sexp sexp = match sexp with - | Atom str -> - if String.length str <> 1 then - of_sexp_error - "char_of_sexp: atom string must contain one character only" sexp; - str.[0] - | List _ -> of_sexp_error "char_of_sexp: atom needed" sexp - -let int_of_sexp sexp = match sexp with - | Atom str -> - (try int_of_string str - with exc -> of_sexp_error ("int_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "int_of_sexp: atom needed" sexp - -let float_of_sexp sexp = match sexp with - | Atom str -> - (try float_of_string str - with exc -> - of_sexp_error ("float_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "float_of_sexp: atom needed" sexp - -let int32_of_sexp sexp = match sexp with - | Atom str -> - (try Int32.of_string str - with exc -> - of_sexp_error ("int32_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "int32_of_sexp: atom needed" sexp - -let int64_of_sexp sexp = match sexp with - | Atom str -> - (try Int64.of_string str - with exc -> - of_sexp_error ("int64_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "int64_of_sexp: atom needed" sexp - -let nativeint_of_sexp sexp = match sexp with - | Atom str -> - (try Nativeint.of_string str - with exc -> - of_sexp_error ("nativeint_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "nativeint_of_sexp: atom needed" sexp - -let big_int_of_sexp sexp = match sexp with - | Atom str -> - (try Big_int.big_int_of_string str - with exc -> - of_sexp_error ("big_int_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "big_int_of_sexp: atom needed" sexp - -let nat_of_sexp sexp = match sexp with - | Atom str -> - (try Nat.nat_of_string str - with exc -> - of_sexp_error ("nat_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "nat_of_sexp: atom needed" sexp - -let num_of_sexp sexp = match sexp with - | Atom str -> - (try Num.num_of_string str - with exc -> - of_sexp_error ("num_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "num_of_sexp: atom needed" sexp - -let ratio_of_sexp sexp = match sexp with - | Atom str -> - (try Ratio.ratio_of_string str - with exc -> - of_sexp_error ("ratio_of_sexp: " ^ exn_to_string exc) sexp) - | List _ -> of_sexp_error "ratio_of_sexp: atom needed" sexp - -let ref_of_sexp a__of_sexp sexp = ref (a__of_sexp sexp) -let lazy_t_of_sexp a__of_sexp sexp = Lazy.lazy_from_val (a__of_sexp sexp) - -let option_of_sexp a__of_sexp sexp = - if !read_old_option_format then - match sexp with - | List [] | Atom ("none" | "None") -> None - | List [el] | List [Atom ("some" | "Some"); el] -> Some (a__of_sexp el) - | List _ -> - of_sexp_error "option_of_sexp: list must represent optional value" sexp - | Atom _ -> of_sexp_error "option_of_sexp: only none can be atom" sexp - else - match sexp with - | Atom ("none" | "None") -> None - | List [Atom ("some" | "Some"); el] -> Some (a__of_sexp el) - | Atom _ -> of_sexp_error "option_of_sexp: only none can be atom" sexp - | List _ -> of_sexp_error "option_of_sexp: list must be (some el)" sexp - -let pair_of_sexp a__of_sexp b__of_sexp sexp = match sexp with - | List [a_sexp; b_sexp] -> - let a = a__of_sexp a_sexp in - let b = b__of_sexp b_sexp in - a, b - | List _ -> - of_sexp_error - "pair_of_sexp: list must contain exactly two elements only" sexp - | Atom _ -> of_sexp_error "pair_of_sexp: list needed" sexp - -let triple_of_sexp a__of_sexp b__of_sexp c__of_sexp sexp = match sexp with - | List [a_sexp; b_sexp; c_sexp] -> - let a = a__of_sexp a_sexp in - let b = b__of_sexp b_sexp in - let c = c__of_sexp c_sexp in - a, b, c - | List _ -> - of_sexp_error - "triple_of_sexp: list must contain exactly three elements only" sexp - | Atom _ -> of_sexp_error "triple_of_sexp: list needed" sexp - -let list_of_sexp a__of_sexp sexp = match sexp with - | List lst -> - let rev_lst = List.rev_map a__of_sexp lst in - List.rev rev_lst - | Atom _ -> of_sexp_error "list_of_sexp: list needed" sexp - -let array_of_sexp a__of_sexp sexp = match sexp with - | List [] -> [||] - | List (h :: t) -> - let len = List.length t + 1 in - let res = Array.create len (a__of_sexp h) in - let rec loop i = function - | [] -> res - | h :: t -> res.(i) <- a__of_sexp h; loop (i + 1) t in - loop 1 t - | Atom _ -> of_sexp_error "array_of_sexp: list needed" sexp - -let hashtbl_of_sexp key_of_sexp val_of_sexp sexp = match sexp with - | List lst -> - let htbl = Hashtbl.create 0 in - let act = function - | List [k_sexp; v_sexp] -> - Hashtbl.add htbl (key_of_sexp k_sexp) (val_of_sexp v_sexp) - | List _ | Atom _ -> - of_sexp_error "hashtbl_of_sexp: tuple list needed" sexp - in - List.iter act lst; - htbl - | Atom _ -> of_sexp_error "hashtbl_of_sexp: list needed" sexp - -let bigstring_of_sexp sexp = match sexp with - | Atom str -> - let len = String.length str in - let bstr = Array1.create char c_layout len in - for i = 0 to len - 1 do bstr.{i} <- str.[i] done; - bstr - | List _ -> of_sexp_error "bigstring_of_sexp: atom needed" sexp - -let float_vec_of_sexp empty_float_vec create_float_vec sexp = match sexp with - | List [] -> empty_float_vec - | List lst -> - let len = List.length lst in - let res = create_float_vec len in - let rec loop i = function - | [] -> res - | h :: t -> res.{i} <- float_of_sexp h; loop (i + 1) t in - loop 1 lst - | Atom _ -> of_sexp_error "float_vec_of_sexp: list needed" sexp - -let create_float32_vec = Array1.create float32 fortran_layout -let create_float64_vec = Array1.create float64 fortran_layout -let empty_float32_vec = create_float32_vec 0 -let empty_float64_vec = create_float64_vec 0 -let float32_vec_of_sexp = float_vec_of_sexp empty_float32_vec create_float32_vec -let float64_vec_of_sexp = float_vec_of_sexp empty_float64_vec create_float64_vec -let vec_of_sexp = float_vec_of_sexp empty_float64_vec create_float64_vec - -let check_too_much_data sexp data res = - if data = [] then res - else of_sexp_error "float_mat_of_sexp: too much data" sexp - -let float_mat_of_sexp create_float_mat sexp = match sexp with - | List (sm :: sn :: data) -> - let m = int_of_sexp sm in - let n = int_of_sexp sn in - let res = create_float_mat m n in - if m = 0 || n = 0 then check_too_much_data sexp data res - else - let rec loop_cols col data = - let vec = Array2.slice_right res col in - let rec loop_rows row = function - | [] -> of_sexp_error "float_mat_of_sexp: not enough data" sexp - | h :: t -> - vec.{row} <- float_of_sexp h; - if row = m then - if col = n then check_too_much_data sexp t res - else loop_cols (col + 1) t - else loop_rows (row + 1) t in - loop_rows 1 data in - loop_cols 1 data - | List _ -> of_sexp_error "float_mat_of_sexp: list too short" sexp - | Atom _ -> of_sexp_error "float_mat_of_sexp: list needed" sexp - -let create_float32_mat = Array2.create float32 fortran_layout -let create_float64_mat = Array2.create float64 fortran_layout - -let float32_mat_of_sexp = float_mat_of_sexp create_float32_mat -let float64_mat_of_sexp = float_mat_of_sexp create_float64_mat -let mat_of_sexp = float_mat_of_sexp create_float64_mat - -let opaque_of_sexp sexp = - of_sexp_error "opaque_of_sexp: cannot convert opaque values" sexp - -let fun_of_sexp sexp = - of_sexp_error "fun_of_sexp: cannot convert function values" sexp - -let of_string__of__of_sexp of_sexp s = - try - let sexp = Sexp.of_string s in - of_sexp sexp - with e -> - failwith (sprintf "of_string failed on %s with %s" s (exn_to_string e)) - -(* Registering default exception printers *) - -let get_flc_error name (file, line, chr) = - List [Atom name; Atom file; sexp_of_int line; sexp_of_int chr] - -let () = - List.iter - (fun (exc, handler) -> Exn_converter.add_auto ~finalise:false exc handler) - [ - ( - Assert_failure ("", 0, 0), - (function - | Assert_failure arg -> get_flc_error "Assert_failure" arg - | _ -> assert false) - );( - Exit, - (function - | Exit -> Atom "Exit" - | _ -> assert false) - );( - End_of_file, - (function - | End_of_file -> Atom "End_of_file" - | _ -> assert false) - );( - Failure "", - (function - | Failure arg -> List [Atom "Failure"; Atom arg ] - | _ -> assert false) - );( - Not_found, - (function - | Not_found -> Atom "Not_found" - | _ -> assert false) - );( - Invalid_argument "", - (function - | Invalid_argument arg -> List [Atom "Invalid_argument"; Atom arg ] - | _ -> assert false) - );( - Match_failure ("", 0, 0), - (function - | Match_failure arg -> get_flc_error "Match_failure" arg - | _ -> assert false) - );( - Sys_error "", - (function - | Sys_error arg -> List [Atom "Sys_error"; Atom arg ] - | _ -> assert false) - );( - Arg.Help "", - (function - | Arg.Help arg -> List [Atom "Arg.Help"; Atom arg ] - | _ -> assert false) - );( - Arg.Bad "", - (function - | Arg.Bad arg -> List [Atom "Arg.Bad"; Atom arg ] - | _ -> assert false) - );( - Lazy.Undefined, - (function - | Lazy.Undefined -> Atom "Lazy.Undefined" - | _ -> assert false) - );( - Parsing.Parse_error, - (function - | Parsing.Parse_error -> Atom "Parsing.Parse_error" - | _ -> assert false) - );( - Queue.Empty, - (function - | Queue.Empty -> Atom "Queue.Empty" - | _ -> assert false) - );( - Scanf.Scan_failure "", - (function - | Scanf.Scan_failure arg -> List [Atom "Scanf.Scan_failure"; Atom arg ] - | _ -> assert false) - );( - Stack.Empty, - (function - | Stack.Empty -> Atom "Stack.Empty" - | _ -> assert false) - );( - Stream.Failure, - (function - | Stream.Failure -> Atom "Stream.Failure" - | _ -> assert false) - );( - Stream.Error "", - (function - | Stream.Error arg -> List [Atom "Stream.Error"; Atom arg ] - | _ -> assert false) - );( - Sys.Break, - (function - | Sys.Break -> Atom "Sys.Break" - | _ -> assert false) - );( - Unix.Unix_error (Unix.E2BIG, "", ""), - (function - | Unix.Unix_error (err, loc, arg) -> - let err_str = Unix.error_message err in - List [Atom "Unix.Unix_error"; Atom err_str; Atom loc; Atom arg] - | _ -> assert false) - );( - Of_sexp_error (Exit, Atom ""), - (function - | Of_sexp_error (exc, sexp) -> - List [Atom "Sexplib.Conv.Of_sexp_error"; sexp_of_exn exc; sexp] - | _ -> assert false) - );( - Parse_error { - Pre_sexp. - location = ""; - err_msg = ""; - parse_state = - `Sexp { - Pre_sexp. - parse_pos = { - Pre_sexp.Parse_pos. - text_line = 0; - text_char = 0; - global_offset = 0; - buf_pos = 0; - }; - pstack = []; - pbuf = Buffer.create 0; - }; - }, - (function - | Parse_error pe -> - let ppos = - match pe.parse_state with - | `Sexp { parse_pos = parse_pos } | `Annot { parse_pos = parse_pos } -> parse_pos - in - List [ - Atom "Sexplib.Sexp.Parse_error"; - List [ - List [Atom "location"; Atom pe.location]; - List [Atom "err_msg"; Atom pe.err_msg]; - List [Atom "text_line"; sexp_of_int ppos.Parse_pos.text_line]; - List [Atom "text_char"; sexp_of_int ppos.Parse_pos.text_char]; - List [ - Atom "global_offset"; sexp_of_int ppos.Parse_pos.global_offset - ]; - List [Atom "buf_pos"; sexp_of_int ppos.Parse_pos.buf_pos]; - ] - ] - | _ -> assert false) - );( - Of_string_conv_exn.E { - Of_string_conv_exn. - exc = Exit; - sexp = Atom ""; - sub_sexp = Atom ""; - }, - (function - | Of_string_conv_exn.E osce -> - List [ - Atom "Sexplib.Sexp.Of_string_conv_exn.E"; - List [ - List [Atom "exc"; sexp_of_exn osce.Of_string_conv_exn.exc]; - List [Atom "sexp"; osce.Of_string_conv_exn.sexp]; - List [Atom "sub_sexp"; osce.Of_string_conv_exn.sub_sexp]; - ] - ] - | _ -> assert false) - );( - Sexp.Annotated.Conv_exn ("", Exit), - (function - | Sexp.Annotated.Conv_exn (loc, exn) -> - List [ - Atom "Sexplib.Sexp.Annotated.Conv_exn"; - Atom loc; - sexp_of_exn exn; - ] - | _ -> assert false) - ); - ] diff --git a/bundles/sexplib/sexplib-7.0.5/lib/conv.mli b/bundles/sexplib/sexplib-7.0.5/lib/conv.mli deleted file mode 100644 index f22e18b..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/conv.mli +++ /dev/null @@ -1,226 +0,0 @@ -type sexp_bool = bool -type 'a sexp_option = 'a option -type 'a sexp_list = 'a list -type 'a sexp_array = 'a array -type 'a sexp_opaque = 'a -type bigstring = Sexp.bigstring -type float32_vec = - (float, Bigarray.float32_elt, Bigarray.fortran_layout) Bigarray.Array1.t -type float64_vec = - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array1.t -type vec = float64_vec -type float32_mat = - (float, Bigarray.float32_elt, Bigarray.fortran_layout) Bigarray.Array2.t -type float64_mat = - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array2.t -type mat = float64_mat -val default_string_of_float : (float -> string) ref -val read_old_option_format : bool ref -val write_old_option_format : bool ref -val list_map : ('a -> 'b) -> 'a list -> 'b list -val sexp_of_unit : unit -> Sexp.t -val sexp_of_bool : bool -> Sexp.t -val sexp_of_string : string -> Sexp.t -val sexp_of_char : char -> Sexp.t -val sexp_of_int : int -> Sexp.t -val sexp_of_float : float -> Sexp.t -val sexp_of_int32 : int32 -> Sexp.t -val sexp_of_int64 : int64 -> Sexp.t -val sexp_of_nativeint : nativeint -> Sexp.t -val sexp_of_big_int : Big_int.big_int -> Sexp.t -val sexp_of_nat : Nat.nat -> Sexp.t -val sexp_of_num : Num.num -> Sexp.t -val sexp_of_ratio : Ratio.ratio -> Sexp.t -val sexp_of_ref : ('a -> 'b) -> 'a ref -> 'b -val sexp_of_lazy_t : ('a -> 'b) -> 'a Lazy.t -> 'b -val sexp_of_option : ('a -> Sexp.t) -> 'a option -> Sexp.t -val sexp_of_pair : ('a -> Sexp.t) -> ('b -> Sexp.t) -> 'a * 'b -> Sexp.t -val sexp_of_triple : - ('a -> Sexp.t) -> - ('b -> Sexp.t) -> ('c -> Sexp.t) -> 'a * 'b * 'c -> Sexp.t -val sexp_of_list : ('a -> Sexp.t) -> 'a list -> Sexp.t -val sexp_of_array : ('a -> Sexp.t) -> 'a array -> Sexp.t -val sexp_of_hashtbl : - ('a -> Sexp.t) -> ('b -> Sexp.t) -> ('a, 'b) Hashtbl.t -> Sexp.t -val sexp_of_float_vec : (float, 'a, 'b) Bigarray.Array1.t -> Sexp.t -val sexp_of_bigstring : bigstring -> Sexp.t -val sexp_of_float32_vec : float32_vec -> Sexp.t -val sexp_of_float64_vec : float64_vec -> Sexp.t -val sexp_of_vec : vec -> Sexp.t -val sexp_of_float_mat : - (float, 'a, Bigarray.fortran_layout) Bigarray.Array2.t -> Sexp.t -val sexp_of_float32_mat : float32_mat -> Sexp.t -val sexp_of_float64_mat : float64_mat -> Sexp.t -val sexp_of_mat : mat -> Sexp.t -val sexp_of_opaque : 'a -> Sexp.t -val sexp_of_fun : 'a -> Sexp.t -val string_of__of__sexp_of : ('a -> Sexp.t) -> 'a -> string -module Exn_converter : - sig - type t = int64 - module Ids : - sig - type key = Int64.t - type 'a t = 'a Map.Make(Int64).t - val empty : 'a t - val is_empty : 'a t -> bool - val mem : key -> 'a t -> bool - val add : key -> 'a -> 'a t -> 'a t - val singleton : key -> 'a -> 'a t - val remove : key -> 'a t -> 'a t - val merge : - (key -> 'a option -> 'b option -> 'c option) -> - 'a t -> 'b t -> 'c t - val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int - val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool - val iter : (key -> 'a -> unit) -> 'a t -> unit - val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b - val for_all : (key -> 'a -> bool) -> 'a t -> bool - val exists : (key -> 'a -> bool) -> 'a t -> bool - val filter : (key -> 'a -> bool) -> 'a t -> 'a t - val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t - val cardinal : 'a t -> int - val bindings : 'a t -> (key * 'a) list - val min_binding : 'a t -> key * 'a - val max_binding : 'a t -> key * 'a - val choose : 'a t -> key * 'a - val split : key -> 'a t -> 'a t * 'a option * 'a t - val find : key -> 'a t -> 'a - val map : ('a -> 'b) -> 'a t -> 'b t - val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t - end - val exn_id_cnt : Ids.key ref - val exn_handlers : (exn -> Sexp.t option) Ids.t ref - val add_slow : (exn -> Sexp.t option) -> Ids.key - val del_slow : Ids.key -> unit - exception Found_sexp_opt of Sexp.t option - val find_slow : exn -> Sexp.t option - module Int : sig type t = int val compare : int -> int -> int end - module Addrs : - sig - type key = Int.t - type 'a t = 'a Map.Make(Int).t - val empty : 'a t - val is_empty : 'a t -> bool - val mem : key -> 'a t -> bool - val add : key -> 'a -> 'a t -> 'a t - val singleton : key -> 'a -> 'a t - val remove : key -> 'a t -> 'a t - val merge : - (key -> 'a option -> 'b option -> 'c option) -> - 'a t -> 'b t -> 'c t - val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int - val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool - val iter : (key -> 'a -> unit) -> 'a t -> unit - val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b - val for_all : (key -> 'a -> bool) -> 'a t -> bool - val exists : (key -> 'a -> bool) -> 'a t -> bool - val filter : (key -> 'a -> bool) -> 'a t -> 'a t - val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t - val cardinal : 'a t -> int - val bindings : 'a t -> (key * 'a) list - val min_binding : 'a t -> key * 'a - val max_binding : 'a t -> key * 'a - val choose : 'a t -> key * 'a - val split : key -> 'a t -> 'a t * 'a option * 'a t - val find : key -> 'a t -> 'a - val map : ('a -> 'b) -> 'a t -> 'b t - val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t - end - type weak_repr = (Obj.t Weak.t * (exn -> Sexp.t)) Ids.t - val exn_addr_map : - (int * (Obj.t Weak.t * (exn -> Sexp.t)) Ids.t) Addrs.t ref - val get_exn_tag : exn -> Obj.t - val get_exn_tag_str_addr : Obj.t -> int - val get_exn_str_addr : exn -> int - val clean_up_handler : Ids.key -> Obj.t -> unit - val fast_id_cnt : Ids.key ref - exception Found_sexp of Sexp.t - val max_exn_tags : int ref - val set_max_exn_tags : int -> unit - val get_max_exn_tags : unit -> int - val add_auto : ?finalise:bool -> exn -> (exn -> Sexp.t) -> unit - val find_auto : exn -> Sexp.t option - end -val sexp_of_exn_opt : exn -> Sexp.t option -val sexp_of_exn : exn -> Sexp.t -val exn_to_string : exn -> string -exception Of_sexp_error of exn * Pre_sexp.t -val record_check_extra_fields : bool ref -val of_sexp_error_exn : exn -> Pre_sexp.t -> 'a -val of_sexp_error : string -> Pre_sexp.t -> 'a -val unit_of_sexp : Sexp.t -> unit -val bool_of_sexp : Sexp.t -> bool -val string_of_sexp : Sexp.t -> string -val char_of_sexp : Sexp.t -> char -val int_of_sexp : Sexp.t -> int -val float_of_sexp : Sexp.t -> float -val int32_of_sexp : Sexp.t -> int32 -val int64_of_sexp : Sexp.t -> int64 -val nativeint_of_sexp : Sexp.t -> nativeint -val big_int_of_sexp : Sexp.t -> Big_int.big_int -val nat_of_sexp : Sexp.t -> Nat.nat -val num_of_sexp : Sexp.t -> Num.num -val ratio_of_sexp : Sexp.t -> Ratio.ratio -val ref_of_sexp : ('a -> 'b) -> 'a -> 'b ref -val lazy_t_of_sexp : ('a -> 'b) -> 'a -> 'b Lazy.t -val option_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a option -val pair_of_sexp : (Sexp.t -> 'a) -> (Sexp.t -> 'b) -> Sexp.t -> 'a * 'b -val triple_of_sexp : - (Sexp.t -> 'a) -> - (Sexp.t -> 'b) -> (Sexp.t -> 'c) -> Sexp.t -> 'a * 'b * 'c -val list_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a list -val array_of_sexp : (Sexp.t -> 'a) -> Sexp.t -> 'a array -val hashtbl_of_sexp : - (Sexp.t -> 'a) -> (Sexp.t -> 'b) -> Sexp.t -> ('a, 'b) Hashtbl.t -val bigstring_of_sexp : - Sexp.t -> - (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -val float_vec_of_sexp : - (float, 'a, 'b) Bigarray.Array1.t -> - (int -> (float, 'a, 'b) Bigarray.Array1.t) -> - Sexp.t -> (float, 'a, 'b) Bigarray.Array1.t -val create_float32_vec : - int -> - (float, Bigarray.float32_elt, Bigarray.fortran_layout) Bigarray.Array1.t -val create_float64_vec : - int -> - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array1.t -val empty_float32_vec : - (float, Bigarray.float32_elt, Bigarray.fortran_layout) Bigarray.Array1.t -val empty_float64_vec : - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array1.t -val float32_vec_of_sexp : - Sexp.t -> - (float, Bigarray.float32_elt, Bigarray.fortran_layout) Bigarray.Array1.t -val float64_vec_of_sexp : - Sexp.t -> - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array1.t -val vec_of_sexp : - Sexp.t -> - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array1.t -val check_too_much_data : Pre_sexp.t -> 'a list -> 'b -> 'b -val float_mat_of_sexp : - (int -> int -> (float, 'a, Bigarray.fortran_layout) Bigarray.Array2.t) -> - Sexp.t -> (float, 'a, Bigarray.fortran_layout) Bigarray.Array2.t -val create_float32_mat : - int -> - int -> - (float, Bigarray.float32_elt, Bigarray.fortran_layout) Bigarray.Array2.t -val create_float64_mat : - int -> - int -> - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array2.t -val float32_mat_of_sexp : - Sexp.t -> - (float, Bigarray.float32_elt, Bigarray.fortran_layout) Bigarray.Array2.t -val float64_mat_of_sexp : - Sexp.t -> - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array2.t -val mat_of_sexp : - Sexp.t -> - (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array2.t -val opaque_of_sexp : Pre_sexp.t -> 'a -val fun_of_sexp : Pre_sexp.t -> 'a -val of_string__of__of_sexp : (Sexp.t -> 'a) -> string -> 'a -val get_flc_error : string -> string * int * int -> Sexp.t diff --git a/bundles/sexplib/sexplib-7.0.5/lib/conv_error.ml b/bundles/sexplib/sexplib-7.0.5/lib/conv_error.ml deleted file mode 100644 index cac10e0..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/conv_error.ml +++ /dev/null @@ -1,141 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(* Conv_error: Module for Handling Errors during Automated S-expression - Conversions *) - -open Printf -open Conv - -(* Errors concerning tuples *) - -let tuple_of_size_n_expected loc n sexp = - of_sexp_error (sprintf "%s_of_sexp: tuple of size %d expected" loc n) sexp - - -(* Errors concerning sum types *) - -let stag_no_args loc sexp = - of_sexp_error (loc ^ "_of_sexp: sum tag does not take arguments") sexp - -let stag_incorrect_n_args loc tag sexp = - let msg = - sprintf "%s_of_sexp: sum tag %S has incorrect number of arguments" loc tag - in - of_sexp_error msg sexp - -let stag_takes_args loc sexp = - of_sexp_error (loc ^ "_of_sexp: sum tag must be a structured value") sexp - -let nested_list_invalid_sum loc sexp = - of_sexp_error (loc ^ "_of_sexp: a nested list is an invalid sum") sexp - -let empty_list_invalid_sum loc sexp = - of_sexp_error (loc ^ "_of_sexp: the empty list is an invalid sum") sexp - -let unexpected_stag loc sexp = - of_sexp_error (loc ^ "_of_sexp: unexpected sum tag") sexp - - -(* Errors concerning records *) - -let record_only_pairs_expected loc sexp = - let msg = - loc ^ - "_of_sexp: record conversion: only pairs expected, \ - their first element must be an atom" in - of_sexp_error msg sexp - -let record_superfluous_fields ~what ~loc rev_fld_names sexp = - let fld_names_str = String.concat " " (List.rev rev_fld_names) in - let msg = sprintf "%s_of_sexp: %s: %s" loc what fld_names_str in - of_sexp_error msg sexp - -let record_duplicate_fields loc rev_fld_names sexp = - record_superfluous_fields ~what:"duplicate fields" ~loc rev_fld_names sexp - -let record_extra_fields loc rev_fld_names sexp = - record_superfluous_fields ~what:"extra fields" ~loc rev_fld_names sexp - -let rec record_get_undefined_loop fields = function - | [] -> String.concat " " (List.rev fields) - | (true, field) :: rest -> record_get_undefined_loop (field :: fields) rest - | _ :: rest -> record_get_undefined_loop fields rest - -let record_undefined_elements loc sexp lst = - let undefined = record_get_undefined_loop [] lst in - let msg = - sprintf "%s_of_sexp: the following record elements were undefined: %s" - loc undefined - in - of_sexp_error msg sexp - -let record_list_instead_atom loc sexp = - let msg = loc ^ "_of_sexp: list instead of atom for record expected" in - of_sexp_error msg sexp - -let record_poly_field_value loc sexp = - let msg = - loc ^ - "_of_sexp: cannot convert values of types resulting from polymorphic \ - record fields" - in - of_sexp_error msg sexp - - -(* Errors concerning polymorphic variants *) - -exception No_variant_match of string * Sexp.t - -let no_variant_match loc sexp = - raise (No_variant_match (loc ^ "_of_sexp", sexp)) - -let no_matching_variant_found loc sexp = - of_sexp_error (loc ^ ": no matching variant found") sexp - -let ptag_no_args loc sexp = - of_sexp_error ( - loc ^ "_of_sexp: polymorphic variant does not take arguments") sexp - -let ptag_incorrect_n_args loc cnstr sexp = - let msg = - sprintf - "%s_of_sexp: polymorphic variant tag %S has incorrect number of arguments" - loc cnstr - in - of_sexp_error msg sexp - -let nested_list_invalid_poly_var loc sexp = - of_sexp_error ( - loc ^ "_of_sexp: a nested list is an invalid polymorphic variant") sexp - -let empty_list_invalid_poly_var loc sexp = - of_sexp_error ( - loc ^ "_of_sexp: the empty list is an invalid polymorphic variant") sexp - -let silly_type loc sexp = - of_sexp_error (loc ^ "_of_sexp: trying to convert a silly type") sexp - -let empty_type loc sexp = - of_sexp_error (loc ^ "_of_sexp: trying to convert an empty type") sexp diff --git a/bundles/sexplib/sexplib-7.0.5/lib/conv_error.mli b/bundles/sexplib/sexplib-7.0.5/lib/conv_error.mli deleted file mode 100644 index 5b8dda8..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/conv_error.mli +++ /dev/null @@ -1,26 +0,0 @@ -val tuple_of_size_n_expected : string -> int -> Pre_sexp.t -> 'a -val stag_no_args : string -> Pre_sexp.t -> 'a -val stag_incorrect_n_args : string -> string -> Pre_sexp.t -> 'a -val stag_takes_args : string -> Pre_sexp.t -> 'a -val nested_list_invalid_sum : string -> Pre_sexp.t -> 'a -val empty_list_invalid_sum : string -> Pre_sexp.t -> 'a -val unexpected_stag : string -> Pre_sexp.t -> 'a -val record_only_pairs_expected : string -> Pre_sexp.t -> 'a -val record_superfluous_fields : - what:string -> loc:string -> string list -> Pre_sexp.t -> 'a -val record_duplicate_fields : string -> string list -> Pre_sexp.t -> 'a -val record_extra_fields : string -> string list -> Pre_sexp.t -> 'a -val record_get_undefined_loop : string list -> (bool * string) list -> string -val record_undefined_elements : - string -> Pre_sexp.t -> (bool * string) list -> 'a -val record_list_instead_atom : string -> Pre_sexp.t -> 'a -val record_poly_field_value : string -> Pre_sexp.t -> 'a -exception No_variant_match of string * Sexp.t -val no_variant_match : string -> Sexp.t -> 'a -val no_matching_variant_found : string -> Pre_sexp.t -> 'a -val ptag_no_args : string -> Pre_sexp.t -> 'a -val ptag_incorrect_n_args : string -> string -> Pre_sexp.t -> 'a -val nested_list_invalid_poly_var : string -> Pre_sexp.t -> 'a -val empty_list_invalid_poly_var : string -> Pre_sexp.t -> 'a -val silly_type : string -> Pre_sexp.t -> 'a -val empty_type : string -> Pre_sexp.t -> 'a diff --git a/bundles/sexplib/sexplib-7.0.5/lib/exn_magic.ml b/bundles/sexplib/sexplib-7.0.5/lib/exn_magic.ml deleted file mode 100644 index 1bc0195..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/exn_magic.ml +++ /dev/null @@ -1,223 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -let register exc exc_name = - Conv.Exn_converter.add_auto exc (fun _exc -> Sexp.Atom exc_name) - -let magic_field repr n = Obj.magic (Obj.field repr n) - -let register1 make_exc exc_name - sexp_of_arg1 = - let exc = - make_exc - (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; - ]) - -let register2 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; - ]) - -let register3 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; - ]) - -let register4 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 sexp_of_arg4 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - let sexp4 = sexp_of_arg4 (magic_field repr 4) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; sexp4; - ]) - -let register5 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 sexp_of_arg4 sexp_of_arg5 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - let sexp4 = sexp_of_arg4 (magic_field repr 4) in - let sexp5 = sexp_of_arg5 (magic_field repr 5) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; sexp4; sexp5; - ]) - -let register6 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 sexp_of_arg4 sexp_of_arg5 - sexp_of_arg6 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - let sexp4 = sexp_of_arg4 (magic_field repr 4) in - let sexp5 = sexp_of_arg5 (magic_field repr 5) in - let sexp6 = sexp_of_arg6 (magic_field repr 6) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; sexp4; sexp5; sexp6; - ]) - -let register7 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 sexp_of_arg4 sexp_of_arg5 - sexp_of_arg6 sexp_of_arg7 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - let sexp4 = sexp_of_arg4 (magic_field repr 4) in - let sexp5 = sexp_of_arg5 (magic_field repr 5) in - let sexp6 = sexp_of_arg6 (magic_field repr 6) in - let sexp7 = sexp_of_arg7 (magic_field repr 7) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; sexp4; sexp5; sexp6; sexp7; - ]) - -let register8 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 sexp_of_arg4 sexp_of_arg5 - sexp_of_arg6 sexp_of_arg7 sexp_of_arg8 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - let sexp4 = sexp_of_arg4 (magic_field repr 4) in - let sexp5 = sexp_of_arg5 (magic_field repr 5) in - let sexp6 = sexp_of_arg6 (magic_field repr 6) in - let sexp7 = sexp_of_arg7 (magic_field repr 7) in - let sexp8 = sexp_of_arg8 (magic_field repr 8) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; sexp4; sexp5; sexp6; sexp7; sexp8; - ]) - -let register9 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 sexp_of_arg4 sexp_of_arg5 - sexp_of_arg6 sexp_of_arg7 sexp_of_arg8 sexp_of_arg9 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - let sexp4 = sexp_of_arg4 (magic_field repr 4) in - let sexp5 = sexp_of_arg5 (magic_field repr 5) in - let sexp6 = sexp_of_arg6 (magic_field repr 6) in - let sexp7 = sexp_of_arg7 (magic_field repr 7) in - let sexp8 = sexp_of_arg8 (magic_field repr 8) in - let sexp9 = sexp_of_arg9 (magic_field repr 9) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; sexp4; sexp5; sexp6; sexp7; sexp8; sexp9; - ]) - -let register10 make_exc exc_name - sexp_of_arg1 sexp_of_arg2 sexp_of_arg3 sexp_of_arg4 sexp_of_arg5 - sexp_of_arg6 sexp_of_arg7 sexp_of_arg8 sexp_of_arg9 sexp_of_arg10 = - let exc = - make_exc - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) (Obj.magic 0) - in - Conv.Exn_converter.add_auto exc (fun exc -> - let repr = Obj.repr exc in - let sexp1 = sexp_of_arg1 (magic_field repr 1) in - let sexp2 = sexp_of_arg2 (magic_field repr 2) in - let sexp3 = sexp_of_arg3 (magic_field repr 3) in - let sexp4 = sexp_of_arg4 (magic_field repr 4) in - let sexp5 = sexp_of_arg5 (magic_field repr 5) in - let sexp6 = sexp_of_arg6 (magic_field repr 6) in - let sexp7 = sexp_of_arg7 (magic_field repr 7) in - let sexp8 = sexp_of_arg8 (magic_field repr 8) in - let sexp9 = sexp_of_arg9 (magic_field repr 9) in - let sexp10 = sexp_of_arg10 (magic_field repr 10) in - Sexp.List [ - Sexp.Atom exc_name; - sexp1; sexp2; sexp3; sexp4; sexp5; sexp6; sexp7; sexp8; sexp9; sexp10; - ]) diff --git a/bundles/sexplib/sexplib-7.0.5/lib/exn_magic.mli b/bundles/sexplib/sexplib-7.0.5/lib/exn_magic.mli deleted file mode 100644 index d5d65c9..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/exn_magic.mli +++ /dev/null @@ -1,130 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -val register : exn -> string -> unit - -val register1 : - ('a -> exn) - -> string - -> ('a -> Sexp.t) - -> unit - -val register2 : - ('a -> 'b -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> unit - -val register3 : - ('a -> 'b -> 'c -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> unit - -val register4 : - ('a -> 'b -> 'c -> 'd -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> ('d -> Sexp.t) - -> unit - -val register5 : - ('a -> 'b -> 'c -> 'd -> 'e -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> ('d -> Sexp.t) - -> ('e -> Sexp.t) - -> unit - -val register6 : - ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> ('d -> Sexp.t) - -> ('e -> Sexp.t) - -> ('f -> Sexp.t) - -> unit - -val register7 : - ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> ('d -> Sexp.t) - -> ('e -> Sexp.t) - -> ('f -> Sexp.t) - -> ('g -> Sexp.t) - -> unit - -val register8 : - ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> ('d -> Sexp.t) - -> ('e -> Sexp.t) - -> ('f -> Sexp.t) - -> ('g -> Sexp.t) - -> ('h -> Sexp.t) - -> unit - -val register9 : - ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> 'i -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> ('d -> Sexp.t) - -> ('e -> Sexp.t) - -> ('f -> Sexp.t) - -> ('g -> Sexp.t) - -> ('h -> Sexp.t) - -> ('i -> Sexp.t) - -> unit - -val register10 : - ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> 'i -> 'j -> exn) - -> string - -> ('a -> Sexp.t) - -> ('b -> Sexp.t) - -> ('c -> Sexp.t) - -> ('d -> Sexp.t) - -> ('e -> Sexp.t) - -> ('f -> Sexp.t) - -> ('g -> Sexp.t) - -> ('h -> Sexp.t) - -> ('i -> Sexp.t) - -> ('j -> Sexp.t) - -> unit diff --git a/bundles/sexplib/sexplib-7.0.5/lib/lexer.mll b/bundles/sexplib/sexplib-7.0.5/lib/lexer.mll deleted file mode 100644 index 22e208e..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/lexer.mll +++ /dev/null @@ -1,173 +0,0 @@ -{ - (***************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - *****************************************************************************) - - (** Lexer: Lexer Specification for S-expressions *) - - open Printf - open Lexing - open Parser - - let char_for_backslash = function - | 'n' -> '\n' - | 't' -> '\t' - | 'b' -> '\b' - | 'r' -> '\r' - | c -> c - - let double_nl = "\013\010" - - let dec_code c1 c2 c3 = - 100 * (Char.code c1 - 48) + 10 * (Char.code c2 - 48) + (Char.code c3 - 48) - - let hex_code c1 c2 = - let d1 = Char.code c1 in - let val1 = - if d1 >= 97 then d1 - 87 - else if d1 >= 65 then d1 - 55 - else d1 - 48 in - let d2 = Char.code c2 in - let val2 = - if d2 >= 97 then d2 - 87 - else if d2 >= 65 then d2 - 55 - else d2 - 48 in - val1 * 16 + val2 - - let found_newline lexbuf diff = - let curr_p = lexbuf.lex_curr_p in - lexbuf.lex_curr_p <- - { - curr_p with - pos_lnum = curr_p.pos_lnum + 1; - pos_bol = max 1 (curr_p.pos_cnum - diff); - } - - let get_lexeme_len lexbuf = lexbuf.lex_curr_pos - lexbuf.lex_start_pos -} - -let newline = ('\010' | '\013' | "\013\010") -let space = [' ' '\009' '\012'] -let whitespace = [' ' '\010' '\013' '\009' '\012'] -let backslash_escapes = ['\\' '"' '\'' 'n' 't' 'b' 'r'] - -rule main buf = parse - | newline { found_newline lexbuf 1; main buf lexbuf } - | space+ | ';' [^ '\n' '\r']* { main buf lexbuf } - | '(' { LPAREN } - | ')' { RPAREN } - | '"' - { - scan_string buf lexbuf; - let str = Buffer.contents buf in - Buffer.clear buf; - STRING str - } - | ([^ ';' '(' ')' '"'] # whitespace)+ as str { STRING str } - | eof { EOF } - -and scan_string buf = parse - | '"' { () } - | '\\' ['\010' '\013'] [' ' '\009']* - { - let len = get_lexeme_len lexbuf in - found_newline lexbuf (len - 2); - scan_string buf lexbuf - } - | '\\' "\013\010" [' ' '\009']* - { - let len = get_lexeme_len lexbuf in - found_newline lexbuf (len - 3); - scan_string buf lexbuf - } - | '\\' (backslash_escapes as c) - { - Buffer.add_char buf (char_for_backslash c); - scan_string buf lexbuf - } - | '\\' (['0'-'9'] as c1) (['0'-'9'] as c2) (['0'-'9'] as c3) - { - let v = dec_code c1 c2 c3 in - if v > 255 then ( - let pos = lexbuf.lex_curr_p in - let msg = - sprintf - "Sexplib.Lexer.scan_string: \ - illegal escape at line %d char %d: `\\%c%c%c'" - pos.pos_lnum (pos.pos_cnum - pos.pos_bol - 3) - c1 c2 c3 in - failwith msg); - Buffer.add_char buf (Char.chr v); - scan_string buf lexbuf - } - | '\\' 'x' (['0'-'9' 'a'-'f' 'A'-'F'] as c1) (['0'-'9' 'a'-'f' 'A'-'F'] as c2) - { - let v = hex_code c1 c2 in - if v > 255 then ( - let pos = lexbuf.lex_curr_p in - let msg = - sprintf - "Sexplib.Lexer.scan_string: \ - illegal escape at line %d char %d: `\\x%c%c'" - pos.pos_lnum (pos.pos_cnum - pos.pos_bol - 3) - c1 c2 in - failwith msg); - Buffer.add_char buf (Char.chr v); - scan_string buf lexbuf - } - | '\\' (_ as c) - { - Buffer.add_char buf '\\'; - Buffer.add_char buf c; - scan_string buf lexbuf - } - | ['\010' '\013'] as c - { - found_newline lexbuf 1; - Buffer.add_char buf c; - scan_string buf lexbuf - } - | "\013\010" - { - found_newline lexbuf 2; - Buffer.add_string buf double_nl; - scan_string buf lexbuf - } - | [^ '\\' '"']+ - { - let ofs = lexbuf.lex_start_pos in - let len = lexbuf.lex_curr_pos - ofs in - Buffer.add_substring buf lexbuf.lex_buffer ofs len; - scan_string buf lexbuf - } - | eof { failwith "Sexplib.Lexer.scan_string: unterminated string" } - -{ - let main ?buf = - let buf = - match buf with - | None -> Buffer.create 64 - | Some buf -> Buffer.clear buf; buf - in - main buf -} diff --git a/bundles/sexplib/sexplib-7.0.5/lib/parser.mly b/bundles/sexplib/sexplib-7.0.5/lib/parser.mly deleted file mode 100644 index 6d7fc43..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/parser.mly +++ /dev/null @@ -1,75 +0,0 @@ -%{ - (***************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - *****************************************************************************) - - (** Parser: Grammar Specification for Parsing S-expressions *) - - open Lexing - - let parse_failure what = - let pos = symbol_start_pos () in - let msg = - Printf.sprintf "Sexplib.Parser: failed to parse line %d char %d: %s" - pos.pos_lnum (pos.pos_cnum - pos.pos_bol) what in - failwith msg -%} - -%token STRING -%token LPAREN RPAREN EOF - -%start sexp -%type sexp - -%start sexp_opt -%type sexp_opt - -%start sexps -%type sexps - -%start rev_sexps -%type rev_sexps - -%% - -sexp - : STRING { Type.Atom $1 } - | LPAREN RPAREN { Type.List [] } - | LPAREN rev_sexps_aux RPAREN { Type.List (List.rev $2) } - | error { parse_failure "sexp" } - -sexp_opt - : sexp { Some $1 } - | EOF { None } - -rev_sexps_aux - : sexp { [$1] } - | rev_sexps_aux sexp { $2 :: $1 } - -rev_sexps - : rev_sexps_aux { $1 } - | EOF { [] } - -sexps - : rev_sexps_aux { List.rev $1 } - | EOF { [] } diff --git a/bundles/sexplib/sexplib-7.0.5/lib/path.ml b/bundles/sexplib/sexplib-7.0.5/lib/path.ml deleted file mode 100644 index e529a5b..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/path.ml +++ /dev/null @@ -1,175 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(* Path: Module for Substitutions within S-expressions *) - -open Format - -open Sexp - -type el = Pos of int | Match of string * int | Rec of string -type t = el list - -let illegal_atom loc sexp = - failwith (sprintf "Path.%s: illegal atom: %s" loc (Sexp.to_string sexp)) - -let extract_pos_lst loc sexp ix lst = - let rec loop acc n = function - | [] -> - let sexp_str = Sexp.to_string sexp in - failwith ( - sprintf "Path.%s: illegal index %d in: %s" loc ix sexp_str) - | h :: t -> - if n = 0 then - let subst = function - | None -> List.rev_append acc t - | Some x -> List.rev_append acc (x :: t) in - subst, h - else loop (h :: acc) (n - 1) t in - loop [] ix lst - -let extract_pos n = function - | List lst as sexp -> - let subst, el = extract_pos_lst "extract_pos" sexp n lst in - (fun x -> List (subst x)), el - | Atom _ as sexp -> illegal_atom "extract_pos" sexp - -let extract_match tag arg_ix = function - | List (Atom str as sexp :: args) when str = tag -> - let subst, el = extract_pos_lst "extract_match" (List args) arg_ix args in - (fun maybe_x -> List (sexp :: subst maybe_x)), el - | List _ as sexp -> - let sexp_str = Sexp.to_string sexp in - failwith ("Path.extract_match: unexpected nested list in: " ^ sexp_str) - | Atom _ as sexp -> illegal_atom "extract_match" sexp - -let extract_rec key = function - | List lst as sexp -> - let rec loop acc = function - | [] -> - let sexp_str = Sexp.to_string sexp in - failwith ( - sprintf "Path.extract_rec: key \"%s\" not found in: %s" - key sexp_str) - | List [Atom str as sexp; v] :: rest when str = key -> - let subst x = List (List.rev_append acc (List [sexp; x] :: rest)) in - subst, v - | h :: t -> loop (h :: acc) t in - loop [] lst - | Atom _ as sexp -> illegal_atom "extract_rec" sexp - -let id x = x - -let rec subst_option (sup_subst, el) rest = - let sub_subst, sub_el = subst_path el rest in - let subst x = sup_subst (Some (sub_subst x)) in - subst, sub_el - -and subst_path sexp = function - | Pos n :: t -> subst_option (extract_pos n sexp) t - | Match (tag, arg_ix) :: t -> subst_option (extract_match tag arg_ix sexp) t - | Rec key :: rest -> - let rec_subst, el = extract_rec key sexp in - let sub_subst, sub_el = subst_path el rest in - let subst x = rec_subst (sub_subst x) in - subst, sub_el - | [] -> id, sexp - -let implode lst = - let len = List.length lst in - let str = String.create len in - let rec loop ix = function - | h :: t -> str.[ix] <- h; loop (ix + 1) t - | [] -> str in - loop 0 lst - -let fail_parse msg = failwith ("Path.parse: " ^ msg) - -let parse str = - let len = String.length str in - if len = 0 then fail_parse "path empty" - else - let rec loop acc dot_ix = - match str.[dot_ix] with - | '.' -> - let dot_ix1 = dot_ix + 1 in - if dot_ix1 = len then List.rev acc - else - let rec parse_dot acc str_acc ix = - if ix = len then - List.rev_append acc [Rec (implode (List.rev str_acc))] - else - match str.[ix] with - | '[' -> - let rec parse_index index_acc ix = - if ix = len then fail_parse "EOF reading index" - else - match str.[ix], index_acc with - | '0'..'9' as c, None -> - parse_index (Some (int_of_char c - 48)) (ix + 1) - | '0'..'9' as c, Some index_acc -> - let new_index_acc = - Some (10 * index_acc + int_of_char c - 48) in - parse_index new_index_acc (ix + 1) - | ']', None -> fail_parse "empty index" - | ']', Some index_acc -> - let path_el = - if str_acc = [] then Pos index_acc - else - Match (implode (List.rev str_acc), index_acc) in - let ix1 = ix + 1 in - if ix1 = len then List.rev_append acc [path_el] - else loop (path_el :: acc) ix1 - | c, _ -> - fail_parse ( - sprintf "illegal character in index: %c" c) in - parse_index None (ix + 1) - | '\\' -> - let ix1 = ix + 1 in - if ix1 = len then fail_parse "EOF after escape" - else parse_dot acc (str.[ix1] :: str_acc) (ix + 1) - | '.' -> - if str_acc = [] then fail_parse "double '.'"; - let path_el = Rec (implode (List.rev str_acc)) in - parse_dot (path_el :: acc) [] (ix + 1) - | c -> parse_dot acc (c :: str_acc) (ix + 1) in - parse_dot acc [] dot_ix1 - | c -> fail_parse (sprintf "'.' expected; got '%c'" c) in - loop [] 0 - -let get_subst path str sexp = - let path = - match path, str with - | Some path, _ -> path - | None, Some str -> parse str - | None, None -> [] in - subst_path sexp path - -let get ?path ?str sexp = snd (get_subst path str sexp) - -let replace ?path ?str sexp ~subst = - let subst_fun, _ = get_subst path str sexp in - subst_fun subst - -let replace_no_path ~str sexp ~subst = replace ~str sexp ~subst diff --git a/bundles/sexplib/sexplib-7.0.5/lib/path.mli b/bundles/sexplib/sexplib-7.0.5/lib/path.mli deleted file mode 100644 index 352ea01..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/path.mli +++ /dev/null @@ -1,141 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(** Path: Module for Substitutions within S-expressions *) - -(** {6 Types} *) - -(** Type of substitution elements *) -type el = - | Pos of int (** [Pos n] denotes [n]th element in a tuple *) - | Match of string * int - (** [Match (tag, n)] denotes [n]th argument of sum matching [tag] *) - | Rec of string (** [Rec name] denotes the record field having [name] *) - -(** Type of substitution paths *) -type t = el list - - -(** {6 High-level functions} *) - -val parse : string -> t -(** [parse str] @return a substitution path represented by string [str]. - - Syntax: - - "." -> - separates path elements; must be present at start of string. - - "\[4\]" -> - specifies the 4th element in a tuple. - - "some_tag\[4\]" -> - tries to match [some_tag], then denotes its 4th argument. - - "name" -> - denotes record field having [name] - - Example from test code: - - ".t.x.B[1]" -> choose record field with name [t], then subfield - [x]. Match this value against [B], and denote its first argument. - - @raise Failure if the path is syntactically invalid. -*) - -val get : ?path : t -> ?str : string -> Sexp.t -> Sexp.t -(** [get ?path ?str sexp] if [path] is provided, use it as path. - Otherwise, if [str] is provided, parse it as a path. If neither - is provided, assume an empty path. @return the sub-expression from - S-expression [sexp] denoted by the path. - - @raise Failure if path is syntactically invalid or if the path - structure clashes with the structure of the data. -*) - -val replace : ?path : t -> ?str : string -> Sexp.t -> subst : Sexp.t -> Sexp.t -(** [replace ?path ?str sexp ~subst] like [get], but does not extract - a sub-expression but substitutes it with [subst]. @return resulting - S-expression. - - @raise Failure if path is syntactically invalid or if the path - structure clashes with the structure of the data. -*) - -val replace_no_path : str : string -> Sexp.t -> subst : Sexp.t -> Sexp.t -(** [replace_no_path ~str sexp ~subst] like [replace], but does not take - optional arguments. [str] must be specified. - - @raise Failure if path is syntactically invalid or if the path - structure clashes with the structure of the data. -*) - -val subst_path : Sexp.t -> t -> (Sexp.t -> Sexp.t) * Sexp.t -(** [subst_path sexp path] @return the tuple [(subst, sub)], where [subst] - is a function that returns an S-expression in which the subexpression - denoted by [path] in [sexp] has been substituted by its argument. - [sub] is the denoted subexpression. Note that [subst sub = sexp]. - - @raise Failure if path is syntactically invalid or if the path - structure clashes with the structure of the data. -*) - - -(** {6 Low-level functions} *) - -val extract_pos : int -> Sexp.t -> (Sexp.t option -> Sexp.t) * Sexp.t -(** [extract_pos n sexp] @return the tuple [(subst, sub)], where [subst] - is a function that returns an S-expression in which the subexpression - denoted at position [n] in [sexp], which must be a list, has been - substituted by [value] if the optional argument is [Some value], or - removes the denoted subexpression if the optional argument is [None]. - [sub] is the denoted subexpression. Note that [subst (Some sub) = - sexp]. - - @raise Failure if the position cannot be resolved within the given - S-expression. -*) - -val extract_match : - string -> int -> Sexp.t -> (Sexp.t option -> Sexp.t) * Sexp.t -(** [extract_match tag n sexp] @return the tuple [(subst, sub)], where - [subst] is a function that returns an S-expression in which the - subexpression denoted by matching [tag] and taking its [n]th argument - in [sexp] has been substituted by [value] if the argument is [Some - value], or removes the denoted subexpression if the optional argument - is [None]. [sub] is the denoted subexpression. Note that [subst - (Some sub) = sexp]. - - @raise Failure if the S-expression does not represent a sum tag. -*) - -val extract_rec : string -> Sexp.t -> (Sexp.t -> Sexp.t) * Sexp.t -(** [extract_rec name sexp] @return the tuple [(subst, sub)], where - [subst] is a function that returns an S-expression in which the - subexpression denoted by matching field name [name] in [sexp] has - been substituted by its argument. [sub] is the denoted subexpression. - Note that [subst (Some sub) = sexp]. - - @raise Failure if the S-expression does not represent a record. -*) diff --git a/bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.ml b/bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.ml deleted file mode 100644 index b711ccd..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.ml +++ /dev/null @@ -1,1052 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(* Sexp: Module for handling S-expressions (I/O, etc.) *) - -open Format -open Bigarray - -include Type - -exception Of_sexp_error of exn * t - -type bigstring = (char, int8_unsigned_elt, c_layout) Array1.t - - -(* Default indentation level for human-readable conversions *) - -let default_indent = ref 1 - - -(* Escaping of strings used as atoms in S-expressions *) - -let is_special_char c = - c <= ' ' || c = '"' || c = '(' || c = ')' || c = ';' || c = '\\' - -let must_escape str = - let len = String.length str in - len = 0 || - let rec loop ix = is_special_char str.[ix] || ix > 0 && loop (ix - 1) in - loop (len - 1) - -let maybe_esc_str str = - if must_escape str then - let estr = String.escaped str in - let elen = String.length estr in - let res = String.create (elen + 2) in - String.blit estr 0 res 1 elen; - res.[0] <- '"'; - res.[elen + 1] <- '"'; - res - else str - -let pp_maybe_esc_str ppf str = pp_print_string ppf (maybe_esc_str str) - - -(* Output of S-expressions to formatters *) - -let rec pp_hum_indent indent ppf = function - | Atom str -> pp_maybe_esc_str ppf str - | List (h :: t) -> - pp_open_box ppf indent; - pp_print_string ppf "("; - pp_hum_indent indent ppf h; - pp_hum_rest indent ppf t - | List [] -> pp_print_string ppf "()" - -and pp_hum_rest indent ppf = function - | h :: t -> - pp_print_space ppf (); - pp_hum_indent indent ppf h; - pp_hum_rest indent ppf t - | [] -> - pp_print_string ppf ")"; - pp_close_box ppf () - -let rec pp_mach_internal may_need_space ppf = function - | Atom str -> - let str' = maybe_esc_str str in - let new_may_need_space = str' == str in - if may_need_space && new_may_need_space then pp_print_string ppf " "; - pp_print_string ppf str'; - new_may_need_space - | List (h :: t) -> - pp_print_string ppf "("; - let may_need_space = pp_mach_internal false ppf h in - pp_mach_rest may_need_space ppf t; - false - | List [] -> pp_print_string ppf "()"; false - -and pp_mach_rest may_need_space ppf = function - | h :: t -> - let may_need_space = pp_mach_internal may_need_space ppf h in - pp_mach_rest may_need_space ppf t - | [] -> pp_print_string ppf ")" - -let pp_hum ppf sexp = pp_hum_indent !default_indent ppf sexp - -let pp_mach ppf sexp = ignore (pp_mach_internal false ppf sexp) -let pp = pp_mach - - -(* Sexp size *) - -let rec size_loop (v, c as acc) = function - | Atom str -> v + 1, c + String.length str - | List lst -> List.fold_left size_loop acc lst - -let size sexp = size_loop (0, 0) sexp - - -(* Buffer conversions *) - -let to_buffer_hum ~buf ?(indent = !default_indent) sexp = - Format.bprintf buf "%a@?" (pp_hum_indent indent) sexp - -let to_buffer_mach ~buf sexp = - let rec loop may_need_space = function - | Atom str -> - let str' = maybe_esc_str str in - let new_may_need_space = str' == str in - if may_need_space && new_may_need_space then Buffer.add_char buf ' '; - Buffer.add_string buf str'; - new_may_need_space - | List (h :: t) -> - Buffer.add_char buf '('; - let may_need_space = loop false h in - loop_rest may_need_space t; - false - | List [] -> Buffer.add_string buf "()"; false - and loop_rest may_need_space = function - | h :: t -> - let may_need_space = loop may_need_space h in - loop_rest may_need_space t - | [] -> Buffer.add_char buf ')' in - ignore (loop false sexp) - -let to_buffer = to_buffer_mach - - -(* Output of S-expressions to I/O-channels *) - -let buffer () = Buffer.create 4096 - -let with_new_buffer oc f = - let buf = buffer () in - f buf; - Buffer.output_buffer oc buf - -let output_hum oc sexp = - with_new_buffer oc (fun buf -> to_buffer_hum sexp ~buf) - -let output_hum_indent indent oc sexp = - with_new_buffer oc (fun buf -> to_buffer_hum ~indent sexp ~buf) - -let output_mach oc sexp = - with_new_buffer oc (fun buf -> to_buffer_mach sexp ~buf) - -let output = output_mach - - -(* Output of S-expressions to file *) - -let save_of_output ?perm output_function file sexp = - let tmp_name, oc = Filename.open_temp_file file "tmp" in - try - output_function oc sexp; - close_out oc; - let perm = - match perm with - | Some perm -> perm - | None -> - let umask = Unix.umask 0 in - ignore (Unix.umask umask); - umask lxor 0o666 - in - if perm <> 0o600 then Unix.chmod tmp_name perm; - Sys.rename tmp_name file - with - e -> - close_out_noerr oc; - raise e - -let output_sexp_nl do_output oc sexp = - do_output oc sexp; - output_string oc "\n" - -let save_hum ?perm file sexp = - save_of_output ?perm (output_sexp_nl output_hum) file sexp - -let save_mach ?perm file sexp = save_of_output ?perm output_mach file sexp -let save = save_mach - -let output_sexps_nl do_output oc sexps = - List.iter (output_sexp_nl do_output oc) sexps - -let save_sexps_hum ?perm file sexps = - save_of_output ?perm (output_sexps_nl output_hum) file sexps - -let save_sexps_mach ?perm file sexps = - save_of_output ?perm (output_sexps_nl output_mach) file sexps - -let save_sexps = save_sexps_mach - - -(* String conversions *) - -let to_string_hum ?indent = function - | Atom str -> maybe_esc_str str - | sexp -> - let buf = buffer () in - to_buffer_hum ?indent sexp ~buf; - Buffer.contents buf - -let to_string_mach = function - | Atom str -> maybe_esc_str str - | sexp -> - let buf = buffer () in - to_buffer_mach sexp ~buf; - Buffer.contents buf - -let to_string = to_string_mach - - -(* Scan functions *) - -let scan_sexp ?buf lexbuf = Parser.sexp (Lexer.main ?buf) lexbuf -let scan_sexps ?buf lexbuf = Parser.sexps (Lexer.main ?buf) lexbuf - -let get_main_buf buf = - let buf = - match buf with - | None -> Buffer.create 64 - | Some buf -> buf in - Lexer.main ~buf - -let scan_fold_sexps ?buf ~f ~init lexbuf = - let main = get_main_buf buf in - let rec loop acc = - match Parser.sexp_opt main lexbuf with - | None -> acc - | Some sexp -> loop (f acc sexp) in - loop init - -let scan_iter_sexps ?buf ~f lexbuf = - scan_fold_sexps ?buf lexbuf ~init:() ~f:(fun () sexp -> f sexp) - -let scan_sexps_conv ?buf ~f lexbuf = - let coll acc sexp = f sexp :: acc in - List.rev (scan_fold_sexps ?buf ~f:coll ~init:[] lexbuf) - - -(* Partial parsing *) - -module Annot = struct - type pos = { line : int; col : int; offset : int } - type range = { start_pos : pos; end_pos : pos } - type t = Atom of range * Type.t | List of range * t list * Type.t - type 'a conv = [ `Result of 'a | `Error of exn * t ] - - exception Conv_exn of string * exn - - type stack = { - mutable positions : pos list; - mutable stack : t list list; - } - - let get_sexp = function Atom (_, sexp) | List (_, _, sexp) -> sexp - let get_range = function Atom (range, _) | List (range, _, _) -> range - - exception Annot_sexp of t - - let find_sexp annot_sexp sexp = - let rec loop annot_sexp = - match annot_sexp with - | Atom (_, sub_sexp) - | List (_, _, sub_sexp) when sexp == sub_sexp -> - raise (Annot_sexp annot_sexp) - | List (_, annots, _) -> List.iter loop annots - | Atom _ -> () - in - try loop annot_sexp; None - with Annot_sexp res -> Some res -end - -module Parse_pos = struct - type t = - { - mutable text_line : int; - mutable text_char : int; - mutable global_offset : int; - mutable buf_pos : int; - } - - let create - ?(text_line = 1) ?(text_char = 0) - ?(buf_pos = 0) ?(global_offset = 0) () = - let fail msg = failwith ("Sexplib.Sexp.Parse_pos.create: " ^ msg) in - if text_line < 1 then fail "text_line < 1" - else if text_char < 0 then fail "text_char < 0" - else if global_offset < 0 then fail "global_offset < 0" - else if buf_pos < 0 then fail "buf_pos < 0" - else { text_line = text_line; text_char = text_char; global_offset = global_offset; buf_pos = buf_pos } - - let with_buf_pos t buf_pos = { t with buf_pos = buf_pos } -end - -type ('a, 't) parse_result = - | Done of 't * Parse_pos.t - | Cont of bool * ('a, 't) parse_fun - -and ('a, 't) parse_fun = pos : int -> len : int -> 'a -> ('a, 't) parse_result - -type 't parse_state = - { - parse_pos : Parse_pos.t; - mutable pstack : 't; - pbuf : Buffer.t; - } - -type parse_error = - { - location : string; - err_msg : string; - parse_state : - [ - | `Sexp of t list list parse_state - | `Annot of Annot.stack parse_state - ] - } - -exception Parse_error of parse_error - -let bump_text_line { parse_pos = parse_pos } = - parse_pos.Parse_pos.text_line <- parse_pos.Parse_pos.text_line + 1; - parse_pos.Parse_pos.text_char <- 0 - -let bump_text_pos { parse_pos = parse_pos } = - parse_pos.Parse_pos.text_char <- parse_pos.Parse_pos.text_char + 1 - -let bump_pos_cont state str ~max_pos ~pos cont = - bump_text_pos state; - cont state str ~max_pos ~pos:(pos + 1) - -let bump_line_cont state str ~max_pos ~pos cont = - bump_text_line state; - cont state str ~max_pos ~pos:(pos + 1) - -let add_bump bump state str ~max_pos ~pos c cont = - Buffer.add_char state.pbuf c; - bump state; - cont state str ~max_pos ~pos:(pos + 1) - -let add_bump_pos state str ~max_pos ~pos c cont = - add_bump bump_text_pos state str ~max_pos ~pos c cont - -let add_bump_line state str ~max_pos ~pos c cont = - add_bump bump_text_line state str ~max_pos ~pos c cont - -let set_parse_pos parse_pos buf_pos = - let len = buf_pos - parse_pos.Parse_pos.buf_pos in - parse_pos.Parse_pos.buf_pos <- buf_pos; - parse_pos.Parse_pos.global_offset <- parse_pos.Parse_pos.global_offset + len - -let mk_parse_pos { parse_pos = parse_pos } buf_pos = - set_parse_pos parse_pos buf_pos; - parse_pos - -let raise_parse_error parse_state location buf_pos err_msg = - begin - match parse_state with - | `Sexp { parse_pos = parse_pos } | `Annot { parse_pos = parse_pos } -> - set_parse_pos parse_pos buf_pos; - parse_pos.Parse_pos.text_char <- parse_pos.Parse_pos.text_char + 1; - end; - let parse_error = { location = location; err_msg = err_msg; parse_state = parse_state } in - raise (Parse_error parse_error) - -let raise_unexpected_char parse_state location buf_pos c = - let err_msg = sprintf "unexpected character: '%c'" c in - raise_parse_error parse_state location buf_pos err_msg - -(* The code below is derived from lexer.mll in the OCaml distribution, - which also uses ASCII codes instead of escape sequences to denote - special characters. *) - -(* Macro for generating parsers *) -#define MK_PARSER( \ - TYPE, GET_LEN, PARSE, GET_CHAR, \ - GET_PSTACK, SET_PSTACK, \ - REGISTER_POS, REGISTER_POS1, \ - MK_ATOM, MK_LIST, INIT_PSTACK, MK_PARSE_STATE) \ - let bump_found_atom bump state str ~max_pos ~pos cont = \ - let pbuf = state.pbuf in \ - let pbuf_str = Buffer.contents pbuf in \ - let atom = MK_ATOM in \ - match GET_PSTACK with \ - | [] -> Done (atom, mk_parse_pos state pos) \ - | rev_sexp_lst :: sexp_stack -> \ - Buffer.clear pbuf; \ - let pstack = (atom :: rev_sexp_lst) :: sexp_stack in \ - SET_PSTACK; \ - bump state; \ - cont state str ~max_pos ~pos:(pos + 1) \ - \ - let check_str_bounds loc ~pos ~len (str : TYPE) = \ - if pos < 0 then invalid_arg (loc ^ ": pos < 0"); \ - if len < 0 then invalid_arg (loc ^ ": len < 0"); \ - let str_len = GET_LEN str in \ - let pos_len = pos + len in \ - if pos_len > str_len then invalid_arg (loc ^ ": pos + len > str_len"); \ - pos_len - 1 \ - \ - let mk_cont name cont state = \ - let ws_only = GET_PSTACK = [] && Buffer.length state.pbuf = 0 in \ - let parse_fun = \ - let used_ref = ref false in \ - fun ~pos ~len str -> \ - if !used_ref then \ - failwith "Sexplib.Sexp: parser continuation called twice" \ - else begin \ - used_ref := true; \ - let max_pos = check_str_bounds name ~pos ~len str in \ - cont state str ~max_pos ~pos \ - end \ - in \ - Cont (ws_only, parse_fun) \ - \ - let rec PARSE state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse" PARSE state \ - else \ - match GET_CHAR with \ - | '(' -> \ - REGISTER_POS \ - let pstack = [] :: GET_PSTACK in \ - SET_PSTACK; \ - bump_pos_cont state str ~max_pos ~pos PARSE \ - | ')' as c -> \ - (match GET_PSTACK with \ - | [] -> raise_unexpected_char (MK_PARSE_STATE state) "parse" pos c \ - | rev_sexp_lst :: sexp_stack -> \ - let sexp_lst = List.rev rev_sexp_lst in \ - let sexp = MK_LIST in \ - match sexp_stack with \ - | [] -> Done (sexp, mk_parse_pos state (pos + 1)) \ - | higher_rev_sexp_lst :: higher_sexp_stack -> \ - let pstack = \ - (sexp :: higher_rev_sexp_lst) :: higher_sexp_stack \ - in \ - SET_PSTACK; \ - bump_pos_cont state str ~max_pos ~pos PARSE) \ - | ' ' | '\009' | '\012' -> bump_pos_cont state str ~max_pos ~pos PARSE \ - | '\010' -> bump_line_cont state str ~max_pos ~pos PARSE \ - | '\013' -> bump_line_cont state str ~max_pos ~pos parse_nl \ - | ';' -> bump_pos_cont state str ~max_pos ~pos parse_comment \ - | '"' -> \ - REGISTER_POS1 \ - bump_pos_cont state str ~max_pos ~pos parse_quoted \ - | c -> \ - REGISTER_POS \ - add_bump_pos state str ~max_pos ~pos c parse_atom \ - \ - and parse_nl state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_nl" parse_nl state \ - else \ - let pos = if GET_CHAR = '\010' then pos + 1 else pos in \ - PARSE state str ~max_pos ~pos \ - \ - and parse_comment state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_comment" parse_comment state \ - else \ - match GET_CHAR with \ - | '\010' -> bump_line_cont state str ~max_pos ~pos PARSE \ - | '\013' -> bump_line_cont state str ~max_pos ~pos parse_nl \ - | _ -> bump_pos_cont state str ~max_pos ~pos parse_comment \ - \ - and parse_atom state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_atom" parse_atom state \ - else \ - match GET_CHAR with \ - | ' ' | '\009' | '\012' -> \ - bump_found_atom bump_text_pos state str ~max_pos ~pos PARSE \ - | '(' -> \ - let pbuf = state.pbuf in \ - let pbuf_str = Buffer.contents pbuf in \ - let atom = MK_ATOM in \ - (match GET_PSTACK with \ - | [] -> Done (atom, mk_parse_pos state pos) \ - | rev_sexp_lst :: sexp_stack -> \ - REGISTER_POS \ - Buffer.clear pbuf; \ - let pstack = [] :: (atom :: rev_sexp_lst) :: sexp_stack in \ - SET_PSTACK; \ - bump_pos_cont state str ~max_pos ~pos PARSE) \ - | ')' -> \ - let pbuf = state.pbuf in \ - let pbuf_str = Buffer.contents pbuf in \ - let atom = MK_ATOM in \ - (match GET_PSTACK with \ - | [] -> Done (atom, mk_parse_pos state pos) \ - | rev_sexp_lst :: sexp_stack -> \ - let sexp_lst = List.rev_append rev_sexp_lst [atom] in \ - let sexp = MK_LIST in \ - match sexp_stack with \ - | [] -> Done (sexp, mk_parse_pos state (pos + 1)) \ - | higher_rev_sexp_lst :: higher_sexp_stack -> \ - Buffer.clear pbuf; \ - let pstack = \ - (sexp :: higher_rev_sexp_lst) :: higher_sexp_stack \ - in \ - SET_PSTACK; \ - bump_pos_cont state str ~max_pos ~pos PARSE) \ - | '\010' -> bump_found_atom bump_text_line state str ~max_pos ~pos PARSE \ - | '\013' -> \ - bump_found_atom bump_text_line state str ~max_pos ~pos parse_nl \ - | ';' -> \ - bump_found_atom bump_text_pos state str ~max_pos ~pos parse_comment \ - | '"' -> \ - bump_found_atom \ - bump_text_pos state str ~max_pos ~pos reg_parse_quoted \ - | c -> add_bump_pos state str ~max_pos ~pos c parse_atom \ - \ - and reg_parse_quoted state str ~max_pos ~pos = \ - REGISTER_POS \ - parse_quoted state str ~max_pos ~pos \ - and parse_quoted state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_quoted" parse_quoted state \ - else \ - match GET_CHAR with \ - | '"' -> \ - let pbuf = state.pbuf in \ - let pbuf_str = Buffer.contents pbuf in \ - let atom = MK_ATOM in \ - (match GET_PSTACK with \ - | [] -> Done (atom, mk_parse_pos state (pos + 1)) \ - | rev_sexp_lst :: sexp_stack -> \ - Buffer.clear pbuf; \ - let pstack = (atom :: rev_sexp_lst) :: sexp_stack in \ - SET_PSTACK; \ - bump_pos_cont state str ~max_pos ~pos PARSE) \ - | '\\' -> bump_pos_cont state str ~max_pos ~pos parse_escaped \ - | '\010' as c -> add_bump_line state str ~max_pos ~pos c parse_quoted \ - | '\013' as c -> add_bump_line state str ~max_pos ~pos c parse_quoted_nl \ - | c -> add_bump_pos state str ~max_pos ~pos c parse_quoted \ - \ - and parse_quoted_nl state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_quoted_nl" parse_quoted_nl state \ - else \ - let pos = \ - let c = '\010' in \ - if GET_CHAR = c then ( \ - Buffer.add_char state.pbuf c; \ - pos + 1 \ - ) \ - else pos \ - in \ - parse_quoted state str ~max_pos ~pos \ - \ - and parse_escaped state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_escaped" parse_escaped state \ - else \ - match GET_CHAR with \ - | '\010' -> bump_line_cont state str ~max_pos ~pos parse_skip_ws \ - | '\013' -> bump_line_cont state str ~max_pos ~pos parse_skip_ws_nl \ - | '0' .. '9' as c -> \ - bump_text_pos state; \ - let d = Char.code c - 48 in \ - parse_dec state str ~max_pos ~pos:(pos + 1) ~count:2 ~d \ - | 'x' -> \ - bump_text_pos state; \ - parse_hex state str ~max_pos ~pos:(pos + 1) ~count:2 ~d:0 \ - | ('\\' | '"' | '\'' ) as c -> \ - add_bump_pos state str ~max_pos ~pos c parse_quoted \ - | 'n' -> add_bump_pos state str ~max_pos ~pos '\n' parse_quoted \ - | 't' -> add_bump_pos state str ~max_pos ~pos '\t' parse_quoted \ - | 'b' -> add_bump_pos state str ~max_pos ~pos '\b' parse_quoted \ - | 'r' -> add_bump_pos state str ~max_pos ~pos '\r' parse_quoted \ - | c -> \ - Buffer.add_char state.pbuf '\\'; \ - add_bump_pos state str ~max_pos ~pos c parse_quoted \ - \ - and parse_skip_ws state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_skip_ws" parse_skip_ws state \ - else \ - match GET_CHAR with \ - | ' ' | '\009' -> bump_pos_cont state str ~max_pos ~pos parse_skip_ws \ - | _ -> parse_quoted state str ~max_pos ~pos \ - \ - and parse_skip_ws_nl state str ~max_pos ~pos = \ - if pos > max_pos then mk_cont "parse_skip_ws_nl" parse_skip_ws_nl state \ - else \ - let pos = if GET_CHAR = '\010' then pos + 1 else pos in \ - parse_skip_ws state str ~max_pos ~pos \ - \ - and parse_dec state str ~max_pos ~pos ~count ~d = \ - if pos > max_pos then mk_cont "parse_dec" (parse_dec ~count ~d) state \ - else \ - match GET_CHAR with \ - | '0' .. '9' as c -> \ - let d = 10 * d + Char.code c - 48 in \ - if count = 1 then \ - if d > 255 then \ - let err_msg = sprintf "illegal decimal escape: \\%d" d in \ - raise_parse_error (MK_PARSE_STATE state) "parse_dec" pos err_msg \ - else \ - add_bump_pos state str ~max_pos ~pos (Char.chr d) parse_quoted \ - else ( \ - bump_text_pos state; \ - parse_dec state str ~max_pos ~pos:(pos + 1) ~count:(count - 1) ~d) \ - | c -> raise_unexpected_char (MK_PARSE_STATE state) "parse_dec" pos c \ - \ - and parse_hex state str ~max_pos ~pos ~count ~d = \ - if pos > max_pos then mk_cont "parse_hex" (parse_hex ~count ~d) state \ - else \ - match GET_CHAR with \ - | '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' as c -> \ - let corr = \ - if c >= 'a' then 87 \ - else if c >= 'A' then 55 \ - else 48 \ - in \ - let d = 16 * d + Char.code c - corr in \ - if count = 1 then \ - if d > 255 then \ - let err_msg = sprintf "illegal hexadecimal escape: \\%x" d in \ - raise_parse_error (MK_PARSE_STATE state) "parse_hex" pos err_msg \ - else \ - add_bump_pos state str ~max_pos ~pos (Char.chr d) parse_quoted \ - else ( \ - bump_text_pos state; \ - parse_hex state str ~max_pos ~pos:(pos + 1) ~count:(count - 1) ~d) \ - | c -> raise_unexpected_char (MK_PARSE_STATE state) "parse_hex" pos c \ - \ - let PARSE ?(parse_pos = Parse_pos.create ()) ?len str = \ - let pos = parse_pos.Parse_pos.buf_pos in \ - let len = \ - match len with \ - | Some len -> len \ - | None -> GET_LEN str - pos \ - in \ - let max_pos = check_str_bounds "parse" ~pos ~len str in \ - let state = \ - { \ - parse_pos = parse_pos; \ - pstack = INIT_PSTACK; \ - pbuf = Buffer.create 128; \ - } \ - in \ - PARSE state str ~max_pos ~pos - -MK_PARSER( - string, String.length, parse_str, str.[pos], - state.pstack, state.pstack <- pstack, - ,, - Atom pbuf_str, List sexp_lst, [], `Sexp -) - -let parse = parse_str - - -(* Annot parsers *) - -let get_glob_ofs parse_pos pos = - parse_pos.Parse_pos.global_offset + pos - parse_pos.Parse_pos.buf_pos - -let mk_annot_pos - ({ Parse_pos.text_line = line; text_char = col } as parse_pos) pos = - { Annot.line = line; col = col; offset = get_glob_ofs parse_pos pos } - -let mk_annot_pos1 - ({ Parse_pos.text_line = line; text_char = col } as parse_pos) pos = - { Annot.line = line; col = col + 1; offset = get_glob_ofs parse_pos pos } - -let add_annot_pos { parse_pos = parse_pos; pstack = pstack } pos = - pstack.Annot.positions <- mk_annot_pos parse_pos pos :: pstack.Annot.positions - -let add_annot_pos1 { parse_pos = parse_pos; pstack = pstack } pos = - pstack.Annot.positions <- - mk_annot_pos1 parse_pos pos :: pstack.Annot.positions - -let get_annot_range { parse_pos = parse_pos; pstack = pstack } pos = - let start_pos = - match pstack.Annot.positions with - | [] -> assert false (* impossible *) - | h :: t -> pstack.Annot.positions <- t; h - in - let end_pos = - { - Annot. - line = parse_pos.Parse_pos.text_line; - col = parse_pos.Parse_pos.text_char; - offset = get_glob_ofs parse_pos pos; - } - in - { Annot.start_pos = start_pos; end_pos = end_pos } - -let mk_annot_atom parse_state str pos = - Annot.Atom (get_annot_range parse_state pos, Atom str) - -let mk_annot_list parse_state annot_lst pos = - let range = get_annot_range parse_state pos in - let sexp = List (List.rev (List.rev_map Annot.get_sexp annot_lst)) in - Annot.List (range, annot_lst, sexp) - -let init_annot_pstate () = { Annot.positions = []; stack = [] } - -MK_PARSER( - string, String.length, parse_str_annot, str.[pos], - state.pstack.Annot.stack, state.pstack.Annot.stack <- pstack, - add_annot_pos state pos;,add_annot_pos1 state pos;, - mk_annot_atom state pbuf_str pos, mk_annot_list state sexp_lst pos, - init_annot_pstate (), `Annot -) - - -(* Partial parsing from bigstrings *) - -(* NOTE: this is really an awful duplication of the code for parsing - strings, but since OCaml does not inline higher-order functions known - at compile, other solutions would sacrifice a lot of efficiency. *) - -MK_PARSER( - bigstring, Array1.dim, parse_bigstring, str.{pos}, - state.pstack, state.pstack <- pstack, - ,, - Atom pbuf_str, List sexp_lst, [], `Sexp -) - -MK_PARSER( - bigstring, Array1.dim, parse_bigstring_annot, str.{pos}, - state.pstack.Annot.stack, state.pstack.Annot.stack <- pstack, - add_annot_pos state pos;,add_annot_pos1 state pos;, - mk_annot_atom state pbuf_str pos, mk_annot_list state sexp_lst pos, - init_annot_pstate (), `Annot -) - - -(* Input functions *) - -let mk_this_parse ?parse_pos my_parse = (); fun ~pos ~len str -> - let parse_pos = - match parse_pos with - | None -> Parse_pos.create ~buf_pos:pos () - | Some parse_pos -> parse_pos.Parse_pos.buf_pos <- pos; parse_pos - in - my_parse ?parse_pos:(Some parse_pos) ?len:(Some len) str - -let gen_input_sexp my_parse ?parse_pos ic = - let buf = String.create 1 in - let rec loop this_parse = - let c = input_char ic in - buf.[0] <- c; - match this_parse ~pos:0 ~len:1 buf with - | Done (sexp, _) -> sexp - | Cont (_, this_parse) -> loop this_parse - in - loop (mk_this_parse ?parse_pos my_parse) - -let input_sexp ?parse_pos ic = gen_input_sexp parse ?parse_pos ic - -let gen_input_rev_sexps my_parse ?parse_pos ?(buf = String.create 8192) ic = - let rev_sexps_ref = ref [] in - let buf_len = String.length buf in - let rec loop this_parse ~pos ~len ~is_incomplete = - if len > 0 then - match this_parse ~pos ~len buf with - | Done (sexp, ({ Parse_pos.buf_pos = buf_pos } as parse_pos)) -> - rev_sexps_ref := sexp :: !rev_sexps_ref; - let n_parsed = buf_pos - pos in - let this_parse = mk_this_parse ~parse_pos my_parse in - if n_parsed = len then - let new_len = input ic buf 0 buf_len in - loop this_parse ~pos:0 ~len:new_len ~is_incomplete:false - else - loop this_parse - ~pos:buf_pos ~len:(len - n_parsed) ~is_incomplete:false - | Cont (ws_only, this_parse) -> - loop this_parse - ~pos:0 ~len:(input ic buf 0 buf_len) ~is_incomplete:(not ws_only) - else if is_incomplete then - failwith - "Sexplib.Sexp.input_rev_sexps: reached EOF with incomplete S-expression" - else !rev_sexps_ref - in - let len = input ic buf 0 buf_len in - let this_parse = mk_this_parse ?parse_pos my_parse in - loop this_parse ~pos:0 ~len ~is_incomplete:false - -let input_rev_sexps ?parse_pos ?buf ic = - gen_input_rev_sexps parse ?parse_pos ?buf ic - -let input_sexps ?parse_pos ?buf ic = - List.rev (input_rev_sexps ?parse_pos ?buf ic) - - -(* of_string and of_bigstring *) - -let of_string_bigstring loc this_parse ws_buf get_len get_sub str = - match this_parse str with - | Done (_, { Parse_pos.buf_pos = buf_pos }) when buf_pos <> get_len str -> - let prefix_len = min (get_len str - buf_pos) 20 in - let prefix = get_sub str buf_pos prefix_len in - let msg = - sprintf - "Sexplib.Sexp.%s: S-expression followed by data at position %d: %S..." - loc buf_pos prefix - in - failwith msg - | Done (sexp, _) -> sexp - | Cont (ws_only, this_parse) -> - if ws_only then failwith (sprintf "Sexplib.Sexp.%s: whitespace only" loc); - (* When parsing atoms, the incremental parser cannot tell whether - it is at the end until it hits whitespace. We therefore feed - it one space to determine whether it is finished. *) - match this_parse ~pos:0 ~len:1 ws_buf with - | Done (sexp, _) -> sexp - | Cont _ -> - failwith ( - sprintf "Sexplib.Sexp.%s: got incomplete S-expression: %s" - loc (get_sub str 0 (get_len str))) - -let of_string str = - of_string_bigstring "of_string" parse " " String.length String.sub str - -let get_bstr_sub_str bstr pos len = - let str = String.create len in - for i = 0 to len - 1 do str.[i] <- bstr.{pos + i} done; - str - -let bstr_ws_buf = Array1.create char c_layout 1 -let () = bstr_ws_buf.{0} <- ' ' - -let of_bigstring bstr = - of_string_bigstring - "of_bigstring" parse_bigstring bstr_ws_buf Array1.dim get_bstr_sub_str bstr - - -(* Loading *) - -let gen_load_rev_sexps input_rev_sexps ?buf file = - let ic = open_in file in - try - let sexps = input_rev_sexps ?parse_pos:None ?buf ic in - close_in ic; - sexps - with exc -> close_in_noerr ic; raise exc - -let load_rev_sexps ?buf file = gen_load_rev_sexps input_rev_sexps ?buf file - -let load_sexps ?buf file = List.rev (load_rev_sexps ?buf file) - -let gen_load_sexp my_parse ?(strict = true) ?(buf = String.create 8192) file = - let buf_len = String.length buf in - let ic = open_in file in - let rec loop this_parse = - let len = input ic buf 0 buf_len in - if len = 0 then - failwith (sprintf "Sexplib.Sexp.gen_load_sexp: end of file: %s" file) - else - match this_parse ~pos:0 ~len buf with - | Done (sexp, ({ Parse_pos.buf_pos = buf_pos } as parse_pos)) - when strict -> - let rec strict_loop this_parse ~pos ~len = - match this_parse ~pos ~len buf with - | Done _ | Cont (false, _) -> - failwith ( - sprintf - "Sexplib.Sexp.gen_load_sexp: more than one S-expression: %s" - file) - | Cont (true, this_parse) -> - let len = input ic buf 0 buf_len in - if len = 0 then sexp - else strict_loop this_parse ~pos:0 ~len - in - let this_parse = mk_this_parse ~parse_pos my_parse in - strict_loop this_parse ~pos:buf_pos ~len:(len - buf_pos) - | Done (sexp, _) -> sexp - | Cont (_, this_parse) -> loop this_parse - in - try - let sexp = loop (mk_this_parse my_parse) in - close_in ic; - sexp - with exc -> close_in_noerr ic; raise exc - -let load_sexp ?strict ?buf file = gen_load_sexp parse ?strict ?buf file - -module Annotated = struct - include Annot - - let parse = parse_str_annot - let parse_bigstring = parse_bigstring_annot - - let input_rev_sexps ?parse_pos ?buf ic = - gen_input_rev_sexps parse ?parse_pos ?buf ic - - let input_sexp ?parse_pos ic = gen_input_sexp parse ?parse_pos ic - - let input_sexps ?parse_pos ?buf ic = - List.rev (input_rev_sexps ?parse_pos ?buf ic) - - let of_string str = - of_string_bigstring - "Annotated.of_string" parse " " String.length String.sub str - - let of_bigstring bstr = - of_string_bigstring - "Annotated.of_bigstring" - parse_bigstring bstr_ws_buf Array1.dim get_bstr_sub_str bstr - - let load_rev_sexps ?buf file = gen_load_rev_sexps input_rev_sexps ?buf file - let load_sexps ?buf file = List.rev (load_rev_sexps ?buf file) - let load_sexp ?strict ?buf file = gen_load_sexp parse ?strict ?buf file - - let conv f annot_sexp = - let sexp = get_sexp annot_sexp in - try `Result (f sexp) - with Of_sexp_error (exc, bad_sexp) as e -> - match find_sexp annot_sexp bad_sexp with - | None -> raise e - | Some bad_annot_sexp -> `Error (exc, bad_annot_sexp) - - let get_conv_exn ~file ~exc annot_sexp = - let range = get_range annot_sexp in - let { start_pos = { line = line; col = col } } = range in - let loc = sprintf "%s:%d:%d" file line col in - Of_sexp_error (Annot.Conv_exn (loc, exc), get_sexp annot_sexp) -end - -let load_sexp_conv ?(strict = true) ?(buf = String.create 8192) file f = - let sexp = load_sexp ~strict ~buf file in - try `Result (f sexp) - with Of_sexp_error _ -> - Annotated.conv f (Annotated.load_sexp ~strict ~buf file) - -let raise_conv_exn ~file = function - | `Result res -> res - | `Error (exc, annot_sexp) -> - raise (Annotated.get_conv_exn ~file ~exc annot_sexp) - -let load_sexp_conv_exn ?strict ?buf file f = - raise_conv_exn ~file (load_sexp_conv ?strict ?buf file f) - -let load_sexps_conv ?(buf = String.create 8192) file f = - let rev_sexps = load_rev_sexps ~buf file in - try List.rev_map (fun sexp -> `Result (f sexp)) rev_sexps - with Of_sexp_error _ as e -> - match Annotated.load_rev_sexps ~buf file with - | [] -> - (* File is now empty - perhaps it was a temporary file handle? *) - raise e - | rev_annot_sexps -> - List.rev_map (fun annot_sexp -> Annotated.conv f annot_sexp) - rev_annot_sexps - -let load_sexps_conv_exn ?(buf = String.create 8192) file f = - let rev_sexps = load_rev_sexps ~buf file in - try List.rev_map f rev_sexps - with Of_sexp_error _ as e -> - match Annotated.load_rev_sexps ~buf file with - | [] -> - (* File is now empty - perhaps it was a temporary file handle? *) - raise e - | rev_annot_sexps -> - List.rev_map - (fun annot_sexp -> raise_conv_exn ~file (Annotated.conv f annot_sexp)) - rev_annot_sexps - -let gen_of_string_conv of_string annot_of_string str f = - let sexp = of_string str in - try `Result (f sexp) - with Of_sexp_error _ -> Annotated.conv f (annot_of_string str) - -let of_string_conv str f = - gen_of_string_conv of_string Annotated.of_string str f - -let of_bigstring_conv bstr f = - gen_of_string_conv of_bigstring Annotated.of_bigstring bstr f - -module Of_string_conv_exn = struct - type t = { exc : exn; sexp : Type.t; sub_sexp : Type.t } - - exception E of t -end - -let gen_of_string_conv_exn of_string str f = - let sexp = of_string str in - try f sexp - with Of_sexp_error (exc, sub_sexp) -> - raise (Of_string_conv_exn.E { Of_string_conv_exn.exc = exc; sexp = sexp; sub_sexp = sub_sexp }) - -let of_string_conv_exn str f = gen_of_string_conv_exn of_string str f -let of_bigstring_conv_exn bstr f = gen_of_string_conv_exn of_bigstring bstr f - - -(* Utilities for automated type conversions *) - -let unit = List [] - -external sexp_of_t : t -> t = "%identity" -external t_of_sexp : t -> t = "%identity" - - -(* Utilities for conversion error handling *) - -type found = [ `Found | `Pos of int * found ] -type search_result = [ `Not_found | found ] - -let rec search_physical sexp ~contained = - if sexp == contained then `Found - else - match sexp with - | Atom _ -> `Not_found - | List lst -> - let rec loop i = function - | [] -> `Not_found - | h :: t -> - let res = search_physical h ~contained in - match res with - | `Not_found -> loop (i + 1) t - | #found as found -> `Pos (i, found) - in - loop 0 lst - -let rec subst_found sexp ~subst = function - | `Found -> subst - | `Pos (pos, found) -> - match sexp with - | Atom _ -> - failwith - "Sexplib.Sexp.subst_search_result: atom when position requested" - | List lst -> - let rec loop acc pos = function - | [] -> - failwith - "Sexplib.Sexp.subst_search_result: \ - short list when position requested" - | h :: t when pos <> 0 -> loop (h :: acc) (pos - 1) t - | h :: t -> - List (List.rev_append acc (subst_found h ~subst found :: t)) - in - loop [] pos lst diff --git a/bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.mli b/bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.mli deleted file mode 100644 index 74c6a7e..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/pre_sexp.mli +++ /dev/null @@ -1,316 +0,0 @@ -type t = Type.t = Atom of string | List of t list -exception Of_sexp_error of exn * t -type bigstring = - (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -val default_indent : int ref -val is_special_char : char -> bool -val must_escape : string -> bool -val maybe_esc_str : string -> string -val pp_maybe_esc_str : Format.formatter -> string -> unit -val pp_hum_indent : int -> Format.formatter -> t -> unit -val pp_hum_rest : int -> Format.formatter -> t list -> unit -val pp_mach_internal : bool -> Format.formatter -> t -> bool -val pp_mach_rest : bool -> Format.formatter -> t list -> unit -val pp_hum : Format.formatter -> t -> unit -val pp_mach : Format.formatter -> t -> unit -val pp : Format.formatter -> t -> unit -val size_loop : int * int -> t -> int * int -val size : t -> int * int -val to_buffer_hum : buf:Buffer.t -> ?indent:int -> t -> unit -val to_buffer_mach : buf:Buffer.t -> t -> unit -val to_buffer : buf:Buffer.t -> t -> unit -val buffer : unit -> Buffer.t -val with_new_buffer : out_channel -> (Buffer.t -> 'a) -> unit -val output_hum : out_channel -> t -> unit -val output_hum_indent : int -> out_channel -> t -> unit -val output_mach : out_channel -> t -> unit -val output : out_channel -> t -> unit -val save_of_output : - ?perm:Unix.file_perm -> (out_channel -> 'a -> 'b) -> string -> 'a -> unit -val output_sexp_nl : (out_channel -> 'a -> 'b) -> out_channel -> 'a -> unit -val save_hum : ?perm:Unix.file_perm -> string -> t -> unit -val save_mach : ?perm:Unix.file_perm -> string -> t -> unit -val save : ?perm:Unix.file_perm -> string -> t -> unit -val output_sexps_nl : - (out_channel -> 'a -> 'b) -> out_channel -> 'a list -> unit -val save_sexps_hum : ?perm:Unix.file_perm -> string -> t list -> unit -val save_sexps_mach : ?perm:Unix.file_perm -> string -> t list -> unit -val save_sexps : ?perm:Unix.file_perm -> string -> t list -> unit -val to_string_hum : ?indent:int -> t -> string -val to_string_mach : t -> string -val to_string : t -> string -val scan_sexp : ?buf:Buffer.t -> Lexing.lexbuf -> Type.t -val scan_sexps : ?buf:Buffer.t -> Lexing.lexbuf -> Type.t list -val get_main_buf : Buffer.t option -> Lexing.lexbuf -> Parser.token -val scan_fold_sexps : - ?buf:Buffer.t -> f:('a -> Type.t -> 'a) -> init:'a -> Lexing.lexbuf -> 'a -val scan_iter_sexps : - ?buf:Buffer.t -> f:(Type.t -> unit) -> Lexing.lexbuf -> unit -val scan_sexps_conv : - ?buf:Buffer.t -> f:(Type.t -> 'a) -> Lexing.lexbuf -> 'a list -module Annot : - sig - type pos = { line : int; col : int; offset : int; } - type range = { start_pos : pos; end_pos : pos; } - type t = Atom of range * Type.t | List of range * t list * Type.t - type 'a conv = [ `Error of exn * t | `Result of 'a ] - exception Conv_exn of string * exn - type stack = { - mutable positions : pos list; - mutable stack : t list list; - } - val get_sexp : t -> Type.t - val get_range : t -> range - exception Annot_sexp of t - val find_sexp : t -> Type.t -> t option - end -module Parse_pos : - sig - type t = { - mutable text_line : int; - mutable text_char : int; - mutable global_offset : int; - mutable buf_pos : int; - } - val create : - ?text_line:int -> - ?text_char:int -> ?buf_pos:int -> ?global_offset:int -> unit -> t - val with_buf_pos : t -> int -> t - end -type ('a, 'b) parse_result = - Done of 'b * Parse_pos.t - | Cont of bool * ('a, 'b) parse_fun -and ('a, 'b) parse_fun = pos:int -> len:int -> 'a -> ('a, 'b) parse_result -type 'a parse_state = { - parse_pos : Parse_pos.t; - mutable pstack : 'a; - pbuf : Buffer.t; -} -type parse_error = { - location : string; - err_msg : string; - parse_state : - [ `Annot of Annot.stack parse_state | `Sexp of t list list parse_state ]; -} -exception Parse_error of parse_error -val bump_text_line : 'a parse_state -> unit -val bump_text_pos : 'a parse_state -> unit -val bump_pos_cont : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val bump_line_cont : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val add_bump : - ('a parse_state -> 'b) -> - 'a parse_state -> - 'c -> - max_pos:'d -> - pos:int -> - char -> ('a parse_state -> 'c -> max_pos:'d -> pos:int -> 'e) -> 'e -val add_bump_pos : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> - char -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val add_bump_line : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> - char -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val set_parse_pos : Parse_pos.t -> int -> unit -val mk_parse_pos : 'a parse_state -> int -> Parse_pos.t -val raise_parse_error : - [ `Annot of Annot.stack parse_state | `Sexp of t list list parse_state ] -> - string -> int -> string -> 'a -val raise_unexpected_char : - [ `Annot of Annot.stack parse_state | `Sexp of t list list parse_state ] -> - string -> int -> char -> 'a -val parse_str : - ?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, t) parse_result -val parse : - ?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, t) parse_result -val get_glob_ofs : Parse_pos.t -> int -> int -val mk_annot_pos : Parse_pos.t -> int -> Annot.pos -val mk_annot_pos1 : Parse_pos.t -> int -> Annot.pos -val add_annot_pos : Annot.stack parse_state -> int -> unit -val add_annot_pos1 : Annot.stack parse_state -> int -> unit -val get_annot_range : Annot.stack parse_state -> int -> Annot.range -val mk_annot_atom : Annot.stack parse_state -> string -> int -> Annot.t -val mk_annot_list : Annot.stack parse_state -> Annot.t list -> int -> Annot.t -val init_annot_pstate : unit -> Annot.stack -val parse_str_annot : - ?parse_pos:Parse_pos.t -> - ?len:int -> string -> (string, Annot.t) parse_result -val parse_bigstring : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, t) parse_result -val bump_found_atom : - (Annot.stack parse_state -> 'a) -> - Annot.stack parse_state -> - 'b -> - max_pos:'c -> - pos:int -> - (Annot.stack parse_state -> - 'b -> max_pos:'c -> pos:int -> ('d, Annot.t) parse_result) -> - ('d, Annot.t) parse_result -val check_str_bounds : string -> pos:int -> len:int -> bigstring -> int -val mk_cont : - string -> - (Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, 'a) parse_result) -> - Annot.stack parse_state -> (bigstring, 'a) parse_result -val parse_nl : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_comment : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_atom : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val reg_parse_quoted : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_quoted : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_quoted_nl : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_escaped : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_skip_ws : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_skip_ws_nl : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_dec : - Annot.stack parse_state -> - bigstring -> - max_pos:int -> - pos:int -> count:int -> d:int -> (bigstring, Annot.t) parse_result -val parse_hex : - Annot.stack parse_state -> - bigstring -> - max_pos:int -> - pos:int -> count:int -> d:int -> (bigstring, Annot.t) parse_result -val parse_bigstring_annot : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, Annot.t) parse_result -val mk_this_parse : - ?parse_pos:Parse_pos.t -> - (?parse_pos:Parse_pos.t -> ?len:'a -> 'b -> 'c) -> - pos:int -> len:'a -> 'b -> 'c -val gen_input_sexp : - (?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, 'a) parse_result) -> - ?parse_pos:Parse_pos.t -> in_channel -> 'a -val input_sexp : ?parse_pos:Parse_pos.t -> in_channel -> t -val gen_input_rev_sexps : - (?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, 'a) parse_result) -> - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> 'a list -val input_rev_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list -val input_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list -val of_string_bigstring : - string -> - ('a -> ('b, 'c) parse_result) -> - 'b -> ('a -> int) -> ('a -> int -> int -> string) -> 'a -> 'c -val of_string : string -> t -val get_bstr_sub_str : - (char, 'a, 'b) Bigarray.Array1.t -> int -> int -> string -val bstr_ws_buf : - (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -val of_bigstring : bigstring -> t -val gen_load_rev_sexps : - (?parse_pos:'a -> ?buf:'b -> in_channel -> 'c) -> ?buf:'b -> string -> 'c -val load_rev_sexps : ?buf:string -> string -> t list -val load_sexps : ?buf:string -> string -> t list -val gen_load_sexp : - (?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, 'a) parse_result) -> - ?strict:bool -> ?buf:string -> string -> 'a -val load_sexp : ?strict:bool -> ?buf:string -> string -> t -module Annotated : - sig - type pos = Annot.pos = { line : int; col : int; offset : int; } - type range = Annot.range = { start_pos : pos; end_pos : pos; } - type t = - Annot.t = - Atom of range * Type.t - | List of range * t list * Type.t - type 'a conv = [ `Error of exn * t | `Result of 'a ] - exception Conv_exn of string * exn - type stack = - Annot.stack = { - mutable positions : pos list; - mutable stack : t list list; - } - val get_sexp : t -> Type.t - val get_range : t -> range - exception Annot_sexp of t - val find_sexp : t -> Type.t -> t option - val parse : - ?parse_pos:Parse_pos.t -> - ?len:int -> string -> (string, Annot.t) parse_result - val parse_bigstring : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, Annot.t) parse_result - val input_rev_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> Annot.t list - val input_sexp : ?parse_pos:Parse_pos.t -> in_channel -> Annot.t - val input_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> Annot.t list - val of_string : string -> Annot.t - val of_bigstring : bigstring -> Annot.t - val load_rev_sexps : ?buf:string -> string -> Annot.t list - val load_sexps : ?buf:string -> string -> Annot.t list - val load_sexp : ?strict:bool -> ?buf:string -> string -> Annot.t - val conv : (Type.t -> 'a) -> t -> [> `Error of exn * t | `Result of 'a ] - val get_conv_exn : file:string -> exc:exn -> t -> exn - end -val load_sexp_conv : - ?strict:bool -> - ?buf:string -> - string -> (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] -val raise_conv_exn : - file:string -> [< `Error of exn * Annotated.t | `Result of 'a ] -> 'a -val load_sexp_conv_exn : - ?strict:bool -> ?buf:string -> string -> (t -> 'a) -> 'a -val load_sexps_conv : - ?buf:string -> - string -> - (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] list -val load_sexps_conv_exn : ?buf:string -> string -> (t -> 'a) -> 'a list -val gen_of_string_conv : - ('a -> Type.t) -> - ('a -> Annotated.t) -> - 'a -> (Type.t -> 'b) -> [> `Error of exn * Annotated.t | `Result of 'b ] -val of_string_conv : - string -> (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] -val of_bigstring_conv : - bigstring -> (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] -module Of_string_conv_exn : - sig - type t = { exc : exn; sexp : Type.t; sub_sexp : Type.t; } - exception E of t - end -val gen_of_string_conv_exn : ('a -> Type.t) -> 'a -> (Type.t -> 'b) -> 'b -val of_string_conv_exn : string -> (t -> 'a) -> 'a -val of_bigstring_conv_exn : bigstring -> (t -> 'a) -> 'a -val unit : t -external sexp_of_t : t -> t = "%identity" -external t_of_sexp : t -> t = "%identity" -type found = [ `Found | `Pos of int * found ] -type search_result = [ `Found | `Not_found | `Pos of int * found ] -val search_physical : - t -> contained:t -> [ `Found | `Not_found | `Pos of int * found ] -val subst_found : t -> subst:t -> ([< `Found | `Pos of int * 'a ] as 'a) -> t diff --git a/bundles/sexplib/sexplib-7.0.5/lib/sexp.ml b/bundles/sexplib/sexplib-7.0.5/lib/sexp.ml deleted file mode 100644 index 6fa4a7c..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/sexp.ml +++ /dev/null @@ -1,25 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -include Pre_sexp diff --git a/bundles/sexplib/sexplib-7.0.5/lib/sexp.mli b/bundles/sexplib/sexplib-7.0.5/lib/sexp.mli deleted file mode 100644 index 5d3ee0d..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/sexp.mli +++ /dev/null @@ -1,329 +0,0 @@ -type t = Type.t = Atom of string | List of t list -exception Of_sexp_error of exn * t -type bigstring = - (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -val default_indent : int ref -val is_special_char : char -> bool -val must_escape : string -> bool -val maybe_esc_str : string -> string -val pp_maybe_esc_str : Format.formatter -> string -> unit -val pp_hum_indent : int -> Format.formatter -> t -> unit -val pp_hum_rest : int -> Format.formatter -> t list -> unit -val pp_mach_internal : bool -> Format.formatter -> t -> bool -val pp_mach_rest : bool -> Format.formatter -> t list -> unit -val pp_hum : Format.formatter -> t -> unit -val pp_mach : Format.formatter -> t -> unit -val pp : Format.formatter -> t -> unit -val size_loop : int * int -> t -> int * int -val size : t -> int * int -val to_buffer_hum : buf:Buffer.t -> ?indent:int -> t -> unit -val to_buffer_mach : buf:Buffer.t -> t -> unit -val to_buffer : buf:Buffer.t -> t -> unit -val buffer : unit -> Buffer.t -val with_new_buffer : out_channel -> (Buffer.t -> 'a) -> unit -val output_hum : out_channel -> t -> unit -val output_hum_indent : int -> out_channel -> t -> unit -val output_mach : out_channel -> t -> unit -val output : out_channel -> t -> unit -val save_of_output : - ?perm:Unix.file_perm -> (out_channel -> 'a -> 'b) -> string -> 'a -> unit -val output_sexp_nl : (out_channel -> 'a -> 'b) -> out_channel -> 'a -> unit -val save_hum : ?perm:Unix.file_perm -> string -> t -> unit -val save_mach : ?perm:Unix.file_perm -> string -> t -> unit -val save : ?perm:Unix.file_perm -> string -> t -> unit -val output_sexps_nl : - (out_channel -> 'a -> 'b) -> out_channel -> 'a list -> unit -val save_sexps_hum : ?perm:Unix.file_perm -> string -> t list -> unit -val save_sexps_mach : ?perm:Unix.file_perm -> string -> t list -> unit -val save_sexps : ?perm:Unix.file_perm -> string -> t list -> unit -val to_string_hum : ?indent:int -> t -> string -val to_string_mach : t -> string -val to_string : t -> string -val scan_sexp : ?buf:Buffer.t -> Lexing.lexbuf -> Type.t -val scan_sexps : ?buf:Buffer.t -> Lexing.lexbuf -> Type.t list -val get_main_buf : Buffer.t option -> Lexing.lexbuf -> Parser.token -val scan_fold_sexps : - ?buf:Buffer.t -> f:('a -> Type.t -> 'a) -> init:'a -> Lexing.lexbuf -> 'a -val scan_iter_sexps : - ?buf:Buffer.t -> f:(Type.t -> unit) -> Lexing.lexbuf -> unit -val scan_sexps_conv : - ?buf:Buffer.t -> f:(Type.t -> 'a) -> Lexing.lexbuf -> 'a list -module Annot : - sig - type pos = Pre_sexp.Annot.pos = { line : int; col : int; offset : int; } - type range = Pre_sexp.Annot.range = { start_pos : pos; end_pos : pos; } - type t = - Pre_sexp.Annot.t = - Atom of range * Type.t - | List of range * t list * Type.t - type 'a conv = [ `Error of exn * t | `Result of 'a ] - exception Conv_exn of string * exn - type stack = - Pre_sexp.Annot.stack = { - mutable positions : pos list; - mutable stack : t list list; - } - val get_sexp : t -> Type.t - val get_range : t -> range - exception Annot_sexp of t - val find_sexp : t -> Type.t -> t option - end -module Parse_pos : - sig - type t = - Pre_sexp.Parse_pos.t = { - mutable text_line : int; - mutable text_char : int; - mutable global_offset : int; - mutable buf_pos : int; - } - val create : - ?text_line:int -> - ?text_char:int -> ?buf_pos:int -> ?global_offset:int -> unit -> t - val with_buf_pos : t -> int -> t - end -type ('a, 'b) parse_result = - ('a, 'b) Pre_sexp.parse_result = - Done of 'b * Parse_pos.t - | Cont of bool * ('a, 'b) parse_fun -and ('a, 'b) parse_fun = pos:int -> len:int -> 'a -> ('a, 'b) parse_result -type 'a parse_state = - 'a Pre_sexp.parse_state = { - parse_pos : Parse_pos.t; - mutable pstack : 'a; - pbuf : Buffer.t; -} -type parse_error = - Pre_sexp.parse_error = { - location : string; - err_msg : string; - parse_state : - [ `Annot of Annot.stack parse_state | `Sexp of t list list parse_state ]; -} -exception Parse_error of parse_error -val bump_text_line : 'a parse_state -> unit -val bump_text_pos : 'a parse_state -> unit -val bump_pos_cont : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val bump_line_cont : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val add_bump : - ('a parse_state -> 'b) -> - 'a parse_state -> - 'c -> - max_pos:'d -> - pos:int -> - char -> ('a parse_state -> 'c -> max_pos:'d -> pos:int -> 'e) -> 'e -val add_bump_pos : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> - char -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val add_bump_line : - 'a parse_state -> - 'b -> - max_pos:'c -> - pos:int -> - char -> ('a parse_state -> 'b -> max_pos:'c -> pos:int -> 'd) -> 'd -val set_parse_pos : Parse_pos.t -> int -> unit -val mk_parse_pos : 'a parse_state -> int -> Parse_pos.t -val raise_parse_error : - [ `Annot of Annot.stack parse_state | `Sexp of t list list parse_state ] -> - string -> int -> string -> 'a -val raise_unexpected_char : - [ `Annot of Annot.stack parse_state | `Sexp of t list list parse_state ] -> - string -> int -> char -> 'a -val parse_str : - ?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, t) parse_result -val parse : - ?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, t) parse_result -val get_glob_ofs : Parse_pos.t -> int -> int -val mk_annot_pos : Parse_pos.t -> int -> Annot.pos -val mk_annot_pos1 : Parse_pos.t -> int -> Annot.pos -val add_annot_pos : Annot.stack parse_state -> int -> unit -val add_annot_pos1 : Annot.stack parse_state -> int -> unit -val get_annot_range : Annot.stack parse_state -> int -> Annot.range -val mk_annot_atom : Annot.stack parse_state -> string -> int -> Annot.t -val mk_annot_list : Annot.stack parse_state -> Annot.t list -> int -> Annot.t -val init_annot_pstate : unit -> Annot.stack -val parse_str_annot : - ?parse_pos:Parse_pos.t -> - ?len:int -> string -> (string, Annot.t) parse_result -val parse_bigstring : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, t) parse_result -val bump_found_atom : - (Annot.stack parse_state -> 'a) -> - Annot.stack parse_state -> - 'b -> - max_pos:'c -> - pos:int -> - (Annot.stack parse_state -> - 'b -> max_pos:'c -> pos:int -> ('d, Annot.t) parse_result) -> - ('d, Annot.t) parse_result -val check_str_bounds : string -> pos:int -> len:int -> bigstring -> int -val mk_cont : - string -> - (Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, 'a) parse_result) -> - Annot.stack parse_state -> (bigstring, 'a) parse_result -val parse_nl : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_comment : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_atom : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val reg_parse_quoted : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_quoted : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_quoted_nl : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_escaped : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_skip_ws : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_skip_ws_nl : - Annot.stack parse_state -> - bigstring -> max_pos:int -> pos:int -> (bigstring, Annot.t) parse_result -val parse_dec : - Annot.stack parse_state -> - bigstring -> - max_pos:int -> - pos:int -> count:int -> d:int -> (bigstring, Annot.t) parse_result -val parse_hex : - Annot.stack parse_state -> - bigstring -> - max_pos:int -> - pos:int -> count:int -> d:int -> (bigstring, Annot.t) parse_result -val parse_bigstring_annot : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, Annot.t) parse_result -val mk_this_parse : - ?parse_pos:Parse_pos.t -> - (?parse_pos:Parse_pos.t -> ?len:'a -> 'b -> 'c) -> - pos:int -> len:'a -> 'b -> 'c -val gen_input_sexp : - (?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, 'a) parse_result) -> - ?parse_pos:Parse_pos.t -> in_channel -> 'a -val input_sexp : ?parse_pos:Parse_pos.t -> in_channel -> t -val gen_input_rev_sexps : - (?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, 'a) parse_result) -> - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> 'a list -val input_rev_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list -val input_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list -val of_string_bigstring : - string -> - ('a -> ('b, 'c) parse_result) -> - 'b -> ('a -> int) -> ('a -> int -> int -> string) -> 'a -> 'c -val of_string : string -> t -val get_bstr_sub_str : - (char, 'a, 'b) Bigarray.Array1.t -> int -> int -> string -val bstr_ws_buf : - (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -val of_bigstring : bigstring -> t -val gen_load_rev_sexps : - (?parse_pos:'a -> ?buf:'b -> in_channel -> 'c) -> ?buf:'b -> string -> 'c -val load_rev_sexps : ?buf:string -> string -> t list -val load_sexps : ?buf:string -> string -> t list -val gen_load_sexp : - (?parse_pos:Parse_pos.t -> ?len:int -> string -> (string, 'a) parse_result) -> - ?strict:bool -> ?buf:string -> string -> 'a -val load_sexp : ?strict:bool -> ?buf:string -> string -> t -module Annotated : - sig - type pos = Annot.pos = { line : int; col : int; offset : int; } - type range = Annot.range = { start_pos : pos; end_pos : pos; } - type t = - Annot.t = - Atom of range * Type.t - | List of range * t list * Type.t - type 'a conv = [ `Error of exn * t | `Result of 'a ] - exception Conv_exn of string * exn - type stack = - Annot.stack = { - mutable positions : pos list; - mutable stack : t list list; - } - val get_sexp : t -> Type.t - val get_range : t -> range - exception Annot_sexp of t - val find_sexp : t -> Type.t -> t option - val parse : - ?parse_pos:Parse_pos.t -> - ?len:int -> string -> (string, Annot.t) parse_result - val parse_bigstring : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, Annot.t) parse_result - val input_rev_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> Annot.t list - val input_sexp : ?parse_pos:Parse_pos.t -> in_channel -> Annot.t - val input_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> Annot.t list - val of_string : string -> Annot.t - val of_bigstring : bigstring -> Annot.t - val load_rev_sexps : ?buf:string -> string -> Annot.t list - val load_sexps : ?buf:string -> string -> Annot.t list - val load_sexp : ?strict:bool -> ?buf:string -> string -> Annot.t - val conv : (Type.t -> 'a) -> t -> [> `Error of exn * t | `Result of 'a ] - val get_conv_exn : file:string -> exc:exn -> t -> exn - end -val load_sexp_conv : - ?strict:bool -> - ?buf:string -> - string -> (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] -val raise_conv_exn : - file:string -> [< `Error of exn * Annotated.t | `Result of 'a ] -> 'a -val load_sexp_conv_exn : - ?strict:bool -> ?buf:string -> string -> (t -> 'a) -> 'a -val load_sexps_conv : - ?buf:string -> - string -> - (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] list -val load_sexps_conv_exn : ?buf:string -> string -> (t -> 'a) -> 'a list -val gen_of_string_conv : - ('a -> Type.t) -> - ('a -> Annotated.t) -> - 'a -> (Type.t -> 'b) -> [> `Error of exn * Annotated.t | `Result of 'b ] -val of_string_conv : - string -> (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] -val of_bigstring_conv : - bigstring -> (t -> 'a) -> [> `Error of exn * Annotated.t | `Result of 'a ] -module Of_string_conv_exn : - sig - type t = - Pre_sexp.Of_string_conv_exn.t = { - exc : exn; - sexp : Type.t; - sub_sexp : Type.t; - } - exception E of t - end -val gen_of_string_conv_exn : ('a -> Type.t) -> 'a -> (Type.t -> 'b) -> 'b -val of_string_conv_exn : string -> (t -> 'a) -> 'a -val of_bigstring_conv_exn : bigstring -> (t -> 'a) -> 'a -val unit : t -external sexp_of_t : t -> t = "%identity" -external t_of_sexp : t -> t = "%identity" -type found = [ `Found | `Pos of int * found ] -type search_result = [ `Found | `Not_found | `Pos of int * found ] -val search_physical : - t -> contained:t -> [ `Found | `Not_found | `Pos of int * found ] -val subst_found : t -> subst:t -> ([< `Found | `Pos of int * 'a ] as 'a) -> t diff --git a/bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.ml b/bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.ml deleted file mode 100644 index 2606cc7..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.ml +++ /dev/null @@ -1,594 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(** Sexp_intf: interface specification for handling S-expressions (I/O, etc.) *) - -open Format -open Bigarray - -module type S = sig - - (** Type of S-expressions *) - type t = Type.t = Atom of string | List of t list - - (** Type of bigstrings *) - type bigstring = (char, int8_unsigned_elt, c_layout) Array1.t - - - (** {6 Defaults} *) - - val default_indent : int ref - (** [default_indent] reference to default indentation level for - human-readable conversions. Initialisation value: 2. *) - - - (** {6 S-expression size} *) - - val size : t -> int * int - (** [size sexp] @return [(n_atoms, n_chars)], where [n_atoms] is - the number of atoms in S-expression [sexp], and [n_chars] is the - number of characters in the atoms of the S-expression. *) - - - (** {6 Scan functions} *) - - val scan_sexp : ?buf : Buffer.t -> Lexing.lexbuf -> t - (** [scan_sexp ?buf lexbuf] scans an S-expression from lex buffer - [lexbuf] using the optional string buffer [buf] for storing - intermediate strings. *) - - val scan_sexps : ?buf : Buffer.t -> Lexing.lexbuf -> t list - (** [scan_sexps ?buf lexbuf] reads a list of whitespace separated - S-expressions from lex buffer [lexbuf] using the optional string - buffer [buf] for storing intermediate strings. *) - - val scan_iter_sexps : - ?buf : Buffer.t -> f : (t -> unit) -> Lexing.lexbuf -> unit - (** [scan_iter_sexps ?buf ~f lexbuf] iterates over all whitespace - separated S-expressions scanned from lex buffer [lexbuf] using - function [f], and the optional string buffer [buf] for storing - intermediate strings. *) - - val scan_fold_sexps : - ?buf : Buffer.t -> f : ('a -> t -> 'a) -> init : 'a -> Lexing.lexbuf -> 'a - (** [scan_fold_sexps ?buf ~f ~init lexbuf] folds over all whitespace - separated S-expressions scanned from lex buffer [lexbuf] using - function [f], initial state [init], and the optional string buffer - [buf] for storing intermediate strings. *) - - val scan_sexps_conv : - ?buf : Buffer.t -> f : (t -> 'a) -> Lexing.lexbuf -> 'a list - (** [scan_sexps_conv ?buf ~f lexbuf] maps all whitespace separated - S-expressions scanned from lex buffer [lexbuf] to some list using - function [f], and the optional string buffer [buf] for storing - intermediate strings. *) - - - (** {6 Type and exception definitions for (partial) parsing} *) - - module Parse_pos : sig - (** Position information after complete parse *) - type t = Pre_sexp.Parse_pos.t = - private - { - mutable text_line : int; (** Line position in parsed text *) - mutable text_char : int; (** Character position in parsed text *) - mutable global_offset : int; (** Global/logical offset *) - mutable buf_pos : int; (** Read position in string buffer *) - } - - val create : - ?text_line : int -> ?text_char : int -> - ?buf_pos : int -> ?global_offset : int -> unit -> t - (** [create ?text_line ?text_char ?buf_pos ?global_offset ()] @return - a parse position with the given parameters. - - @param text_line default = [1] - @param text_char default = [0] - @param global_offset default = [0] - @param buf_pos default = [0] - *) - - val with_buf_pos : t -> int -> t - (** [with_buf_pos t pos] @return a copy of the parse position [t] where - [buf_pos] is set to [pos]. *) - end - - (** Type of result from calling {!Sexp.parse}. *) - type ('a, 't) parse_result = ('a, 't) Pre_sexp.parse_result = - | Done of 't * Parse_pos.t (** [Done (t, parse_pos)] finished parsing - an S-expression. Current parse position - is [parse_pos]. *) - | Cont of bool * ('a, 't) parse_fun - (** [Cont (ws_only, parse_fun)] met the end of input before completely - parsing an S-expression. The user has to call [parse_fun] to - continue parsing the S-expression in another buffer. If [ws_only] - is true, only whitespace has been parsed so far (or comments!). - NOTE: the continuation may only be called once and will raise - [Failure] otherwise! *) - - (** Type of parsing functions with given offsets and lengths. *) - and ('a, 't) parse_fun = pos : int -> len : int -> 'a -> ('a, 't) parse_result - - (** Module for parsing S-expressions annotated with location information *) - module Annotated : sig - (** Position information for annotated S-expressions *) - type pos = Pre_sexp.Annotated.pos = { - line : int; - col : int; - offset : int; - } - - (** Range information for annotated S-expressions *) - type range = Pre_sexp.Annotated.range = { start_pos : pos; end_pos : pos } - - (** S-expression annotated with location information *) - type t = Pre_sexp.Annotated.t = - | Atom of range * Type.t - | List of range * t list * Type.t - - (** Type of conversion results of annotated S-expressions. *) - type 'a conv = [ `Result of 'a | `Error of exn * t ] - - (** Exception associated with conversion errors. First argument describes - the location, the second the reason. *) - exception Conv_exn of string * exn - - (** Stack used by annotation parsers *) - type stack = Pre_sexp.Annotated.stack = { - mutable positions : pos list; - mutable stack : t list list; - } - - val get_sexp : t -> Type.t - (** [get_sexp annot_sexp] @return S-expression associated with annotated - S-expression [annot_sexp]. *) - - val get_range : t -> range - (** [get_range annot_sexp] @return the range associated with annotated - S-expression [annot_sexp]. *) - - val find_sexp : t -> Type.t -> t option - (** [find_sexp annot_sexp sexp] @return [Some res] where [res] is the - annotated S-expression that is physically equivalent to [sexp] in - [annot_sexp], or [None] if there is no such S-expression. *) - - - (** {6 Annotated (partial) parsing} *) - - val parse : - ?parse_pos : Parse_pos.t -> ?len : int -> string - -> (string, t) parse_result - (** [parse ?parse_pos ?len str] same as {!parse}, but returns an - S-expression annotated with location information. *) - - val parse_bigstring : - ?parse_pos : Parse_pos.t -> ?len : int -> bigstring - -> (bigstring, t) parse_result - (** [parse_bigstring ?parse_pos ?len str] same as {!parse_bigstring}, - but returns an S-expression annotated with location information. *) - - val input_sexp : ?parse_pos : Parse_pos.t -> in_channel -> t - (** [input_sexp ?parse_pos ic] like {!input_sexp}, but returns an - annotated S-expression instead. *) - - val input_sexps : - ?parse_pos : Parse_pos.t -> ?buf : string -> in_channel -> t list - (** [input_sexps ?parse_pos ?buf ic] like {!input_sexps}, but returns - a list of annotated S-expressions. *) - - val input_rev_sexps : - ?parse_pos : Parse_pos.t -> ?buf : string -> in_channel -> t list - (** [input_sexps ?parse_pos ?buf ic] like {!input_rev_sexps}, but - returns a list of annotated S-expressions. *) - - - (** {6 Loading of annotated S-expressions} *) - - (** NOTE: these functions should only be used if an annotated S-expression - is required. *) - - val load_sexp : ?strict : bool -> ?buf : string -> string -> t - (** [load_sexp ?strict ?buf file] like {!load_sexp}, but returns an - annotated S-expression. *) - - val load_sexps : ?buf : string -> string -> t list - (** [load_sexps ?buf file] like {!load_sexps}, but returns a list of - annotated S-expressions. *) - - val load_rev_sexps : ?buf : string -> string -> t list - (** [load_rev_sexps ?buf file] like {!load_rev_sexps}, but returns a - list of annotated S-expressions. *) - - - (** {6 String and bigstring conversions} *) - - val of_string : string -> t - (** [of_string str] same as {!of_string}, but returns an annotated - S-expression. *) - - val of_bigstring : bigstring -> t - (** [of_bigstring bstr] same as {!of_string}, but operates on bigstrings. *) - - - (** Converters using annotations for determining error locations *) - - val conv : (Type.t -> 'a) -> t -> 'a conv - (** [conv f annot_sexp] converts the S-expression associated with - annotated S-expression [annot_sexp] using [f]. @return [`Result - res] on success, or [`Error (exn, sub_annot_sexp)] otherwise, where - [exn] is the exception associated with the conversion error, and - [sub_annot_sexp] is the annotated S-expression on which conversion - failed. *) - - val get_conv_exn : file : string -> exc : exn -> t -> exn - (** [get_conv_exn ~file ~exc annot_sexp] @return the exception that - would be raised for a given [file] and exception [exc] - if conversion had failed on annotated S-expression [annot_sexp]. - The format of the exception message is "file:line:col" *) - end - - (** Type of state maintained during parsing *) - type 't parse_state = 't Pre_sexp.parse_state = - private - { - parse_pos : Parse_pos.t; (** Current parse position *) - mutable pstack : 't; (** Stack of found S-expression lists *) - pbuf : Buffer.t; (** Current atom buffer *) - } - - (** Type of parse errors *) - type parse_error = Pre_sexp.parse_error = - { - location : string; (** Function in which the parse failed *) - err_msg : string; (** Reason why parsing failed *) - parse_state : - [ - | `Sexp of t list list parse_state - | `Annot of Annotated.stack parse_state - ] - (** State of parser *) - } - - (** Exception raised during partial parsing *) - exception Parse_error of parse_error - - - (** {6 Unannotated (partial) parsing} *) - - val parse : - ?parse_pos : Parse_pos.t -> ?len : int -> string -> (string, t) parse_result - (** [parse ?parse_pos ?len str] (partially) parses an S-expression in - string buffer [str] starting out with position information provided in - [parse_pos] and reading at most [len] characters. To parse a single - atom that is not delimited by whitespace it is necessary to call this - function a second time with the returned continuation, and a dummy - buffer that contains whitespace. - - @param parse_pos default = [Parse_pos.create ()] - @param len default = [String.length str - parse_pos.Parse_pos.buf_pos] - *) - - val parse_bigstring : - ?parse_pos : Parse_pos.t -> ?len : int -> bigstring - -> (bigstring, t) parse_result - (** [parse_bigstring ?parse_pos ?len str] same as {!parse}, but operates on - bigstrings. *) - - val input_sexp : ?parse_pos : Parse_pos.t -> in_channel -> t - (** [input_sexp ?parse_pos ic] parses an S-expression from input channel - [ic] using initial position information in [parse_pos]. NOTE: this - function is not as fast on files as {!Sexp.load_sexp}, and is also - slightly slower than the scan-functions. But it is guaranteed that - [input_sexp] is only going to read data parseable as an S-expression. - Thus, subsequent input functions will see the data immediately - following it. - - @param parse_pos default = [Parse_pos.create ()] - *) - - val input_sexps : - ?parse_pos : Parse_pos.t -> ?buf : string -> in_channel -> t list - (** [input_sexps ?parse_pos ?buf ic] parses whitespace separated - S-expressions from input channel [ic] until EOF is reached. Faster than - the scan-functions. - - @param parse_pos default = [Parse_pos.create ()] - *) - - val input_rev_sexps : - ?parse_pos : Parse_pos.t -> ?buf : string -> in_channel -> t list - (** [input_rev_sexps ?parse_pos ?buf ic] same as {!Sexp.input_sexps}, - but returns a reversed list of S-expressions, which is slightly more - efficient. *) - - - (** {6 Loading of (converted) S-expressions} *) - - val load_sexp : ?strict : bool -> ?buf : string -> string -> t - (** [load_sexp ?strict ?buf file] reads one S-expression from [file] using - buffer [buf] for storing intermediate data. Faster than the - scan-functions. - - @raise Parse_error if the S-expression is unparseable. - - @raise Failure if parsing reached the end of file before one S-expression - could be read. - - @raise Failure if [strict] is true and there is more than one - S-expression in the file. - - @param strict default = [true] - *) - - val load_sexps : ?buf : string -> string -> t list - (** [load_sexps ?buf file] reads a list of whitespace separated S-expressions - from [file] using buffer [buf] for storing intermediate data. - Faster than the scan-functions. - - @raise Parse_error if there is unparseable data in the file. - - @raise Failure if parsing reached the end of file before the last - S-expression could be fully read. - *) - - val load_rev_sexps : ?buf : string -> string -> t list - (** [load_rev_sexps ?buf file] same as {!Sexp.load_sexps}, but returns a - reversed list of S-expressions, which is slightly more efficient. *) - - val load_sexp_conv : - ?strict : bool -> ?buf : string -> string -> (t -> 'a) -> 'a Annotated.conv - (** [load_sexp_conv ?strict ?buf file f] like {!Sexp.load_sexp}, but - performs a conversion on the fly using [f]. Performance is equivalent - to executing {!Sexp.load_sexp} and performing conversion when there - are no errors. In contrast to the plain S-expression loader, this - function not only performs the conversion, it will give exact error - ranges for conversion errors. - - @raise Parse_error if there is unparseable data in the file. - - @raise Failure if parsing reached the end of file before the last - S-expression could be fully read. - *) - - val load_sexp_conv_exn : - ?strict : bool -> ?buf : string -> string -> (t -> 'a) -> 'a - (** [load_sexp_conv_exn ?strict ?buf file f] like {!load_sexp_conv}, - but returns the converted value or raises [Of_sexp_error] with exact - location information in the case of a conversion error. *) - - val load_sexps_conv : - ?buf : string -> string -> (t -> 'a) -> 'a Annotated.conv list - (** [load_sexps_conv ?buf file f] like {!Sexp.load_sexps}, but performs - a conversion on the fly using [f]. Performance is equivalent to - executing {!Sexp.load_sexps} and performing conversion when there - are no errors. In contrast to the plain S-expression loader, this - function not only performs the conversion, it will give exact error - ranges for conversion errors. - - @raise Parse_error if there is unparseable data in the file. - - @raise Failure if parsing reached the end of file before the last - S-expression could be fully read. - *) - - val load_sexps_conv_exn : ?buf : string -> string -> (t -> 'a) -> 'a list - (** [load_sexps_conv_exn ?buf file f] like {!load_sexps_conv}, but returns - the converted value or raises [Of_sexp_error] with exact location - information in the case of a conversion error. *) - - - (** {6 Output of S-expressions to I/O-channels} *) - - (** NOTE: for performance reasons these output functions may need to - allocate large strings to write out huge S-expressions. This may - cause problems on 32-bit platforms. If you think that you may need to - write huge S-expressions on such platforms, you might want to use the - pretty-printers that write to formatters instead (see further below). *) - - val output_hum : out_channel -> t -> unit - (** [output_hum oc sexp] outputs S-expression [sexp] to output channel - [oc] in human readable form. *) - - val output_hum_indent : int -> out_channel -> t -> unit - (** [output_hum_indent indent oc sexp] outputs S-expression [sexp] - to output channel [oc] in human readable form using indentation level - [indent]. - *) - - val output_mach : out_channel -> t -> unit - (** [output_mach oc sexp] outputs S-expression [sexp] to output channel - [oc] in machine readable (i.e. most compact) form. *) - - val output : out_channel -> t -> unit - (** [output oc sexp] same as [output_mach]. *) - - - (** {6 Output of S-expressions to file} *) - - (** All save-functions write to a temporary file before moving it into - place to avoid intermittent garbling of existing files, which may - cause problems for other processes that try to read. *) - - val save_hum : ?perm : int -> string -> t -> unit - (** [save_hum ?perm file sexp] outputs S-expression [sexp] to [file] in human - readable form. - - @param perm default = umask - *) - - val save_mach : ?perm : int -> string -> t -> unit - (** [save_mach ?perm file sexp] outputs S-expression [sexp] to [file] - in machine readable (i.e. most compact) form. - - @param perm default = umask - *) - - val save : ?perm : int -> string -> t -> unit - (** [save ?perm file sexp] same as {!save_mach}. *) - - val save_sexps_hum : ?perm : int -> string -> t list -> unit - (** [save_sexps_hum ?perm file sexps] outputs S-expression list [sexps] to - [file] in human readable form, each sexp being followed by a newline. - - @param perm default = umask - *) - - val save_sexps_mach : ?perm : int -> string -> t list -> unit - (** [save_sexps_mach ?perm file sexps] outputs S-expression list [sexps] to - [file] in machine readable form, each sexp being followed by a - newline. - - @param perm default = umask - *) - - val save_sexps : ?perm : int -> string -> t list -> unit - (** [save_sexps ?perm file sexp] same as {!save_sexps_mach}. *) - - - (** {6 Output of S-expressions to formatters} *) - - val pp_hum : formatter -> t -> unit - (** [pp_hum ppf sexp] outputs S-expression [sexp] to formatter [ppf] - in human readable form. *) - - val pp_hum_indent : int -> formatter -> t -> unit - (** [pp_hum_indent n ppf sexp] outputs S-expression [sexp] to formatter - [ppf] in human readable form and indentation level [n]. *) - - val pp_mach : formatter -> t -> unit - (** [pp_mach ppf sexp] outputs S-expression [sexp] to formatter [ppf] - in machine readable (i.e. most compact) form. *) - - val pp : formatter -> t -> unit - (** [pp ppf sexp] same as [pp_mach]. *) - - - (** {6 String and bigstring conversions} *) - - (** Module encapsulating the exception raised by string converters when - type conversions fail. *) - module Of_string_conv_exn : sig - type t = { exc : exn; sexp : Type.t; sub_sexp : Type.t } - - exception E of t - end - - val of_string : string -> t - (** [of_string str] converts string [str] to an S-expression. NOTE: - trailing whitespace is considered an error, which may be overly - strict for some applications. Either strip the string of trailing - whitespace first, or, even cheaper, use {!parse} instead. *) - - val of_string_conv : string -> (t -> 'a) -> 'a Annotated.conv - (** [of_string_conv str conv] like {!of_string}, but performs type conversion - with [conv]. @return conversion result. *) - - val of_string_conv_exn : string -> (t -> 'a) -> 'a - (** [of_string_conv_exn str conv] like {!of_string_conv}, but raises - {!Of_string_conv_exn.E} if type conversion fails. @return converted - value. *) - - val of_bigstring : bigstring -> t - (** [of_bigstring bstr] same as {!of_string}, but operates on bigstrings. *) - - val of_bigstring_conv : bigstring -> (t -> 'a) -> 'a Annotated.conv - (** [of_bigstring_conv bstr conv] like {!of_bigstring}, but performs - type conversion with [conv]. @return conversion result. *) - - val of_bigstring_conv_exn : bigstring -> (t -> 'a) -> 'a - (** [of_bigstring_conv_exn bstr conv] like {!of_bigstring_conv}, but raises - {!Of_string_conv_exn.E} if type conversion fails. @return converted - value. *) - - val to_string_hum : ?indent : int -> t -> string - (** [to_string_hum ?indent sexp] converts S-expression [sexp] to a - string in human readable form with indentation level [indent]. - - @param indent default = [!default_indent] - *) - - val to_string_mach : t -> string - (** [to_string_mach sexp] converts S-expression [sexp] to a string in - machine readable (i.e. most compact) form. *) - - val to_string : t -> string - (** [to_string sexp] same as [to_string_mach]. *) - - - (** {6 Buffer conversions} *) - - val to_buffer_hum : buf : Buffer.t -> ?indent : int -> t -> unit - (** [to_buffer_hum ~buf ?indent sexp] outputs the S-expression [sexp] - converted to a string in human readable form to buffer [buf]. - - @param indent default = [!default_indent] - *) - - val to_buffer_mach : buf : Buffer.t -> t -> unit - (** [to_buffer_mach ~buf sexp] outputs the S-expression [sexp] converted - to a string in machine readable (i.e. most compact) form to buffer [buf]. - *) - - val to_buffer : buf : Buffer.t -> t -> unit - (** [to_buffer ~buf sexp] same as {!to_buffer_mach}. *) - - - (** {6 Utilities for automated type conversions} *) - - val unit : t - (** [unit] the unit-value as expressed by an S-expression. *) - - external sexp_of_t : t -> t = "%identity" - (** [sexp_of_t sexp] maps S-expressions which are part of a type with - automated S-expression conversion to themselves. *) - - external t_of_sexp : t -> t = "%identity" - (** [t_of_sexp sexp] maps S-expressions which are part of a type with - automated S-expression conversion to themselves. *) - - - (** {6 Utilities for conversion error handling} *) - - type found = [ `Found | `Pos of int * found ] - (** Type of successful search results. [`Found] means that an - S-expression was found at the immediate position, and [`Pos (pos, - found)] indicates that it was found at position [pos] within a - structure (= S-expression list) where [found] describes recursively - where it was found in that structure. *) - - type search_result = [ `Not_found | found ] - (** Type of search results. [`Not_found] means that an - S-expression was not found within another S-expression. *) - - val search_physical : t -> contained : t -> search_result - (** [search_physical sexp ~contained] @return the search result - indicating whether, and if, where the S-expression [contained] - was found within S-expression [sexp]. *) - - val subst_found : t -> subst : t -> found -> t - (** [subst_found sexp ~subst found] @return the S-expression that - results from substituting [subst] within S-expression [sexp] - at the location described by [found]. *) -end diff --git a/bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.mli b/bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.mli deleted file mode 100644 index 5af2f6e..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/sexp_intf.mli +++ /dev/null @@ -1,157 +0,0 @@ -module type S = - sig - type t = Type.t = Atom of string | List of t list - type bigstring = - (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) - Bigarray.Array1.t - val default_indent : int ref - val size : t -> int * int - val scan_sexp : ?buf:Buffer.t -> Lexing.lexbuf -> t - val scan_sexps : ?buf:Buffer.t -> Lexing.lexbuf -> t list - val scan_iter_sexps : - ?buf:Buffer.t -> f:(t -> unit) -> Lexing.lexbuf -> unit - val scan_fold_sexps : - ?buf:Buffer.t -> f:('a -> t -> 'a) -> init:'a -> Lexing.lexbuf -> 'a - val scan_sexps_conv : - ?buf:Buffer.t -> f:(t -> 'a) -> Lexing.lexbuf -> 'a list - module Parse_pos : - sig - type t = - Pre_sexp.Parse_pos.t = private { - mutable text_line : int; - mutable text_char : int; - mutable global_offset : int; - mutable buf_pos : int; - } - val create : - ?text_line:int -> - ?text_char:int -> ?buf_pos:int -> ?global_offset:int -> unit -> t - val with_buf_pos : t -> int -> t - end - type ('a, 'b) parse_result = - ('a, 'b) Pre_sexp.parse_result = - Done of 'b * Parse_pos.t - | Cont of bool * ('a, 'b) parse_fun - and ('a, 'b) parse_fun = - pos:int -> len:int -> 'a -> ('a, 'b) parse_result - module Annotated : - sig - type pos = - Pre_sexp.Annotated.pos = { - line : int; - col : int; - offset : int; - } - type range = - Pre_sexp.Annotated.range = { - start_pos : pos; - end_pos : pos; - } - type t = - Pre_sexp.Annotated.t = - Atom of range * Type.t - | List of range * t list * Type.t - type 'a conv = [ `Error of exn * t | `Result of 'a ] - exception Conv_exn of string * exn - type stack = - Pre_sexp.Annotated.stack = { - mutable positions : pos list; - mutable stack : t list list; - } - val get_sexp : t -> Type.t - val get_range : t -> range - val find_sexp : t -> Type.t -> t option - val parse : - ?parse_pos:Parse_pos.t -> - ?len:int -> string -> (string, t) parse_result - val parse_bigstring : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, t) parse_result - val input_sexp : ?parse_pos:Parse_pos.t -> in_channel -> t - val input_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list - val input_rev_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list - val load_sexp : ?strict:bool -> ?buf:string -> string -> t - val load_sexps : ?buf:string -> string -> t list - val load_rev_sexps : ?buf:string -> string -> t list - val of_string : string -> t - val of_bigstring : bigstring -> t - val conv : (Type.t -> 'a) -> t -> 'a conv - val get_conv_exn : file:string -> exc:exn -> t -> exn - end - type 'a parse_state = - 'a Pre_sexp.parse_state = private { - parse_pos : Parse_pos.t; - mutable pstack : 'a; - pbuf : Buffer.t; - } - type parse_error = - Pre_sexp.parse_error = { - location : string; - err_msg : string; - parse_state : - [ `Annot of Annotated.stack parse_state - | `Sexp of t list list parse_state ]; - } - exception Parse_error of parse_error - val parse : - ?parse_pos:Parse_pos.t -> - ?len:int -> string -> (string, t) parse_result - val parse_bigstring : - ?parse_pos:Parse_pos.t -> - ?len:int -> bigstring -> (bigstring, t) parse_result - val input_sexp : ?parse_pos:Parse_pos.t -> in_channel -> t - val input_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list - val input_rev_sexps : - ?parse_pos:Parse_pos.t -> ?buf:string -> in_channel -> t list - val load_sexp : ?strict:bool -> ?buf:string -> string -> t - val load_sexps : ?buf:string -> string -> t list - val load_rev_sexps : ?buf:string -> string -> t list - val load_sexp_conv : - ?strict:bool -> ?buf:string -> string -> (t -> 'a) -> 'a Annotated.conv - val load_sexp_conv_exn : - ?strict:bool -> ?buf:string -> string -> (t -> 'a) -> 'a - val load_sexps_conv : - ?buf:string -> string -> (t -> 'a) -> 'a Annotated.conv list - val load_sexps_conv_exn : ?buf:string -> string -> (t -> 'a) -> 'a list - val output_hum : out_channel -> t -> unit - val output_hum_indent : int -> out_channel -> t -> unit - val output_mach : out_channel -> t -> unit - val output : out_channel -> t -> unit - val save_hum : ?perm:int -> string -> t -> unit - val save_mach : ?perm:int -> string -> t -> unit - val save : ?perm:int -> string -> t -> unit - val save_sexps_hum : ?perm:int -> string -> t list -> unit - val save_sexps_mach : ?perm:int -> string -> t list -> unit - val save_sexps : ?perm:int -> string -> t list -> unit - val pp_hum : Format.formatter -> t -> unit - val pp_hum_indent : int -> Format.formatter -> t -> unit - val pp_mach : Format.formatter -> t -> unit - val pp : Format.formatter -> t -> unit - module Of_string_conv_exn : - sig - type t = { exc : exn; sexp : Type.t; sub_sexp : Type.t; } - exception E of t - end - val of_string : string -> t - val of_string_conv : string -> (t -> 'a) -> 'a Annotated.conv - val of_string_conv_exn : string -> (t -> 'a) -> 'a - val of_bigstring : bigstring -> t - val of_bigstring_conv : bigstring -> (t -> 'a) -> 'a Annotated.conv - val of_bigstring_conv_exn : bigstring -> (t -> 'a) -> 'a - val to_string_hum : ?indent:int -> t -> string - val to_string_mach : t -> string - val to_string : t -> string - val to_buffer_hum : buf:Buffer.t -> ?indent:int -> t -> unit - val to_buffer_mach : buf:Buffer.t -> t -> unit - val to_buffer : buf:Buffer.t -> t -> unit - val unit : t - external sexp_of_t : t -> t = "%identity" - external t_of_sexp : t -> t = "%identity" - type found = [ `Found | `Pos of int * found ] - type search_result = [ `Found | `Not_found | `Pos of int * found ] - val search_physical : t -> contained:t -> search_result - val subst_found : t -> subst:t -> found -> t - end diff --git a/bundles/sexplib/sexplib-7.0.5/lib/sexplib.mlpack b/bundles/sexplib/sexplib-7.0.5/lib/sexplib.mlpack deleted file mode 100644 index fdd87c2..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/sexplib.mlpack +++ /dev/null @@ -1,14 +0,0 @@ -# OASIS_START -# DO NOT EDIT (digest: 407448bac4af757fbf386dc9e6e95264) -Type -Parser -Lexer -Pre_sexp -Sexp_intf -Sexp -Path -Conv -Conv_error -Exn_magic -Std -# OASIS_STOP diff --git a/bundles/sexplib/sexplib-7.0.5/lib/sexplib.odocl b/bundles/sexplib/sexplib-7.0.5/lib/sexplib.odocl deleted file mode 100644 index 4940393..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/sexplib.odocl +++ /dev/null @@ -1,14 +0,0 @@ -# OASIS_START -# DO NOT EDIT (digest: b651711e3df0db633d7b7a99717aabde) -Type -Parser -Lexer -Pre_sexp -Sexp_intf -Sexp -Path -Conv -Conv_error -Exn_magic -Std -# OASIS_STOP diff --git a/bundles/sexplib/sexplib-7.0.5/lib/std.ml b/bundles/sexplib/sexplib-7.0.5/lib/std.ml deleted file mode 100644 index 76b531d..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/std.ml +++ /dev/null @@ -1,109 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -module Hashtbl = struct - include Hashtbl - - let sexp_of_t = Conv.sexp_of_hashtbl - let t_of_sexp = Conv.hashtbl_of_sexp -end - -module Big_int = struct - include Big_int - - let sexp_of_big_int = Conv.sexp_of_big_int - let big_int_of_sexp = Conv.big_int_of_sexp -end - -module Nat = struct - include Nat - - let sexp_of_nat = Conv.sexp_of_nat - let nat_of_sexp = Conv.nat_of_sexp -end - -module Num = struct - include Num - - let sexp_of_num = Conv.sexp_of_num - let num_of_sexp = Conv.num_of_sexp -end - -module Ratio = struct - include Ratio - - let sexp_of_ratio = Conv.sexp_of_ratio - let ratio_of_sexp = Conv.ratio_of_sexp -end - -module Lazy = struct - include Lazy - - let t_of_sexp = Conv.lazy_t_of_sexp - let sexp_of_t = Conv.sexp_of_lazy_t -end - -let sexp_of_unit = Conv.sexp_of_unit -let unit_of_sexp = Conv.unit_of_sexp - -let bool_of_sexp = Conv.bool_of_sexp -let sexp_of_bool = Conv.sexp_of_bool - -let string_of_sexp = Conv.string_of_sexp -let sexp_of_string = Conv.sexp_of_string - -let char_of_sexp = Conv.char_of_sexp -let sexp_of_char = Conv.sexp_of_char - -let int_of_sexp = Conv.int_of_sexp -let sexp_of_int = Conv.sexp_of_int - -let float_of_sexp = Conv.float_of_sexp -let sexp_of_float = Conv.sexp_of_float - -let int32_of_sexp = Conv.int32_of_sexp -let sexp_of_int32 = Conv.sexp_of_int32 - -let int64_of_sexp = Conv.int64_of_sexp -let sexp_of_int64 = Conv.sexp_of_int64 - -let nativeint_of_sexp = Conv.nativeint_of_sexp -let sexp_of_nativeint = Conv.sexp_of_nativeint - -let sexp_of_ref = Conv.sexp_of_ref -let ref_of_sexp = Conv.ref_of_sexp - -let sexp_of_lazy_t = Conv.sexp_of_lazy_t -let lazy_t_of_sexp = Conv.lazy_t_of_sexp - -let option_of_sexp = Conv.option_of_sexp -let sexp_of_option = Conv.sexp_of_option - -let list_of_sexp = Conv.list_of_sexp -let sexp_of_list = Conv.sexp_of_list - -let array_of_sexp = Conv.array_of_sexp -let sexp_of_array = Conv.sexp_of_array - -let sexp_of_exn = Conv.sexp_of_exn diff --git a/bundles/sexplib/sexplib-7.0.5/lib/type.ml b/bundles/sexplib/sexplib-7.0.5/lib/type.ml deleted file mode 100644 index 4a64b3b..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/type.ml +++ /dev/null @@ -1,26 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(** Type of S-expressions *) -type t = Atom of string | List of t list diff --git a/bundles/sexplib/sexplib-7.0.5/lib/type.mli b/bundles/sexplib/sexplib-7.0.5/lib/type.mli deleted file mode 100644 index 4d1251c..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib/type.mli +++ /dev/null @@ -1 +0,0 @@ -type t = Atom of string | List of t list diff --git a/bundles/sexplib/sexplib-7.0.5/lib_test/Makefile b/bundles/sexplib/sexplib-7.0.5/lib_test/Makefile deleted file mode 100644 index 693bc70..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib_test/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -export OCAMLMAKEFILE = ../OCamlMakefile - -export INCDIRS = ../lib -export LIBDIRS = ../lib -export LIBS = sexplib -export PACKS = unix bigarray num - -define PROJ_sub1 - SOURCES = conv_test.ml - RESULT = conv_test -endef -export PROJ_sub1 - -define PROJ_sub2 - SOURCES = sexp_test.ml - RESULT = sexp_test -endef -export PROJ_sub2 - -ifndef SUBPROJS - export SUBPROJS = sub1 sub2 -endif - -all: bc - -%: - @$(MAKE) -f $(OCAMLMAKEFILE) subprojs SUBTARGET=$@ diff --git a/bundles/sexplib/sexplib-7.0.5/lib_test/OMakefile b/bundles/sexplib/sexplib-7.0.5/lib_test/OMakefile deleted file mode 100644 index 65baa82..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib_test/OMakefile +++ /dev/null @@ -1,7 +0,0 @@ -OCAML_LIBRARIES = sexplib - -OCamlMakePPDeps($(PA_SEXP_CONV), conv_test) - -OCamlMakeProjDefaults(conv_test.exe sexp_test.exe) - -InstantiateOCamlEnv() diff --git a/bundles/sexplib/sexplib-7.0.5/lib_test/conv_test.ml b/bundles/sexplib/sexplib-7.0.5/lib_test/conv_test.ml deleted file mode 100644 index 508cc49..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib_test/conv_test.ml +++ /dev/null @@ -1,194 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(** Conv_test: module for testing automated S-expression conversions and - path substitutions *) - -open Format - -open Sexplib -open Sexp -open Conv - -module Exc_test : sig - exception Test_exc of (string * int) with sexp -end = struct - exception Test_exc of (string * int) with sexp -end - -(* Test each character. *) -let check_string s = - let s' = - match (Sexp.of_string (Sexp.to_string (Sexp.Atom s))) with - | Sexp.Atom s -> s - | _ -> assert false - in - assert (s = s') - -let () = - for i = 0 to 255 do - check_string (String.make 1 (Char.chr i)) - done - -(* Test user specified conversion *) - -type my_float = float - -let sexp_of_my_float n = Atom (sprintf "%.4f" n) - -let my_float_of_sexp = function - | Atom str -> float_of_string str - | _ -> failwith "my_float_of_sexp: atom expected" - - -(* Test simple sum of products *) - -type foo = A | B of int * float -with sexp - - -(* Test polymorphic variants and deep module paths *) - -module M = struct - module N = struct - type ('a, 'b) variant = [ `X of ('a, 'b) variant | `Y of 'a * 'b ] - with sexp - type test = [ `Test ] - with sexp - end -end - -type 'a variant = - [ M.N.test | `V1 of [ `Z | ('a, string) M.N.variant ] option | `V2 ] -with sexp - -(* Test empty types *) - -type empty with sexp - -(* Test variance annotations *) - -module type S = sig - type +'a t with sexp -end - -(* Test labeled arguments in functions *) - -type labeled = string -> foo : unit -> ?bar : int -> float -> float with sexp - -let f str ~foo ?(bar = 3) n = float_of_string str +. n +. float bar - -let labeled_sexp : Sexp.t = sexp_of_labeled f -let labeled : labeled lazy_t = lazy (labeled_of_sexp (labeled_sexp : Sexp.t)) - -type rec_labeled = { a : (foo : unit -> unit) } with sexp_of - -(* Test recursive types *) - -(* Test polymorphic record fields *) - -type 'x poly = - { - p : 'a 'b. 'a list; - maybe_t : 'x t option; - } - -(* Test records *) - -and 'a t = - { - x : foo; - a : 'a variant; - foo : int; - bar : (my_float * string) list option; - sexp_option : int sexp_option; - sexp_list : int sexp_list; - sexp_bool : sexp_bool; - poly : 'a poly; - } -with sexp - -type v = { t : int t } - -(* Test manifest types *) -type u = v = { t : int t } -with sexp - -(* Test types involving exceptions *) -type exn_test = int * exn -with sexp_of - -(* Test function types *) -type fun_test = int -> unit with sexp_of - -open Path - -let main () = - let make_t a = - { - x = B (42, 3.1); - a = a; - foo = 3; - bar = Some [(3.1, "foo")]; - sexp_option = None; - sexp_list = []; - sexp_bool = true; - poly = - { - p = []; - maybe_t = None; - }; - } - in - let v = `B (5, 5) in - let v_sexp = <:sexp_of<[ `A | `B of int * int ] >> v in - assert (<:of_sexp< [ `A | `B of int * int ] >> v_sexp = v); - let u = { t = make_t (`V1 (Some (`X (`Y (7, "bla"))))) } in - let u_sexp = sexp_of_u u in - printf "Original: %a@\n@." pp u_sexp; - let u' = u_of_sexp u_sexp in - assert (u = u'); - let foo_sexp = Sexp.of_string "A" in - let _foo = foo_of_sexp foo_sexp in - - let path_str = ".[0].[1]" in - let path = Path.parse path_str in - let subst, el = subst_path u_sexp path in - printf "Pos(%s): %a -> SUBST1@\n" path_str pp el; - let dumb_sexp = subst (Atom "SUBST1") in - printf "Pos(%s): %a@\n@\n" path_str pp dumb_sexp; - - let path_str = ".t.x.B[1]" in - let path = Path.parse path_str in - let subst, el = subst_path u_sexp path in - printf "Record(%s): %a -> SUBST2@\n" path_str pp el; - - let u_sexp = subst (Atom "SUBST2") in - printf "Record(%s): %a@\n@\n" path_str pp u_sexp; - - printf "SUCCESS!!!@." - -let () = - try main (); raise (Exc_test.Test_exc ("expected exception", 42)) with - | exc -> eprintf "Exception: %s@." (Sexp.to_string_hum (sexp_of_exn exc)) diff --git a/bundles/sexplib/sexplib-7.0.5/lib_test/sexp_test.ml b/bundles/sexplib/sexplib-7.0.5/lib_test/sexp_test.ml deleted file mode 100644 index 81cb20a..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib_test/sexp_test.ml +++ /dev/null @@ -1,71 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(** Sexp_test: Module for Testing S-expression I/O. - - Example invocation: "sexp_test < test.sexp" -*) - -open Format -open Sexplib -open Sexp - -(* -let input_sexps ic = - let lexbuf = Lexing.from_channel ic in - scan_sexps lexbuf -*) - -let () = - let orig_sexps = input_sexps stdin in - - let hum_file = "/tmp/__hum.sexp" in - let hum_oc = open_out hum_file in - let hum_ppf = formatter_of_out_channel hum_oc in - List.iter - (fun sexp -> fprintf hum_ppf "%a@\n" Sexp.pp_hum sexp) - orig_sexps; - pp_print_flush hum_ppf (); - close_out hum_oc; - - let mach_file = "/tmp/__mach.sexp" in - let mach_oc = open_out mach_file in - List.iter - (fun sexp -> Printf.fprintf mach_oc "%a\n" Sexp.output_mach sexp) - orig_sexps; - close_out mach_oc; - - let hum_ic = open_in hum_file in - let hum_sexps = input_sexps hum_ic in - close_in hum_ic; - assert (hum_sexps = orig_sexps); - Sys.remove hum_file; - - let mach_ic = open_in mach_file in - let mach_sexps = input_sexps mach_ic in - close_in mach_ic; - assert (mach_sexps = orig_sexps); - Sys.remove mach_file; - - printf "Parsing S-expressions: SUCCESS!!!@." diff --git a/bundles/sexplib/sexplib-7.0.5/lib_test/test.sexp b/bundles/sexplib/sexplib-7.0.5/lib_test/test.sexp deleted file mode 100644 index 2d3a6f0..0000000 --- a/bundles/sexplib/sexplib-7.0.5/lib_test/test.sexp +++ /dev/null @@ -1,14 +0,0 @@ -(this is a list) - -(this is another list and (this is a nested list)) - -( - "\ - This is a multi-line \ - string with embedded - - newlines." - - "This string contains decimal \255, hex \xff codes, \ - and other \\ \n escapes." -) diff --git a/bundles/sexplib/sexplib-7.0.5/myocamlbuild.ml b/bundles/sexplib/sexplib-7.0.5/myocamlbuild.ml deleted file mode 100644 index 205d79b..0000000 --- a/bundles/sexplib/sexplib-7.0.5/myocamlbuild.ml +++ /dev/null @@ -1,489 +0,0 @@ -(* OASIS_START *) -(* DO NOT EDIT (digest: 6a36af2626fc8bc901ff0b729583bf22) *) -module OASISGettext = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISGettext.ml" - - let ns_ str = - str - - let s_ str = - str - - let f_ (str : ('a, 'b, 'c, 'd) format4) = - str - - let fn_ fmt1 fmt2 n = - if n = 1 then - fmt1^^"" - else - fmt2^^"" - - let init = - [] - -end - -module OASISExpr = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISExpr.ml" - - - - open OASISGettext - - type test = string - - type flag = string - - type t = - | EBool of bool - | ENot of t - | EAnd of t * t - | EOr of t * t - | EFlag of flag - | ETest of test * string - - - type 'a choices = (t * 'a) list - - let eval var_get t = - let rec eval' = - function - | EBool b -> - b - - | ENot e -> - not (eval' e) - - | EAnd (e1, e2) -> - (eval' e1) && (eval' e2) - - | EOr (e1, e2) -> - (eval' e1) || (eval' e2) - - | EFlag nm -> - let v = - var_get nm - in - assert(v = "true" || v = "false"); - (v = "true") - - | ETest (nm, vl) -> - let v = - var_get nm - in - (v = vl) - in - eval' t - - let choose ?printer ?name var_get lst = - let rec choose_aux = - function - | (cond, vl) :: tl -> - if eval var_get cond then - vl - else - choose_aux tl - | [] -> - let str_lst = - if lst = [] then - s_ "" - else - String.concat - (s_ ", ") - (List.map - (fun (cond, vl) -> - match printer with - | Some p -> p vl - | None -> s_ "") - lst) - in - match name with - | Some nm -> - failwith - (Printf.sprintf - (f_ "No result for the choice list '%s': %s") - nm str_lst) - | None -> - failwith - (Printf.sprintf - (f_ "No result for a choice list: %s") - str_lst) - in - choose_aux (List.rev lst) - -end - - -module BaseEnvLight = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseEnvLight.ml" - - module MapString = Map.Make(String) - - type t = string MapString.t - - let default_filename = - Filename.concat - (Sys.getcwd ()) - "setup.data" - - let load ?(allow_empty=false) ?(filename=default_filename) () = - if Sys.file_exists filename then - begin - let chn = - open_in_bin filename - in - let st = - Stream.of_channel chn - in - let line = - ref 1 - in - let st_line = - Stream.from - (fun _ -> - try - match Stream.next st with - | '\n' -> incr line; Some '\n' - | c -> Some c - with Stream.Failure -> None) - in - let lexer = - Genlex.make_lexer ["="] st_line - in - let rec read_file mp = - match Stream.npeek 3 lexer with - | [Genlex.Ident nm; Genlex.Kwd "="; Genlex.String value] -> - Stream.junk lexer; - Stream.junk lexer; - Stream.junk lexer; - read_file (MapString.add nm value mp) - | [] -> - mp - | _ -> - failwith - (Printf.sprintf - "Malformed data file '%s' line %d" - filename !line) - in - let mp = - read_file MapString.empty - in - close_in chn; - mp - end - else if allow_empty then - begin - MapString.empty - end - else - begin - failwith - (Printf.sprintf - "Unable to load environment, the file '%s' doesn't exist." - filename) - end - - let var_get name env = - let rec var_expand str = - let buff = - Buffer.create ((String.length str) * 2) - in - Buffer.add_substitute - buff - (fun var -> - try - var_expand (MapString.find var env) - with Not_found -> - failwith - (Printf.sprintf - "No variable %s defined when trying to expand %S." - var - str)) - str; - Buffer.contents buff - in - var_expand (MapString.find name env) - - let var_choose lst env = - OASISExpr.choose - (fun nm -> var_get nm env) - lst -end - - -module MyOCamlbuildFindlib = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" - - (** OCamlbuild extension, copied from - * http://brion.inria.fr/gallium/index.php/Using_ocamlfind_with_ocamlbuild - * by N. Pouillard and others - * - * Updated on 2009/02/28 - * - * Modified by Sylvain Le Gall - *) - open Ocamlbuild_plugin - - (* these functions are not really officially exported *) - let run_and_read = - Ocamlbuild_pack.My_unix.run_and_read - - let blank_sep_strings = - Ocamlbuild_pack.Lexers.blank_sep_strings - - let split s ch = - let x = - ref [] - in - let rec go s = - let pos = - String.index s ch - in - x := (String.before s pos)::!x; - go (String.after s (pos + 1)) - in - try - go s - with Not_found -> !x - - let split_nl s = split s '\n' - - let before_space s = - try - String.before s (String.index s ' ') - with Not_found -> s - - (* this lists all supported packages *) - let find_packages () = - List.map before_space (split_nl & run_and_read "ocamlfind list") - - (* this is supposed to list available syntaxes, but I don't know how to do it. *) - let find_syntaxes () = ["camlp4o"; "camlp4r"] - - (* ocamlfind command *) - let ocamlfind x = S[A"ocamlfind"; x] - - let dispatch = - function - | Before_options -> - (* by using Before_options one let command line options have an higher priority *) - (* on the contrary using After_options will guarantee to have the higher priority *) - (* override default commands by ocamlfind ones *) - Options.ocamlc := ocamlfind & A"ocamlc"; - Options.ocamlopt := ocamlfind & A"ocamlopt"; - Options.ocamldep := ocamlfind & A"ocamldep"; - Options.ocamldoc := ocamlfind & A"ocamldoc"; - Options.ocamlmktop := ocamlfind & A"ocamlmktop" - - | After_rules -> - - (* When one link an OCaml library/binary/package, one should use -linkpkg *) - flag ["ocaml"; "link"; "program"] & A"-linkpkg"; - - (* For each ocamlfind package one inject the -package option when - * compiling, computing dependencies, generating documentation and - * linking. *) - List.iter - begin fun pkg -> - flag ["ocaml"; "compile"; "pkg_"^pkg] & S[A"-package"; A pkg]; - flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S[A"-package"; A pkg]; - flag ["ocaml"; "doc"; "pkg_"^pkg] & S[A"-package"; A pkg]; - flag ["ocaml"; "link"; "pkg_"^pkg] & S[A"-package"; A pkg]; - flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S[A"-package"; A pkg]; - end - (find_packages ()); - - (* Like -package but for extensions syntax. Morover -syntax is useless - * when linking. *) - List.iter begin fun syntax -> - flag ["ocaml"; "compile"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; - flag ["ocaml"; "ocamldep"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; - flag ["ocaml"; "doc"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; - flag ["ocaml"; "infer_interface"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; - end (find_syntaxes ()); - - (* The default "thread" tag is not compatible with ocamlfind. - * Indeed, the default rules add the "threads.cma" or "threads.cmxa" - * options when using this tag. When using the "-linkpkg" option with - * ocamlfind, this module will then be added twice on the command line. - * - * To solve this, one approach is to add the "-thread" option when using - * the "threads" package using the previous plugin. - *) - flag ["ocaml"; "pkg_threads"; "compile"] (S[A "-thread"]); - flag ["ocaml"; "pkg_threads"; "doc"] (S[A "-I"; A "+threads"]); - flag ["ocaml"; "pkg_threads"; "link"] (S[A "-thread"]); - flag ["ocaml"; "pkg_threads"; "infer_interface"] (S[A "-thread"]) - - | _ -> - () - -end - -module MyOCamlbuildBase = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" - - (** Base functions for writing myocamlbuild.ml - @author Sylvain Le Gall - *) - - - - open Ocamlbuild_plugin - - type dir = string - type file = string - type name = string - type tag = string - -# 55 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/ocamlbuild/MyOCamlbuildBase.ml" - - type t = - { - lib_ocaml: (name * dir list) list; - lib_c: (name * dir * file list) list; - flags: (tag list * (spec OASISExpr.choices)) list; - } - - let env_filename = - Pathname.basename - BaseEnvLight.default_filename - - let dispatch_combine lst = - fun e -> - List.iter - (fun dispatch -> dispatch e) - lst - - let dispatch t e = - let env = - BaseEnvLight.load - ~filename:env_filename - ~allow_empty:true - () - in - match e with - | Before_options -> - let no_trailing_dot s = - if String.length s >= 1 && s.[0] = '.' then - String.sub s 1 ((String.length s) - 1) - else - s - in - List.iter - (fun (opt, var) -> - try - opt := no_trailing_dot (BaseEnvLight.var_get var env) - with Not_found -> - Printf.eprintf "W: Cannot get variable %s" var) - [ - Options.ext_obj, "ext_obj"; - Options.ext_lib, "ext_lib"; - Options.ext_dll, "ext_dll"; - ] - - | After_rules -> - (* Declare OCaml libraries *) - List.iter - (function - | lib, [] -> - ocaml_lib lib; - | lib, dir :: tl -> - ocaml_lib ~dir:dir lib; - List.iter - (fun dir -> - flag - ["ocaml"; "use_"^lib; "compile"] - (S[A"-I"; P dir])) - tl) - t.lib_ocaml; - - (* Declare C libraries *) - List.iter - (fun (lib, dir, headers) -> - (* Handle C part of library *) - flag ["link"; "library"; "ocaml"; "byte"; "use_lib"^lib] - (S[A"-dllib"; A("-l"^lib); A"-cclib"; A("-l"^lib)]); - - flag ["link"; "library"; "ocaml"; "native"; "use_lib"^lib] - (S[A"-cclib"; A("-l"^lib)]); - - flag ["link"; "program"; "ocaml"; "byte"; "use_lib"^lib] - (S[A"-dllib"; A("dll"^lib)]); - - (* When ocaml link something that use the C library, then one - need that file to be up to date. - *) - dep ["link"; "ocaml"; "program"; "use_lib"^lib] - [dir/"lib"^lib^"."^(!Options.ext_lib)]; - - dep ["compile"; "ocaml"; "program"; "use_lib"^lib] - [dir/"lib"^lib^"."^(!Options.ext_lib)]; - - (* TODO: be more specific about what depends on headers *) - (* Depends on .h files *) - dep ["compile"; "c"] - headers; - - (* Setup search path for lib *) - flag ["link"; "ocaml"; "use_"^lib] - (S[A"-I"; P(dir)]); - ) - t.lib_c; - - (* Add flags *) - List.iter - (fun (tags, cond_specs) -> - let spec = - BaseEnvLight.var_choose cond_specs env - in - flag tags & spec) - t.flags - | _ -> - () - - let dispatch_default t = - dispatch_combine - [ - dispatch t; - MyOCamlbuildFindlib.dispatch; - ] - -end - - -open Ocamlbuild_plugin;; -let package_default = - { - MyOCamlbuildBase.lib_ocaml = - [ - ("lib/sexplib", ["lib"]); - ("syntax/pa_sexp_conv", ["syntax"]); - ("top/sexplib_top", ["top"]) - ]; - lib_c = []; - flags = []; - } - ;; - -let dispatch_default = MyOCamlbuildBase.dispatch_default package_default;; - -# 472 "myocamlbuild.ml" -(* OASIS_STOP *) - -Ocamlbuild_plugin.dispatch - begin - function - | After_rules as e -> - - flag ["ocamldep"; "ocaml"; "use_pa_sexp_conv"] - (S[A"-ppopt"; P"syntax/pa_sexp_conv.cma"]); - - flag ["compile"; "ocaml"; "use_pa_sexp_conv"] - (S[A"-ppopt"; P"syntax/pa_sexp_conv.cma"]); - - dispatch_default e - | e -> - dispatch_default e - end -;; diff --git a/bundles/sexplib/sexplib-7.0.5/setup.ml b/bundles/sexplib/sexplib-7.0.5/setup.ml deleted file mode 100644 index 7623a34..0000000 --- a/bundles/sexplib/sexplib-7.0.5/setup.ml +++ /dev/null @@ -1,5597 +0,0 @@ -(* setup.ml generated for the first time by OASIS v0.2.0 *) - -(* OASIS_START *) -(* DO NOT EDIT (digest: 45e10b84ce2d3eaf3fd842c91210e92a) *) -(* - Regenerated by OASIS v0.3.0~rc2 - Visit http://oasis.forge.ocamlcore.org for more information and - documentation about functions used in this file. -*) -module OASISGettext = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISGettext.ml" - - let ns_ str = - str - - let s_ str = - str - - let f_ (str : ('a, 'b, 'c, 'd) format4) = - str - - let fn_ fmt1 fmt2 n = - if n = 1 then - fmt1^^"" - else - fmt2^^"" - - let init = - [] - -end - -module OASISContext = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISContext.ml" - - open OASISGettext - - type level = - [ `Debug - | `Info - | `Warning - | `Error] - - type t = - { - verbose: bool; - debug: bool; - ignore_plugins: bool; - ignore_unknown_fields: bool; - printf: level -> string -> unit; - } - - let printf lvl str = - let beg = - match lvl with - | `Error -> s_ "E: " - | `Warning -> s_ "W: " - | `Info -> s_ "I: " - | `Debug -> s_ "D: " - in - prerr_endline (beg^str) - - let default = - ref - { - verbose = true; - debug = false; - ignore_plugins = false; - ignore_unknown_fields = false; - printf = printf; - } - - let quiet = - {!default with - verbose = false; - debug = false; - } - - - let args () = - ["-quiet", - Arg.Unit (fun () -> default := {!default with verbose = false}), - (s_ " Run quietly"); - - "-debug", - Arg.Unit (fun () -> default := {!default with debug = true}), - (s_ " Output debug message")] -end - -module OASISUtils = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISUtils.ml" - - open OASISGettext - - module MapString = Map.Make(String) - - let map_string_of_assoc assoc = - List.fold_left - (fun acc (k, v) -> MapString.add k v acc) - MapString.empty - assoc - - module SetString = Set.Make(String) - - let set_string_add_list st lst = - List.fold_left - (fun acc e -> SetString.add e acc) - st - lst - - let set_string_of_list = - set_string_add_list - SetString.empty - - - let compare_csl s1 s2 = - String.compare (String.lowercase s1) (String.lowercase s2) - - module HashStringCsl = - Hashtbl.Make - (struct - type t = string - - let equal s1 s2 = - (String.lowercase s1) = (String.lowercase s2) - - let hash s = - Hashtbl.hash (String.lowercase s) - end) - - let split sep str = - let str_len = - String.length str - in - let rec split_aux acc pos = - if pos < str_len then - ( - let pos_sep = - try - String.index_from str pos sep - with Not_found -> - str_len - in - let part = - String.sub str pos (pos_sep - pos) - in - let acc = - part :: acc - in - if pos_sep >= str_len then - ( - (* Nothing more in the string *) - List.rev acc - ) - else if pos_sep = (str_len - 1) then - ( - (* String end with a separator *) - List.rev ("" :: acc) - ) - else - ( - split_aux acc (pos_sep + 1) - ) - ) - else - ( - List.rev acc - ) - in - split_aux [] 0 - - - let varname_of_string ?(hyphen='_') s = - if String.length s = 0 then - begin - invalid_arg "varname_of_string" - end - else - begin - let buff = - Buffer.create (String.length s) - in - (* Start with a _ if digit *) - if '0' <= s.[0] && s.[0] <= '9' then - Buffer.add_char buff hyphen; - - String.iter - (fun c -> - if ('a' <= c && c <= 'z') - || - ('A' <= c && c <= 'Z') - || - ('0' <= c && c <= '9') then - Buffer.add_char buff c - else - Buffer.add_char buff hyphen) - s; - - String.lowercase (Buffer.contents buff) - end - - let varname_concat ?(hyphen='_') p s = - let p = - let p_len = - String.length p - in - if p_len > 0 && p.[p_len - 1] = hyphen then - String.sub p 0 (p_len - 1) - else - p - in - let s = - let s_len = - String.length s - in - if s_len > 0 && s.[0] = hyphen then - String.sub s 1 (s_len - 1) - else - s - in - Printf.sprintf "%s%c%s" p hyphen s - - - let is_varname str = - str = varname_of_string str - - let failwithf fmt = Printf.ksprintf failwith fmt - -end - -module PropList = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/PropList.ml" - - open OASISGettext - - type name = string - - exception Not_set of name * string option - exception No_printer of name - exception Unknown_field of name * name - - let () = - Printexc.register_printer - (function - | Not_set (nm, Some rsn) -> - Some - (Printf.sprintf (f_ "Field '%s' is not set: %s") nm rsn) - | Not_set (nm, None) -> - Some - (Printf.sprintf (f_ "Field '%s' is not set") nm) - | No_printer nm -> - Some - (Printf.sprintf (f_ "No default printer for value %s") nm) - | Unknown_field (nm, schm) -> - Some - (Printf.sprintf (f_ "Field %s is not defined in schema %s") nm schm) - | _ -> - None) - - module Data = - struct - - type t = - (name, unit -> unit) Hashtbl.t - - let create () = - Hashtbl.create 13 - - let clear t = - Hashtbl.clear t - -# 71 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/PropList.ml" - end - - module Schema = - struct - - type ('ctxt, 'extra) value = - { - get: Data.t -> string; - set: Data.t -> ?context:'ctxt -> string -> unit; - help: (unit -> string) option; - extra: 'extra; - } - - type ('ctxt, 'extra) t = - { - name: name; - fields: (name, ('ctxt, 'extra) value) Hashtbl.t; - order: name Queue.t; - name_norm: string -> string; - } - - let create ?(case_insensitive=false) nm = - { - name = nm; - fields = Hashtbl.create 13; - order = Queue.create (); - name_norm = - (if case_insensitive then - String.lowercase - else - fun s -> s); - } - - let add t nm set get extra help = - let key = - t.name_norm nm - in - - if Hashtbl.mem t.fields key then - failwith - (Printf.sprintf - (f_ "Field '%s' is already defined in schema '%s'") - nm t.name); - Hashtbl.add - t.fields - key - { - set = set; - get = get; - help = help; - extra = extra; - }; - Queue.add nm t.order - - let mem t nm = - Hashtbl.mem t.fields nm - - let find t nm = - try - Hashtbl.find t.fields (t.name_norm nm) - with Not_found -> - raise (Unknown_field (nm, t.name)) - - let get t data nm = - (find t nm).get data - - let set t data nm ?context x = - (find t nm).set - data - ?context - x - - let fold f acc t = - Queue.fold - (fun acc k -> - let v = - find t k - in - f acc k v.extra v.help) - acc - t.order - - let iter f t = - fold - (fun () -> f) - () - t - - let name t = - t.name - end - - module Field = - struct - - type ('ctxt, 'value, 'extra) t = - { - set: Data.t -> ?context:'ctxt -> 'value -> unit; - get: Data.t -> 'value; - sets: Data.t -> ?context:'ctxt -> string -> unit; - gets: Data.t -> string; - help: (unit -> string) option; - extra: 'extra; - } - - let new_id = - let last_id = - ref 0 - in - fun () -> incr last_id; !last_id - - let create ?schema ?name ?parse ?print ?default ?update ?help extra = - (* Default value container *) - let v = - ref None - in - - (* If name is not given, create unique one *) - let nm = - match name with - | Some s -> s - | None -> Printf.sprintf "_anon_%d" (new_id ()) - in - - (* Last chance to get a value: the default *) - let default () = - match default with - | Some d -> d - | None -> raise (Not_set (nm, Some (s_ "no default value"))) - in - - (* Get data *) - let get data = - (* Get value *) - try - (Hashtbl.find data nm) (); - match !v with - | Some x -> x - | None -> default () - with Not_found -> - default () - in - - (* Set data *) - let set data ?context x = - let x = - match update with - | Some f -> - begin - try - f ?context (get data) x - with Not_set _ -> - x - end - | None -> - x - in - Hashtbl.replace - data - nm - (fun () -> v := Some x) - in - - (* Parse string value, if possible *) - let parse = - match parse with - | Some f -> - f - | None -> - fun ?context s -> - failwith - (Printf.sprintf - (f_ "Cannot parse field '%s' when setting value %S") - nm - s) - in - - (* Set data, from string *) - let sets data ?context s = - set ?context data (parse ?context s) - in - - (* Output value as string, if possible *) - let print = - match print with - | Some f -> - f - | None -> - fun _ -> raise (No_printer nm) - in - - (* Get data, as a string *) - let gets data = - print (get data) - in - - begin - match schema with - | Some t -> - Schema.add t nm sets gets extra help - | None -> - () - end; - - { - set = set; - get = get; - sets = sets; - gets = gets; - help = help; - extra = extra; - } - - let fset data t ?context x = - t.set data ?context x - - let fget data t = - t.get data - - let fsets data t ?context s = - t.sets data ?context s - - let fgets data t = - t.gets data - - end - - module FieldRO = - struct - - let create ?schema ?name ?parse ?print ?default ?update ?help extra = - let fld = - Field.create ?schema ?name ?parse ?print ?default ?update ?help extra - in - fun data -> Field.fget data fld - - end -end - -module OASISMessage = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISMessage.ml" - - - open OASISGettext - open OASISContext - - let generic_message ~ctxt lvl fmt = - let cond = - match lvl with - | `Debug -> ctxt.debug - | _ -> ctxt.verbose - in - Printf.ksprintf - (fun str -> - if cond then - begin - ctxt.printf lvl str - end) - fmt - - let debug ~ctxt fmt = - generic_message ~ctxt `Debug fmt - - let info ~ctxt fmt = - generic_message ~ctxt `Info fmt - - let warning ~ctxt fmt = - generic_message ~ctxt `Warning fmt - - let error ~ctxt fmt = - generic_message ~ctxt `Error fmt - -end - -module OASISVersion = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISVersion.ml" - - open OASISGettext - - - - type s = string - - type t = string - - type comparator = - | VGreater of t - | VGreaterEqual of t - | VEqual of t - | VLesser of t - | VLesserEqual of t - | VOr of comparator * comparator - | VAnd of comparator * comparator - - - (* Range of allowed characters *) - let is_digit c = - '0' <= c && c <= '9' - - let is_alpha c = - ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') - - let is_special = - function - | '.' | '+' | '-' | '~' -> true - | _ -> false - - let rec version_compare v1 v2 = - if v1 <> "" || v2 <> "" then - begin - (* Compare ascii string, using special meaning for version - * related char - *) - let val_ascii c = - if c = '~' then -1 - else if is_digit c then 0 - else if c = '\000' then 0 - else if is_alpha c then Char.code c - else (Char.code c) + 256 - in - - let len1 = String.length v1 in - let len2 = String.length v2 in - - let p = ref 0 in - - (** Compare ascii part *) - let compare_vascii () = - let cmp = ref 0 in - while !cmp = 0 && - !p < len1 && !p < len2 && - not (is_digit v1.[!p] && is_digit v2.[!p]) do - cmp := (val_ascii v1.[!p]) - (val_ascii v2.[!p]); - incr p - done; - if !cmp = 0 && !p < len1 && !p = len2 then - val_ascii v1.[!p] - else if !cmp = 0 && !p = len1 && !p < len2 then - - (val_ascii v2.[!p]) - else - !cmp - in - - (** Compare digit part *) - let compare_digit () = - let extract_int v p = - let start_p = !p in - while !p < String.length v && is_digit v.[!p] do - incr p - done; - let substr = - String.sub v !p ((String.length v) - !p) - in - let res = - match String.sub v start_p (!p - start_p) with - | "" -> 0 - | s -> int_of_string s - in - res, substr - in - let i1, tl1 = extract_int v1 (ref !p) in - let i2, tl2 = extract_int v2 (ref !p) in - i1 - i2, tl1, tl2 - in - - match compare_vascii () with - | 0 -> - begin - match compare_digit () with - | 0, tl1, tl2 -> - if tl1 <> "" && is_digit tl1.[0] then - 1 - else if tl2 <> "" && is_digit tl2.[0] then - -1 - else - version_compare tl1 tl2 - | n, _, _ -> - n - end - | n -> - n - end - else - begin - 0 - end - - - let version_of_string str = - String.iter - (fun c -> - if is_alpha c || is_digit c || is_special c then - () - else - failwith - (Printf.sprintf - (f_ "Char %C is not allowed in version '%s'") - c str)) - str; - str - - let string_of_version t = - t - - let chop t = - try - let pos = - String.rindex t '.' - in - String.sub t 0 pos - with Not_found -> - t - - let rec comparator_apply v op = - match op with - | VGreater cv -> - (version_compare v cv) > 0 - | VGreaterEqual cv -> - (version_compare v cv) >= 0 - | VLesser cv -> - (version_compare v cv) < 0 - | VLesserEqual cv -> - (version_compare v cv) <= 0 - | VEqual cv -> - (version_compare v cv) = 0 - | VOr (op1, op2) -> - (comparator_apply v op1) || (comparator_apply v op2) - | VAnd (op1, op2) -> - (comparator_apply v op1) && (comparator_apply v op2) - - let rec string_of_comparator = - function - | VGreater v -> "> "^(string_of_version v) - | VEqual v -> "= "^(string_of_version v) - | VLesser v -> "< "^(string_of_version v) - | VGreaterEqual v -> ">= "^(string_of_version v) - | VLesserEqual v -> "<= "^(string_of_version v) - | VOr (c1, c2) -> - (string_of_comparator c1)^" || "^(string_of_comparator c2) - | VAnd (c1, c2) -> - (string_of_comparator c1)^" && "^(string_of_comparator c2) - - let rec varname_of_comparator = - let concat p v = - OASISUtils.varname_concat - p - (OASISUtils.varname_of_string - (string_of_version v)) - in - function - | VGreater v -> concat "gt" v - | VLesser v -> concat "lt" v - | VEqual v -> concat "eq" v - | VGreaterEqual v -> concat "ge" v - | VLesserEqual v -> concat "le" v - | VOr (c1, c2) -> - (varname_of_comparator c1)^"_or_"^(varname_of_comparator c2) - | VAnd (c1, c2) -> - (varname_of_comparator c1)^"_and_"^(varname_of_comparator c2) - -end - -module OASISLicense = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISLicense.ml" - - (** License for _oasis fields - @author Sylvain Le Gall - *) - - - - type license = string - - type license_exception = string - - type license_version = - | Version of OASISVersion.t - | VersionOrLater of OASISVersion.t - | NoVersion - - - type license_dep_5 = - { - license: license; - exceptions: license_exception list; - version: license_version; - } - - type t = - | DEP5License of license_dep_5 - | OtherLicense of string (* URL *) - - -end - -module OASISExpr = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISExpr.ml" - - - - open OASISGettext - - type test = string - - type flag = string - - type t = - | EBool of bool - | ENot of t - | EAnd of t * t - | EOr of t * t - | EFlag of flag - | ETest of test * string - - - type 'a choices = (t * 'a) list - - let eval var_get t = - let rec eval' = - function - | EBool b -> - b - - | ENot e -> - not (eval' e) - - | EAnd (e1, e2) -> - (eval' e1) && (eval' e2) - - | EOr (e1, e2) -> - (eval' e1) || (eval' e2) - - | EFlag nm -> - let v = - var_get nm - in - assert(v = "true" || v = "false"); - (v = "true") - - | ETest (nm, vl) -> - let v = - var_get nm - in - (v = vl) - in - eval' t - - let choose ?printer ?name var_get lst = - let rec choose_aux = - function - | (cond, vl) :: tl -> - if eval var_get cond then - vl - else - choose_aux tl - | [] -> - let str_lst = - if lst = [] then - s_ "" - else - String.concat - (s_ ", ") - (List.map - (fun (cond, vl) -> - match printer with - | Some p -> p vl - | None -> s_ "") - lst) - in - match name with - | Some nm -> - failwith - (Printf.sprintf - (f_ "No result for the choice list '%s': %s") - nm str_lst) - | None -> - failwith - (Printf.sprintf - (f_ "No result for a choice list: %s") - str_lst) - in - choose_aux (List.rev lst) - -end - -module OASISTypes = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISTypes.ml" - - - - - type name = string - type package_name = string - type url = string - type unix_dirname = string - type unix_filename = string - type host_dirname = string - type host_filename = string - type prog = string - type arg = string - type args = string list - type command_line = (prog * arg list) - - type findlib_name = string - type findlib_full = string - - type compiled_object = - | Byte - | Native - | Best - - - type dependency = - | FindlibPackage of findlib_full * OASISVersion.comparator option - | InternalLibrary of name - - - type tool = - | ExternalTool of name - | InternalExecutable of name - - - type vcs = - | Darcs - | Git - | Svn - | Cvs - | Hg - | Bzr - | Arch - | Monotone - | OtherVCS of url - - - type plugin_kind = - [ `Configure - | `Build - | `Doc - | `Test - | `Install - | `Extra - ] - - type plugin_data_purpose = - [ `Configure - | `Build - | `Install - | `Clean - | `Distclean - | `Install - | `Uninstall - | `Test - | `Doc - | `Extra - | `Other of string - ] - - type 'a plugin = 'a * name * OASISVersion.t option - - type all_plugin = plugin_kind plugin - - type plugin_data = (all_plugin * plugin_data_purpose * (unit -> unit)) list - -# 102 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISTypes.ml" - - type 'a conditional = 'a OASISExpr.choices - - type custom = - { - pre_command: (command_line option) conditional; - post_command: (command_line option) conditional; - } - - - type common_section = - { - cs_name: name; - cs_data: PropList.Data.t; - cs_plugin_data: plugin_data; - } - - - type build_section = - { - bs_build: bool conditional; - bs_install: bool conditional; - bs_path: unix_dirname; - bs_compiled_object: compiled_object; - bs_build_depends: dependency list; - bs_build_tools: tool list; - bs_c_sources: unix_filename list; - bs_data_files: (unix_filename * unix_filename option) list; - bs_ccopt: args conditional; - bs_cclib: args conditional; - bs_dlllib: args conditional; - bs_dllpath: args conditional; - bs_byteopt: args conditional; - bs_nativeopt: args conditional; - } - - - type library = - { - lib_modules: string list; - lib_pack: bool; - lib_internal_modules: string list; - lib_findlib_parent: findlib_name option; - lib_findlib_name: findlib_name option; - lib_findlib_containers: findlib_name list; - } - - type executable = - { - exec_custom: bool; - exec_main_is: unix_filename; - } - - type flag = - { - flag_description: string option; - flag_default: bool conditional; - } - - type source_repository = - { - src_repo_type: vcs; - src_repo_location: url; - src_repo_browser: url option; - src_repo_module: string option; - src_repo_branch: string option; - src_repo_tag: string option; - src_repo_subdir: unix_filename option; - } - - type test = - { - test_type: [`Test] plugin; - test_command: command_line conditional; - test_custom: custom; - test_working_directory: unix_filename option; - test_run: bool conditional; - test_tools: tool list; - } - - type doc_format = - | HTML of unix_filename - | DocText - | PDF - | PostScript - | Info of unix_filename - | DVI - | OtherDoc - - - type doc = - { - doc_type: [`Doc] plugin; - doc_custom: custom; - doc_build: bool conditional; - doc_install: bool conditional; - doc_install_dir: unix_filename; - doc_title: string; - doc_authors: string list; - doc_abstract: string option; - doc_format: doc_format; - doc_data_files: (unix_filename * unix_filename option) list; - doc_build_tools: tool list; - } - - type section = - | Library of common_section * build_section * library - | Executable of common_section * build_section * executable - | Flag of common_section * flag - | SrcRepo of common_section * source_repository - | Test of common_section * test - | Doc of common_section * doc - - - type section_kind = - [ `Library | `Executable | `Flag | `SrcRepo | `Test | `Doc ] - - type package = - { - oasis_version: OASISVersion.t; - ocaml_version: OASISVersion.comparator option; - findlib_version: OASISVersion.comparator option; - name: package_name; - version: OASISVersion.t; - license: OASISLicense.t; - license_file: unix_filename option; - copyrights: string list; - maintainers: string list; - authors: string list; - homepage: url option; - synopsis: string; - description: string option; - categories: url list; - - conf_type: [`Configure] plugin; - conf_custom: custom; - - build_type: [`Build] plugin; - build_custom: custom; - - install_type: [`Install] plugin; - install_custom: custom; - uninstall_custom: custom; - - clean_custom: custom; - distclean_custom: custom; - - files_ab: unix_filename list; - sections: section list; - plugins: [`Extra] plugin list; - schema_data: PropList.Data.t; - plugin_data: plugin_data; - } - -end - -module OASISUnixPath = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISUnixPath.ml" - - type unix_filename = string - type unix_dirname = string - - type host_filename = string - type host_dirname = string - - let current_dir_name = "." - - let parent_dir_name = ".." - - let concat f1 f2 = - if f1 = current_dir_name then - f2 - else if f2 = current_dir_name then - f1 - else - f1^"/"^f2 - - let make = - function - | hd :: tl -> - List.fold_left - (fun f p -> concat f p) - hd - tl - | [] -> - invalid_arg "OASISUnixPath.make" - - let dirname f = - try - String.sub f 0 (String.rindex f '/') - with Not_found -> - current_dir_name - - let basename f = - try - let pos_start = - (String.rindex f '/') + 1 - in - String.sub f pos_start ((String.length f) - pos_start) - with Not_found -> - f - - let chop_extension f = - try - let last_dot = - String.rindex f '.' - in - let sub = - String.sub f 0 last_dot - in - try - let last_slash = - String.rindex f '/' - in - if last_slash < last_dot then - sub - else - f - with Not_found -> - sub - - with Not_found -> - f - - let capitalize_file f = - let dir = dirname f in - let base = basename f in - concat dir (String.capitalize base) - - let uncapitalize_file f = - let dir = dirname f in - let base = basename f in - concat dir (String.uncapitalize base) -end - -module OASISSection = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISSection.ml" - - open OASISTypes - - let section_kind_common = - function - | Library (cs, _, _) -> - `Library, cs - | Executable (cs, _, _) -> - `Executable, cs - | Flag (cs, _) -> - `Flag, cs - | SrcRepo (cs, _) -> - `SrcRepo, cs - | Test (cs, _) -> - `Test, cs - | Doc (cs, _) -> - `Doc, cs - - let section_common sct = - snd (section_kind_common sct) - - let section_common_set cs = - function - | Library (_, bs, lib) -> Library (cs, bs, lib) - | Executable (_, bs, exec) -> Executable (cs, bs, exec) - | Flag (_, flg) -> Flag (cs, flg) - | SrcRepo (_, src_repo) -> SrcRepo (cs, src_repo) - | Test (_, tst) -> Test (cs, tst) - | Doc (_, doc) -> Doc (cs, doc) - - (** Key used to identify section - *) - let section_id sct = - let k, cs = - section_kind_common sct - in - k, cs.cs_name - - let string_of_section sct = - let k, nm = - section_id sct - in - (match k with - | `Library -> "library" - | `Executable -> "executable" - | `Flag -> "flag" - | `SrcRepo -> "src repository" - | `Test -> "test" - | `Doc -> "doc") - ^" "^nm - -end - -module OASISBuildSection = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISBuildSection.ml" - -end - -module OASISExecutable = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISExecutable.ml" - - open OASISTypes - - let unix_exec_is (cs, bs, exec) is_native ext_dll suffix_program = - let dir = - OASISUnixPath.concat - bs.bs_path - (OASISUnixPath.dirname exec.exec_main_is) - in - let is_native_exec = - match bs.bs_compiled_object with - | Native -> true - | Best -> is_native () - | Byte -> false - in - - OASISUnixPath.concat - dir - (cs.cs_name^(suffix_program ())), - - if not is_native_exec && - not exec.exec_custom && - bs.bs_c_sources <> [] then - Some (dir^"/dll"^cs.cs_name^(ext_dll ())) - else - None - -end - -module OASISLibrary = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISLibrary.ml" - - open OASISTypes - open OASISUtils - open OASISGettext - - type library_name = name - - (* Look for a module file, considering capitalization or not. *) - let find_module source_file_exists (cs, bs, lib) modul = - let possible_base_fn = - List.map - (OASISUnixPath.concat bs.bs_path) - [modul; - OASISUnixPath.uncapitalize_file modul; - OASISUnixPath.capitalize_file modul] - in - (* TODO: we should be able to be able to determine the source for every - * files. Hence we should introduce a Module(source: fn) for the fields - * Modules and InternalModules - *) - List.fold_left - (fun acc base_fn -> - match acc with - | `No_sources _ -> - begin - let file_found = - List.fold_left - (fun acc ext -> - if source_file_exists (base_fn^ext) then - (base_fn^ext) :: acc - else - acc) - [] - [".ml"; ".mli"; ".mll"; ".mly"] - in - match file_found with - | [] -> - acc - | lst -> - `Sources (base_fn, lst) - end - | `Sources _ -> - acc) - (`No_sources possible_base_fn) - possible_base_fn - - let source_unix_files ~ctxt (cs, bs, lib) source_file_exists = - List.fold_left - (fun acc modul -> - match find_module source_file_exists (cs, bs, lib) modul with - | `Sources (base_fn, lst) -> - (base_fn, lst) :: acc - | `No_sources _ -> - OASISMessage.warning - ~ctxt - (f_ "Cannot find source file matching \ - module '%s' in library %s") - modul cs.cs_name; - acc) - [] - (lib.lib_modules @ lib.lib_internal_modules) - - let generated_unix_files ~ctxt (cs, bs, lib) - source_file_exists is_native ext_lib ext_dll = - - let find_modules lst ext = - let find_module modul = - match find_module source_file_exists (cs, bs, lib) modul with - | `Sources (base_fn, _) -> - [base_fn] - | `No_sources lst -> - OASISMessage.warning - ~ctxt - (f_ "Cannot find source file matching \ - module '%s' in library %s") - modul cs.cs_name; - lst - in - List.map - (fun nm -> - List.map - (fun base_fn -> base_fn ^"."^ext) - (find_module nm)) - lst - in - - (* The headers that should be compiled along *) - let headers = - if lib.lib_pack then - [] - else - find_modules - lib.lib_modules - "cmi" - in - - (* The .cmx that be compiled along *) - let cmxs = - let should_be_built = - (not lib.lib_pack) && (* Do not install .cmx packed submodules *) - match bs.bs_compiled_object with - | Native -> true - | Best -> is_native () - | Byte -> false - in - if should_be_built then - find_modules - (lib.lib_modules @ lib.lib_internal_modules) - "cmx" - else - [] - in - - let acc_nopath = - [] - in - - (* Compute what libraries should be built *) - let acc_nopath = - (* Add the packed header file if required *) - let add_pack_header acc = - if lib.lib_pack then - [cs.cs_name^".cmi"] :: acc - else - acc - in - let byte acc = - add_pack_header ([cs.cs_name^".cma"] :: acc) - in - let native acc = - add_pack_header ([cs.cs_name^".cmxa"] :: [cs.cs_name^(ext_lib ())] :: acc) - in - match bs.bs_compiled_object with - | Native -> - byte (native acc_nopath) - | Best when is_native () -> - byte (native acc_nopath) - | Byte | Best -> - byte acc_nopath - in - - (* Add C library to be built *) - let acc_nopath = - if bs.bs_c_sources <> [] then - begin - ["lib"^cs.cs_name^(ext_lib ())] - :: - ["dll"^cs.cs_name^(ext_dll ())] - :: - acc_nopath - end - else - acc_nopath - in - - (* All the files generated *) - List.rev_append - (List.rev_map - (List.rev_map - (OASISUnixPath.concat bs.bs_path)) - acc_nopath) - (headers @ cmxs) - - - type group_t = - | Container of findlib_name * (group_t list) - | Package of (findlib_name * - common_section * - build_section * - library * - (group_t list)) - - let group_libs pkg = - (** Associate a name with its children *) - let children = - List.fold_left - (fun mp -> - function - | Library (cs, bs, lib) -> - begin - match lib.lib_findlib_parent with - | Some p_nm -> - begin - let children = - try - MapString.find p_nm mp - with Not_found -> - [] - in - MapString.add p_nm ((cs, bs, lib) :: children) mp - end - | None -> - mp - end - | _ -> - mp) - MapString.empty - pkg.sections - in - - (* Compute findlib name of a single node *) - let findlib_name (cs, _, lib) = - match lib.lib_findlib_name with - | Some nm -> nm - | None -> cs.cs_name - in - - (** Build a package tree *) - let rec tree_of_library containers ((cs, bs, lib) as acc) = - match containers with - | hd :: tl -> - Container (hd, [tree_of_library tl acc]) - | [] -> - Package - (findlib_name acc, cs, bs, lib, - (try - List.rev_map - (fun ((_, _, child_lib) as child_acc) -> - tree_of_library - child_lib.lib_findlib_containers - child_acc) - (MapString.find cs.cs_name children) - with Not_found -> - [])) - in - - (** Merge containers with the same name *) - let rec merge_containers groups = - (* Collect packages and create the map "container name -> merged children" *) - let packages, containers = - List.fold_left - (fun (packages, containers) group -> - match group with - | Container(name, children) -> - let children' = - try - MapString.find name containers - with Not_found -> - [] - in - (packages, - MapString.add name (children' @ children) containers) - | Package(name, cs, bs, lib, children) -> - (Package(name, cs, bs, lib, merge_containers children) :: packages, - containers)) - ([], MapString.empty) - groups - in - (* Recreate the list of groups *) - packages @ - (MapString.fold - (fun name children acc -> - Container(name, merge_containers children) :: acc) - containers []) - in - - (* TODO: check that libraries are unique *) - merge_containers - (List.fold_left - (fun acc -> - function - | Library (cs, bs, lib) when lib.lib_findlib_parent = None -> - (tree_of_library lib.lib_findlib_containers (cs, bs, lib)) :: acc - | _ -> - acc) - [] - pkg.sections) - - (** Compute internal to findlib library matchings, including subpackage - and return a map of it. - *) - let findlib_name_map pkg = - - (* Compute names in a tree *) - let rec findlib_names_aux path mp grp = - let fndlb_nm, children, mp = - match grp with - | Container (fndlb_nm, children) -> - fndlb_nm, children, mp - - | Package (fndlb_nm, {cs_name = nm}, _, _, children) -> - fndlb_nm, children, (MapString.add nm (path, fndlb_nm) mp) - in - let fndlb_nm_full = - (match path with - | Some pth -> pth^"." - | None -> "")^ - fndlb_nm - in - List.fold_left - (findlib_names_aux (Some fndlb_nm_full)) - mp - children - in - - List.fold_left - (findlib_names_aux None) - MapString.empty - (group_libs pkg) - - - let findlib_of_name ?(recurse=false) map nm = - try - let (path, fndlb_nm) = - MapString.find nm map - in - match path with - | Some pth when recurse -> pth^"."^fndlb_nm - | _ -> fndlb_nm - - with Not_found -> - failwithf - (f_ "Unable to translate internal library '%s' to findlib name") - nm - - let name_findlib_map pkg = - let mp = - findlib_name_map pkg - in - MapString.fold - (fun nm _ acc -> - let fndlb_nm_full = - findlib_of_name - ~recurse:true - mp - nm - in - MapString.add fndlb_nm_full nm acc) - mp - MapString.empty - - let findlib_of_group = - function - | Container (fndlb_nm, _) - | Package (fndlb_nm, _, _, _, _) -> fndlb_nm - - let root_of_group grp = - let rec root_lib_aux = - function - | Container (_, children) -> - root_lib_lst children - | Package (_, cs, bs, lib, children) -> - if lib.lib_findlib_parent = None then - cs, bs, lib - else - root_lib_lst children - and root_lib_lst = - function - | [] -> - raise Not_found - | hd :: tl -> - try - root_lib_aux hd - with Not_found -> - root_lib_lst tl - in - try - root_lib_aux grp - with Not_found -> - failwithf - (f_ "Unable to determine root library of findlib library '%s'") - (findlib_of_group grp) - - -end - -module OASISFlag = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISFlag.ml" - -end - -module OASISPackage = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISPackage.ml" - -end - -module OASISSourceRepository = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISSourceRepository.ml" - -end - -module OASISTest = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISTest.ml" - -end - -module OASISDocument = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/oasis/OASISDocument.ml" - -end - - -module BaseEnvLight = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseEnvLight.ml" - - module MapString = Map.Make(String) - - type t = string MapString.t - - let default_filename = - Filename.concat - (Sys.getcwd ()) - "setup.data" - - let load ?(allow_empty=false) ?(filename=default_filename) () = - if Sys.file_exists filename then - begin - let chn = - open_in_bin filename - in - let st = - Stream.of_channel chn - in - let line = - ref 1 - in - let st_line = - Stream.from - (fun _ -> - try - match Stream.next st with - | '\n' -> incr line; Some '\n' - | c -> Some c - with Stream.Failure -> None) - in - let lexer = - Genlex.make_lexer ["="] st_line - in - let rec read_file mp = - match Stream.npeek 3 lexer with - | [Genlex.Ident nm; Genlex.Kwd "="; Genlex.String value] -> - Stream.junk lexer; - Stream.junk lexer; - Stream.junk lexer; - read_file (MapString.add nm value mp) - | [] -> - mp - | _ -> - failwith - (Printf.sprintf - "Malformed data file '%s' line %d" - filename !line) - in - let mp = - read_file MapString.empty - in - close_in chn; - mp - end - else if allow_empty then - begin - MapString.empty - end - else - begin - failwith - (Printf.sprintf - "Unable to load environment, the file '%s' doesn't exist." - filename) - end - - let var_get name env = - let rec var_expand str = - let buff = - Buffer.create ((String.length str) * 2) - in - Buffer.add_substitute - buff - (fun var -> - try - var_expand (MapString.find var env) - with Not_found -> - failwith - (Printf.sprintf - "No variable %s defined when trying to expand %S." - var - str)) - str; - Buffer.contents buff - in - var_expand (MapString.find name env) - - let var_choose lst env = - OASISExpr.choose - (fun nm -> var_get nm env) - lst -end - - -module BaseContext = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseContext.ml" - - open OASISContext - - let args = args - - let default = default - -end - -module BaseMessage = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseMessage.ml" - - (** Message to user, overrid for Base - @author Sylvain Le Gall - *) - open OASISMessage - open BaseContext - - let debug fmt = debug ~ctxt:!default fmt - - let info fmt = info ~ctxt:!default fmt - - let warning fmt = warning ~ctxt:!default fmt - - let error fmt = error ~ctxt:!default fmt - -end - -module BaseFilePath = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseFilePath.ml" - - - open Filename - - module Unix = OASISUnixPath - - let make = - function - | [] -> - invalid_arg "BaseFilename.make" - | hd :: tl -> - List.fold_left Filename.concat hd tl - - let of_unix ufn = - if Sys.os_type = "Unix" then - ufn - else - make - (List.map - (fun p -> - if p = Unix.current_dir_name then - current_dir_name - else if p = Unix.parent_dir_name then - parent_dir_name - else - p) - (OASISUtils.split '/' ufn)) - -end - -module BaseEnv = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseEnv.ml" - - open OASISGettext - open OASISUtils - open PropList - - module MapString = BaseEnvLight.MapString - - type origin_t = - | ODefault - | OGetEnv - | OFileLoad - | OCommandLine - - type cli_handle_t = - | CLINone - | CLIAuto - | CLIWith - | CLIEnable - | CLIUser of (Arg.key * Arg.spec * Arg.doc) list - - type definition_t = - { - hide: bool; - dump: bool; - cli: cli_handle_t; - arg_help: string option; - group: string option; - } - - let schema = - Schema.create "environment" - - (* Environment data *) - let env = - Data.create () - - (* Environment data from file *) - let env_from_file = - ref MapString.empty - - (* Lexer for var *) - let var_lxr = - Genlex.make_lexer [] - - let rec var_expand str = - let buff = - Buffer.create ((String.length str) * 2) - in - Buffer.add_substitute - buff - (fun var -> - try - (* TODO: this is a quick hack to allow calling Test.Command - * without defining executable name really. I.e. if there is - * an exec Executable toto, then $(toto) should be replace - * by its real name. It is however useful to have this function - * for other variable that depend on the host and should be - * written better than that. - *) - let st = - var_lxr (Stream.of_string var) - in - match Stream.npeek 3 st with - | [Genlex.Ident "utoh"; Genlex.Ident nm] -> - BaseFilePath.of_unix (var_get nm) - | [Genlex.Ident "utoh"; Genlex.String s] -> - BaseFilePath.of_unix s - | [Genlex.Ident "ocaml_escaped"; Genlex.Ident nm] -> - String.escaped (var_get nm) - | [Genlex.Ident "ocaml_escaped"; Genlex.String s] -> - String.escaped s - | [Genlex.Ident nm] -> - var_get nm - | _ -> - failwithf - (f_ "Unknown expression '%s' in variable expansion of %s.") - var - str - with - | Unknown_field (_, _) -> - failwithf - (f_ "No variable %s defined when trying to expand %S.") - var - str - | Stream.Error e -> - failwithf - (f_ "Syntax error when parsing '%s' when trying to \ - expand %S: %s") - var - str - e) - str; - Buffer.contents buff - - and var_get name = - let vl = - try - Schema.get schema env name - with Unknown_field _ as e -> - begin - try - MapString.find name !env_from_file - with Not_found -> - raise e - end - in - var_expand vl - - let var_choose ?printer ?name lst = - OASISExpr.choose - ?printer - ?name - var_get - lst - - let var_protect vl = - let buff = - Buffer.create (String.length vl) - in - String.iter - (function - | '$' -> Buffer.add_string buff "\\$" - | c -> Buffer.add_char buff c) - vl; - Buffer.contents buff - - let var_define - ?(hide=false) - ?(dump=true) - ?short_desc - ?(cli=CLINone) - ?arg_help - ?group - name (* TODO: type constraint on the fact that name must be a valid OCaml - id *) - dflt = - - let default = - [ - OFileLoad, (fun () -> MapString.find name !env_from_file); - ODefault, dflt; - OGetEnv, (fun () -> Sys.getenv name); - ] - in - - let extra = - { - hide = hide; - dump = dump; - cli = cli; - arg_help = arg_help; - group = group; - } - in - - (* Try to find a value that can be defined - *) - let var_get_low lst = - let errors, res = - List.fold_left - (fun (errors, res) (o, v) -> - if res = None then - begin - try - errors, Some (v ()) - with - | Not_found -> - errors, res - | Failure rsn -> - (rsn :: errors), res - | e -> - (Printexc.to_string e) :: errors, res - end - else - errors, res) - ([], None) - (List.sort - (fun (o1, _) (o2, _) -> - Pervasives.compare o2 o1) - lst) - in - match res, errors with - | Some v, _ -> - v - | None, [] -> - raise (Not_set (name, None)) - | None, lst -> - raise (Not_set (name, Some (String.concat (s_ ", ") lst))) - in - - let help = - match short_desc with - | Some fs -> Some fs - | None -> None - in - - let var_get_lst = - FieldRO.create - ~schema - ~name - ~parse:(fun ?(context=ODefault) s -> [context, fun () -> s]) - ~print:var_get_low - ~default - ~update:(fun ?context x old_x -> x @ old_x) - ?help - extra - in - - fun () -> - var_expand (var_get_low (var_get_lst env)) - - let var_redefine - ?hide - ?dump - ?short_desc - ?cli - ?arg_help - ?group - name - dflt = - if Schema.mem schema name then - begin - (* TODO: look suspsicious, we want to memorize dflt not dflt () *) - Schema.set schema env ~context:ODefault name (dflt ()); - fun () -> var_get name - end - else - begin - var_define - ?hide - ?dump - ?short_desc - ?cli - ?arg_help - ?group - name - dflt - end - - let var_ignore (e : unit -> string) = - () - - let print_hidden = - var_define - ~hide:true - ~dump:false - ~cli:CLIAuto - ~arg_help:"Print even non-printable variable. (debug)" - "print_hidden" - (fun () -> "false") - - let var_all () = - List.rev - (Schema.fold - (fun acc nm def _ -> - if not def.hide || bool_of_string (print_hidden ()) then - nm :: acc - else - acc) - [] - schema) - - let default_filename = - BaseEnvLight.default_filename - - let load ?allow_empty ?filename () = - env_from_file := BaseEnvLight.load ?allow_empty ?filename () - - let unload () = - env_from_file := MapString.empty; - Data.clear env - - let dump ?(filename=default_filename) () = - let chn = - open_out_bin filename - in - let output nm value = - Printf.fprintf chn "%s=%S\n" nm value - in - let mp_todo = - (* Dump data from schema *) - Schema.fold - (fun mp_todo nm def _ -> - if def.dump then - begin - try - let value = - Schema.get - schema - env - nm - in - output nm value - with Not_set _ -> - () - end; - MapString.remove nm mp_todo) - !env_from_file - schema - in - (* Dump data defined outside of schema *) - MapString.iter output mp_todo; - - (* End of the dump *) - close_out chn - - let print () = - let printable_vars = - Schema.fold - (fun acc nm def short_descr_opt -> - if not def.hide || bool_of_string (print_hidden ()) then - begin - try - let value = - Schema.get - schema - env - nm - in - let txt = - match short_descr_opt with - | Some s -> s () - | None -> nm - in - (txt, value) :: acc - with Not_set _ -> - acc - end - else - acc) - [] - schema - in - let max_length = - List.fold_left max 0 - (List.rev_map String.length - (List.rev_map fst printable_vars)) - in - let dot_pad str = - String.make ((max_length - (String.length str)) + 3) '.' - in - - Printf.printf "\nConfiguration: \n"; - List.iter - (fun (name,value) -> - Printf.printf "%s: %s %s\n" name (dot_pad name) value) - (List.rev printable_vars); - Printf.printf "\n%!" - - let args () = - let arg_concat = - OASISUtils.varname_concat ~hyphen:'-' - in - [ - "--override", - Arg.Tuple - ( - let rvr = ref "" - in - let rvl = ref "" - in - [ - Arg.Set_string rvr; - Arg.Set_string rvl; - Arg.Unit - (fun () -> - Schema.set - schema - env - ~context:OCommandLine - !rvr - !rvl) - ] - ), - "var+val Override any configuration variable."; - - ] - @ - List.flatten - (Schema.fold - (fun acc name def short_descr_opt -> - let var_set s = - Schema.set - schema - env - ~context:OCommandLine - name - s - in - - let arg_name = - OASISUtils.varname_of_string ~hyphen:'-' name - in - - let hlp = - match short_descr_opt with - | Some txt -> txt () - | None -> "" - in - - let arg_hlp = - match def.arg_help with - | Some s -> s - | None -> "str" - in - - let default_value = - try - Printf.sprintf - (f_ " [%s]") - (Schema.get - schema - env - name) - with Not_set _ -> - "" - in - - let args = - match def.cli with - | CLINone -> - [] - | CLIAuto -> - [ - arg_concat "--" arg_name, - Arg.String var_set, - Printf.sprintf (f_ "%s %s%s") arg_hlp hlp default_value - ] - | CLIWith -> - [ - arg_concat "--with-" arg_name, - Arg.String var_set, - Printf.sprintf (f_ "%s %s%s") arg_hlp hlp default_value - ] - | CLIEnable -> - let dflt = - if default_value = " [true]" then - s_ " [default: enabled]" - else - s_ " [default: disabled]" - in - [ - arg_concat "--enable-" arg_name, - Arg.Unit (fun () -> var_set "true"), - Printf.sprintf (f_ " %s%s") hlp dflt; - - arg_concat "--disable-" arg_name, - Arg.Unit (fun () -> var_set "false"), - Printf.sprintf (f_ " %s%s") hlp dflt - ] - | CLIUser lst -> - lst - in - args :: acc) - [] - schema) -end - -module BaseExec = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseExec.ml" - - open OASISGettext - open OASISUtils - open BaseMessage - - let run ?f_exit_code cmd args = - let cmdline = - String.concat " " (cmd :: args) - in - info (f_ "Running command '%s'") cmdline; - match f_exit_code, Sys.command cmdline with - | None, 0 -> () - | None, i -> - failwithf - (f_ "Command '%s' terminated with error code %d") - cmdline i - | Some f, i -> - f i - - let run_read_output ?f_exit_code cmd args = - let fn = - Filename.temp_file "oasis-" ".txt" - in - let () = - try - run ?f_exit_code cmd (args @ [">"; Filename.quote fn]) - with e -> - Sys.remove fn; - raise e - in - let chn = - open_in fn - in - let routput = - ref [] - in - ( - try - while true do - routput := (input_line chn) :: !routput - done - with End_of_file -> - () - ); - close_in chn; - Sys.remove fn; - List.rev !routput - - let run_read_one_line ?f_exit_code cmd args = - match run_read_output ?f_exit_code cmd args with - | [fst] -> - fst - | lst -> - failwithf - (f_ "Command return unexpected output %S") - (String.concat "\n" lst) -end - -module BaseFileUtil = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseFileUtil.ml" - - open OASISGettext - - let find_file paths exts = - - (* Cardinal product of two list *) - let ( * ) lst1 lst2 = - List.flatten - (List.map - (fun a -> - List.map - (fun b -> a,b) - lst2) - lst1) - in - - let rec combined_paths lst = - match lst with - | p1 :: p2 :: tl -> - let acc = - (List.map - (fun (a,b) -> Filename.concat a b) - (p1 * p2)) - in - combined_paths (acc :: tl) - | [e] -> - e - | [] -> - [] - in - - let alternatives = - List.map - (fun (p,e) -> - if String.length e > 0 && e.[0] <> '.' then - p ^ "." ^ e - else - p ^ e) - ((combined_paths paths) * exts) - in - List.find - Sys.file_exists - alternatives - - let which prg = - let path_sep = - match Sys.os_type with - | "Win32" -> - ';' - | _ -> - ':' - in - let path_lst = - OASISUtils.split - path_sep - (Sys.getenv "PATH") - in - let exec_ext = - match Sys.os_type with - | "Win32" -> - "" - :: - (OASISUtils.split - path_sep - (Sys.getenv "PATHEXT")) - | _ -> - [""] - in - find_file [path_lst; [prg]] exec_ext - - (**/**) - let rec fix_dir dn = - (* Windows hack because Sys.file_exists "src\\" = false when - * Sys.file_exists "src" = true - *) - let ln = - String.length dn - in - if Sys.os_type = "Win32" && ln > 0 && dn.[ln - 1] = '\\' then - fix_dir (String.sub dn 0 (ln - 1)) - else - dn - - let q = Filename.quote - (**/**) - - let cp src tgt = - BaseExec.run - (match Sys.os_type with - | "Win32" -> "copy" - | _ -> "cp") - [q src; q tgt] - - let mkdir tgt = - BaseExec.run - (match Sys.os_type with - | "Win32" -> "md" - | _ -> "mkdir") - [q tgt] - - let rec mkdir_parent f tgt = - let tgt = - fix_dir tgt - in - if Sys.file_exists tgt then - begin - if not (Sys.is_directory tgt) then - OASISUtils.failwithf - (f_ "Cannot create directory '%s', a file of the same name already \ - exists") - tgt - end - else - begin - mkdir_parent f (Filename.dirname tgt); - if not (Sys.file_exists tgt) then - begin - f tgt; - mkdir tgt - end - end - - let rmdir tgt = - if Sys.readdir tgt = [||] then - begin - match Sys.os_type with - | "Win32" -> - BaseExec.run "rd" [q tgt] - | _ -> - BaseExec.run "rm" ["-r"; q tgt] - end - - let glob fn = - let basename = - Filename.basename fn - in - if String.length basename >= 2 && - basename.[0] = '*' && - basename.[1] = '.' then - begin - let ext_len = - (String.length basename) - 2 - in - let ext = - String.sub basename 2 ext_len - in - let dirname = - Filename.dirname fn - in - Array.fold_left - (fun acc fn -> - try - let fn_ext = - String.sub - fn - ((String.length fn) - ext_len) - ext_len - in - if fn_ext = ext then - (Filename.concat dirname fn) :: acc - else - acc - with Invalid_argument _ -> - acc) - [] - (Sys.readdir dirname) - end - else - begin - if Sys.file_exists fn then - [fn] - else - [] - end -end - -module BaseArgExt = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseArgExt.ml" - - open OASISUtils - open OASISGettext - - let parse argv args = - (* Simulate command line for Arg *) - let current = - ref 0 - in - - try - Arg.parse_argv - ~current:current - (Array.concat [[|"none"|]; argv]) - (Arg.align args) - (failwithf (f_ "Don't know what to do with arguments: '%s'")) - (s_ "configure options:") - with - | Arg.Help txt -> - print_endline txt; - exit 0 - | Arg.Bad txt -> - prerr_endline txt; - exit 1 -end - -module BaseCheck = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseCheck.ml" - - open BaseEnv - open BaseMessage - open OASISUtils - open OASISGettext - - let prog_best prg prg_lst = - var_redefine - prg - (fun () -> - let alternate = - List.fold_left - (fun res e -> - match res with - | Some _ -> - res - | None -> - try - Some (BaseFileUtil.which e) - with Not_found -> - None) - None - prg_lst - in - match alternate with - | Some prg -> prg - | None -> raise Not_found) - - let prog prg = - prog_best prg [prg] - - let prog_opt prg = - prog_best prg [prg^".opt"; prg] - - let ocamlfind = - prog "ocamlfind" - - let version - var_prefix - cmp - fversion - () = - (* Really compare version provided *) - let var = - var_prefix^"_version_"^(OASISVersion.varname_of_comparator cmp) - in - var_redefine - ~hide:true - var - (fun () -> - let version_str = - match fversion () with - | "[Distributed with OCaml]" -> - begin - try - (var_get "ocaml_version") - with Not_found -> - warning - (f_ "Variable ocaml_version not defined, fallback \ - to default"); - Sys.ocaml_version - end - | res -> - res - in - let version = - OASISVersion.version_of_string version_str - in - if OASISVersion.comparator_apply version cmp then - version_str - else - failwithf - (f_ "Cannot satisfy version constraint on %s: %s (version: %s)") - var_prefix - (OASISVersion.string_of_comparator cmp) - version_str) - () - - let package_version pkg = - BaseExec.run_read_one_line - (ocamlfind ()) - ["query"; "-format"; "%v"; pkg] - - let package ?version_comparator pkg () = - let var = - OASISUtils.varname_concat - "pkg_" - (OASISUtils.varname_of_string pkg) - in - let findlib_dir pkg = - let dir = - BaseExec.run_read_one_line - (ocamlfind ()) - ["query"; "-format"; "%d"; pkg] - in - if Sys.file_exists dir && Sys.is_directory dir then - dir - else - failwithf - (f_ "When looking for findlib package %s, \ - directory %s return doesn't exist") - pkg dir - in - let vl = - var_redefine - var - (fun () -> findlib_dir pkg) - () - in - ( - match version_comparator with - | Some ver_cmp -> - ignore - (version - var - ver_cmp - (fun _ -> package_version pkg) - ()) - | None -> - () - ); - vl -end - -module BaseOCamlcConfig = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseOCamlcConfig.ml" - - - open BaseEnv - open OASISUtils - open OASISGettext - - module SMap = Map.Make(String) - - let ocamlc = - BaseCheck.prog_opt "ocamlc" - - let ocamlc_config_map = - (* Map name to value for ocamlc -config output - (name ^": "^value) - *) - let rec split_field mp lst = - match lst with - | line :: tl -> - let mp = - try - let pos_semicolon = - String.index line ':' - in - if pos_semicolon > 1 then - ( - let name = - String.sub line 0 pos_semicolon - in - let linelen = - String.length line - in - let value = - if linelen > pos_semicolon + 2 then - String.sub - line - (pos_semicolon + 2) - (linelen - pos_semicolon - 2) - else - "" - in - SMap.add name value mp - ) - else - ( - mp - ) - with Not_found -> - ( - mp - ) - in - split_field mp tl - | [] -> - mp - in - - let cache = - lazy - (var_protect - (Marshal.to_string - (split_field - SMap.empty - (BaseExec.run_read_output - (ocamlc ()) ["-config"])) - [])) - in - var_redefine - "ocamlc_config_map" - ~hide:true - ~dump:false - (fun () -> - (* TODO: update if ocamlc change !!! *) - Lazy.force cache) - - let var_define nm = - (* Extract data from ocamlc -config *) - let avlbl_config_get () = - Marshal.from_string - (ocamlc_config_map ()) - 0 - in - let chop_version_suffix s = - try - String.sub s 0 (String.index s '+') - with _ -> - s - in - - let nm_config, value_config = - match nm with - | "ocaml_version" -> - "version", chop_version_suffix - | _ -> nm, (fun x -> x) - in - var_redefine - nm - (fun () -> - try - let map = - avlbl_config_get () - in - let value = - SMap.find nm_config map - in - value_config value - with Not_found -> - failwithf - (f_ "Cannot find field '%s' in '%s -config' output") - nm - (ocamlc ())) - -end - -module BaseStandardVar = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseStandardVar.ml" - - - open OASISGettext - open OASISTypes - open OASISExpr - open BaseCheck - open BaseEnv - - let ocamlfind = BaseCheck.ocamlfind - let ocamlc = BaseOCamlcConfig.ocamlc - let ocamlopt = prog_opt "ocamlopt" - let ocamlbuild = prog "ocamlbuild" - - - (**/**) - let rpkg = - ref None - - let pkg_get () = - match !rpkg with - | Some pkg -> pkg - | None -> failwith (s_ "OASIS Package is not set") - (**/**) - - let pkg_name = - var_define - ~short_desc:(fun () -> s_ "Package name") - "pkg_name" - (fun () -> (pkg_get ()).name) - - let pkg_version = - var_define - ~short_desc:(fun () -> s_ "Package version") - "pkg_version" - (fun () -> - (OASISVersion.string_of_version (pkg_get ()).version)) - - let c = BaseOCamlcConfig.var_define - - let os_type = c "os_type" - let system = c "system" - let architecture = c "architecture" - let ccomp_type = c "ccomp_type" - let ocaml_version = c "ocaml_version" - - (* TODO: Check standard variable presence at runtime *) - - let standard_library_default = c "standard_library_default" - let standard_library = c "standard_library" - let standard_runtime = c "standard_runtime" - let bytecomp_c_compiler = c "bytecomp_c_compiler" - let native_c_compiler = c "native_c_compiler" - let model = c "model" - let ext_obj = c "ext_obj" - let ext_asm = c "ext_asm" - let ext_lib = c "ext_lib" - let ext_dll = c "ext_dll" - let default_executable_name = c "default_executable_name" - let systhread_supported = c "systhread_supported" - - - (**/**) - let p name hlp dflt = - var_define - ~short_desc:hlp - ~cli:CLIAuto - ~arg_help:"dir" - name - dflt - - let (/) a b = - if os_type () = Sys.os_type then - Filename.concat a b - else if os_type () = "Unix" then - BaseFilePath.Unix.concat a b - else - OASISUtils.failwithf (f_ "Cannot handle os_type %s filename concat") - (os_type ()) - (**/**) - - let prefix = - p "prefix" - (fun () -> s_ "Install architecture-independent files dir") - (fun () -> - match os_type () with - | "Win32" -> - let program_files = - Sys.getenv "PROGRAMFILES" - in - program_files/(pkg_name ()) - | _ -> - "/usr/local") - - let exec_prefix = - p "exec_prefix" - (fun () -> s_ "Install architecture-dependent files in dir") - (fun () -> "$prefix") - - let bindir = - p "bindir" - (fun () -> s_ "User executables") - (fun () -> "$exec_prefix"/"bin") - - let sbindir = - p "sbindir" - (fun () -> s_ "System admin executables") - (fun () -> "$exec_prefix"/"sbin") - - let libexecdir = - p "libexecdir" - (fun () -> s_ "Program executables") - (fun () -> "$exec_prefix"/"libexec") - - let sysconfdir = - p "sysconfdir" - (fun () -> s_ "Read-only single-machine data") - (fun () -> "$prefix"/"etc") - - let sharedstatedir = - p "sharedstatedir" - (fun () -> s_ "Modifiable architecture-independent data") - (fun () -> "$prefix"/"com") - - let localstatedir = - p "localstatedir" - (fun () -> s_ "Modifiable single-machine data") - (fun () -> "$prefix"/"var") - - let libdir = - p "libdir" - (fun () -> s_ "Object code libraries") - (fun () -> "$exec_prefix"/"lib") - - let datarootdir = - p "datarootdir" - (fun () -> s_ "Read-only arch-independent data root") - (fun () -> "$prefix"/"share") - - let datadir = - p "datadir" - (fun () -> s_ "Read-only architecture-independent data") - (fun () -> "$datarootdir") - - let infodir = - p "infodir" - (fun () -> s_ "Info documentation") - (fun () -> "$datarootdir"/"info") - - let localedir = - p "localedir" - (fun () -> s_ "Locale-dependent data") - (fun () -> "$datarootdir"/"locale") - - let mandir = - p "mandir" - (fun () -> s_ "Man documentation") - (fun () -> "$datarootdir"/"man") - - let docdir = - p "docdir" - (fun () -> s_ "Documentation root") - (fun () -> "$datarootdir"/"doc"/"$pkg_name") - - let htmldir = - p "htmldir" - (fun () -> s_ "HTML documentation") - (fun () -> "$docdir") - - let dvidir = - p "dvidir" - (fun () -> s_ "DVI documentation") - (fun () -> "$docdir") - - let pdfdir = - p "pdfdir" - (fun () -> s_ "PDF documentation") - (fun () -> "$docdir") - - let psdir = - p "psdir" - (fun () -> s_ "PS documentation") - (fun () -> "$docdir") - - let destdir = - p "destdir" - (fun () -> s_ "Prepend a path when installing package") - (fun () -> - raise - (PropList.Not_set - ("destdir", - Some (s_ "undefined by construct")))) - - let findlib_version = - var_define - "findlib_version" - (fun () -> - BaseCheck.package_version "findlib") - - let is_native = - var_define - "is_native" - (fun () -> - try - let _s : string = - ocamlopt () - in - "true" - with PropList.Not_set _ -> - let _s : string = - ocamlc () - in - "false") - - let ext_program = - var_define - "suffix_program" - (fun () -> - match os_type () with - | "Win32" -> ".exe" - | _ -> "") - - let rm = - var_define - ~short_desc:(fun () -> s_ "Remove a file.") - "rm" - (fun () -> - match os_type () with - | "Win32" -> "del" - | _ -> "rm -f") - - let rmdir = - var_define - ~short_desc:(fun () -> s_ "Remove a directory.") - "rmdir" - (fun () -> - match os_type () with - | "Win32" -> "rd" - | _ -> "rm -rf") - - let debug = - var_define - ~short_desc:(fun () -> s_ "Turn ocaml debug flag on") - ~cli:CLIEnable - "debug" - (fun () -> "true") - - let profile = - var_define - ~short_desc:(fun () -> s_ "Turn ocaml profile flag on") - ~cli:CLIEnable - "profile" - (fun () -> "false") - - let tests = - var_define - ~short_desc:(fun () -> - s_ "Compile tests executable and library and run them") - ~cli:CLIEnable - "tests" - (fun () -> "false") - - let docs = - var_define - ~short_desc:(fun () -> s_ "Create documentations") - ~cli:CLIEnable - "docs" - (fun () -> "true") - - let init pkg = - rpkg := Some pkg - -end - -module BaseFileAB = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseFileAB.ml" - - open BaseEnv - open OASISGettext - open BaseMessage - - let to_filename fn = - let fn = - BaseFilePath.of_unix fn - in - if not (Filename.check_suffix fn ".ab") then - warning - (f_ "File '%s' doesn't have '.ab' extension") - fn; - Filename.chop_extension fn - - let replace fn_lst = - let buff = - Buffer.create 13 - in - List.iter - (fun fn -> - let fn = - BaseFilePath.of_unix fn - in - let chn_in = - open_in fn - in - let chn_out = - open_out (to_filename fn) - in - ( - try - while true do - Buffer.add_string buff (var_expand (input_line chn_in)); - Buffer.add_char buff '\n' - done - with End_of_file -> - () - ); - Buffer.output_buffer chn_out buff; - Buffer.clear buff; - close_in chn_in; - close_out chn_out) - fn_lst -end - -module BaseLog = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseLog.ml" - - open OASISUtils - - let default_filename = - Filename.concat - (Filename.dirname BaseEnv.default_filename) - "setup.log" - - module SetTupleString = - Set.Make - (struct - type t = string * string - let compare (s11, s12) (s21, s22) = - match String.compare s11 s21 with - | 0 -> String.compare s12 s22 - | n -> n - end) - - let load () = - if Sys.file_exists default_filename then - begin - let chn = - open_in default_filename - in - let scbuf = - Scanf.Scanning.from_file default_filename - in - let rec read_aux (st, lst) = - if not (Scanf.Scanning.end_of_input scbuf) then - begin - let acc = - try - Scanf.bscanf scbuf "%S %S\n" - (fun e d -> - let t = - e, d - in - if SetTupleString.mem t st then - st, lst - else - SetTupleString.add t st, - t :: lst) - with Scanf.Scan_failure _ -> - failwith - (Scanf.bscanf scbuf - "%l" - (fun line -> - Printf.sprintf - "Malformed log file '%s' at line %d" - default_filename - line)) - in - read_aux acc - end - else - begin - close_in chn; - List.rev lst - end - in - read_aux (SetTupleString.empty, []) - end - else - begin - [] - end - - let register event data = - let chn_out = - open_out_gen [Open_append; Open_creat; Open_text] 0o644 default_filename - in - Printf.fprintf chn_out "%S %S\n" event data; - close_out chn_out - - let unregister event data = - if Sys.file_exists default_filename then - begin - let lst = - load () - in - let chn_out = - open_out default_filename - in - let write_something = - ref false - in - List.iter - (fun (e, d) -> - if e <> event || d <> data then - begin - write_something := true; - Printf.fprintf chn_out "%S %S\n" e d - end) - lst; - close_out chn_out; - if not !write_something then - Sys.remove default_filename - end - - let filter events = - let st_events = - List.fold_left - (fun st e -> - SetString.add e st) - SetString.empty - events - in - List.filter - (fun (e, _) -> SetString.mem e st_events) - (load ()) - - let exists event data = - List.exists - (fun v -> (event, data) = v) - (load ()) -end - -module BaseBuilt = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseBuilt.ml" - - open OASISTypes - open OASISGettext - open BaseStandardVar - open BaseMessage - - type t = - | BExec (* Executable *) - | BExecLib (* Library coming with executable *) - | BLib (* Library *) - | BDoc (* Document *) - - let to_log_event_file t nm = - "built_"^ - (match t with - | BExec -> "exec" - | BExecLib -> "exec_lib" - | BLib -> "lib" - | BDoc -> "doc")^ - "_"^nm - - let to_log_event_done t nm = - "is_"^(to_log_event_file t nm) - - let register t nm lst = - BaseLog.register - (to_log_event_done t nm) - "true"; - List.iter - (fun alt -> - let registered = - List.fold_left - (fun registered fn -> - if Sys.file_exists fn then - begin - BaseLog.register - (to_log_event_file t nm) - (if Filename.is_relative fn then - Filename.concat (Sys.getcwd ()) fn - else - fn); - true - end - else - registered) - false - alt - in - if not registered then - warning - (f_ "Cannot find an existing alternative files among: %s") - (String.concat (s_ ", ") alt)) - lst - - let unregister t nm = - List.iter - (fun (e, d) -> - BaseLog.unregister e d) - (BaseLog.filter - [to_log_event_file t nm; - to_log_event_done t nm]) - - let fold t nm f acc = - List.fold_left - (fun acc (_, fn) -> - if Sys.file_exists fn then - begin - f acc fn - end - else - begin - warning - (f_ "File '%s' has been marked as built \ - for %s but doesn't exist") - fn - (Printf.sprintf - (match t with - | BExec | BExecLib -> - (f_ "executable %s") - | BLib -> - (f_ "library %s") - | BDoc -> - (f_ "documentation %s")) - nm); - acc - end) - acc - (BaseLog.filter - [to_log_event_file t nm]) - - let is_built t nm = - List.fold_left - (fun is_built (_, d) -> - (try - bool_of_string d - with _ -> - false)) - false - (BaseLog.filter - [to_log_event_done t nm]) - - let of_executable ffn (cs, bs, exec) = - let unix_exec_is, unix_dll_opt = - OASISExecutable.unix_exec_is - (cs, bs, exec) - (fun () -> - bool_of_string - (is_native ())) - ext_dll - ext_program - in - let evs = - (BExec, cs.cs_name, [[ffn unix_exec_is]]) - :: - (match unix_dll_opt with - | Some fn -> - [BExecLib, cs.cs_name, [[ffn fn]]] - | None -> - []) - in - evs, - unix_exec_is, - unix_dll_opt - - let of_library ffn (cs, bs, lib) = - let unix_lst = - OASISLibrary.generated_unix_files - ~ctxt:!BaseContext.default - (cs, bs, lib) - (fun fn -> - Sys.file_exists (BaseFilePath.of_unix fn)) - (fun () -> - bool_of_string (is_native ())) - ext_lib - ext_dll - in - let evs = - [BLib, - cs.cs_name, - List.map (List.map ffn) unix_lst] - in - evs, unix_lst - -end - -module BaseCustom = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseCustom.ml" - - open BaseEnv - open BaseMessage - open OASISTypes - open OASISGettext - - let run cmd args extra_args = - BaseExec.run - (var_expand cmd) - (List.map - var_expand - (args @ (Array.to_list extra_args))) - - let hook ?(failsafe=false) cstm f e = - let optional_command lst = - let printer = - function - | Some (cmd, args) -> String.concat " " (cmd :: args) - | None -> s_ "No command" - in - match - var_choose - ~name:(s_ "Pre/Post Command") - ~printer - lst with - | Some (cmd, args) -> - begin - try - run cmd args [||] - with e when failsafe -> - warning - (f_ "Command '%s' fail with error: %s") - (String.concat " " (cmd :: args)) - (match e with - | Failure msg -> msg - | e -> Printexc.to_string e) - end - | None -> - () - in - let res = - optional_command cstm.pre_command; - f e - in - optional_command cstm.post_command; - res -end - -module BaseDynVar = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseDynVar.ml" - - - open OASISTypes - open OASISGettext - open BaseEnv - open BaseBuilt - - let init pkg = - List.iter - (function - | Executable (cs, bs, exec) -> - if var_choose bs.bs_build then - var_ignore - (var_redefine - (* We don't save this variable *) - ~dump:false - ~short_desc:(fun () -> - Printf.sprintf - (f_ "Filename of executable '%s'") - cs.cs_name) - cs.cs_name - (fun () -> - let fn_opt = - fold - BExec cs.cs_name - (fun _ fn -> Some fn) - None - in - match fn_opt with - | Some fn -> fn - | None -> - raise - (PropList.Not_set - (cs.cs_name, - Some (Printf.sprintf - (f_ "Executable '%s' not yet built.") - cs.cs_name))))) - - | Library _ | Flag _ | Test _ | SrcRepo _ | Doc _ -> - ()) - pkg.sections -end - -module BaseTest = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseTest.ml" - - open BaseEnv - open BaseMessage - open OASISTypes - open OASISExpr - open OASISGettext - - let test lst pkg extra_args = - - let one_test (failure, n) (test_plugin, cs, test) = - if var_choose - ~name:(Printf.sprintf - (f_ "test %s run") - cs.cs_name) - ~printer:string_of_bool - test.test_run then - begin - let () = - info (f_ "Running test '%s'") cs.cs_name - in - let back_cwd = - match test.test_working_directory with - | Some dir -> - let cwd = - Sys.getcwd () - in - let chdir d = - info (f_ "Changing directory to '%s'") d; - Sys.chdir d - in - chdir dir; - fun () -> chdir cwd - - | None -> - fun () -> () - in - try - let failure_percent = - BaseCustom.hook - test.test_custom - (test_plugin pkg (cs, test)) - extra_args - in - back_cwd (); - (failure_percent +. failure, n + 1) - with e -> - begin - back_cwd (); - raise e - end - end - else - begin - info (f_ "Skipping test '%s'") cs.cs_name; - (failure, n) - end - in - let (failed, n) = - List.fold_left - one_test - (0.0, 0) - lst - in - let failure_percent = - if n = 0 then - 0.0 - else - failed /. (float_of_int n) - in - let msg = - Printf.sprintf - (f_ "Tests had a %.2f%% failure rate") - (100. *. failure_percent) - in - if failure_percent > 0.0 then - failwith msg - else - info "%s" msg -end - -module BaseDoc = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseDoc.ml" - - open BaseEnv - open BaseMessage - open OASISTypes - open OASISGettext - - let doc lst pkg extra_args = - - let one_doc (doc_plugin, cs, doc) = - if var_choose - ~name:(Printf.sprintf - (f_ "documentation %s build") - cs.cs_name) - ~printer:string_of_bool - doc.doc_build then - begin - info (f_ "Building documentation '%s'") cs.cs_name; - BaseCustom.hook - doc.doc_custom - (doc_plugin pkg (cs, doc)) - extra_args - end - in - List.iter - one_doc - lst -end - -module BaseSetup = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseSetup.ml" - - open BaseEnv - open BaseMessage - open OASISTypes - open OASISSection - open OASISGettext - open OASISUtils - - type std_args_fun = - package -> string array -> unit - - type ('a, 'b) section_args_fun = - name * (package -> (common_section * 'a) -> string array -> 'b) - - type t = - { - configure: std_args_fun; - build: std_args_fun; - doc: ((doc, unit) section_args_fun) list; - test: ((test, float) section_args_fun) list; - install: std_args_fun; - uninstall: std_args_fun; - clean: std_args_fun list; - clean_doc: (doc, unit) section_args_fun list; - clean_test: (test, unit) section_args_fun list; - distclean: std_args_fun list; - distclean_doc: (doc, unit) section_args_fun list; - distclean_test: (test, unit) section_args_fun list; - package: package; - version: string; - } - - (* Associate a plugin function with data from package *) - let join_plugin_sections filter_map lst = - List.rev - (List.fold_left - (fun acc sct -> - match filter_map sct with - | Some e -> - e :: acc - | None -> - acc) - [] - lst) - - (* Search for plugin data associated with a section name *) - let lookup_plugin_section plugin action nm lst = - try - List.assoc nm lst - with Not_found -> - failwithf - (f_ "Cannot find plugin %s matching section %s for %s action") - plugin - nm - action - - let configure t args = - (* Run configure *) - BaseCustom.hook - t.package.conf_custom - (fun () -> - (* Reload if preconf has changed it *) - begin - try - unload (); - load (); - with _ -> - () - end; - - (* Run plugin's configure *) - t.configure t.package args; - - (* Dump to allow postconf to change it *) - dump ()) - (); - - (* Reload environment *) - unload (); - load (); - - (* Save environment *) - print (); - - (* Replace data in file *) - BaseFileAB.replace t.package.files_ab - - let build t args = - BaseCustom.hook - t.package.build_custom - (t.build t.package) - args - - let doc t args = - if bool_of_string (BaseStandardVar.docs ()) then - BaseDoc.doc - (join_plugin_sections - (function - | Doc (cs, e) -> - Some - (lookup_plugin_section - "documentation" - (s_ "build") - cs.cs_name - t.doc, - cs, - e) - | _ -> - None) - t.package.sections) - t.package - args - else - BaseMessage.warning - "Docs are turned off, consider enabling with \ - 'ocaml setup.ml -configure --enable-docs'" - - let test t args = - if bool_of_string (BaseStandardVar.tests ()) then - BaseTest.test - (join_plugin_sections - (function - | Test (cs, e) -> - Some - (lookup_plugin_section - "test" - (s_ "run") - cs.cs_name - t.test, - cs, - e) - | _ -> - None) - t.package.sections) - t.package - args - else - BaseMessage.warning - "Tests are turned off, consider enabling with \ - 'ocaml setup.ml -configure --enable-tests'" - - let all t args = - let rno_doc = - ref false - in - let rno_test = - ref false - in - Arg.parse_argv - ~current:(ref 0) - (Array.of_list - ((Sys.executable_name^" all") :: - (Array.to_list args))) - [ - "-no-doc", - Arg.Set rno_doc, - s_ "Don't run doc target"; - - "-no-test", - Arg.Set rno_test, - s_ "Don't run test target"; - ] - (failwithf (f_ "Don't know what to do with '%s'")) - ""; - - info "Running configure step"; - configure t [||]; - - info "Running build step"; - build t [||]; - - (* Load setup.log dynamic variables *) - BaseDynVar.init t.package; - - if not !rno_doc then - begin - info "Running doc step"; - doc t [||]; - end - else - begin - info "Skipping doc step" - end; - - if not !rno_test then - begin - info "Running test step"; - test t [||] - end - else - begin - info "Skipping test step" - end - - let install t args = - BaseCustom.hook - t.package.install_custom - (t.install t.package) - args - - let uninstall t args = - BaseCustom.hook - t.package.uninstall_custom - (t.uninstall t.package) - args - - let reinstall t args = - uninstall t args; - install t args - - let clean, distclean = - let failsafe f a = - try - f a - with e -> - warning - (f_ "Action fail with error: %s") - (match e with - | Failure msg -> msg - | e -> Printexc.to_string e) - in - - let generic_clean t cstm mains docs tests args = - BaseCustom.hook - ~failsafe:true - cstm - (fun () -> - (* Clean section *) - List.iter - (function - | Test (cs, test) -> - let f = - try - List.assoc cs.cs_name tests - with Not_found -> - fun _ _ _ -> () - in - failsafe - (f t.package (cs, test)) - args - | Doc (cs, doc) -> - let f = - try - List.assoc cs.cs_name docs - with Not_found -> - fun _ _ _ -> () - in - failsafe - (f t.package (cs, doc)) - args - | Library _ - | Executable _ - | Flag _ - | SrcRepo _ -> - ()) - t.package.sections; - (* Clean whole package *) - List.iter - (fun f -> - failsafe - (f t.package) - args) - mains) - () - in - - let clean t args = - generic_clean - t - t.package.clean_custom - t.clean - t.clean_doc - t.clean_test - args - in - - let distclean t args = - (* Call clean *) - clean t args; - - (* Remove generated file *) - List.iter - (fun fn -> - if Sys.file_exists fn then - begin - info (f_ "Remove '%s'") fn; - Sys.remove fn - end) - (BaseEnv.default_filename - :: - BaseLog.default_filename - :: - (List.rev_map BaseFileAB.to_filename t.package.files_ab)); - - (* Call distclean code *) - generic_clean - t - t.package.distclean_custom - t.distclean - t.distclean_doc - t.distclean_test - args - in - - clean, distclean - - let version t _ = - print_endline t.version - - let setup t = - let catch_exn = - ref true - in - try - let act_ref = - ref (fun _ -> - failwithf - (f_ "No action defined, run '%s %s -help'") - Sys.executable_name - Sys.argv.(0)) - - in - let extra_args_ref = - ref [] - in - let allow_empty_env_ref = - ref false - in - let arg_handle ?(allow_empty_env=false) act = - Arg.Tuple - [ - Arg.Rest (fun str -> extra_args_ref := str :: !extra_args_ref); - - Arg.Unit - (fun () -> - allow_empty_env_ref := allow_empty_env; - act_ref := act); - ] - in - - Arg.parse - (Arg.align - [ - "-configure", - arg_handle ~allow_empty_env:true configure, - s_ "[options*] Configure the whole build process."; - - "-build", - arg_handle build, - s_ "[options*] Build executables and libraries."; - - "-doc", - arg_handle doc, - s_ "[options*] Build documents."; - - "-test", - arg_handle test, - s_ "[options*] Run tests."; - - "-all", - arg_handle ~allow_empty_env:true all, - s_ "[options*] Run configure, build, doc and test targets."; - - "-install", - arg_handle install, - s_ "[options*] Install libraries, data, executables \ - and documents."; - - "-uninstall", - arg_handle uninstall, - s_ "[options*] Uninstall libraries, data, executables \ - and documents."; - - "-reinstall", - arg_handle reinstall, - s_ "[options*] Uninstall and install libraries, data, \ - executables and documents."; - - "-clean", - arg_handle ~allow_empty_env:true clean, - s_ "[options*] Clean files generated by a build."; - - "-distclean", - arg_handle ~allow_empty_env:true distclean, - s_ "[options*] Clean files generated by a build and configure."; - - "-version", - arg_handle ~allow_empty_env:true version, - s_ " Display version of OASIS used to generate this setup.ml."; - - "-no-catch-exn", - Arg.Clear catch_exn, - s_ " Don't catch exception, useful for debugging."; - ] - @ (BaseContext.args ())) - (failwithf (f_ "Don't know what to do with '%s'")) - (s_ "Setup and run build process current package\n"); - - (* Build initial environment *) - load ~allow_empty:!allow_empty_env_ref (); - - (** Initialize flags *) - List.iter - (function - | Flag (cs, {flag_description = hlp; - flag_default = choices}) -> - begin - let apply ?short_desc () = - var_ignore - (var_define - ~cli:CLIEnable - ?short_desc - (OASISUtils.varname_of_string cs.cs_name) - (fun () -> - string_of_bool - (var_choose - ~name:(Printf.sprintf - (f_ "default value of flag %s") - cs.cs_name) - ~printer:string_of_bool - choices))) - in - match hlp with - | Some hlp -> - apply ~short_desc:(fun () -> hlp) () - | None -> - apply () - end - | _ -> - ()) - t.package.sections; - - BaseStandardVar.init t.package; - - BaseDynVar.init t.package; - - !act_ref t (Array.of_list (List.rev !extra_args_ref)) - - with e when !catch_exn -> - error "%s" (Printexc.to_string e); - exit 1 - -end - -module BaseDev = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/base/BaseDev.ml" - - - - open OASISGettext - open BaseMessage - - type t = - { - oasis_cmd: string; - } - - let update_and_run t = - (* Command line to run setup-dev *) - let oasis_args = - "setup-dev" :: "-run" :: - Sys.executable_name :: - (Array.to_list Sys.argv) - in - - let exit_on_child_error = - function - | 0 -> () - | 2 -> - (* Bad CLI arguments *) - error - (f_ "The command '%s %s' exit with code 2. It often means that we \ - don't use the right command-line arguments, rerun \ - 'oasis setup-dev'.") - t.oasis_cmd - (String.concat " " oasis_args) - - | 127 -> - (* Cannot find OASIS *) - error - (f_ "Cannot find executable '%s', check where 'oasis' is located \ - and rerun 'oasis setup-dev'") - t.oasis_cmd - - | i -> - exit i - in - - let () = - (* Run OASIS to generate a temporary setup.ml - *) - BaseExec.run - ~f_exit_code:exit_on_child_error - t.oasis_cmd - oasis_args - in - - () - -end - - -module InternalConfigurePlugin = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/internal/InternalConfigurePlugin.ml" - - (** Configure using internal scheme - @author Sylvain Le Gall - *) - - open BaseEnv - open OASISTypes - open OASISUtils - open OASISGettext - open BaseMessage - - (** Configure build using provided series of check to be done - * and then output corresponding file. - *) - let configure pkg argv = - let var_ignore_eval var = - let _s : string = - var () - in - () - in - - let errors = - ref SetString.empty - in - - let buff = - Buffer.create 13 - in - - let add_errors fmt = - Printf.kbprintf - (fun b -> - errors := SetString.add (Buffer.contents b) !errors; - Buffer.clear b) - buff - fmt - in - - let warn_exception e = - warning "%s" (Printexc.to_string e) - in - - (* Check tools *) - let check_tools lst = - List.iter - (function - | ExternalTool tool -> - begin - try - var_ignore_eval (BaseCheck.prog tool) - with e -> - warn_exception e; - add_errors (f_ "Cannot find external tool '%s'") tool - end - | InternalExecutable nm1 -> - (* Check that matching tool is built *) - List.iter - (function - | Executable ({cs_name = nm2}, - {bs_build = build}, - _) when nm1 = nm2 -> - if not (var_choose build) then - add_errors - (f_ "Cannot find buildable internal executable \ - '%s' when checking build depends") - nm1 - | _ -> - ()) - pkg.sections) - lst - in - - let build_checks sct bs = - if var_choose bs.bs_build then - begin - if bs.bs_compiled_object = Native then - begin - try - var_ignore_eval BaseStandardVar.ocamlopt - with e -> - warn_exception e; - add_errors - (f_ "Section %s requires native compilation") - (OASISSection.string_of_section sct) - end; - - (* Check tools *) - check_tools bs.bs_build_tools; - - (* Check depends *) - List.iter - (function - | FindlibPackage (findlib_pkg, version_comparator) -> - begin - try - var_ignore_eval - (BaseCheck.package ?version_comparator findlib_pkg) - with e -> - warn_exception e; - match version_comparator with - | None -> - add_errors - (f_ "Cannot find findlib package %s") - findlib_pkg - | Some ver_cmp -> - add_errors - (f_ "Cannot find findlib package %s (%s)") - findlib_pkg - (OASISVersion.string_of_comparator ver_cmp) - end - | InternalLibrary nm1 -> - (* Check that matching library is built *) - List.iter - (function - | Library ({cs_name = nm2}, - {bs_build = build}, - _) when nm1 = nm2 -> - if not (var_choose build) then - add_errors - (f_ "Cannot find buildable internal library \ - '%s' when checking build depends") - nm1 - | _ -> - ()) - pkg.sections) - bs.bs_build_depends - end - in - - (* Parse command line *) - BaseArgExt.parse argv (BaseEnv.args ()); - - (* OCaml version *) - begin - match pkg.ocaml_version with - | Some ver_cmp -> - begin - try - var_ignore_eval - (BaseCheck.version - "ocaml" - ver_cmp - BaseStandardVar.ocaml_version) - with e -> - warn_exception e; - add_errors - (f_ "OCaml version %s doesn't match version constraint %s") - (BaseStandardVar.ocaml_version ()) - (OASISVersion.string_of_comparator ver_cmp) - end - | None -> - () - end; - - (* Findlib version *) - begin - match pkg.findlib_version with - | Some ver_cmp -> - begin - try - var_ignore_eval - (BaseCheck.version - "findlib" - ver_cmp - BaseStandardVar.findlib_version) - with e -> - warn_exception e; - add_errors - (f_ "Findlib version %s doesn't match version constraint %s") - (BaseStandardVar.findlib_version ()) - (OASISVersion.string_of_comparator ver_cmp) - end - | None -> - () - end; - - (* Check build depends *) - List.iter - (function - | Executable (_, bs, _) - | Library (_, bs, _) as sct -> - build_checks sct bs - | Doc (_, doc) -> - if var_choose doc.doc_build then - check_tools doc.doc_build_tools - | Test (_, test) -> - if var_choose test.test_run then - check_tools test.test_tools - | _ -> - ()) - pkg.sections; - - (* Check errors *) - if SetString.empty != !errors then - begin - List.iter - (fun e -> error "%s" e) - (SetString.elements !errors); - failwithf - (fn_ - "%d configuration error" - "%d configuration errors" - (SetString.cardinal !errors)) - (SetString.cardinal !errors) - end - -end - -module InternalInstallPlugin = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/internal/InternalInstallPlugin.ml" - - (** Install using internal scheme - @author Sylvain Le Gall - *) - - open BaseEnv - open BaseStandardVar - open BaseMessage - open OASISTypes - open OASISLibrary - open OASISGettext - open OASISUtils - - let exec_hook = - ref (fun (cs, bs, exec) -> cs, bs, exec) - - let lib_hook = - ref (fun (cs, bs, lib) -> cs, bs, lib, []) - - let doc_hook = - ref (fun (cs, doc) -> cs, doc) - - let install_file_ev = - "install-file" - - let install_dir_ev = - "install-dir" - - let install_findlib_ev = - "install-findlib" - - let install pkg argv = - - let in_destdir = - try - let destdir = - destdir () - in - (* Practically speaking destdir is prepended - * at the beginning of the target filename - *) - fun fn -> destdir^fn - with PropList.Not_set _ -> - fun fn -> fn - in - - let install_file ?tgt_fn src_file envdir = - let tgt_dir = - in_destdir (envdir ()) - in - let tgt_file = - Filename.concat - tgt_dir - (match tgt_fn with - | Some fn -> - fn - | None -> - Filename.basename src_file) - in - (* Create target directory if needed *) - BaseFileUtil.mkdir_parent - (fun dn -> - info (f_ "Creating directory '%s'") dn; - BaseLog.register install_dir_ev dn) - tgt_dir; - - (* Really install files *) - info (f_ "Copying file '%s' to '%s'") src_file tgt_file; - BaseFileUtil.cp src_file tgt_file; - BaseLog.register install_file_ev tgt_file - in - - (* Install data into defined directory *) - let install_data srcdir lst tgtdir = - let tgtdir = - BaseFilePath.of_unix (var_expand tgtdir) - in - List.iter - (fun (src, tgt_opt) -> - let real_srcs = - BaseFileUtil.glob - (Filename.concat srcdir src) - in - if real_srcs = [] then - failwithf - (f_ "Wildcard '%s' doesn't match any files") - src; - List.iter - (fun fn -> - install_file - fn - (fun () -> - match tgt_opt with - | Some s -> - BaseFilePath.of_unix (var_expand s) - | None -> - tgtdir)) - real_srcs) - lst - in - - (** Install all libraries *) - let install_libs pkg = - - let files_of_library (f_data, acc) data_lib = - let cs, bs, lib, lib_extra = - !lib_hook data_lib - in - if var_choose bs.bs_install && - BaseBuilt.is_built BaseBuilt.BLib cs.cs_name then - begin - let acc = - (* Start with acc + lib_extra *) - List.rev_append lib_extra acc - in - let acc = - (* Add uncompiled header from the source tree *) - let path = - BaseFilePath.of_unix bs.bs_path - in - List.fold_left - (fun acc modul -> - try - List.find - Sys.file_exists - (List.map - (Filename.concat path) - [modul^".mli"; - modul^".ml"; - String.uncapitalize modul^".mli"; - String.capitalize modul^".mli"; - String.uncapitalize modul^".ml"; - String.capitalize modul^".ml"]) - :: acc - with Not_found -> - begin - warning - (f_ "Cannot find source header for module %s \ - in library %s") - modul cs.cs_name; - acc - end) - acc - lib.lib_modules - in - - let acc = - (* Get generated files *) - BaseBuilt.fold - BaseBuilt.BLib - cs.cs_name - (fun acc fn -> fn :: acc) - acc - in - - let f_data () = - (* Install data associated with the library *) - install_data - bs.bs_path - bs.bs_data_files - (Filename.concat - (datarootdir ()) - pkg.name); - f_data () - in - - (f_data, acc) - end - else - begin - (f_data, acc) - end - in - - (* Install one group of library *) - let install_group_lib grp = - (* Iterate through all group nodes *) - let rec install_group_lib_aux data_and_files grp = - let data_and_files, children = - match grp with - | Container (_, children) -> - data_and_files, children - | Package (_, cs, bs, lib, children) -> - files_of_library data_and_files (cs, bs, lib), children - in - List.fold_left - install_group_lib_aux - data_and_files - children - in - - (* Findlib name of the root library *) - let findlib_name = - findlib_of_group grp - in - - (* Determine root library *) - let root_lib = - root_of_group grp - in - - (* All files to install for this library *) - let f_data, files = - install_group_lib_aux (ignore, []) grp - in - - (* Really install, if there is something to install *) - if files = [] then - begin - warning - (f_ "Nothing to install for findlib library '%s'") - findlib_name - end - else - begin - let meta = - (* Search META file *) - let (_, bs, _) = - root_lib - in - let res = - Filename.concat bs.bs_path "META" - in - if not (Sys.file_exists res) then - failwithf - (f_ "Cannot find file '%s' for findlib library %s") - res - findlib_name; - res - in - let files = - (* Make filename shorter to avoid hitting command max line length - * too early, esp. on Windows. - *) - let remove_prefix p n = - let plen = String.length p in - let nlen = String.length n in - if plen <= nlen && String.sub n 0 plen = p then - begin - let fn_sep = - if Sys.os_type = "Win32" then - '\\' - else - '/' - in - let cutpoint = plen + - (if plen < nlen && n.[plen] = fn_sep then - 1 - else - 0) - in - String.sub n cutpoint (nlen - cutpoint) - end - else - n - in - List.map (remove_prefix (Sys.getcwd ())) files - in - info - (f_ "Installing findlib library '%s'") - findlib_name; - BaseExec.run - (ocamlfind ()) - ("install" :: findlib_name :: meta :: files); - BaseLog.register install_findlib_ev findlib_name - end; - - (* Install data files *) - f_data (); - - in - - (* We install libraries in groups *) - List.iter - install_group_lib - (group_libs pkg) - in - - let install_execs pkg = - let install_exec data_exec = - let (cs, bs, exec) = - !exec_hook data_exec - in - if var_choose bs.bs_install && - BaseBuilt.is_built BaseBuilt.BExec cs.cs_name then - begin - let exec_libdir () = - Filename.concat - (libdir ()) - pkg.name - in - BaseBuilt.fold - BaseBuilt.BExec - cs.cs_name - (fun () fn -> - install_file - ~tgt_fn:cs.cs_name - fn - bindir) - (); - BaseBuilt.fold - BaseBuilt.BExecLib - cs.cs_name - (fun () fn -> - install_file - fn - exec_libdir) - (); - install_data - bs.bs_path - bs.bs_data_files - (Filename.concat - (datarootdir ()) - pkg.name) - end - in - List.iter - (function - | Executable (cs, bs, exec)-> - install_exec (cs, bs, exec) - | _ -> - ()) - pkg.sections - in - - let install_docs pkg = - let install_doc data = - let (cs, doc) = - !doc_hook data - in - if var_choose doc.doc_install && - BaseBuilt.is_built BaseBuilt.BDoc cs.cs_name then - begin - let tgt_dir = - BaseFilePath.of_unix (var_expand doc.doc_install_dir) - in - BaseBuilt.fold - BaseBuilt.BDoc - cs.cs_name - (fun () fn -> - install_file - fn - (fun () -> tgt_dir)) - (); - install_data - Filename.current_dir_name - doc.doc_data_files - doc.doc_install_dir - end - in - List.iter - (function - | Doc (cs, doc) -> - install_doc (cs, doc) - | _ -> - ()) - pkg.sections - in - - install_libs pkg; - install_execs pkg; - install_docs pkg - - (* Uninstall already installed data *) - let uninstall _ argv = - List.iter - (fun (ev, data) -> - if ev = install_file_ev then - begin - if Sys.file_exists data then - begin - info - (f_ "Removing file '%s'") - data; - Sys.remove data - end - else - begin - warning - (f_ "File '%s' doesn't exist anymore") - data - end - end - else if ev = install_dir_ev then - begin - if Sys.file_exists data && Sys.is_directory data then - begin - if Sys.readdir data = [||] then - begin - info - (f_ "Removing directory '%s'") - data; - BaseFileUtil.rmdir data - end - else - begin - warning - (f_ "Directory '%s' is not empty (%s)") - data - (String.concat - ", " - (Array.to_list - (Sys.readdir data))) - end - end - else - begin - warning - (f_ "Directory '%s' doesn't exist anymore") - data - end - end - else if ev = install_findlib_ev then - begin - info (f_ "Removing findlib library '%s'") data; - BaseExec.run (ocamlfind ()) ["remove"; data] - end - else - failwithf (f_ "Unknown log event '%s'") ev; - BaseLog.unregister ev data) - (* We process event in reverse order *) - (List.rev - (BaseLog.filter - [install_file_ev; - install_dir_ev; - install_findlib_ev;])) - -end - - -module OCamlbuildCommon = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/ocamlbuild/OCamlbuildCommon.ml" - - (** Functions common to OCamlbuild build and doc plugin - *) - - open OASISGettext - open BaseEnv - open BaseStandardVar - - let ocamlbuild_clean_ev = - "ocamlbuild-clean" - - let ocamlbuildflags = - var_define - ~short_desc:(fun () -> "OCamlbuild additional flags") - "ocamlbuildflags" - (fun () -> "") - - (** Fix special arguments depending on environment *) - let fix_args args extra_argv = - List.flatten - [ - if (os_type ()) = "Win32" then - [ - "-classic-display"; - "-no-log"; - "-no-links"; - "-install-lib-dir"; - (Filename.concat (standard_library ()) "ocamlbuild") - ] - else - []; - - if not (bool_of_string (is_native ())) || (os_type ()) = "Win32" then - [ - "-byte-plugin" - ] - else - []; - args; - - if bool_of_string (debug ()) then - ["-tag"; "debug"] - else - []; - - if bool_of_string (profile ()) then - ["-tag"; "profile"] - else - []; - - OASISUtils.split ' ' (ocamlbuildflags ()); - - Array.to_list extra_argv; - ] - - (** Run 'ocamlbuild -clean' if not already done *) - let run_clean extra_argv = - let extra_cli = - String.concat " " (Array.to_list extra_argv) - in - (* Run if never called with these args *) - if not (BaseLog.exists ocamlbuild_clean_ev extra_cli) then - begin - BaseExec.run (ocamlbuild ()) (fix_args ["-clean"] extra_argv); - BaseLog.register ocamlbuild_clean_ev extra_cli; - at_exit - (fun () -> - try - BaseLog.unregister ocamlbuild_clean_ev extra_cli - with _ -> - ()) - end - - (** Run ocamlbuild, unregister all clean events *) - let run_ocamlbuild args extra_argv = - (* TODO: enforce that target in args must be UNIX encoded i.e. toto/index.html - *) - BaseExec.run (ocamlbuild ()) (fix_args args extra_argv); - (* Remove any clean event, we must run it again *) - List.iter - (fun (e, d) -> BaseLog.unregister e d) - (BaseLog.filter [ocamlbuild_clean_ev]) - - (** Determine real build directory *) - let build_dir extra_argv = - let rec search_args dir = - function - | "-build-dir" :: dir :: tl -> - search_args dir tl - | _ :: tl -> - search_args dir tl - | [] -> - dir - in - search_args "_build" (fix_args [] extra_argv) - -end - -module OCamlbuildPlugin = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/ocamlbuild/OCamlbuildPlugin.ml" - - (** Build using ocamlbuild - @author Sylvain Le Gall - *) - - open OASISTypes - open OASISGettext - open OASISUtils - open BaseEnv - open OCamlbuildCommon - open BaseStandardVar - open BaseMessage - - let cond_targets_hook = - ref (fun lst -> lst) - - let build pkg argv = - - (* Return the filename in build directory *) - let in_build_dir fn = - Filename.concat - (build_dir argv) - fn - in - - (* Return the unix filename in host build directory *) - let in_build_dir_of_unix fn = - in_build_dir (BaseFilePath.of_unix fn) - in - - let cond_targets = - List.fold_left - (fun acc -> - function - | Library (cs, bs, lib) when var_choose bs.bs_build -> - begin - let evs, unix_files = - BaseBuilt.of_library - in_build_dir_of_unix - (cs, bs, lib) - in - - let ends_with nd fn = - let nd_len = - String.length nd - in - (String.length fn >= nd_len) - && - (String.sub - fn - (String.length fn - nd_len) - nd_len) = nd - in - - let tgts = - List.flatten - (List.filter - (fun l -> l <> []) - (List.map - (List.filter - (fun fn -> - ends_with ".cma" fn || - ends_with ".cmxa" fn || - ends_with (ext_lib ()) fn || - ends_with (ext_dll ()) fn)) - unix_files)) - in - - match tgts with - | _ :: _ -> - (evs, tgts) :: acc - | [] -> - failwithf - (f_ "No possible ocamlbuild targets for library %s") - cs.cs_name - end - - | Executable (cs, bs, exec) when var_choose bs.bs_build -> - begin - let evs, unix_exec_is, unix_dll_opt = - BaseBuilt.of_executable - in_build_dir_of_unix - (cs, bs, exec) - in - - let target ext = - let unix_tgt = - (BaseFilePath.Unix.concat - bs.bs_path - (BaseFilePath.Unix.chop_extension - exec.exec_main_is))^ext - in - let evs = - (* Fix evs, we want to use the unix_tgt, without copying *) - List.map - (function - | BaseBuilt.BExec, nm, lst when nm = cs.cs_name -> - BaseBuilt.BExec, nm, [[in_build_dir_of_unix unix_tgt]] - | ev -> - ev) - evs - in - evs, [unix_tgt] - in - - (* Add executable *) - let acc = - match bs.bs_compiled_object with - | Native -> - (target ".native") :: acc - | Best when bool_of_string (is_native ()) -> - (target ".native") :: acc - | Byte - | Best -> - (target ".byte") :: acc - in - acc - end - - | Library _ | Executable _ | Test _ - | SrcRepo _ | Flag _ | Doc _ -> - acc) - [] - (* Keep the pkg.sections ordered *) - (List.rev pkg.sections); - in - - (* Check and register built files *) - let check_and_register (bt, bnm, lst) = - List.iter - (fun fns -> - if not (List.exists Sys.file_exists fns) then - failwithf - (f_ "No one of expected built files %s exists") - (String.concat (s_ ", ") (List.map (Printf.sprintf "'%s'") fns))) - lst; - (BaseBuilt.register bt bnm lst) - in - - let cond_targets = - (* Run the hook *) - !cond_targets_hook cond_targets - in - - (* Run a list of target... *) - run_ocamlbuild - (List.flatten - (List.map snd cond_targets)) - argv; - (* ... and register events *) - List.iter - check_and_register - (List.flatten (List.map fst cond_targets)) - - - let clean pkg extra_args = - run_clean extra_args; - List.iter - (function - | Library (cs, _, _) -> - BaseBuilt.unregister BaseBuilt.BLib cs.cs_name - | Executable (cs, _, _) -> - BaseBuilt.unregister BaseBuilt.BExec cs.cs_name; - BaseBuilt.unregister BaseBuilt.BExecLib cs.cs_name - | _ -> - ()) - pkg.sections - -end - -module OCamlbuildDocPlugin = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/ocamlbuild/OCamlbuildDocPlugin.ml" - - (* Create documentation using ocamlbuild .odocl files - @author Sylvain Le Gall - *) - - open OASISTypes - open OASISGettext - open OASISMessage - open OCamlbuildCommon - open BaseStandardVar - - - - let doc_build path pkg (cs, doc) argv = - let index_html = - BaseFilePath.Unix.make - [ - path; - cs.cs_name^".docdir"; - "index.html"; - ] - in - let tgt_dir = - BaseFilePath.make - [ - build_dir argv; - BaseFilePath.of_unix path; - cs.cs_name^".docdir"; - ] - in - run_ocamlbuild [index_html] argv; - List.iter - (fun glb -> - BaseBuilt.register - BaseBuilt.BDoc - cs.cs_name - [BaseFileUtil.glob - (Filename.concat tgt_dir glb)]) - ["*.html"; "*.css"] - - let doc_clean t pkg (cs, doc) argv = - run_clean argv; - BaseBuilt.unregister BaseBuilt.BDoc cs.cs_name - -end - - -module CustomPlugin = struct -# 21 "/Users/mmottl/Downloads/oasis-0.3.0~rc2/src/plugins/custom/CustomPlugin.ml" - - (** Generate custom configure/build/doc/test/install system - @author - *) - - open BaseEnv - open OASISGettext - open OASISTypes - - - - type t = - { - cmd_main: command_line conditional; - cmd_clean: (command_line option) conditional; - cmd_distclean: (command_line option) conditional; - } - - let run = BaseCustom.run - - let main t _ extra_args = - let cmd, args = - var_choose - ~name:(s_ "main command") - t.cmd_main - in - run cmd args extra_args - - let clean t pkg extra_args = - match var_choose t.cmd_clean with - | Some (cmd, args) -> - run cmd args extra_args - | _ -> - () - - let distclean t pkg extra_args = - match var_choose t.cmd_distclean with - | Some (cmd, args) -> - run cmd args extra_args - | _ -> - () - - module Build = - struct - let main t pkg extra_args = - main t pkg extra_args; - List.iter - (fun sct -> - let evs = - match sct with - | Library (cs, bs, lib) when var_choose bs.bs_build -> - begin - let evs, _ = - BaseBuilt.of_library - BaseFilePath.of_unix - (cs, bs, lib) - in - evs - end - | Executable (cs, bs, exec) when var_choose bs.bs_build -> - begin - let evs, _, _ = - BaseBuilt.of_executable - BaseFilePath.of_unix - (cs, bs, exec) - in - evs - end - | _ -> - [] - in - List.iter - (fun (bt, bnm, lst) -> BaseBuilt.register bt bnm lst) - evs) - pkg.sections - - let clean t pkg extra_args = - clean t pkg extra_args; - (* TODO: this seems to be pretty generic (at least wrt to ocamlbuild - * considering moving this to BaseSetup? - *) - List.iter - (function - | Library (cs, _, _) -> - BaseBuilt.unregister BaseBuilt.BLib cs.cs_name - | Executable (cs, _, _) -> - BaseBuilt.unregister BaseBuilt.BExec cs.cs_name; - BaseBuilt.unregister BaseBuilt.BExecLib cs.cs_name - | _ -> - ()) - pkg.sections - - let distclean t pkg extra_args = - distclean t pkg extra_args - end - - module Test = - struct - let main t pkg (cs, test) extra_args = - try - main t pkg extra_args; - 0.0 - with Failure s -> - BaseMessage.warning - (f_ "Test '%s' fails: %s") - cs.cs_name - s; - 1.0 - - let clean t pkg (cs, test) extra_args = - clean t pkg extra_args - - let distclean t pkg (cs, test) extra_args = - distclean t pkg extra_args - end - - module Doc = - struct - let main t pkg (cs, _) extra_args = - main t pkg extra_args; - BaseBuilt.register BaseBuilt.BDoc cs.cs_name [] - - let clean t pkg (cs, _) extra_args = - clean t pkg extra_args; - BaseBuilt.unregister BaseBuilt.BDoc cs.cs_name - - let distclean t pkg (cs, _) extra_args = - distclean t pkg extra_args - end - -end - - -open OASISTypes;; - -let setup_t = - { - BaseSetup.configure = InternalConfigurePlugin.configure; - build = OCamlbuildPlugin.build; - test = - [ - ("sexp", - CustomPlugin.Test.main - { - CustomPlugin.cmd_main = - [ - (OASISExpr.EBool true, - ("$sexp_test", ["<"; "test.sexp"])) - ]; - cmd_clean = [(OASISExpr.EBool true, None)]; - cmd_distclean = [(OASISExpr.EBool true, None)]; - }); - ("conv", - CustomPlugin.Test.main - { - CustomPlugin.cmd_main = - [(OASISExpr.EBool true, ("$conv_test", []))]; - cmd_clean = [(OASISExpr.EBool true, None)]; - cmd_distclean = [(OASISExpr.EBool true, None)]; - }) - ]; - doc = [("sexplib", OCamlbuildDocPlugin.doc_build "lib")]; - install = InternalInstallPlugin.install; - uninstall = InternalInstallPlugin.uninstall; - clean = [OCamlbuildPlugin.clean]; - clean_test = - [ - ("sexp", - CustomPlugin.Test.clean - { - CustomPlugin.cmd_main = - [ - (OASISExpr.EBool true, - ("$sexp_test", ["<"; "test.sexp"])) - ]; - cmd_clean = [(OASISExpr.EBool true, None)]; - cmd_distclean = [(OASISExpr.EBool true, None)]; - }); - ("conv", - CustomPlugin.Test.clean - { - CustomPlugin.cmd_main = - [(OASISExpr.EBool true, ("$conv_test", []))]; - cmd_clean = [(OASISExpr.EBool true, None)]; - cmd_distclean = [(OASISExpr.EBool true, None)]; - }) - ]; - clean_doc = [("sexplib", OCamlbuildDocPlugin.doc_clean "lib")]; - distclean = []; - distclean_test = - [ - ("sexp", - CustomPlugin.Test.distclean - { - CustomPlugin.cmd_main = - [ - (OASISExpr.EBool true, - ("$sexp_test", ["<"; "test.sexp"])) - ]; - cmd_clean = [(OASISExpr.EBool true, None)]; - cmd_distclean = [(OASISExpr.EBool true, None)]; - }); - ("conv", - CustomPlugin.Test.distclean - { - CustomPlugin.cmd_main = - [(OASISExpr.EBool true, ("$conv_test", []))]; - cmd_clean = [(OASISExpr.EBool true, None)]; - cmd_distclean = [(OASISExpr.EBool true, None)]; - }) - ]; - distclean_doc = []; - package = - { - oasis_version = "0.3"; - ocaml_version = Some (OASISVersion.VGreaterEqual "3.12"); - findlib_version = None; - name = "sexplib"; - version = "7.0.5"; - license = - OASISLicense.DEP5License - { - OASISLicense.license = "LGPL"; - exceptions = ["OCaml linking"]; - version = OASISLicense.Version "2.1"; - }; - license_file = Some "LICENSE"; - copyrights = ["(C) 2005-2011 Jane Street Capital LLC"]; - maintainers = []; - authors = ["Markus Mottl"; "Martin Sandin"]; - homepage = None; - synopsis = "automated S-expression conversion"; - description = None; - categories = []; - conf_type = (`Configure, "internal", Some "0.3"); - conf_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - build_type = (`Build, "ocamlbuild", Some "0.3"); - build_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - install_type = (`Install, "internal", Some "0.3"); - install_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - uninstall_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - clean_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - distclean_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - files_ab = []; - sections = - [ - Library - ({ - cs_name = "sexplib"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - bs_build = [(OASISExpr.EBool true, true)]; - bs_install = [(OASISExpr.EBool true, true)]; - bs_path = "lib"; - bs_compiled_object = Best; - bs_build_depends = - [ - FindlibPackage ("unix", None); - FindlibPackage ("bigarray", None); - FindlibPackage ("num", None) - ]; - bs_build_tools = - [ExternalTool "ocamlbuild"; ExternalTool "camlp4o"]; - bs_c_sources = []; - bs_data_files = []; - bs_ccopt = [(OASISExpr.EBool true, [])]; - bs_cclib = [(OASISExpr.EBool true, [])]; - bs_dlllib = [(OASISExpr.EBool true, [])]; - bs_dllpath = [(OASISExpr.EBool true, [])]; - bs_byteopt = [(OASISExpr.EBool true, [])]; - bs_nativeopt = [(OASISExpr.EBool true, [])]; - }, - { - lib_modules = - [ - "Type"; - "Parser"; - "Lexer"; - "Pre_sexp"; - "Sexp_intf"; - "Sexp"; - "Path"; - "Conv"; - "Conv_error"; - "Exn_magic"; - "Std" - ]; - lib_pack = true; - lib_internal_modules = []; - lib_findlib_parent = None; - lib_findlib_name = None; - lib_findlib_containers = []; - }); - Library - ({ - cs_name = "pa_sexp_conv"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - bs_build = [(OASISExpr.EBool true, true)]; - bs_install = [(OASISExpr.EBool true, true)]; - bs_path = "syntax"; - bs_compiled_object = Byte; - bs_build_depends = - [ - FindlibPackage ("camlp4.quotations", None); - FindlibPackage ("camlp4.extend", None); - FindlibPackage - ("type_conv", - Some (OASISVersion.VGreaterEqual "3.0.5")) - ]; - bs_build_tools = - [ExternalTool "ocamlbuild"; ExternalTool "camlp4o"]; - bs_c_sources = []; - bs_data_files = []; - bs_ccopt = [(OASISExpr.EBool true, [])]; - bs_cclib = [(OASISExpr.EBool true, [])]; - bs_dlllib = [(OASISExpr.EBool true, [])]; - bs_dllpath = [(OASISExpr.EBool true, [])]; - bs_byteopt = [(OASISExpr.EBool true, [])]; - bs_nativeopt = [(OASISExpr.EBool true, [])]; - }, - { - lib_modules = ["Pa_sexp_conv"]; - lib_pack = false; - lib_internal_modules = []; - lib_findlib_parent = Some "sexplib"; - lib_findlib_name = Some "syntax"; - lib_findlib_containers = []; - }); - Executable - ({ - cs_name = "conv_test"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - bs_build = - [ - (OASISExpr.EBool true, false); - (OASISExpr.EFlag "tests", true) - ]; - bs_install = [(OASISExpr.EBool true, false)]; - bs_path = "lib_test"; - bs_compiled_object = Byte; - bs_build_depends = - [ - InternalLibrary "sexplib"; - InternalLibrary "pa_sexp_conv" - ]; - bs_build_tools = - [ExternalTool "ocamlbuild"; ExternalTool "camlp4o"]; - bs_c_sources = []; - bs_data_files = []; - bs_ccopt = [(OASISExpr.EBool true, [])]; - bs_cclib = [(OASISExpr.EBool true, [])]; - bs_dlllib = [(OASISExpr.EBool true, [])]; - bs_dllpath = [(OASISExpr.EBool true, [])]; - bs_byteopt = [(OASISExpr.EBool true, [])]; - bs_nativeopt = [(OASISExpr.EBool true, [])]; - }, - {exec_custom = false; exec_main_is = "conv_test.ml"; }); - Library - ({ - cs_name = "sexplib_top"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - bs_build = [(OASISExpr.EBool true, true)]; - bs_install = [(OASISExpr.EBool true, true)]; - bs_path = "top"; - bs_compiled_object = Best; - bs_build_depends = []; - bs_build_tools = - [ExternalTool "ocamlbuild"; ExternalTool "camlp4o"]; - bs_c_sources = []; - bs_data_files = []; - bs_ccopt = [(OASISExpr.EBool true, [])]; - bs_cclib = [(OASISExpr.EBool true, [])]; - bs_dlllib = [(OASISExpr.EBool true, [])]; - bs_dllpath = [(OASISExpr.EBool true, [])]; - bs_byteopt = [(OASISExpr.EBool true, [])]; - bs_nativeopt = [(OASISExpr.EBool true, [])]; - }, - { - lib_modules = ["Install_printers"]; - lib_pack = false; - lib_internal_modules = []; - lib_findlib_parent = Some "sexplib"; - lib_findlib_name = Some "top"; - lib_findlib_containers = []; - }); - Test - ({ - cs_name = "sexp"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - test_type = (`Test, "custom", Some "0.3"); - test_command = - [ - (OASISExpr.EBool true, - ("$sexp_test", ["<"; "test.sexp"])) - ]; - test_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - test_working_directory = Some "lib_test"; - test_run = - [ - (OASISExpr.EBool true, false); - (OASISExpr.EFlag "tests", true) - ]; - test_tools = - [ExternalTool "ocamlbuild"; ExternalTool "camlp4o"]; - }); - Test - ({ - cs_name = "conv"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - test_type = (`Test, "custom", Some "0.3"); - test_command = - [(OASISExpr.EBool true, ("$conv_test", []))]; - test_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - test_working_directory = Some "lib_test"; - test_run = - [ - (OASISExpr.EBool true, false); - (OASISExpr.EFlag "tests", true) - ]; - test_tools = - [ExternalTool "ocamlbuild"; ExternalTool "camlp4o"]; - }); - Executable - ({ - cs_name = "sexp_test"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - bs_build = - [ - (OASISExpr.EBool true, false); - (OASISExpr.EFlag "tests", true) - ]; - bs_install = [(OASISExpr.EBool true, false)]; - bs_path = "lib_test"; - bs_compiled_object = Byte; - bs_build_depends = [InternalLibrary "sexplib"]; - bs_build_tools = - [ExternalTool "ocamlbuild"; ExternalTool "camlp4o"]; - bs_c_sources = []; - bs_data_files = []; - bs_ccopt = [(OASISExpr.EBool true, [])]; - bs_cclib = [(OASISExpr.EBool true, [])]; - bs_dlllib = [(OASISExpr.EBool true, [])]; - bs_dllpath = [(OASISExpr.EBool true, [])]; - bs_byteopt = [(OASISExpr.EBool true, [])]; - bs_nativeopt = [(OASISExpr.EBool true, [])]; - }, - {exec_custom = false; exec_main_is = "sexp_test.ml"; }); - Doc - ({ - cs_name = "sexplib"; - cs_data = PropList.Data.create (); - cs_plugin_data = []; - }, - { - doc_type = (`Doc, "ocamlbuild", Some "0.3"); - doc_custom = - { - pre_command = [(OASISExpr.EBool true, None)]; - post_command = [(OASISExpr.EBool true, None)]; - }; - doc_build = - [ - (OASISExpr.EBool true, false); - (OASISExpr.EFlag "docs", true) - ]; - doc_install = [(OASISExpr.EBool true, true)]; - doc_install_dir = "$docdir"; - doc_title = "API reference for sexplib"; - doc_authors = []; - doc_abstract = None; - doc_format = OtherDoc; - doc_data_files = []; - doc_build_tools = - [ - ExternalTool "ocamlbuild"; - ExternalTool "camlp4o"; - ExternalTool "ocamldoc" - ]; - }) - ]; - plugins = - [ - (`Extra, "StdFiles", Some "0.3"); - (`Extra, "DevFiles", Some "0.3"); - (`Extra, "META", Some "0.3") - ]; - schema_data = PropList.Data.create (); - plugin_data = []; - }; - version = "0.3.0~rc2"; - };; - -let setup () = BaseSetup.setup setup_t;; - -# 5596 "setup.ml" -(* OASIS_STOP *) -let () = setup ();; diff --git a/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.ml b/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.ml deleted file mode 100644 index ba066db..0000000 --- a/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.ml +++ /dev/null @@ -1,1383 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This file is derived from file "pa_tywith.ml" of version 0.45 of the * - * library "Tywith". * - * * - * Tywith is Copyright (C) 2004, 2005 by * - * * - * Martin Sandin * - * * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(* Pa_sexp_conv: Preprocessing Module for Automated S-expression Conversions *) - -open StdLabels -open MoreLabels - -open Printf - -open Camlp4 -open PreCast - -module Gen = Pa_type_conv.Gen - -(* Utility functions *) - -let mk_rev_bindings loc fps = - let coll (i, bindings, patts, vars) fp = - let name = "v" ^ string_of_int i in - let var_expr = <:expr@loc< $lid:name$ >> in - let expr = - match fp with - | `Fun fun_expr -> <:expr@loc< $fun_expr$ $var_expr$ >> - | `Match matchings -> <:expr@loc< match $var_expr$ with [ $matchings$ ] >> - in - let patt = <:patt@loc< $lid:name$ >> in - let bindings = <:binding@loc< $patt$ = $expr$ and $bindings$ >> in - i - 1, bindings, patt :: patts, var_expr :: vars - in - let n = List.length fps in - let _, bindings, patts, expr = - List.fold_left ~f:coll ~init:(n, Ast.BiNil loc, [], []) fps - in - bindings, patts, expr - -let mk_bindings loc fps = mk_rev_bindings loc (List.rev fps) - -let unroll_cnv_fp loc var = function - | `Fun fun_expr -> <:expr@loc< $fun_expr$ $var$ >> - | `Match matchings -> <:expr@loc< match $var$ with [ $matchings$ ] >> - -let unroll_fun_matches loc fp1 fp2 = - match fp1, fp2 with - | `Fun fun_expr1, `Fun fun_expr2 -> - <:expr@loc< $fun_expr1$ $fun_expr2$ >> - | `Fun fun_expr, `Match matching -> - <:expr@loc< $fun_expr$ (fun [ $matching$ ]) >> - | _ -> assert false (* impossible *) - -let rec sig_of_tds cnv = function - | Ast.TyDcl (loc, type_name, tps, rhs, cl) -> cnv loc type_name tps rhs cl - | Ast.TyAnd (loc, tp1, tp2) -> - <:sig_item@loc< $sig_of_tds cnv tp1$; $sig_of_tds cnv tp2$ >> - | _ -> assert false (* impossible *) - - -(* Generators for S-expressions *) - -(* Generates the signature for type conversion to S-expressions *) -module Sig_generate_sexp_of = struct - - let rec sig_of_td__loop acc = function - | [] -> - let loc = Ast.loc_of_ctyp acc in - <:ctyp@loc< $acc$ -> Sexplib.Sexp.t >> - | tp :: tps -> - let tp = Gen.drop_variance_annotations tp in - let loc = Ast.loc_of_ctyp tp in - let sexp_of = sig_of_td__loop <:ctyp@loc< $acc$ $tp$ >> tps in - <:ctyp@loc< ( $tp$ -> Sexplib.Sexp.t ) -> $sexp_of$ >> - - let sig_of_td loc type_name tps _rhs _cl = - let sexp_of = sig_of_td__loop <:ctyp@loc< $lid:type_name$ >> tps in - <:sig_item@loc< value $lid: "sexp_of_" ^ type_name$ : $sexp_of$ >> - - let mk_sig tds = <:sig_item< $sig_of_tds sig_of_td tds$ >> - - let () = Pa_type_conv.add_sig_generator "sexp_of" mk_sig - - let mk_sig_exn = function - | <:ctyp@loc< $uid:_$ >> | <:ctyp@loc< $uid:_$ of $_$ >> -> - <:sig_item@loc< >> - | tp -> Gen.error tp ~fn:"mk_sig_exn" ~msg:"unknown type" - - let () = Pa_type_conv.add_sig_generator ~is_exn:true "sexp" mk_sig_exn -end - - -(* Generates the signature for type conversion from S-expressions *) -module Sig_generate_of_sexp = struct - - let rec is_polymorphic_variant = function - | <:ctyp< private $tp$ >> -> is_polymorphic_variant tp - | <:ctyp< ( $tup:_$ ) >> - | <:ctyp< $_$ -> $_$ >> - | <:ctyp< { $_$ } >> - | <:ctyp< [ $_$ ] >> -> `Surely_not - | <:ctyp< [< $_$ ] >> | <:ctyp< [> $_$ ] >> - | <:ctyp< [= $_$ ] >> -> `Definitely - | <:ctyp< '$_$ >> - | <:ctyp< $_$ $_$ >> - | <:ctyp< $id:_$ >> - | <:ctyp< >> -> `Maybe - | <:ctyp< $tp1$ == $tp2$ >> -> - begin match is_polymorphic_variant tp1 with - | (`Surely_not | `Definitely) as res -> res - | `Maybe -> is_polymorphic_variant tp2 end - | tp -> Gen.unknown_type tp "Sig_generate_of_sexp.is_polymorphic_variant" - - let rec sig_of_td__loop acc = function - | [] -> - let loc = Ast.loc_of_ctyp acc in - <:ctyp@loc< Sexplib.Sexp.t -> $acc$ >> - | tp :: tps -> - let tp = Gen.drop_variance_annotations tp in - let loc = Ast.loc_of_ctyp tp in - let of_sexp = sig_of_td__loop <:ctyp@loc< $acc$ $tp$ >> tps in - <:ctyp@loc< ( Sexplib.Sexp.t -> $tp$ ) -> $of_sexp$ >> - - let sig_of_td with_poly loc type_name tps rhs _cl = - let of_sexp = sig_of_td__loop <:ctyp@loc< $lid:type_name$ >> tps in - let of_sexp_item = - <:sig_item@loc< value $lid: type_name ^ "_of_sexp"$ : $of_sexp$; >> - in - match with_poly, is_polymorphic_variant rhs with - | true, `Surely_not -> - Gen.error rhs ~fn:"Sig_generate_of_sexp.sig_of_td" - ~msg:"sexp_poly annotation \ - but type is surely not a polymorphic variant" - | false, (`Surely_not | `Maybe) -> of_sexp_item - | (true | false), `Definitely | true, `Maybe -> - <:sig_item@loc< - $of_sexp_item$; - value $lid: type_name ^ "_of_sexp__"$ : $of_sexp$; - >> - - let mk_sig with_poly tds = - <:sig_item< $sig_of_tds (sig_of_td with_poly) tds$ >> - - let () = Pa_type_conv.add_sig_generator "of_sexp" (mk_sig false) - let () = Pa_type_conv.add_sig_generator "of_sexp_poly" (mk_sig true) -end - - -(* Generates the signature for type conversion to S-expressions *) -module Sig_generate = struct - let () = - Pa_type_conv.add_sig_generator "sexp" (fun tds -> - let loc = Ast.loc_of_ctyp tds in - <:sig_item@loc< - $Sig_generate_sexp_of.mk_sig tds$; - $Sig_generate_of_sexp.mk_sig false tds$ - >>) - - let () = - Pa_type_conv.add_sig_generator "sexp_poly" (fun tds -> - let loc = Ast.loc_of_ctyp tds in - <:sig_item@loc< - $Sig_generate_sexp_of.mk_sig tds$; - $Sig_generate_of_sexp.mk_sig true tds$ - >>) -end - - -(* Generator for converters of OCaml-values to S-expressions *) -module Generate_sexp_of = struct - let mk_abst_call loc tn rev_path = - <:expr@loc< - $id:Gen.ident_of_rev_path loc (("sexp_of_" ^ tn) :: rev_path)$ - >> - - (* Conversion of type paths *) - let sexp_of_path_fun loc id = - match Gen.get_rev_id_path id [] with - | tn :: rev_path -> mk_abst_call loc tn rev_path - | [] -> assert false (* impossible *) - - (* Conversion of types *) - let rec sexp_of_type = function - | <:ctyp@loc< sexp_opaque $_$ >> -> - `Fun <:expr@loc< Sexplib.Conv.sexp_of_opaque >> - | <:ctyp@loc< $tp1$ $tp2$ >> -> `Fun (sexp_of_appl_fun loc tp1 tp2) - | <:ctyp< ( $tup:tp$ ) >> -> sexp_of_tuple tp - | <:ctyp@loc< '$parm$ >> -> `Fun <:expr@loc< $lid:"_of_" ^ parm$ >> - | <:ctyp@loc< $id:id$ >> -> `Fun (sexp_of_path_fun loc id) - | <:ctyp@loc< $_$ -> $_$ >> as arrow -> - `Fun <:expr@loc< fun (_f : $arrow$) -> - Sexplib.Conv.sexp_of_fun Pervasives.ignore >> - | <:ctyp< [< $row_fields$ ] >> | <:ctyp< [> $row_fields$ ] >> - | <:ctyp< [= $row_fields$ ] >> -> sexp_of_variant row_fields - | <:ctyp< ! $parms$ . $poly_tp$ >> -> sexp_of_poly parms poly_tp - | tp -> Gen.unknown_type tp "sexp_of_type" - - (* Conversion of polymorphic types *) - and sexp_of_appl_fun loc tp1 tp2 = - match sexp_of_type tp1, sexp_of_type tp2 with - | `Fun fun_expr1, `Fun fun_expr2 -> <:expr@loc< $fun_expr1$ $fun_expr2$ >> - | `Fun fun_expr, `Match matching -> - <:expr@loc< $fun_expr$ (fun [ $matching$ ]) >> - | _ -> assert false (* impossible *) - - - (* Conversion of tuples *) - and sexp_of_tuple tp = - let loc = Ast.loc_of_ctyp tp in - let fps = List.map ~f:sexp_of_type (Ast.list_of_ctyp tp []) in - let bindings, patts, vars = mk_bindings loc fps in - let in_expr = <:expr@loc< Sexplib.Sexp.List $Gen.mk_expr_lst loc vars$ >> in - let expr = <:expr@loc< let $bindings$ in $in_expr$ >> in - `Match <:match_case@loc< ( $tup:Ast.paCom_of_list patts$ ) -> $expr$ >> - - - (* Conversion of variant types *) - - and mk_cnv_expr tp = - let loc = Ast.loc_of_ctyp tp in - match sexp_of_type tp with - | `Fun fun_expr -> <:expr@loc< $fun_expr$ >> - | `Match matchings -> <:expr@loc< fun [ $matchings$ ] >> - - and sexp_of_variant row_fields = - let rec loop = function - | <:ctyp@loc< $tp1$ | $tp2$ >> -> - <:match_case@loc< $loop tp1$ | $loop tp2$ >> - | <:ctyp@loc< `$cnstr$ >> -> - <:match_case@loc< `$cnstr$ -> Sexplib.Sexp.Atom $str:cnstr$ >> - | <:ctyp@loc< `$cnstr$ of sexp_list $tp$>> -> - let cnv_expr = - match sexp_of_type tp with - | `Fun fun_expr -> <:expr@loc< $fun_expr$ >> - | `Match matchings -> - <:expr@loc< fun el -> match el with [ $matchings$ ] >> - in - <:match_case@loc< - `$cnstr$ l -> - Sexplib.Sexp.List - [ Sexplib.Sexp.Atom $str:cnstr$ :: - Sexplib.Conv.list_map $cnv_expr$ l] - >> - | <:ctyp@loc< `$cnstr$ of $tps$ >> -> - let fps = List.map ~f:sexp_of_type (Ast.list_of_ctyp tps []) in - let bindings, patts, vars = mk_bindings loc fps in - let cnstr_expr = <:expr@loc< Sexplib.Sexp.Atom $str:cnstr$ >> in - let expr = - <:expr@loc< - let $bindings$ in - Sexplib.Sexp.List $Gen.mk_expr_lst loc (cnstr_expr :: vars)$ - >> - in - <:match_case@loc< `$cnstr$ $Ast.paSem_of_list patts$ -> $expr$ >> - | <:ctyp< [< $row_fields$ ] >> | <:ctyp< [> $row_fields$ ] >> - | <:ctyp< [= $row_fields$ ] >> -> loop row_fields - | <:ctyp@loc< $tp1$ $tp2$ >> -> - let id_path = Gen.get_appl_path loc tp1 in - let call = sexp_of_appl_fun loc tp1 tp2 in - <:match_case@loc< #$id_path$ as v -> $call$ v >> - | <:ctyp@loc< $id:id$ >> | <:ctyp@loc< #$id:id$ >> -> - let call = - match Gen.get_rev_id_path id [] with - | tn :: rev_path -> mk_abst_call loc tn rev_path - | [] -> assert false (* impossible *) - in - <:match_case@loc< #$id$ as v -> $call$ v >> - | tp -> Gen.unknown_type tp "sexp_of_variant" - in - `Match (loop row_fields) - - - (* Polymorphic record fields *) - - and sexp_of_poly parms tp = - let loc = Ast.loc_of_ctyp tp in - let bindings = - let mk_binding parm = - <:binding@loc< $lid:"_of_" ^ parm$ = Sexplib.Conv.sexp_of_opaque >> - in - List.map ~f:mk_binding (Gen.ty_var_list_of_ctyp parms []) - in - match sexp_of_type tp with - | `Fun fun_expr -> `Fun <:expr@loc< let $list:bindings$ in $fun_expr$ >> - | `Match matchings -> - `Match - <:match_case@loc< - arg -> - let $list:bindings$ in - match arg with - [ $matchings$ ] - >> - - - (* Conversion of sum types *) - - let rec branch_sum = function - | <:ctyp@loc< $tp1$ | $tp2$ >> -> - <:match_case@loc< $branch_sum tp1$ | $branch_sum tp2$ >> - | <:ctyp@loc< $uid:cnstr$ >> -> - <:match_case@loc< $uid:cnstr$ -> Sexplib.Sexp.Atom $str:cnstr$ >> - | <:ctyp@loc< $uid:cnstr$ of sexp_list $tp$>> -> - let cnv_expr = - match sexp_of_type tp with - | `Fun fun_expr -> <:expr@loc< $fun_expr$ >> - | `Match matchings -> - <:expr@loc< fun el -> match el with [ $matchings$ ] >> - in - <:match_case@loc< - $uid:cnstr$ l -> - Sexplib.Sexp.List - [Sexplib.Sexp.Atom $str:cnstr$ :: - Sexplib.Conv.list_map $cnv_expr$ l] - >> - | <:ctyp@loc< $uid:cnstr$ of $tps$ >> -> - let fps = List.map ~f:sexp_of_type (Ast.list_of_ctyp tps []) in - let cnstr_expr = <:expr@loc< Sexplib.Sexp.Atom $str:cnstr$ >> in - let bindings, patts, vars = mk_bindings loc fps in - let patt = - match patts with - | [patt] -> patt - | _ -> <:patt@loc< ( $tup:Ast.paCom_of_list patts$ ) >> - in - <:match_case@loc< - $uid:cnstr$ $patt$ -> - let $bindings$ in - Sexplib.Sexp.List $Gen.mk_expr_lst loc (cnstr_expr :: vars)$ - >> - | tp -> Gen.unknown_type tp "branch_sum" - - let sexp_of_sum alts = `Match (branch_sum alts) - - - (* Conversion of record types *) - - let mk_rec_patt loc patt name = - let p = <:patt@loc< $lid:name$ = $lid:"v_" ^ name$ >> in - <:patt@loc< $patt$; $p$ >> - - let sexp_of_default_field patt expr name tp sexp_of empty = - let loc = Ast.loc_of_ctyp tp in - let patt = mk_rec_patt loc patt name in - let cnv_expr = - match sexp_of_type tp with - | `Fun fun_expr -> <:expr@loc< $fun_expr$ >> - | `Match matchings -> - <:expr@loc< fun el -> match el with [ $matchings$ ] >> - in - let expr = - let v_name = <:expr@loc< $lid: "v_" ^ name$ >> in - <:expr@loc< - let bnds = - if $v_name$ = $empty$ then bnds - else - let arg = $sexp_of$ $cnv_expr$ $v_name$ in - let bnd = - Sexplib.Sexp.List [Sexplib.Sexp.Atom $str:name$; arg] - in - [ bnd :: bnds ] - in - $expr$ - >> - in - patt, expr - - let sexp_of_record flds_ctyp = - let flds = Ast.list_of_ctyp flds_ctyp [] in - let rec coll (patt, expr) = function - | <:ctyp@loc< $lid:name$ : mutable sexp_option $tp$ >> - | <:ctyp@loc< $lid:name$ : sexp_option $tp$ >> -> - let patt = mk_rec_patt loc patt name in - let vname = <:expr@loc< v >> in - let cnv_expr = unroll_cnv_fp loc vname (sexp_of_type tp) in - let expr = - <:expr@loc< - let bnds = - match $lid:"v_" ^ name$ with - [ None -> bnds - | Some v -> - let arg = $cnv_expr$ in - let bnd = - Sexplib.Sexp.List [Sexplib.Sexp.Atom $str:name$; arg] - in - [ bnd :: bnds ] ] - in - $expr$ - >> - in - patt, expr - | <:ctyp@loc< $lid:name$ : mutable sexp_bool >> - | <:ctyp@loc< $lid:name$ : sexp_bool >> -> - let patt = mk_rec_patt loc patt name in - let expr = - <:expr@loc< - let bnds = - if $lid:"v_" ^ name$ then - let bnd = Sexplib.Sexp.List [Sexplib.Sexp.Atom $str:name$] in - [ bnd :: bnds ] - else bnds - in - $expr$ - >> - in - patt, expr - | <:ctyp@loc< $lid:name$ : mutable sexp_list $tp$ >> - | <:ctyp@loc< $lid:name$ : sexp_list $tp$ >> -> - sexp_of_default_field - patt expr name tp <:expr@loc< sexp_of_list >> <:expr@loc< [] >> - | <:ctyp@loc< $lid:name$ : mutable sexp_array $tp$ >> - | <:ctyp@loc< $lid:name$ : sexp_array $tp$ >> -> - sexp_of_default_field - patt expr name tp <:expr@loc< sexp_of_array >> <:expr@loc< [||] >> - | <:ctyp@loc< $lid:name$ : mutable $tp$ >> - | <:ctyp@loc< $lid:name$ : $tp$ >> -> - let patt = mk_rec_patt loc patt name in - let vname = <:expr@loc< $lid:"v_" ^ name$ >> in - let cnv_expr = unroll_cnv_fp loc vname (sexp_of_type tp) in - let expr = - <:expr@loc< - let arg = $cnv_expr$ in - let bnd = Sexplib.Sexp.List [Sexplib.Sexp.Atom $str:name$; arg] in - let bnds = [ bnd :: bnds ] in - $expr$ - >> - in - patt, expr - | _ -> assert false (* impossible *) - in - let loc = Ast.loc_of_ctyp flds_ctyp in - let init_expr = <:expr@loc< Sexplib.Sexp.List bnds >> in - let patt, expr = - List.fold_left ~f:coll ~init:(<:patt@loc<>>, init_expr) flds - in - `Match - <:match_case@loc< - { $patt$ } -> - let bnds = [] in - $expr$ - >> - - - (* Empty type *) - let sexp_of_nil loc = `Fun <:expr@loc< fun _v -> assert False >> - - - (* Generate code from type definitions *) - - let sexp_of_td loc type_name tps rhs = - let body = - let rec loop tp = - Gen.switch_tp_def tp - ~alias:(fun (_ : Loc.t) tp -> sexp_of_type tp) - ~sum:(fun (_ : Loc.t) tp -> sexp_of_sum tp) - ~record:(fun (_ : Loc.t) tp -> sexp_of_record tp) - ~variants:(fun (_ : Loc.t) tp -> sexp_of_variant tp) - ~mani:(fun (_ : Loc.t) _tp1 tp2 -> loop tp2) - ~nil:sexp_of_nil - in - match loop rhs with - | `Fun fun_expr -> - (* Prevent violation of value restriction and problems with - recursive types by eta-expanding function definitions *) - <:expr@loc< fun [ v -> $fun_expr$ v ] >> - | `Match matchings -> <:expr@loc< fun [ $matchings$ ] >> - in - let mk_pat id = <:patt@loc< $lid:id$ >> in - let patts = - List.map tps - ~f:(fun ty -> <:patt@loc< $lid:"_of_" ^ Gen.get_tparam_id ty$>>) - in - let bnd = mk_pat ("sexp_of_" ^ type_name) in - <:binding@loc< $bnd$ = $Gen.abstract loc patts body$ >> - - let rec sexp_of_tds = function - | Ast.TyDcl (loc, type_name, tps, rhs, _cl) -> - sexp_of_td loc type_name tps rhs - | Ast.TyAnd (loc, tp1, tp2) -> - <:binding@loc< $sexp_of_tds tp1$ and $sexp_of_tds tp2$ >> - | _ -> assert false (* impossible *) - - let sexp_of tds = - let binding, recursive, loc = - match tds with - | Ast.TyDcl (loc, type_name, tps, rhs, _cl) -> - sexp_of_td loc type_name tps rhs, - Gen.type_is_recursive type_name rhs, loc - | Ast.TyAnd (loc, _, _) as tds -> sexp_of_tds tds, true, loc - | _ -> assert false (* impossible *) - in - if recursive then <:str_item@loc< value rec $binding$ >> - else <:str_item@loc< value $binding$ >> - - (* Add code generator to the set of known generators *) - let () = Pa_type_conv.add_generator "sexp_of" sexp_of - - let string_of_ident id = - let str_lst = Gen.get_rev_id_path id [] in - String.concat ~sep:"." str_lst - - let sexp_of_exn tp = - let get_full_cnstr cnstr = Pa_type_conv.get_conv_path () ^ "." ^ cnstr in - let expr = - match tp with - | <:ctyp@loc< $uid:cnstr$ >> -> - <:expr@loc< - Sexplib.Exn_magic.register $uid:cnstr$ $str:get_full_cnstr cnstr$ - >> - | <:ctyp@loc< $uid:cnstr$ of $tps$ >> -> - let ctyps = Ast.list_of_ctyp tps [] in - let fps = List.map ~f:sexp_of_type ctyps in - let sexp_converters = - List.map fps ~f:(function - | `Fun fun_expr -> <:expr@loc< $fun_expr$ >> - | `Match matchings -> <:expr@loc< fun [ $matchings$ ] >>) - in - let _, patts, vars = mk_bindings loc fps in - let register_name = sprintf "register%d" (List.length fps) in - let make_exc = - let var_args = - match vars with - | [var] -> var - | _ -> <:expr@loc< $tup:Ast.exCom_of_list vars$ >> - in - Gen.abstract loc patts <:expr@loc< $uid:cnstr$ $var_args$ >> - in - let call = - let partial = - <:expr@loc< - Sexplib.Exn_magic.$lid:register_name$ - $make_exc$ $str:get_full_cnstr cnstr$ - >> - in - Gen.apply loc partial sexp_converters - in - <:expr@loc< $call$ >> - | tp -> Gen.unknown_type tp "sexp_of_exn" - in - let loc = Ast.loc_of_ctyp tp in - <:str_item@loc< value () = $expr$ >> - - let () = Pa_type_conv.add_generator ~is_exn:true "sexp" sexp_of_exn -end - - -(* Generator for converters of S-expressions to OCaml-values *) -module Generate_of_sexp = struct - let mk_abst_call loc tn ?(internal = false) rev_path = - let tns = tn ^ "_of_sexp" in - let tns_suff = if internal then tns ^ "__" else tns in - <:expr@loc< $id:Gen.ident_of_rev_path loc (tns_suff :: rev_path)$ >> - - (* Utility functions for polymorphic variants *) - - (* Handle backtracking when variants do not match *) - let handle_no_variant_match loc expr = - <:match_case@loc< Sexplib.Conv_error.No_variant_match _ -> $expr$ >> - - let is_wildcard = function [_] -> true | _ -> false - - (* Generate code depending on whether to generate a match for the last - case of matching a variant *) - let handle_variant_match_last loc match_last matches = - if match_last || is_wildcard matches then - match matches with - | <:match_case< $_$ -> $expr$ >> :: _ -> expr - | _ -> assert false (* impossible *) - else <:expr@loc< match atom with [ $list:matches$ ] >> - - (* Generate code for matching malformed S-expressions *) - let mk_variant_other_matches loc rev_els call = - let coll_structs acc (loc, cnstr) = - <:match_case@loc< - $str:cnstr$ -> Sexplib.Conv_error.$lid:call$ _tp_loc _sexp - >> :: acc - in - let exc_no_variant_match = - <:match_case@loc< - _ -> Sexplib.Conv_error.no_variant_match _tp_loc _sexp - >> - in - List.fold_left ~f:coll_structs ~init:[exc_no_variant_match] rev_els - - (* Split the row fields of a variant type into lists of atomic variants, - structured variants, atomic variants + included variant types, - and structured variants + included variant types. *) - let rec split_row_field (atoms, structs, ainhs, sinhs as acc) = function - | <:ctyp@loc< `$cnstr$ >> -> - let tpl = loc, cnstr in - ( - tpl :: atoms, - structs, - `A tpl :: ainhs, - sinhs - ) - | <:ctyp@loc< `$cnstr$ of $tps$ >> -> - ( - atoms, - (loc, cnstr) :: structs, - ainhs, - `S (loc, cnstr, tps) :: sinhs - ) - | <:ctyp< [< $row_fields$ ] >> | <:ctyp< [> $row_fields$ ] >> - | <:ctyp< [= $row_fields$ ] >> -> - List.fold_left ~f:split_row_field - ~init:acc (Ast.list_of_ctyp row_fields []) - | <:ctyp< $_$ $_$ >> - | (<:ctyp< $id:_$ >> | <:ctyp< #$id:_$ >>) as inh -> - let iinh = `I inh in - ( - atoms, - structs, - iinh :: ainhs, - iinh :: sinhs - ) - | tp -> Gen.unknown_type tp "split_row_field" - - (* Conversion of type paths *) - let path_of_sexp_fun loc id = - match Gen.get_rev_id_path id [] with - | tn :: rev_path -> mk_abst_call loc tn rev_path - | [] -> assert false (* no empty paths *) - - (* Conversion of types *) - let rec type_of_sexp = function - | <:ctyp@loc< sexp_opaque $_$ >> -> - `Fun <:expr@loc< Sexplib.Conv.opaque_of_sexp >> - | <:ctyp@loc< sexp_option >> -> - `Fun <:expr@loc< fun a_of_sexp v -> Some (a_of_sexp v) >> - | <:ctyp@loc< sexp_list >> -> - `Fun <:expr@loc< fun a_of_sexp v -> - Sexplib.Conv.list_of_sexp a_of_sexp v >> - | <:ctyp@loc< sexp_array >> -> - `Fun <:expr@loc< fun a_of_sexp v -> - Sexplib.Conv.array_of_sexp a_of_sexp v >> - | <:ctyp@loc< $tp1$ $tp2$ >> -> - let fp1 = type_of_sexp tp1 in - let fp2 = type_of_sexp tp2 in - `Fun (unroll_fun_matches loc fp1 fp2) - | <:ctyp< ( $tup:tp$ ) >> -> tuple_of_sexp tp - | <:ctyp@loc< '$parm$ >> -> `Fun <:expr@loc< $lid:"_of_" ^ parm$ >> - | <:ctyp@loc< $id:id$ >> -> `Fun (path_of_sexp_fun loc id) - | <:ctyp@loc< $_$ -> $_$ >> as arrow -> - `Fun <:expr@loc< fun sexp -> - (Sexplib.Conv.fun_of_sexp sexp : $arrow$) >> - | <:ctyp< [< $row_fields$ ] >> | <:ctyp< [> $row_fields$ ] >> - | <:ctyp< [= $row_fields$ ] >> -> - variant_of_sexp ?full_type:None row_fields - | <:ctyp< ! $parms$ . $poly_tp$ >> -> poly_of_sexp parms poly_tp - | tp -> Gen.unknown_type tp "type_of_sexp" - - (* Conversion of tuples *) - and tuple_of_sexp tps = - let fps = List.map ~f:type_of_sexp (Ast.list_of_ctyp tps []) in - let loc = Ast.loc_of_ctyp tps in - let bindings, patts, vars = mk_bindings loc fps in - let n = string_of_int (List.length fps) in - `Match - <:match_case@loc< - Sexplib.Sexp.List $Gen.mk_patt_lst loc patts$ -> - let $bindings$ in - ( $tup:Ast.exCom_of_list vars$ ) - | sexp -> - Sexplib.Conv_error.tuple_of_size_n_expected _tp_loc $int:n$ sexp - >> - - (* Generate internal call *) - and mk_internal_call = function - | <:ctyp@loc< $id:id$ >> | <:ctyp@loc< #$id:id$ >> -> - let call = - match Gen.get_rev_id_path id [] with - | tn :: rev_path -> mk_abst_call loc tn ~internal:true rev_path - | [] -> assert false (* impossible *) - in - call - | <:ctyp@loc< $tp1$ $tp2$ >> -> - let fp1 = `Fun (mk_internal_call tp1) in - let fp2 = type_of_sexp tp2 in - unroll_fun_matches loc fp1 fp2 - | _ -> assert false (* impossible *) - - (* Generate code for matching included variant types *) - and handle_variant_inh full_type match_last other_matches inh = - let loc = Ast.loc_of_ctyp inh in - let fun_expr = mk_internal_call inh in - let match_exc = - handle_no_variant_match loc ( - handle_variant_match_last loc match_last other_matches) in - let new_other_matches = - [ - <:match_case@loc< - _ -> try ($fun_expr$ _sexp :> $full_type$) with [ $match_exc$ ] - >> - ] - in - new_other_matches, true - - (* Generate code for matching atomic variants *) - and mk_variant_match_atom loc full_type rev_atoms_inhs rev_structs = - let coll (other_matches, match_last) = function - | `A (loc, cnstr) -> - let new_match = <:match_case@loc< $str:cnstr$ -> `$cnstr$ >> in - new_match :: other_matches, false - | `I inh -> - handle_variant_inh full_type match_last other_matches inh - in - let other_matches = - mk_variant_other_matches loc rev_structs "ptag_no_args" - in - let match_atoms_inhs, match_last = - List.fold_left ~f:coll ~init:(other_matches, false) rev_atoms_inhs in - handle_variant_match_last loc match_last match_atoms_inhs - - - (* Variant conversions *) - - (* Match arguments of constructors (variants or sum types) *) - and mk_cnstr_args_match ~is_variant cnstr tps = - let loc = Ast.loc_of_ctyp tps in - let cnstr vars_expr = - if is_variant then <:expr@loc< `$cnstr$ $vars_expr$ >> - else <:expr@loc< $uid:cnstr$ $vars_expr$ >> - in - match tps with - | <:ctyp@loc< sexp_list $tp$ >> -> - let cnv = - match type_of_sexp tp with - | `Fun fun_expr -> <:expr@loc< $fun_expr$ >> - | `Match matchings -> - <:expr@loc< fun el -> match el with [ $matchings$ ] >> - in - cnstr <:expr@loc< Sexplib.Conv.list_map ($cnv$) sexp_args >> - | _ -> - let fps = List.map ~f:type_of_sexp (Ast.list_of_ctyp tps []) in - let bindings, patts, vars = mk_bindings loc fps in - let good_arg_match = - let vars_expr = - match vars with - | [var_expr] -> var_expr - | _ -> <:expr@loc< ( $tup:Ast.exCom_of_list vars$ ) >> - in - cnstr vars_expr - in - let handle_exc = - if is_variant then "ptag_incorrect_n_args" - else "stag_incorrect_n_args" - in - <:expr@loc< - match sexp_args with - [ $Gen.mk_patt_lst loc patts$ -> let $bindings$ in $good_arg_match$ - | _ -> Sexplib.Conv_error.$lid:handle_exc$ _tp_loc _tag _sexp ] - >> - - (* Generate code for matching structured variants *) - and mk_variant_match_struct loc full_type rev_structs_inhs rev_atoms = - let has_structs_ref = ref false in - let coll (other_matches, match_last) = function - | `S (loc, cnstr, tps) -> - has_structs_ref := true; - let expr = mk_cnstr_args_match ~is_variant:true cnstr tps in - let new_match = - <:match_case@loc< ($str:cnstr$ as _tag) -> $expr$ >> - in - new_match :: other_matches, false - | `I inh -> - handle_variant_inh full_type match_last other_matches inh - in - let other_matches = - mk_variant_other_matches loc rev_atoms "ptag_no_args" - in - let match_structs_inhs, match_last = - List.fold_left ~f:coll ~init:(other_matches, false) rev_structs_inhs - in - ( - handle_variant_match_last loc match_last match_structs_inhs, - !has_structs_ref - ) - - (* Generate code for handling atomic and structured variants (i.e. not - included variant types) *) - and handle_variant_tag loc full_type row_fields = - let rev_atoms, rev_structs, rev_atoms_inhs, rev_structs_inhs = - List.fold_left ~f:split_row_field ~init:([], [], [], []) row_fields - in - let match_struct, has_structs = - mk_variant_match_struct loc full_type rev_structs_inhs rev_atoms in - let maybe_sexp_args_patt = - if has_structs then <:patt@loc< sexp_args >> - else <:patt@loc< _ >> - in - <:match_case@loc< - Sexplib.Sexp.Atom atom as _sexp -> - $mk_variant_match_atom loc full_type rev_atoms_inhs rev_structs$ - | Sexplib.Sexp.List - [Sexplib.Sexp.Atom atom :: $maybe_sexp_args_patt$] as _sexp -> - $match_struct$ - | Sexplib.Sexp.List [Sexplib.Sexp.List _ :: _] as sexp -> - Sexplib.Conv_error.nested_list_invalid_poly_var _tp_loc sexp - | Sexplib.Sexp.List [] as sexp -> - Sexplib.Conv_error.empty_list_invalid_poly_var _tp_loc sexp - >> - - (* Generate matching code for variants *) - and variant_of_sexp ?full_type row_tp = - let loc = Ast.loc_of_ctyp row_tp in - let row_fields = Ast.list_of_ctyp row_tp [] in - let is_contained, full_type = - match full_type with - | None -> true, <:ctyp@loc< [= $row_tp$ ] >> - | Some full_type -> false, full_type - in - let top_match = - match row_fields with - | (<:ctyp< $id:_$ >> | <:ctyp< $_$ $_$ >>) as inh :: rest -> - let rec loop inh row_fields = - let call = - <:expr@loc< ( $mk_internal_call inh$ sexp :> $full_type$ ) >> - in - match row_fields with - | [] -> call - | h :: t -> - let expr = - match h with - | <:ctyp< $id:_$ >> | <:ctyp< $_$ $_$ >> -> loop h t - | _ -> - let rftag_matches = - handle_variant_tag loc full_type row_fields - in - <:expr@loc< match sexp with [ $rftag_matches$ ] >> - in - <:expr@loc< - try $call$ with - [ $handle_no_variant_match loc expr$ ] - >> - in - <:match_case@loc< sexp -> $loop inh rest$ >> - | _ :: _ -> handle_variant_tag loc full_type row_fields - | [] -> assert false (* impossible *) - in - if is_contained then - `Fun - <:expr@loc< - fun sexp -> - try match sexp with [ $top_match$ ] - with - [ Sexplib.Conv_error.No_variant_match (_tp_loc, sexp) -> - Sexplib.Conv_error.no_matching_variant_found _tp_loc sexp - ] - >> - else `Match top_match - - and poly_of_sexp parms tp = - let loc = Ast.loc_of_ctyp tp in - let bindings = - let mk_binding parm = - <:binding@loc< - $lid:"_of_" ^ parm$ = - fun sexp -> Sexplib.Conv_error.record_poly_field_value _tp_loc sexp - >> - in - List.map ~f:mk_binding (Gen.ty_var_list_of_ctyp parms []) - in - match type_of_sexp tp with - | `Fun fun_expr -> `Fun <:expr@loc< let $list:bindings$ in $fun_expr$ >> - | `Match matchings -> - `Match - <:match_case@loc< - arg -> - let $list:bindings$ in - match arg with - [ $matchings$ ] - >> - - - (* Sum type conversions *) - - (* Generate matching code for well-formed S-expressions wrt. sum types *) - let rec mk_good_sum_matches = function - | <:ctyp@loc< $uid:cnstr$ >> -> - let lccnstr = String.uncapitalize cnstr in - <:match_case@loc< - Sexplib.Sexp.Atom ($str:lccnstr$ | $str:cnstr$) -> $uid:cnstr$ - >> - | <:ctyp@loc< $uid:cnstr$ of $tps$ >> -> - let lccnstr = String.uncapitalize cnstr in - <:match_case@loc< - (Sexplib.Sexp.List - [Sexplib.Sexp.Atom ($str:lccnstr$ | $str:cnstr$ as _tag) :: - sexp_args] as _sexp) -> - $mk_cnstr_args_match ~is_variant:false cnstr tps$ - >> - | <:ctyp@loc< $tp1$ | $tp2$ >> -> - <:match_case@loc< - $mk_good_sum_matches tp1$ - | $mk_good_sum_matches tp2$ - >> - | _ -> assert false (* impossible *) - - (* Generate matching code for malformed S-expressions with good tags - wrt. sum types *) - let rec mk_bad_sum_matches = function - | <:ctyp@loc< $uid:cnstr$ >> -> - let lccnstr = String.uncapitalize cnstr in - <:match_case@loc< - Sexplib.Sexp.List - [Sexplib.Sexp.Atom ($str:lccnstr$ | $str:cnstr$) :: _] as sexp -> - Sexplib.Conv_error.stag_no_args _tp_loc sexp - >> - | <:ctyp@loc< $uid:cnstr$ of $_$ >> -> - let lccnstr = String.uncapitalize cnstr in - <:match_case@loc< - Sexplib.Sexp.Atom ($str:lccnstr$ | $str:cnstr$) as sexp -> - Sexplib.Conv_error.stag_takes_args _tp_loc sexp - >> - | <:ctyp@loc< $tp1$ | $tp2$ >> -> - <:match_case@loc< - $mk_bad_sum_matches tp1$ - | $mk_bad_sum_matches tp2$ - >> - | _ -> assert false (* impossible *) - - (* Generate matching code for sum types *) - let sum_of_sexp alts = - let loc = Ast.loc_of_ctyp alts in - `Match - <:match_case@loc< - $mk_good_sum_matches alts$ - | $mk_bad_sum_matches alts$ - | Sexplib.Sexp.List [Sexplib.Sexp.List _ :: _] as sexp -> - Sexplib.Conv_error.nested_list_invalid_sum _tp_loc sexp - | Sexplib.Sexp.List [] as sexp -> - Sexplib.Conv_error.empty_list_invalid_sum _tp_loc sexp - | sexp -> Sexplib.Conv_error.unexpected_stag _tp_loc sexp - >> - - - (* Record conversions *) - - (* Generate code for extracting record fields *) - let mk_extract_fields tp = - let rec loop no_args args = function - | <:ctyp< $tp1$; $tp2$ >> -> - let no_args, args = loop no_args args tp2 in - loop no_args args tp1 - | <:ctyp@loc< $lid:nm$ : mutable sexp_bool >> - | <:ctyp@loc< $lid:nm$ : sexp_bool>> -> - let no_args = - <:match_case@loc< - $str:nm$ -> - if $lid:nm ^ "_field"$.val then - duplicates.val := [ field_name :: duplicates.val ] - else $lid:nm ^ "_field"$.val := True - | $no_args$ - >> - in - no_args, args - | <:ctyp@loc< $lid:nm$ : mutable sexp_option $tp$ >> - | <:ctyp@loc< $lid:nm$ : sexp_option $tp$ >> - | <:ctyp@loc< $lid:nm$ : mutable $tp$ >> - | <:ctyp@loc< $lid:nm$ : $tp$ >> -> - let unrolled = - unroll_cnv_fp loc <:expr@loc< _field_sexp >> (type_of_sexp tp) - in - let args = - <:match_case@loc< - $str:nm$ -> - match $lid:nm ^ "_field"$.val with - [ None -> - let fvalue = $unrolled$ in - $lid:nm ^ "_field"$.val := Some fvalue - | Some _ -> - duplicates.val := [ field_name :: duplicates.val ] ] - | $args$ - >> - in - no_args, args - | _ -> assert false (* impossible *) - in - let handle_extra = - let loc = Ast.loc_of_ctyp tp in - <:match_case@loc< - _ -> - if Sexplib.Conv.record_check_extra_fields.val then - extra.val := [ field_name :: extra.val ] - else () - >> - in - loop handle_extra handle_extra tp - - (* Generate code for handling the result of matching record fields *) - let mk_handle_record_match_result has_poly flds = - let has_nonopt_fields = ref false in - let res_tpls, bi_lst, good_patts = - let rec loop (res_tpls, bi_lst, good_patts as acc) = function - | <:ctyp@loc< $lid:nm$ : $tp$ >> -> - let fld = <:expr@loc< $lid:nm ^ "_field"$.val >> in - let new_bi_lst, new_good_patts = - match tp with - | <:ctyp@loc< sexp_bool >> | <:ctyp@loc< mutable sexp_bool >> - | <:ctyp@loc< sexp_option $_$ >> - | <:ctyp@loc< mutable sexp_option $_$ >> - | <:ctyp@loc< sexp_list $_$ >> - | <:ctyp@loc< mutable sexp_list $_$ >> - | <:ctyp@loc< sexp_array $_$ >> - | <:ctyp@loc< mutable sexp_array $_$ >> -> - bi_lst, <:patt@loc< $lid:nm ^ "_value"$ >> :: good_patts - | _ -> - let loc = Ast.loc_of_ctyp tp in - has_nonopt_fields := true; - ( - <:expr@loc< - (Pervasives.(=) $fld$ None, $str:nm$) >> :: bi_lst, - <:patt@loc< Some $lid:nm ^ "_value"$ >> :: good_patts - ) - in - ( - <:expr@loc< $fld$ >> :: res_tpls, - new_bi_lst, - new_good_patts - ) - | <:ctyp< $tp1$; $tp2$ >> -> loop (loop acc tp2) tp1 - | _ -> assert false (* impossible *) - in - loop ([], [], []) flds - in - let loc = Ast.loc_of_ctyp flds in - let match_good_expr = - if has_poly then - let rec loop acc = function - | <:ctyp< $tp1$; $tp2$ >> -> loop (loop acc tp2) tp1 - | <:ctyp@loc< $lid:nm$ : $_$ >> -> - <:expr@loc< $lid:nm ^ "_value"$ >> :: acc - | _ -> assert false (* impossible *) - in - match loop [] flds with - | [match_good_expr] -> match_good_expr - | match_good_exprs -> - <:expr@loc< $tup:Ast.exCom_of_list match_good_exprs$ >> - else - let rec loop = function - | <:ctyp@loc< $tp1$; $tp2$ >> -> - <:rec_binding@loc< $loop tp1$; $loop tp2$ >> - | <:ctyp@loc< $lid:nm$ : sexp_list $_$ >> -> - <:rec_binding@loc< - $lid:nm$ = - match $lid:nm ^ "_value"$ with - [ None -> [] | Some v -> v ] - >> - | <:ctyp@loc< $lid:nm$ : sexp_array $_$ >> -> - <:rec_binding@loc< - $lid:nm$ = - match $lid:nm ^ "_value"$ with - [ None -> [||] | Some v -> v ] - >> - | <:ctyp@loc< $lid:nm$ : $_$ >> -> - <:rec_binding@loc< $lid:nm$ = $lid:nm ^ "_value"$ >> - | _ -> assert false (* impossible *) - in - <:expr@loc< { $loop flds$ } >> - in - let expr, patt = - match res_tpls, good_patts with - | [res_expr], [res_patt] -> res_expr, res_patt - | _ -> - <:expr@loc< $tup:Ast.exCom_of_list res_tpls$ >>, - <:patt@loc< $tup:Ast.paCom_of_list good_patts$ >> - in - if !has_nonopt_fields then - <:expr@loc< - match $expr$ with - [ $patt$ -> $match_good_expr$ - | _ -> - Sexplib.Conv_error.record_undefined_elements _tp_loc sexp - $Gen.mk_expr_lst loc bi_lst$ - ] - >> - else <:expr@loc< match $expr$ with [ $patt$ -> $match_good_expr$ ] >> - - (* Generate code for converting record fields *) - let mk_cnv_fields has_poly flds = - let field_refs = - let rec loop = function - | <:ctyp@loc< $tp1$; $tp2$ >> -> - <:binding@loc< $loop tp1$ and $loop tp2$ >> - | <:ctyp@loc< $lid:nm$ : sexp_bool >> -> - <:binding@loc< $lid:nm ^ "_field"$ = ref False >> - | <:ctyp@loc< $lid:nm$ : $_$ >> -> - <:binding@loc< $lid:nm ^ "_field"$ = ref None >> - | _ -> assert false (* impossible *) - in - loop flds - in - let mc_no_args_fields, mc_fields_with_args = mk_extract_fields flds in - let loc = Ast.loc_of_ctyp flds in - <:expr@loc< - let $field_refs$ and duplicates = ref [] and extra = ref [] in - let rec iter = fun - [ [ - Sexplib.Sexp.List - [(Sexplib.Sexp.Atom field_name); _field_sexp] :: - tail - ] -> - do { - match field_name with - [ $mc_fields_with_args$ ]; - iter tail } - | [Sexplib.Sexp.List [(Sexplib.Sexp.Atom field_name)] :: tail] -> - do { - match field_name with - [ $mc_no_args_fields$ ]; - iter tail } - | [sexp :: _] -> - Sexplib.Conv_error.record_only_pairs_expected _tp_loc sexp - | [] -> () ] - in - do { - iter field_sexps; - if Pervasives.(<>) duplicates.val [] then - Sexplib.Conv_error.record_duplicate_fields - _tp_loc duplicates.val sexp - else if Pervasives.(<>) extra.val [] then - Sexplib.Conv_error.record_extra_fields _tp_loc extra.val sexp - else $mk_handle_record_match_result has_poly flds$ - } - >> - - let rec is_poly = function - | <:ctyp< $_$ : ! $_$ . $_$ >> -> true - | <:ctyp< $flds1$; $flds2$ >> -> is_poly flds1 || is_poly flds2 - | _ -> false - - (* Generate matching code for records *) - let record_of_sexp flds = - let loc = Ast.loc_of_ctyp flds in - let handle_fields = - let has_poly = is_poly flds in - let cnv_fields = mk_cnv_fields has_poly flds in - if has_poly then - let is_singleton_ref = ref true in - let patt = - let rec loop = function - | <:ctyp@loc< $tp1$; $tp2$ >> -> - is_singleton_ref := false; - <:patt@loc< $loop tp1$, $loop tp2$ >> - | <:ctyp@loc< $lid:nm$ : $_$ >> -> <:patt@loc< $lid:nm$ >> - | _ -> assert false (* impossible *) - in - let patt = loop flds in - if !is_singleton_ref then patt - else <:patt@loc< $tup:patt$ >> - in - let record_def = - let rec loop = function - | <:ctyp@loc< $tp1$; $tp2$ >> -> - <:rec_binding@loc< $loop tp1$; $loop tp2$ >> - | <:ctyp@loc< $lid:nm$ : $_$ >> -> - <:rec_binding@loc< $lid:nm$ = $lid:nm$ >> - | _ -> assert false (* impossible *) - in - loop flds - in - <:expr@loc< - let $patt$ = $cnv_fields$ in - { $record_def$ } - >> - else cnv_fields - in - `Match - <:match_case@loc< - Sexplib.Sexp.List field_sexps as sexp -> $handle_fields$ - | Sexplib.Sexp.Atom _ as sexp -> - Sexplib.Conv_error.record_list_instead_atom _tp_loc sexp - >> - - - (* Empty type *) - let nil_of_sexp loc = - `Fun <:expr@loc< fun sexp -> Sexplib.Conv_error.empty_type _tp_loc sexp >> - - - (* Generate code from type definitions *) - - let rec is_poly_call = function - | <:expr< $f$ $_$ >> -> is_poly_call f - | <:expr< $lid:name$ >> -> name.[0] = '_' && name.[1] = 'o' - | _ -> false - - let td_of_sexp loc type_name tps rhs = - let is_alias_ref = ref false in - let handle_alias tp = - is_alias_ref := true; - type_of_sexp tp - in - let coll_args tp param = - <:ctyp@loc< $tp$ $Gen.drop_variance_annotations param$ >> - in - let full_type = - List.fold_left ~f:coll_args ~init:<:ctyp@loc< $lid:type_name$ >> tps - in - let is_variant_ref = ref false in - let handle_variant row_fields = - is_variant_ref := true; - variant_of_sexp ~full_type row_fields - in - let body = - let rec loop tp = - Gen.switch_tp_def tp - ~alias:(fun (_ : Loc.t) tp -> handle_alias tp) - ~sum:(fun (_ : Loc.t) tp -> sum_of_sexp tp) - ~record:(fun (_ : Loc.t) tp -> record_of_sexp tp) - ~variants:(fun (_ : Loc.t) tp -> handle_variant tp) - ~mani:(fun (_ : Loc.t) _tp1 tp2 -> loop tp2) - ~nil:nil_of_sexp - in - match loop rhs with - | `Fun fun_expr -> - (* Prevent violation of value restriction and problems with - recursive types by eta-expanding function definitions *) - <:expr@loc< fun [ t -> $fun_expr$ t ] >> - | `Match matchings -> <:expr@loc< fun [ $matchings$ ] >> - in - let internal_name = type_name ^ "_of_sexp__" in - let arg_patts, arg_exprs = - List.split ( - List.map ~f:(function tp -> - let name = "_of_" ^ Gen.get_tparam_id tp in - <:patt@loc< $lid:name$ >>, <:expr@loc< $lid:name$ >> - ) - tps) - in - let with_poly_call = !is_alias_ref && is_poly_call body in - let internal_fun_body = - let full_type_name = - sprintf "%s.%s" (Pa_type_conv.get_conv_path ()) type_name - in - if with_poly_call then - Gen.abstract loc arg_patts - <:expr@loc< - fun sexp -> - Sexplib.Conv_error.silly_type $str:full_type_name$ sexp - >> - else - <:expr@loc< - let _tp_loc = $str:full_type_name$ in - $Gen.abstract loc arg_patts body$ - >> - in - let pre_external_fun_body = - let internal_call = - let internal_expr = <:expr@loc< $lid:internal_name$ >> in - <:expr@loc< $Gen.apply loc internal_expr arg_exprs$ sexp >> - in - let no_variant_match_mc = - <:match_case@loc< - Sexplib.Conv_error.No_variant_match (_tp_loc, sexp) -> - Sexplib.Conv_error.no_matching_variant_found _tp_loc sexp - >> - in - if with_poly_call then - <:expr@loc< try $body$ sexp with [ $no_variant_match_mc$ ] >> - (* Type alias may refer to variant, therefore same handling here! *) - else if !is_variant_ref || !is_alias_ref then - <:expr@loc< try $internal_call$ with [ $no_variant_match_mc$ ] >> - else internal_call - in - let internal_binding = - <:binding@loc< $lid:internal_name$ = $internal_fun_body$ >> - in - let external_fun_patt = <:patt@loc< $lid:type_name ^ "_of_sexp"$ >> in - let external_fun_body = - Gen.abstract loc arg_patts - <:expr@loc< fun sexp -> $pre_external_fun_body$ >> - in - let external_binding = - <:binding@loc< $external_fun_patt$ = $external_fun_body$ >> - in - internal_binding, external_binding - - let rec tds_of_sexp acc = function - | Ast.TyDcl (loc, type_name, tps, rhs, _cl) -> - td_of_sexp loc type_name tps rhs :: acc - | Ast.TyAnd (_, tp1, tp2) -> tds_of_sexp (tds_of_sexp acc tp2) tp1 - | _ -> assert false (* impossible *) - - (* Generate code from type definitions *) - let of_sexp = function - | Ast.TyDcl (loc, type_name, tps, rhs, _cl) -> - let internal_binding, external_binding = - td_of_sexp loc type_name tps rhs - in - let recursive = Gen.type_is_recursive type_name rhs in - if recursive then - <:str_item@loc< - value rec $internal_binding$ - and $external_binding$ - >> - else - <:str_item@loc< - value $internal_binding$; - value $external_binding$ - >> - | Ast.TyAnd (loc, _, _) as tds -> - let two_bindings = tds_of_sexp [] tds in - let bindings = - List.map ~f:(fun (b1, b2) -> <:binding@loc< $b1$ and $b2$ >>) - two_bindings - in - <:str_item@loc< value rec $list:bindings$ >> - | _ -> assert false (* impossible *) - - (* Add code generator to the set of known generators *) - let () = Pa_type_conv.add_generator "of_sexp" of_sexp -end - -module Quotations = struct - let of_sexp_quote loc _loc_name_opt cnt_str = - Pa_type_conv.set_conv_path_if_not_set loc; - let ctyp = Gram.parse_string Syntax.ctyp_quot loc cnt_str in - let fp = Generate_of_sexp.type_of_sexp ctyp in - let body = - match fp with - | `Fun fun_expr -> <:expr@loc< $fun_expr$ sexp >> - | `Match matchings -> <:expr@loc< match sexp with [$matchings$] >> - in - let full_type_name = - sprintf "%s line %i: %s" - (Pa_type_conv.get_conv_path ()) (Loc.start_line loc) cnt_str - in - <:expr@loc< - fun [ sexp -> - let _tp_loc = $str:full_type_name$ in - $body$ ] - >> - - let () = - Syntax.Quotation.add "of_sexp" Syntax.Quotation.DynAst.expr_tag - of_sexp_quote - - let sexp_of_quote loc _loc_name_opt cnt_str = - Pa_type_conv.set_conv_path_if_not_set loc; - let ctyp = Gram.parse_string Syntax.ctyp_quot loc cnt_str in - Generate_sexp_of.mk_cnv_expr ctyp - - let () = - Syntax.Quotation.add "sexp_of" Syntax.Quotation.DynAst.expr_tag - sexp_of_quote -end - -(* Add "of_sexp" and "sexp_of" as "sexp" to the set of generators *) -let () = - Pa_type_conv.add_generator - "sexp" - (fun tds -> - let loc = Ast.loc_of_ctyp tds in - <:str_item@loc< - $Generate_of_sexp.of_sexp tds$; $Generate_sexp_of.sexp_of tds$ - >> - ) diff --git a/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mli b/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mli deleted file mode 100644 index b669f70..0000000 --- a/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mli +++ /dev/null @@ -1,33 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This file is derived from file "pa_tywith.ml" of version 0.45 of the * - * library "Tywith". * - * * - * Tywith is Copyright (C) 2004, 2005 by * - * * - * Martin Sandin * - * * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -(** Pa_sexp_conv: Preprocessing Module for Automated S-expression Conversions *) diff --git a/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mllib b/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mllib deleted file mode 100644 index 91fac15..0000000 --- a/bundles/sexplib/sexplib-7.0.5/syntax/pa_sexp_conv.mllib +++ /dev/null @@ -1,4 +0,0 @@ -# OASIS_START -# DO NOT EDIT (digest: 5969c59e3896ac685b501cdfd34e8ea3) -Pa_sexp_conv -# OASIS_STOP diff --git a/bundles/sexplib/sexplib-7.0.5/top/install_printers.ml b/bundles/sexplib/sexplib-7.0.5/top/install_printers.ml deleted file mode 100644 index 3a00be9..0000000 --- a/bundles/sexplib/sexplib-7.0.5/top/install_printers.ml +++ /dev/null @@ -1,41 +0,0 @@ -(****************************************************************************** - * Sexplib * - * * - * Copyright (C) 2005- Jane Street Holding, LLC * - * Contact: opensource@janestreet.com * - * WWW: http://www.janestreet.com/ocaml * - * Author: Markus Mottl * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * * - ******************************************************************************) - -let printers = [ "Sexplib.Sexp.pp_hum" ] - -let eval_string - ?(print_outcome = false) ?(err_formatter = Format.err_formatter) str = - let lexbuf = Lexing.from_string str in - let phrase = !Toploop.parse_toplevel_phrase lexbuf in - Toploop.execute_phrase print_outcome err_formatter phrase - -let rec install_printers = function - | [] -> true - | printer :: printers -> - let cmd = Printf.sprintf "#install_printer %s;;" printer in - eval_string cmd && install_printers printers - -let () = - if not (install_printers printers) then - Format.eprintf "Problem installing Sexplib-printers@." diff --git a/bundles/sexplib/sexplib-7.0.5/top/sexplib_top.mllib b/bundles/sexplib/sexplib-7.0.5/top/sexplib_top.mllib deleted file mode 100644 index e5dd683..0000000 --- a/bundles/sexplib/sexplib-7.0.5/top/sexplib_top.mllib +++ /dev/null @@ -1,4 +0,0 @@ -# OASIS_START -# DO NOT EDIT (digest: c726c3185ff615847530490542668c8b) -Install_printers -# OASIS_STOP diff --git a/changes.txt b/changes.txt index 10287d7..eed58ac 100644 --- a/changes.txt +++ b/changes.txt @@ -10,6 +10,7 @@ - virtual typedef, declarer name, iterator name - regexps for type metavariables - 'symbol' metadeclaration for C identifiers that are guaranteed not intended as meta variables. +- allow mixing isomorpisms with normal rules ** Features: - New scripting languages @@ -53,6 +54,9 @@ - Allow size_t as the type of an array index in smpl code. Reported by Mansour Moufid. - Allow renaming an expression as an identifier (@i) +- Support const/volatile after *. Thanks to Lars-Peter Clausen for + pointing out the problem. +- Support variable declarations in the first element of a for loop header. ** Features: - Preserve spacing before // comments when not at the beginning of a line @@ -125,6 +129,12 @@ - Cache prefix takes distribution index into account. - Add --defined and --undefined options allowing some code not to be touched. Suggested by Eric Leblond. +- Dropped the need for the ocaml-extlib and ocaml-sexplib packages. +- Changed the file format of the regression test results. Files in the old format + are no longer readable by spatch. +- Added a crude mechanism for integrating the results of external analyses with + coccinelle, using positions to connect them together. This is an experimental + feature. See demos/external_ana.{c,cocci,data}. ** Bugfix: - Corrected parsing of script strings delimited by a single quote. Thanks @@ -209,6 +219,9 @@ crash. Likewise, an identifier matching an initialized enum field shouldn't cause a crash. - Make when forall in an exists rule behave (more) like forall +- Ocaml 4.00.0 compatibility fixes +- Drop inlines, reduce parser code size +- Bind const_vol in the right order in Ast0 visitor * 0.2.5 ** Language: diff --git a/commons/Makefile b/commons/Makefile index 6ef3642..fd99b75 100644 --- a/commons/Makefile +++ b/commons/Makefile @@ -28,7 +28,6 @@ MYSRC= commands.ml \ oarray.ml \ ocollection/ograph2way.ml \ ograph_simple.ml ograph_extended.ml \ - ofullcommon.ml \ glimpse.ml parser_combinators.ml # src from other authors, got from the web or caml hump @@ -76,10 +75,6 @@ MYMPISRC=distribution.ml MPIINCLUDES=-I ../ocamlmpi -I ../../ocamlmpi -I +ocamlmpi MPISYSLIBS=mpi.cma -#sexplib -MYSEXPSRC=sexp_common.ml -SEXPINCLUDES=-I $(SEXPDIR) - #binprot MYBINSRC=bin_common.ml BININCLUDES=-I ../ocamltarzan/lib-binprot -I ../../ocamltarzan/lib-binprot @@ -105,9 +100,8 @@ INCLUDES=$(INCLUDEDIRS:%=-I %) $(INCLUDESEXTRA) # This flag can also be used in subdirectories so don't change its name here. # For profiling use: -p -inline 0 -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes -#-thread +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g # The OPTBIN variable is here to allow to use ocamlc.opt instead of # ocaml, when it is available, which speeds up compilation. So @@ -116,8 +110,8 @@ OPTFLAGS ?= -g -dtypes OPTBIN ?= #.opt # The OCaml tools. -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDES) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) @@ -244,19 +238,6 @@ clean:: #----------------------------------------------------------------------------- -.PHONEY: sexp sexp.all sexp.opt -sexp: sexp.all -sexp.all: - $(MAKE) INCLUDESEXTRA="$(SEXPINCLUDES)" commons_sexp.cma -sexp.opt: - $(MAKE) INCLUDESEXTRA="$(SEXPINCLUDES)" commons_sexp.cmxa - -commons_sexp.cma: $(MYSEXPSRC:.ml=.cmo) - $(OCAMLC_CMD) -a -o $@ $^ - -commons_sexp.cmxa: $(MYSEXPSRC:.ml=.cmx) - $(OCAMLOPT_CMD) -a -o $@ $^ - binprot: $(MAKE) INCLUDESEXTRA="$(BININCLUDES)" commons_bin.cma binprot.opt: diff --git a/commons/common.ml b/commons/common.ml index 30fff0a..c66b8e7 100644 --- a/commons/common.ml +++ b/commons/common.ml @@ -5684,7 +5684,11 @@ type score_list = (string (* usually a filename *) * score_result) list let empty_score () = (Hashtbl.create 101 : score) +let save_score score path = + write_value score path +let load_score path () = + read_value path let regression_testing_vs newscore bestscore = diff --git a/commons/common.mli b/commons/common.mli index b665162..9d697ed 100644 --- a/commons/common.mli +++ b/commons/common.mli @@ -258,6 +258,8 @@ type score_result = Ok | Pb of string type score = (string (* usually a filename *), score_result) Hashtbl.t type score_list = (string (* usually a filename *) * score_result) list val empty_score : unit -> score +val load_score : string -> unit -> score +val save_score : score -> string -> unit val regression_testing : score -> filename (* old score file on disk (usually in /tmp) *) -> unit val regression_testing_vs: score -> score -> score diff --git a/commons/ofullcommon.ml b/commons/obsolete/ofullcommon.ml similarity index 100% rename from commons/ofullcommon.ml rename to commons/obsolete/ofullcommon.ml diff --git a/configure b/configure index 2af75aa..9317b73 100755 --- a/configure +++ b/configure @@ -1,13 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for coccinelle 1.0.0-rc12. +# Generated by GNU Autoconf 2.69 for coccinelle 1.0.0-rc14. # # Report bugs to . # # -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -136,6 +134,31 @@ export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh @@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi -test x\$exitcode = x0 || exit 1" +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && @@ -213,21 +237,25 @@ IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi if test x$as_have_required = xno; then : @@ -330,6 +358,14 @@ $as_echo X"$as_dir" | } # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take @@ -451,6 +487,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). @@ -485,16 +525,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -506,28 +546,8 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -619,8 +639,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='coccinelle' PACKAGE_TARNAME='coccinelle' -PACKAGE_VERSION='1.0.0-rc12' -PACKAGE_STRING='coccinelle 1.0.0-rc12' +PACKAGE_VERSION='1.0.0-rc14' +PACKAGE_STRING='coccinelle 1.0.0-rc14' PACKAGE_BUGREPORT='cocci@diku.dk' PACKAGE_URL='http://coccinelle.lip6.fr/' @@ -631,6 +651,7 @@ MAKETARGET_SPATCH SPATCHNAME enable_opt MAKETARGET_ALL +MODULES_profiling enable_release SUBSTITUTED_PDFLATEX with_PDFLATEX @@ -672,21 +693,11 @@ SUBSTITUTED_MENHIR with_MENHIR MENHIR OPTIMIZED_dynlink -MAKE_extlib -OPTFLAGS_extlib -enable_extlib -GLOBAL_extlib -OCAML_PKG_extlib MAKE_menhirLib OPTFLAGS_menhirLib enable_menhirLib GLOBAL_menhirLib OCAML_PKG_menhirLib -MAKE_sexplib -OPTFLAGS_sexplib -enable_sexplib -GLOBAL_sexplib -OCAML_PKG_sexplib MAKE_camlp4 OPTFLAGS_camlp4 enable_camlp4 @@ -697,8 +708,6 @@ OPTFLAGS_dynlink enable_dynlink GLOBAL_dynlink OCAML_PKG_dynlink -PATH_threads -OCAML_PKG_threads PATH_str OCAML_PKG_str PATH_num @@ -731,24 +740,12 @@ MODULES_dynlink FLAGS_dynlink LOCALLIB_dynlink FEATURE_dynlink -PATH_extlib -MODULESOPT_extlib -MODULES_extlib -FLAGS_extlib -LOCALLIB_extlib -FEATURE_extlib PATH_menhirLib MODULESOPT_menhirLib MODULES_menhirLib FLAGS_menhirLib LOCALLIB_menhirLib FEATURE_menhirLib -PATH_sexplib -MODULESOPT_sexplib -MODULES_sexplib -FLAGS_sexplib -LOCALLIB_sexplib -FEATURE_sexplib COCCI_OCAML_EXTERNAL RUNTIME_CAMLP4O_CMD RUNTIME_CAMLP4_CMD @@ -756,6 +753,9 @@ RUNTIME_OCAMLDEP_CMD RUNTIME_OCAMLOPT_CMD RUNTIME_OCAMLC_CMD RUNTIME_OCAMLFIND_CMD +SUBSTITUTED_OCAMLPROF +with_OCAMLPROF +OCAMLPROF SUBSTITUTED_OCAMLFIND with_OCAMLFIND OCAMLFIND @@ -772,6 +772,7 @@ CAMLP4OF CAMLP4O CAMLP4BOOT CAMLP4 +OCAMLCORIG OCAMLATLEAST311 OCAMLATLEAST310 OCAMLBUILD @@ -860,6 +861,7 @@ with_pkg_config with_ocamllex with_ocamlyacc with_ocamlfind +with_ocamlprof with_runtime_ocamlfind with_runtime_ocamlc with_runtime_ocamlopt @@ -868,9 +870,7 @@ with_runtime_camlp4 with_runtime_camlp4o enable_dynlink enable_camlp4 -enable_sexplib enable_menhirLib -enable_extlib with_menhir enable_ocaml enable_python @@ -896,6 +896,7 @@ PKG_CONFIG OCAMLLEX OCAMLYACC OCAMLFIND +OCAMLPROF RUNTIME_OCAMLFIND_CMD RUNTIME_OCAMLC_CMD RUNTIME_OCAMLOPT_CMD @@ -1365,8 +1366,6 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1452,7 +1451,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures coccinelle 1.0.0-rc12 to adapt to many kinds of systems. +\`configure' configures coccinelle 1.0.0-rc14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1513,7 +1512,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of coccinelle 1.0.0-rc12:";; + short | recursive ) echo "Configuration of coccinelle 1.0.0-rc14:";; esac cat <<\_ACEOF @@ -1525,12 +1524,8 @@ Optional Features: auto) --enable-camlp4 enable global package camlp4 (yes,no) (default: auto) - --enable-sexplib enable global package sexplib (yes,no) (default: - auto) --enable-menhirLib enable global package menhirLib (yes,no) (default: auto) - --enable-extlib enable global package extlib (yes,no) (default: - auto) --enable-ocaml enable ocaml scripting (default: auto) --enable-python enable python scripting (yes/no) (default: auto) --enable-pycaml enable global package pycaml (yes,no) (default: @@ -1538,8 +1533,8 @@ Optional Features: --enable-pcre-syntax enable pcre regular expression syntax (default: auto) --enable-pcre enable global package pcre (yes,no) (default: auto) - --enable-release build with a release configuration (yes,no, default: - no) + --enable-release build with a release configuration (yes,no,profile + default: no) --enable-opt build an optimized spatch (yes,no, default: auto) Optional Packages: @@ -1549,6 +1544,7 @@ Optional Packages: --with-ocamllex whether/which ocamllex to use (default: auto) --with-ocamlyacc whether/which ocamlyacc to use (default: auto) --with-ocamlfind whether/which ocamlfind to use (default: auto) + --with-ocamlprof whether/which ocamlprof to use (default: auto) --with-runtime-ocamlfind override the runtime cmd for ocamlfind --with-runtime-ocamlc override the runtime cmd for ocamlc @@ -1574,6 +1570,7 @@ Some influential environment variables: OCAMLLEX path to ocamllex OCAMLYACC path to ocamlyacc OCAMLFIND path to ocamlfind + OCAMLPROF path to ocamlprof RUNTIME_OCAMLFIND_CMD path to ocamlfind RUNTIME_OCAMLC_CMD @@ -1664,10 +1661,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -coccinelle configure 1.0.0-rc12 -generated by GNU Autoconf 2.68 +coccinelle configure 1.0.0-rc14 +generated by GNU Autoconf 2.69 -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1756,8 +1753,8 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by coccinelle $as_me 1.0.0-rc12, which was -generated by GNU Autoconf 2.68. Invocation command line was +It was created by coccinelle $as_me 1.0.0-rc14, which was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2170,7 +2167,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GIT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2213,7 +2210,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_GIT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2276,7 +2273,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2319,7 +2316,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_DATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2424,7 +2421,7 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2493,7 +2490,7 @@ do test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ @@ -2544,7 +2541,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2584,7 +2581,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2637,7 +2634,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2678,7 +2675,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -2736,7 +2733,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2780,7 +2777,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3226,8 +3223,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -3467,7 +3463,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3507,7 +3503,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PATCH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3547,7 +3543,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PATCHELF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3619,7 +3615,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3662,7 +3658,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3735,7 +3731,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3778,7 +3774,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3834,7 +3830,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3877,7 +3873,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3940,7 +3936,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3983,7 +3979,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4042,7 +4038,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4085,7 +4081,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4161,7 +4157,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4204,7 +4200,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4277,7 +4273,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4320,7 +4316,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4376,7 +4372,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4419,7 +4415,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4482,7 +4478,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4525,7 +4521,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4584,7 +4580,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4627,7 +4623,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4703,7 +4699,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4746,7 +4742,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4820,7 +4816,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4863,7 +4859,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4936,7 +4932,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLCDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4979,7 +4975,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLCDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5046,7 +5042,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLOPTDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5089,7 +5085,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLOPTDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5161,7 +5157,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAML="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5204,7 +5200,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAML="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5261,7 +5257,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLDEP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5304,7 +5300,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLDEP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5361,7 +5357,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLMKTOP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5404,7 +5400,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLMKTOP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5461,7 +5457,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLMKLIB="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5504,7 +5500,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLMKLIB="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5561,7 +5557,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLDOC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5604,7 +5600,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLDOC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5661,7 +5657,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLBUILD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5704,7 +5700,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLBUILD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5783,6 +5779,8 @@ $as_echo "$versioncheck" >&6; } OCAMLATLEAST311=$versioncheck +OCAMLCORIG="$OCAMLC" + if test "x$OCAMLC" = xno -o "x$OCAMLDEP" = xno -o "x$OCAMLDOC" = xno -o "x$OCAMLMKLIB" = xno; then : as_fn_error $? "You must install the OCaml compiler" "$LINENO" 5 @@ -5814,7 +5812,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5857,7 +5855,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5923,7 +5921,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4BOOT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5966,7 +5964,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4BOOT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6021,7 +6019,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4O="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6064,7 +6062,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4O="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6119,7 +6117,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4OF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6162,7 +6160,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4OF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6217,7 +6215,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4OOF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6260,7 +6258,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4OOF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6315,7 +6313,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4ORF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6358,7 +6356,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4ORF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6413,7 +6411,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4PROF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6456,7 +6454,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4PROF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6511,7 +6509,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4R="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6554,7 +6552,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4R="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6609,7 +6607,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CAMLP4RF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6652,7 +6650,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_CAMLP4RF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6746,7 +6744,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6789,7 +6787,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6862,7 +6860,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6905,7 +6903,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6961,7 +6959,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7004,7 +7002,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7067,7 +7065,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7110,7 +7108,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7169,7 +7167,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7212,7 +7210,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7288,7 +7286,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7331,7 +7329,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7404,7 +7402,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7447,7 +7445,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7503,7 +7501,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7546,7 +7544,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7609,7 +7607,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7652,7 +7650,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7711,7 +7709,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7754,7 +7752,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7854,7 +7852,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7897,7 +7895,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -7970,7 +7968,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8013,7 +8011,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8069,7 +8067,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8112,7 +8110,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8175,7 +8173,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8218,7 +8216,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8277,7 +8275,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8320,7 +8318,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8396,7 +8394,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8439,7 +8437,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8512,7 +8510,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8555,7 +8553,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8611,7 +8609,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8654,7 +8652,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8717,7 +8715,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8760,7 +8758,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8819,7 +8817,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8862,7 +8860,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -8962,7 +8960,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9005,7 +9003,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9078,7 +9076,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9121,7 +9119,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9177,7 +9175,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9220,7 +9218,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9283,7 +9281,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9326,7 +9324,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9385,7 +9383,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLFIND="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9428,7 +9426,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLFIND="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9504,7 +9502,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9547,7 +9545,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9620,7 +9618,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9663,7 +9661,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9719,7 +9717,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9762,7 +9760,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9825,7 +9823,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9868,7 +9866,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9927,7 +9925,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLFIND="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -9970,7 +9968,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLFIND="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -10022,140 +10020,1148 @@ fi fi -if test "x$OCAMLLEX" = xno; then : - as_fn_error $? "the OCaml Lexer needs to be installed (the ocamllex command). It should be part of your OCaml distribution." "$LINENO" 5 +# Check whether --with-ocamlprof was given. +if test "${with_ocamlprof+set}" = set; then : + withval=$with_ocamlprof; fi -if test "x$OCAMLYACC" = xno; then : - as_fn_error $? "The OCaml parser generated needs to be installed (the ocamlyacc command). It should be part of your OCaml distribution." "$LINENO" 5 - -fi + with_OCAMLPROF="$with_ocamlprof" -if test "x$OCAMLFIND" = xno; then : - as_fn_error $? "A suitable OCaml findlib (the ocamlfind command) could not be found." "$LINENO" 5 + if test -n "$with_OCAMLPROF" -a "x$with_OCAMLPROF" != xno -a "x$with_OCAMLPROF" != xyes; then : + OCAMLPROF="$with_OCAMLPROF" -fi +else + OCAMLPROF="ocamlprof" -# Check whether --with-runtime-ocamlfind was given. -if test "${with_runtime_ocamlfind+set}" = set; then : - withval=$with_runtime_ocamlfind; fi - - if test -z "$RUNTIME_OCAMLFIND_CMD"; then : - if test "x$with_runtime_ocamlfind" = xno; then : - RUNTIME_OCAMLFIND_CMD=$OCAMLFIND + if test "x$with_OCAMLPROF" = xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: ocamlprof is disabled explicitly" >&5 +$as_echo "$as_me: ocamlprof is disabled explicitly" >&6;} + OCAMLPROF=no -elif test -n "$with_runtime_ocamlfind" -a "x$with_runtime_ocamlfind" != xyes; then : - RUNTIME_OCAMLFIND_CMD="$with_runtime_ocamlfind" +else + if test "x$OCAMLPROF" = xpkg-config -a "xOCAMLPROF" = xPKG_CONFIG; then : +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 else - RUNTIME_OCAMLFIND_CMD="ocamlfind" - + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + ;; +esac fi - +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - -# Check whether --with-runtime-ocamlc was given. -if test "${with_runtime_ocamlc+set}" = set; then : - withval=$with_runtime_ocamlc; fi - - - if test -z "$RUNTIME_OCAMLC_CMD"; then : - if test "x$with_runtime_ocamlc" = xno; then : - RUNTIME_OCAMLC_CMD=$OCAMLC - - -elif test -n "$with_runtime_ocamlc" -a "x$with_runtime_ocamlc" != xyes; then : - RUNTIME_OCAMLC_CMD="$with_runtime_ocamlc" - - +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 else - RUNTIME_OCAMLC_CMD="ocamlc" - + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + ;; +esac fi - +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - - -# Check whether --with-runtime-ocamlopt was given. -if test "${with_runtime_ocamlopt+set}" = set; then : - withval=$with_runtime_ocamlopt; + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi - if test -z "$RUNTIME_OCAMLOPT_CMD"; then : - if test "x$with_runtime_ocamlopt" = xno; then : - RUNTIME_OCAMLOPT_CMD=$OCAMLOPT - - -elif test -n "$with_runtime_ocamlopt" -a "x$with_runtime_ocamlopt" != xyes; then : - RUNTIME_OCAMLOPT_CMD="$with_runtime_ocamlopt" - +fi +elif test "x$OCAMLPROF" = xocamllex -a "xOCAMLPROF" = xOCAMLLEX; then : + # checking for ocamllex + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ocamllex", so it can be a program name with args. +set dummy ${ac_tool_prefix}ocamllex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLLEX+:} false; then : + $as_echo_n "(cached) " >&6 else - RUNTIME_OCAMLOPT_CMD="ocamlopt" - + case $OCAMLLEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLLEX="$OCAMLLEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + ;; +esac fi - +OCAMLLEX=$ac_cv_path_OCAMLLEX +if test -n "$OCAMLLEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLLEX" >&5 +$as_echo "$OCAMLLEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - -# Check whether --with-runtime-ocamldep was given. -if test "${with_runtime_ocamldep+set}" = set; then : - withval=$with_runtime_ocamldep; fi - - - if test -z "$RUNTIME_OCAMLDEP_CMD"; then : - if test "x$with_runtime_ocamldep" = xno; then : - RUNTIME_OCAMLDEP_CMD=$OCAMLDEP - - -elif test -n "$with_runtime_ocamldep" -a "x$with_runtime_ocamldep" != xyes; then : - RUNTIME_OCAMLDEP_CMD="$with_runtime_ocamldep" - - +if test -z "$ac_cv_path_OCAMLLEX"; then + ac_pt_OCAMLLEX=$OCAMLLEX + # Extract the first word of "ocamllex", so it can be a program name with args. +set dummy ocamllex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLLEX+:} false; then : + $as_echo_n "(cached) " >&6 else - RUNTIME_OCAMLDEP_CMD="ocamldep" - + case $ac_pt_OCAMLLEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLLEX="$ac_pt_OCAMLLEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + ;; +esac fi - +ac_pt_OCAMLLEX=$ac_cv_path_ac_pt_OCAMLLEX +if test -n "$ac_pt_OCAMLLEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLLEX" >&5 +$as_echo "$ac_pt_OCAMLLEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + if test "x$ac_pt_OCAMLLEX" = x; then + OCAMLLEX="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLLEX=$ac_pt_OCAMLLEX + fi +else + OCAMLLEX="$ac_cv_path_OCAMLLEX" +fi + + if test "$OCAMLLEX" != "no"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ocamllex.opt", so it can be a program name with args. +set dummy ${ac_tool_prefix}ocamllex.opt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLLEXDOTOPT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OCAMLLEXDOTOPT in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLLEXDOTOPT="$OCAMLLEXDOTOPT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OCAMLLEXDOTOPT=$ac_cv_path_OCAMLLEXDOTOPT +if test -n "$OCAMLLEXDOTOPT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLLEXDOTOPT" >&5 +$as_echo "$OCAMLLEXDOTOPT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OCAMLLEXDOTOPT"; then + ac_pt_OCAMLLEXDOTOPT=$OCAMLLEXDOTOPT + # Extract the first word of "ocamllex.opt", so it can be a program name with args. +set dummy ocamllex.opt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLLEXDOTOPT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OCAMLLEXDOTOPT in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$ac_pt_OCAMLLEXDOTOPT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OCAMLLEXDOTOPT=$ac_cv_path_ac_pt_OCAMLLEXDOTOPT +if test -n "$ac_pt_OCAMLLEXDOTOPT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLLEXDOTOPT" >&5 +$as_echo "$ac_pt_OCAMLLEXDOTOPT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OCAMLLEXDOTOPT" = x; then + OCAMLLEXDOTOPT="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLLEXDOTOPT=$ac_pt_OCAMLLEXDOTOPT + fi +else + OCAMLLEXDOTOPT="$ac_cv_path_OCAMLLEXDOTOPT" +fi + + if test "$OCAMLLEXDOTOPT" != "no"; then + OCAMLLEX=$OCAMLLEXDOTOPT + fi + fi + + + +elif test "x$OCAMLPROF" = xocamlyacc -a "xOCAMLPROF" = xOCAMLYACC; then : + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ocamlyacc", so it can be a program name with args. +set dummy ${ac_tool_prefix}ocamlyacc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLYACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OCAMLYACC in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLYACC="$OCAMLYACC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OCAMLYACC=$ac_cv_path_OCAMLYACC +if test -n "$OCAMLYACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLYACC" >&5 +$as_echo "$OCAMLYACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OCAMLYACC"; then + ac_pt_OCAMLYACC=$OCAMLYACC + # Extract the first word of "ocamlyacc", so it can be a program name with args. +set dummy ocamlyacc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLYACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OCAMLYACC in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLYACC="$ac_pt_OCAMLYACC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OCAMLYACC=$ac_cv_path_ac_pt_OCAMLYACC +if test -n "$ac_pt_OCAMLYACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLYACC" >&5 +$as_echo "$ac_pt_OCAMLYACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OCAMLYACC" = x; then + OCAMLYACC="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLYACC=$ac_pt_OCAMLYACC + fi +else + OCAMLYACC="$ac_cv_path_OCAMLYACC" +fi + + + + +else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}[$]OCAMLPROF", so it can be a program name with args. +set dummy ${ac_tool_prefix}$OCAMLPROF; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLPROF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OCAMLPROF in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLPROF="$OCAMLPROF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLPROF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OCAMLPROF=$ac_cv_path_OCAMLPROF +if test -n "$OCAMLPROF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLPROF" >&5 +$as_echo "$OCAMLPROF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OCAMLPROF"; then + ac_pt_OCAMLPROF=$OCAMLPROF + # Extract the first word of "[$]OCAMLPROF", so it can be a program name with args. +set dummy $OCAMLPROF; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLPROF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OCAMLPROF in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLPROF="$ac_pt_OCAMLPROF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLPROF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OCAMLPROF=$ac_cv_path_ac_pt_OCAMLPROF +if test -n "$ac_pt_OCAMLPROF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLPROF" >&5 +$as_echo "$ac_pt_OCAMLPROF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OCAMLPROF" = x; then + OCAMLPROF="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLPROF=$ac_pt_OCAMLPROF + fi +else + OCAMLPROF="$ac_cv_path_OCAMLPROF" +fi + + +fi + + +fi + + if test -z "$OCAMLPROF" -o "x$OCAMLPROF" = xno; then : + if test "x$with_OCAMLPROF" = xyes; then : + as_fn_error $? "--with=ocamlprof is given explicitly but not found" "$LINENO" 5 + +fi + + if test -n ""; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: ocamlprof not found. Trying substitute ." >&5 +$as_echo "$as_me: ocamlprof not found. Trying substitute ." >&6;} + OCAMLPROF="" + + if test "xocamlprof" = xpkg-config -a "xOCAMLPROF" = xPKG_CONFIG; then : + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +elif test "xocamlprof" = xocamllex -a "xOCAMLPROF" = xOCAMLLEX; then : + # checking for ocamllex + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ocamllex", so it can be a program name with args. +set dummy ${ac_tool_prefix}ocamllex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLLEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OCAMLLEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLLEX="$OCAMLLEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OCAMLLEX=$ac_cv_path_OCAMLLEX +if test -n "$OCAMLLEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLLEX" >&5 +$as_echo "$OCAMLLEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OCAMLLEX"; then + ac_pt_OCAMLLEX=$OCAMLLEX + # Extract the first word of "ocamllex", so it can be a program name with args. +set dummy ocamllex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLLEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OCAMLLEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLLEX="$ac_pt_OCAMLLEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OCAMLLEX=$ac_cv_path_ac_pt_OCAMLLEX +if test -n "$ac_pt_OCAMLLEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLLEX" >&5 +$as_echo "$ac_pt_OCAMLLEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OCAMLLEX" = x; then + OCAMLLEX="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLLEX=$ac_pt_OCAMLLEX + fi +else + OCAMLLEX="$ac_cv_path_OCAMLLEX" +fi + + if test "$OCAMLLEX" != "no"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ocamllex.opt", so it can be a program name with args. +set dummy ${ac_tool_prefix}ocamllex.opt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLLEXDOTOPT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OCAMLLEXDOTOPT in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLLEXDOTOPT="$OCAMLLEXDOTOPT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OCAMLLEXDOTOPT=$ac_cv_path_OCAMLLEXDOTOPT +if test -n "$OCAMLLEXDOTOPT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLLEXDOTOPT" >&5 +$as_echo "$OCAMLLEXDOTOPT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OCAMLLEXDOTOPT"; then + ac_pt_OCAMLLEXDOTOPT=$OCAMLLEXDOTOPT + # Extract the first word of "ocamllex.opt", so it can be a program name with args. +set dummy ocamllex.opt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLLEXDOTOPT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OCAMLLEXDOTOPT in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$ac_pt_OCAMLLEXDOTOPT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OCAMLLEXDOTOPT=$ac_cv_path_ac_pt_OCAMLLEXDOTOPT +if test -n "$ac_pt_OCAMLLEXDOTOPT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLLEXDOTOPT" >&5 +$as_echo "$ac_pt_OCAMLLEXDOTOPT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OCAMLLEXDOTOPT" = x; then + OCAMLLEXDOTOPT="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLLEXDOTOPT=$ac_pt_OCAMLLEXDOTOPT + fi +else + OCAMLLEXDOTOPT="$ac_cv_path_OCAMLLEXDOTOPT" +fi + + if test "$OCAMLLEXDOTOPT" != "no"; then + OCAMLLEX=$OCAMLLEXDOTOPT + fi + fi + + + +elif test "xocamlprof" = xocamlyacc -a "xOCAMLPROF" = xOCAMLYACC; then : + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ocamlyacc", so it can be a program name with args. +set dummy ${ac_tool_prefix}ocamlyacc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLYACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OCAMLYACC in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLYACC="$OCAMLYACC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OCAMLYACC=$ac_cv_path_OCAMLYACC +if test -n "$OCAMLYACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLYACC" >&5 +$as_echo "$OCAMLYACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OCAMLYACC"; then + ac_pt_OCAMLYACC=$OCAMLYACC + # Extract the first word of "ocamlyacc", so it can be a program name with args. +set dummy ocamlyacc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLYACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OCAMLYACC in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLYACC="$ac_pt_OCAMLYACC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OCAMLYACC=$ac_cv_path_ac_pt_OCAMLYACC +if test -n "$ac_pt_OCAMLYACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLYACC" >&5 +$as_echo "$ac_pt_OCAMLYACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OCAMLYACC" = x; then + OCAMLYACC="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLYACC=$ac_pt_OCAMLYACC + fi +else + OCAMLYACC="$ac_cv_path_OCAMLYACC" +fi + + + + +else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ocamlprof", so it can be a program name with args. +set dummy ${ac_tool_prefix}ocamlprof; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OCAMLPROF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OCAMLPROF in + [\\/]* | ?:[\\/]*) + ac_cv_path_OCAMLPROF="$OCAMLPROF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OCAMLPROF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OCAMLPROF=$ac_cv_path_OCAMLPROF +if test -n "$OCAMLPROF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCAMLPROF" >&5 +$as_echo "$OCAMLPROF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OCAMLPROF"; then + ac_pt_OCAMLPROF=$OCAMLPROF + # Extract the first word of "ocamlprof", so it can be a program name with args. +set dummy ocamlprof; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_OCAMLPROF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OCAMLPROF in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OCAMLPROF="$ac_pt_OCAMLPROF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_OCAMLPROF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - -# Check whether --with-runtime-camlp4 was given. -if test "${with_runtime_camlp4+set}" = set; then : - withval=$with_runtime_camlp4; + ;; +esac +fi +ac_pt_OCAMLPROF=$ac_cv_path_ac_pt_OCAMLPROF +if test -n "$ac_pt_OCAMLPROF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OCAMLPROF" >&5 +$as_echo "$ac_pt_OCAMLPROF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + if test "x$ac_pt_OCAMLPROF" = x; then + OCAMLPROF="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OCAMLPROF=$ac_pt_OCAMLPROF + fi +else + OCAMLPROF="$ac_cv_path_OCAMLPROF" +fi - if test -z "$RUNTIME_CAMLP4_CMD"; then : - if test "x$with_runtime_camlp4" = xno; then : - RUNTIME_CAMLP4_CMD=$CAMLP4 +fi -elif test -n "$with_runtime_camlp4" -a "x$with_runtime_camlp4" != xyes; then : - RUNTIME_CAMLP4_CMD="$with_runtime_camlp4" + SUBSTITUTED_OCAMLPROF=yes + + +fi + +fi + + if test -z "$OCAMLPROF"; then : + OCAMLPROF=no + +fi + + +if test "x$OCAMLLEX" = xno; then : + as_fn_error $? "the OCaml Lexer needs to be installed (the ocamllex command). It should be part of your OCaml distribution." "$LINENO" 5 + +fi + +if test "x$OCAMLYACC" = xno; then : + as_fn_error $? "The OCaml parser generated needs to be installed (the ocamlyacc command). It should be part of your OCaml distribution." "$LINENO" 5 + +fi + +if test "x$OCAMLFIND" = xno; then : + as_fn_error $? "A suitable OCaml findlib (the ocamlfind command) could not be found." "$LINENO" 5 + +fi + + + +# Check whether --with-runtime-ocamlfind was given. +if test "${with_runtime_ocamlfind+set}" = set; then : + withval=$with_runtime_ocamlfind; +fi + + + if test -z "$RUNTIME_OCAMLFIND_CMD"; then : + if test "x$with_runtime_ocamlfind" = xno; then : + RUNTIME_OCAMLFIND_CMD=$OCAMLFIND + + +elif test -n "$with_runtime_ocamlfind" -a "x$with_runtime_ocamlfind" != xyes; then : + RUNTIME_OCAMLFIND_CMD="$with_runtime_ocamlfind" else - RUNTIME_CAMLP4_CMD="camlp4" + RUNTIME_OCAMLFIND_CMD="ocamlfind" fi @@ -10164,23 +11170,23 @@ fi -# Check whether --with-runtime-camlp4o was given. -if test "${with_runtime_camlp4o+set}" = set; then : - withval=$with_runtime_camlp4o; +# Check whether --with-runtime-ocamlc was given. +if test "${with_runtime_ocamlc+set}" = set; then : + withval=$with_runtime_ocamlc; fi - if test -z "$RUNTIME_CAMLP4O_CMD"; then : - if test "x$with_runtime_camlp4o" = xno; then : - RUNTIME_CAMLP4O_CMD=$CAMLP4O + if test -z "$RUNTIME_OCAMLC_CMD"; then : + if test "x$with_runtime_ocamlc" = xno; then : + RUNTIME_OCAMLC_CMD=$OCAMLC -elif test -n "$with_runtime_camlp4o" -a "x$with_runtime_camlp4o" != xyes; then : - RUNTIME_CAMLP4O_CMD="$with_runtime_camlp4o" +elif test -n "$with_runtime_ocamlc" -a "x$with_runtime_ocamlc" != xyes; then : + RUNTIME_OCAMLC_CMD="$with_runtime_ocamlc" else - RUNTIME_CAMLP4O_CMD="camlp4o" + RUNTIME_OCAMLC_CMD="ocamlc" fi @@ -10188,115 +11194,117 @@ fi fi -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. -_ACEOF +# Check whether --with-runtime-ocamlopt was given. +if test "${with_runtime_ocamlopt+set}" = set; then : + withval=$with_runtime_ocamlopt; +fi + + + if test -z "$RUNTIME_OCAMLOPT_CMD"; then : + if test "x$with_runtime_ocamlopt" = xno; then : + RUNTIME_OCAMLOPT_CMD=$OCAMLOPT + + +elif test -n "$with_runtime_ocamlopt" -a "x$with_runtime_ocamlopt" != xyes; then : + RUNTIME_OCAMLOPT_CMD="$with_runtime_ocamlopt" + + +else + RUNTIME_OCAMLOPT_CMD="ocamlopt" -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi fi -rm -f confcache +fi + + + +# Check whether --with-runtime-ocamldep was given. +if test "${with_runtime_ocamldep+set}" = set; then : + withval=$with_runtime_ocamldep; +fi + + + if test -z "$RUNTIME_OCAMLDEP_CMD"; then : + if test "x$with_runtime_ocamldep" = xno; then : + RUNTIME_OCAMLDEP_CMD=$OCAMLDEP + + +elif test -n "$with_runtime_ocamldep" -a "x$with_runtime_ocamldep" != xyes; then : + RUNTIME_OCAMLDEP_CMD="$with_runtime_ocamldep" + + +else + RUNTIME_OCAMLDEP_CMD="ocamldep" + + +fi + +fi + + + +# Check whether --with-runtime-camlp4 was given. +if test "${with_runtime_camlp4+set}" = set; then : + withval=$with_runtime_camlp4; +fi + + + if test -z "$RUNTIME_CAMLP4_CMD"; then : + if test "x$with_runtime_camlp4" = xno; then : + RUNTIME_CAMLP4_CMD=$CAMLP4 + + +elif test -n "$with_runtime_camlp4" -a "x$with_runtime_camlp4" != xyes; then : + RUNTIME_CAMLP4_CMD="$with_runtime_camlp4" + + +else + RUNTIME_CAMLP4_CMD="camlp4" + + +fi + +fi + + + +# Check whether --with-runtime-camlp4o was given. +if test "${with_runtime_camlp4o+set}" = set; then : + withval=$with_runtime_camlp4o; +fi + + + if test -z "$RUNTIME_CAMLP4O_CMD"; then : + if test "x$with_runtime_camlp4o" = xno; then : + RUNTIME_CAMLP4O_CMD=$CAMLP4O + + +elif test -n "$with_runtime_camlp4o" -a "x$with_runtime_camlp4o" != xyes; then : + RUNTIME_CAMLP4O_CMD="$with_runtime_camlp4o" -{ $as_echo "$as_me:${as_lineno-$LINENO}: verifying basic ocaml modules" >&5 -$as_echo "$as_me: verifying basic ocaml modules" >&6;} +else + RUNTIME_CAMLP4O_CMD="camlp4o" - COCCI_OCAML_EXTERNAL="$COCCI_SRCDIR/bundles" +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: coccinelle may use external ocaml libraries in $COCCI_OCAML_EXTERNAL" >&5 -$as_echo "$as_me: coccinelle may use external ocaml libraries in $COCCI_OCAML_EXTERNAL" >&6;} +fi - FEATURE_sexplib=0 - LOCALLIB_sexplib=0 - FLAGS_sexplib= - MODULES_sexplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: verifying basic ocaml modules" >&5 +$as_echo "$as_me: verifying basic ocaml modules" >&6;} + - MODULESOPT_sexplib= + COCCI_OCAML_EXTERNAL="$COCCI_SRCDIR/bundles" - PATH_sexplib= + { $as_echo "$as_me:${as_lineno-$LINENO}: coccinelle may use external ocaml libraries in $COCCI_OCAML_EXTERNAL" >&5 +$as_echo "$as_me: coccinelle may use external ocaml libraries in $COCCI_OCAML_EXTERNAL" >&6;} FEATURE_menhirLib=0 @@ -10312,19 +11320,6 @@ $as_echo "$as_me: coccinelle may use external ocaml libraries in $COCCI_OCAML_EX PATH_menhirLib= - FEATURE_extlib=0 - - LOCALLIB_extlib=0 - - FLAGS_extlib= - - MODULES_extlib= - - MODULESOPT_extlib= - - PATH_extlib= - - FEATURE_dynlink=0 LOCALLIB_dynlink=0 @@ -10521,41 +11516,6 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCaml findlib package threads" >&5 -$as_echo_n "checking for OCaml findlib package threads... " >&6; } - - unset found - unset pkg - found=no - for pkg in threads ; do - if $OCAMLFIND query $pkg >/dev/null 2>/dev/null; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 -$as_echo "found" >&6; } - OCAML_PKG_threads=$pkg - found=yes - break - fi - done - if test "$found" = "no" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } - OCAML_PKG_threads=no - fi - - - - if test "x$OCAML_PKG_threads" != xno; then : - PATH_threads=`$OCAMLFIND query threads 2>/dev/null` - - -fi - - if test "x$OCAML_PKG_threads" = xno; then : - as_fn_error $? "package threads is required. It should be part of your ocaml installation." "$LINENO" 5 - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: configuring package dynlink" >&5 $as_echo "$as_me: configuring package dynlink" >&6;} # Check whether --enable-dynlink was given. @@ -10764,311 +11724,65 @@ fi if test "x$enable_camlp4" != xno; then : FEATURE_camlp4=1 - FLAGS_camlp4='$(FLAGS_camlp4)' - - OPTFLAGS_camlp4='$(OPTFLAGS_camlp4)' - - - if test "x$enable_camlp4" = xlocal; then : - LOCALLIB_camlp4=1 - - MODULES_camlp4='$(LOCAL_camlp4)' - - MODULESOPT_camlp4='$(LOCALOPT_camlp4)' - - - if test -f "$PATH_camlp4/Makefile"; then : - MAKE_camlp4=$PATH_camlp4 - - -else - MAKE_camlp4= - - -fi - -else - MODULES_camlp4='$(GLOBAL_camlp4)' - - MODULESOPT_camlp4='$(GLOBALOPT_camlp4)' - - -fi - -fi - - if test "x$enable_camlp4" = xno; then : - as_fn_error $? "OCaml package camlp4 is required. Please make sure it is available." "$LINENO" 5 - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: configuring package sexplib" >&5 -$as_echo "$as_me: configuring package sexplib" >&6;} - # Check whether --enable-sexplib was given. -if test "${enable_sexplib+set}" = set; then : - enableval=$enable_sexplib; -fi - - - if test "x$enable_sexplib" != xno; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCaml findlib package sexplib" >&5 -$as_echo_n "checking for OCaml findlib package sexplib... " >&6; } - - unset found - unset pkg - found=no - for pkg in sexplib ; do - if $OCAMLFIND query $pkg >/dev/null 2>/dev/null; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 -$as_echo "found" >&6; } - OCAML_PKG_sexplib=$pkg - found=yes - break - fi - done - if test "$found" = "no" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } - OCAML_PKG_sexplib=no - fi - - - - if test "x$OCAML_PKG_sexplib" != xno; then : - PATH_sexplib=`$OCAMLFIND query sexplib 2>/dev/null` - - -fi - - GLOBAL_sexplib=$OCAML_PKG_sexplib - - - if test "x$GLOBAL_sexplib" != xno; then : - enable_sexplib=yes - - -else - if test "x$enable_sexplib" = xyes; then : - as_fn_error $? "OCaml package sexplib is not available but requested explicitly" "$LINENO" 5 - -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: OCaml package sexplib is not available" >&5 -$as_echo "$as_me: OCaml package sexplib is not available" >&6;} - enable_sexplib=no - - -fi - -fi - - if test "x$enable_sexplib" = xno; then : - { pkgdir=; unset pkgdir;} - pkgdir="$COCCI_OCAML_EXTERNAL/sexplib/" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a bundled substitute of sexplib" >&5 -$as_echo_n "checking for a bundled substitute of sexplib... " >&6; } - if test -d "$pkgdir"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: using bundled substitute for sexplib in $pkgdir" >&5 -$as_echo "$as_me: using bundled substitute for sexplib in $pkgdir" >&6;} - enable_sexplib=local - - PATH_sexplib="$pkgdir" - - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not available" >&5 -$as_echo "not available" >&6; } -fi - -fi - - if test "x$enable_sexplib" != xno; then : - FEATURE_sexplib=1 - - FLAGS_sexplib='$(FLAGS_sexplib)' - - OPTFLAGS_sexplib='$(OPTFLAGS_sexplib)' - - - if test "x$enable_sexplib" = xlocal; then : - LOCALLIB_sexplib=1 - - MODULES_sexplib='$(LOCAL_sexplib)' - - MODULESOPT_sexplib='$(LOCALOPT_sexplib)' - - - if test -f "$PATH_sexplib/Makefile"; then : - MAKE_sexplib=$PATH_sexplib - - -else - MAKE_sexplib= - - -fi - -else - MODULES_sexplib='$(GLOBAL_sexplib)' - - MODULESOPT_sexplib='$(GLOBALOPT_sexplib)' - - -fi - -fi - - if test "x$enable_sexplib" = xno; then : - as_fn_error $? "OCaml package sexplib is required. Please make sure it is available." "$LINENO" 5 - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: configuring package menhirLib" >&5 -$as_echo "$as_me: configuring package menhirLib" >&6;} - # Check whether --enable-menhirLib was given. -if test "${enable_menhirLib+set}" = set; then : - enableval=$enable_menhirLib; -fi - - - if test "x$enable_menhirLib" != xno; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCaml findlib package menhirLib" >&5 -$as_echo_n "checking for OCaml findlib package menhirLib... " >&6; } - - unset found - unset pkg - found=no - for pkg in menhirLib ; do - if $OCAMLFIND query $pkg >/dev/null 2>/dev/null; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 -$as_echo "found" >&6; } - OCAML_PKG_menhirLib=$pkg - found=yes - break - fi - done - if test "$found" = "no" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } - OCAML_PKG_menhirLib=no - fi - - - - if test "x$OCAML_PKG_menhirLib" != xno; then : - PATH_menhirLib=`$OCAMLFIND query menhirLib 2>/dev/null` - - -fi - - GLOBAL_menhirLib=$OCAML_PKG_menhirLib - - - if test "x$GLOBAL_menhirLib" != xno; then : - enable_menhirLib=yes - - -else - if test "x$enable_menhirLib" = xyes; then : - as_fn_error $? "OCaml package menhirLib is not available but requested explicitly" "$LINENO" 5 - -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: OCaml package menhirLib is not available" >&5 -$as_echo "$as_me: OCaml package menhirLib is not available" >&6;} - enable_menhirLib=no - - -fi - -fi - - if test "x$enable_menhirLib" = xno; then : - { pkgdir=; unset pkgdir;} - pkgdir="$COCCI_OCAML_EXTERNAL/menhirLib/" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a bundled substitute of menhirLib" >&5 -$as_echo_n "checking for a bundled substitute of menhirLib... " >&6; } - if test -d "$pkgdir"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: using bundled substitute for menhirLib in $pkgdir" >&5 -$as_echo "$as_me: using bundled substitute for menhirLib in $pkgdir" >&6;} - enable_menhirLib=local - - PATH_menhirLib="$pkgdir" - - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not available" >&5 -$as_echo "not available" >&6; } -fi - -fi - - if test "x$enable_menhirLib" != xno; then : - FEATURE_menhirLib=1 - - FLAGS_menhirLib='$(FLAGS_menhirLib)' + FLAGS_camlp4='$(FLAGS_camlp4)' - OPTFLAGS_menhirLib='$(OPTFLAGS_menhirLib)' + OPTFLAGS_camlp4='$(OPTFLAGS_camlp4)' - if test "x$enable_menhirLib" = xlocal; then : - LOCALLIB_menhirLib=1 + if test "x$enable_camlp4" = xlocal; then : + LOCALLIB_camlp4=1 - MODULES_menhirLib='$(LOCAL_menhirLib)' + MODULES_camlp4='$(LOCAL_camlp4)' - MODULESOPT_menhirLib='$(LOCALOPT_menhirLib)' + MODULESOPT_camlp4='$(LOCALOPT_camlp4)' - if test -f "$PATH_menhirLib/Makefile"; then : - MAKE_menhirLib=$PATH_menhirLib + if test -f "$PATH_camlp4/Makefile"; then : + MAKE_camlp4=$PATH_camlp4 else - MAKE_menhirLib= + MAKE_camlp4= fi else - MODULES_menhirLib='$(GLOBAL_menhirLib)' + MODULES_camlp4='$(GLOBAL_camlp4)' - MODULESOPT_menhirLib='$(GLOBALOPT_menhirLib)' + MODULESOPT_camlp4='$(GLOBALOPT_camlp4)' fi fi - if test "x$enable_menhirLib" = xno; then : - as_fn_error $? "OCaml package menhirLib is required. Please make sure it is available." "$LINENO" 5 + if test "x$enable_camlp4" = xno; then : + as_fn_error $? "OCaml package camlp4 is required. Please make sure it is available." "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: configuring package extlib" >&5 -$as_echo "$as_me: configuring package extlib" >&6;} - # Check whether --enable-extlib was given. -if test "${enable_extlib+set}" = set; then : - enableval=$enable_extlib; + { $as_echo "$as_me:${as_lineno-$LINENO}: configuring package menhirLib" >&5 +$as_echo "$as_me: configuring package menhirLib" >&6;} + # Check whether --enable-menhirLib was given. +if test "${enable_menhirLib+set}" = set; then : + enableval=$enable_menhirLib; fi - if test "x$enable_extlib" != xno; then : + if test "x$enable_menhirLib" != xno; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCaml findlib package extlib" >&5 -$as_echo_n "checking for OCaml findlib package extlib... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCaml findlib package menhirLib" >&5 +$as_echo_n "checking for OCaml findlib package menhirLib... " >&6; } unset found unset pkg found=no - for pkg in extlib ; do + for pkg in menhirLib ; do if $OCAMLFIND query $pkg >/dev/null 2>/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; } - OCAML_PKG_extlib=$pkg + OCAML_PKG_menhirLib=$pkg found=yes break fi @@ -11076,51 +11790,51 @@ $as_echo "found" >&6; } if test "$found" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - OCAML_PKG_extlib=no + OCAML_PKG_menhirLib=no fi - if test "x$OCAML_PKG_extlib" != xno; then : - PATH_extlib=`$OCAMLFIND query extlib 2>/dev/null` + if test "x$OCAML_PKG_menhirLib" != xno; then : + PATH_menhirLib=`$OCAMLFIND query menhirLib 2>/dev/null` fi - GLOBAL_extlib=$OCAML_PKG_extlib + GLOBAL_menhirLib=$OCAML_PKG_menhirLib - if test "x$GLOBAL_extlib" != xno; then : - enable_extlib=yes + if test "x$GLOBAL_menhirLib" != xno; then : + enable_menhirLib=yes else - if test "x$enable_extlib" = xyes; then : - as_fn_error $? "OCaml package extlib is not available but requested explicitly" "$LINENO" 5 + if test "x$enable_menhirLib" = xyes; then : + as_fn_error $? "OCaml package menhirLib is not available but requested explicitly" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: OCaml package extlib is not available" >&5 -$as_echo "$as_me: OCaml package extlib is not available" >&6;} - enable_extlib=no + { $as_echo "$as_me:${as_lineno-$LINENO}: OCaml package menhirLib is not available" >&5 +$as_echo "$as_me: OCaml package menhirLib is not available" >&6;} + enable_menhirLib=no fi fi - if test "x$enable_extlib" = xno; then : + if test "x$enable_menhirLib" = xno; then : { pkgdir=; unset pkgdir;} - pkgdir="$COCCI_OCAML_EXTERNAL/extlib/" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a bundled substitute of extlib" >&5 -$as_echo_n "checking for a bundled substitute of extlib... " >&6; } + pkgdir="$COCCI_OCAML_EXTERNAL/menhirLib/" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a bundled substitute of menhirLib" >&5 +$as_echo_n "checking for a bundled substitute of menhirLib... " >&6; } if test -d "$pkgdir"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: using bundled substitute for extlib in $pkgdir" >&5 -$as_echo "$as_me: using bundled substitute for extlib in $pkgdir" >&6;} - enable_extlib=local + { $as_echo "$as_me:${as_lineno-$LINENO}: using bundled substitute for menhirLib in $pkgdir" >&5 +$as_echo "$as_me: using bundled substitute for menhirLib in $pkgdir" >&6;} + enable_menhirLib=local - PATH_extlib="$pkgdir" + PATH_menhirLib="$pkgdir" else @@ -11130,134 +11844,49 @@ fi fi - if test "x$enable_extlib" != xno; then : - FEATURE_extlib=1 + if test "x$enable_menhirLib" != xno; then : + FEATURE_menhirLib=1 - FLAGS_extlib='$(FLAGS_extlib)' + FLAGS_menhirLib='$(FLAGS_menhirLib)' - OPTFLAGS_extlib='$(OPTFLAGS_extlib)' + OPTFLAGS_menhirLib='$(OPTFLAGS_menhirLib)' - if test "x$enable_extlib" = xlocal; then : - LOCALLIB_extlib=1 + if test "x$enable_menhirLib" = xlocal; then : + LOCALLIB_menhirLib=1 - MODULES_extlib='$(LOCAL_extlib)' + MODULES_menhirLib='$(LOCAL_menhirLib)' - MODULESOPT_extlib='$(LOCALOPT_extlib)' + MODULESOPT_menhirLib='$(LOCALOPT_menhirLib)' - if test -f "$PATH_extlib/Makefile"; then : - MAKE_extlib=$PATH_extlib + if test -f "$PATH_menhirLib/Makefile"; then : + MAKE_menhirLib=$PATH_menhirLib else - MAKE_extlib= + MAKE_menhirLib= fi else - MODULES_extlib='$(GLOBAL_extlib)' + MODULES_menhirLib='$(GLOBAL_menhirLib)' - MODULESOPT_extlib='$(GLOBALOPT_extlib)' + MODULESOPT_menhirLib='$(GLOBALOPT_menhirLib)' fi fi - if test "x$enable_extlib" = xno; then : - as_fn_error $? "OCaml package extlib is required. Please make sure it is available." "$LINENO" 5 + if test "x$enable_menhirLib" = xno; then : + as_fn_error $? "OCaml package menhirLib is required. Please make sure it is available." "$LINENO" 5 fi -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache @@ -11324,7 +11953,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11367,7 +11996,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11440,7 +12069,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11483,7 +12112,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11539,7 +12168,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11582,7 +12211,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11645,7 +12274,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11688,7 +12317,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11747,7 +12376,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MENHIR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11790,7 +12419,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_MENHIR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11866,7 +12495,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11909,7 +12538,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -11982,7 +12611,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12025,7 +12654,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12081,7 +12710,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12124,7 +12753,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12187,7 +12816,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12230,7 +12859,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12289,7 +12918,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MENHIR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12332,7 +12961,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_MENHIR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12564,7 +13193,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12607,7 +13236,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12680,7 +13309,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12723,7 +13352,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12779,7 +13408,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12822,7 +13451,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12885,7 +13514,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12928,7 +13557,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -12987,7 +13616,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13030,7 +13659,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13106,7 +13735,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13149,7 +13778,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13222,7 +13851,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13265,7 +13894,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13321,7 +13950,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13364,7 +13993,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13427,7 +14056,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13470,7 +14099,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13529,7 +14158,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13572,7 +14201,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -13645,7 +14274,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14286,91 +14915,6 @@ else fi -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache if test "$prefix" = "NONE"; then : @@ -14461,7 +15005,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14504,7 +15048,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14577,7 +15121,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14620,7 +15164,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14676,7 +15220,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14719,7 +15263,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14782,7 +15326,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14825,7 +15369,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14884,7 +15428,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -14927,7 +15471,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15003,7 +15547,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15046,7 +15590,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15119,7 +15663,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15162,7 +15706,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15218,7 +15762,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15261,7 +15805,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLLEXDOTOPT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15324,7 +15868,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15367,7 +15911,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15426,7 +15970,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15469,7 +16013,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -15535,6 +16079,7 @@ $as_echo "$as_me: choosing the development Makefile configuration because the re fi + if test "x$enable_release" = xyes; then : MAKETARGET_ALL=all-release @@ -15543,6 +16088,21 @@ elif test "x$enable_release" = xno; then : MAKETARGET_ALL=all-dev +elif test "x$enable_release" = xprofile; then : + if test -z "$OCAMLPROF" -o "x$OCAMLPROF" = xno; then : + as_fn_error $? "ocamlprof is required for profiling, but is absent." "$LINENO" 5 + +fi + + MAKETARGET_ALL=all-dev + + OCAMLC="$COCCI_SRCDIR/setup/wrapper-ocamlcp.sh \"$OCAMLCORIG\" \"$OCAMLPROF\"" + + MODULES_profiling=profiling.cmo + + { $as_echo "$as_me:${as_lineno-$LINENO}: configured coccinelle for profiling" >&5 +$as_echo "$as_me: configured coccinelle for profiling" >&6;} + else MAKETARGET_ALL="$enable_release" @@ -16066,16 +16626,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -16135,28 +16695,16 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -16177,8 +16725,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by coccinelle $as_me 1.0.0-rc12, which was -generated by GNU Autoconf 2.68. Invocation command line was +This file was extended by coccinelle $as_me 1.0.0-rc14, which was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -16231,11 +16779,11 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -coccinelle config.status 1.0.0-rc12 -configured by $0, generated by GNU Autoconf 2.68, +coccinelle config.status 1.0.0-rc14 +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -16314,7 +16862,7 @@ fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' @@ -16823,7 +17371,7 @@ Summary configure flags: $CONFIGURE_FLAGS findlib: $OCAMLFIND (an actual version is strongly recommended) menhir: $MENHIR (should be an optional tool) -menhirLib module: $enable_mehir (for local package use --disable-menhirLib) +menhirLib module: $enable_menhirLib (for local package use --disable-menhirLib) ocaml scripting: $enable_ocaml (overridable with --enable-ocaml) python scripting: $enable_python (overridable with --enable-python) diff --git a/configure.ac b/configure.ac index ca7ceea..7c221e2 100644 --- a/configure.ac +++ b/configure.ac @@ -51,6 +51,7 @@ dnl ocaml compile AC_PROG_OCAML AC_CHECK_OCAMLVERSION([OCAMLATLEAST310],[3.10]) AC_CHECK_OCAMLVERSION([OCAMLATLEAST311],[3.11]) +AC_SUBST([OCAMLCORIG],["$OCAMLC"]) AS_IF([test "x$OCAMLC" = xno -o "x$OCAMLDEP" = xno -o "x$OCAMLDOC" = xno -o "x$OCAMLMKLIB" = xno], [dnl @@ -63,6 +64,7 @@ AC_PROG_CAMLP4 AC_COCCI_TOOL([OCAMLLEX],[ocamllex],[]) AC_COCCI_TOOL([OCAMLYACC],[ocamlyacc],[]) AC_COCCI_TOOL([OCAMLFIND],[ocamlfind],[$COCCI_SRCDIR/setup/fake-subst.sh ocamlfind]) +AC_COCCI_TOOL([OCAMLPROF],[ocamlprof],[]) dnl enforce ocaml tool requirements AS_IF([test "x$OCAMLLEX" = xno], @@ -88,7 +90,7 @@ AC_COCCI_RUNTIME_CMD([OCAMLDEP],[ocamldep]) AC_COCCI_RUNTIME_CMD([CAMLP4],[camlp4]) AC_COCCI_RUNTIME_CMD([CAMLP4O],[camlp4o]) -AC_CACHE_SAVE +dnl AC_CACHE_SAVE dnl @@ -104,9 +106,7 @@ dnl set some defaults dnl add a line for each package that is dnl configured via AC_CHECK_COCCI_EXTPKG dnl or AC_REQ_COCCI_EXTPKG -AC_COCCI_INIT_PKG_EMPTY([sexplib]) AC_COCCI_INIT_PKG_EMPTY([menhirLib]) -AC_COCCI_INIT_PKG_EMPTY([extlib]) AC_COCCI_INIT_PKG_EMPTY([dynlink]) AC_COCCI_INIT_PKG_EMPTY([pcre]) AC_COCCI_INIT_PKG_EMPTY([pycaml]) @@ -118,17 +118,14 @@ AC_REQ_COCCI_STDPKG([unix]) AC_REQ_COCCI_STDPKG([bigarray]) AC_REQ_COCCI_STDPKG([num]) AC_REQ_COCCI_STDPKG([str]) -AC_REQ_COCCI_STDPKG([threads]) dnl required modules (Some are available locally too) AC_REQ_COCCI_EXTPKG([dynlink]) AC_REQ_COCCI_EXTPKG([camlp4]) -AC_REQ_COCCI_EXTPKG([sexplib]) AC_REQ_COCCI_EXTPKG([menhirLib]) -AC_REQ_COCCI_EXTPKG([extlib]) -AC_CACHE_SAVE +dnl AC_CACHE_SAVE dnl @@ -347,7 +344,7 @@ AS_IF([test "x$enable_pcre_syntax" != xno], ]) -AC_CACHE_SAVE +dnl AC_CACHE_SAVE dnl obtain the value of $prefix @@ -391,19 +388,32 @@ AC_COCCI_TOOL([PDFLATEX],[pdflatex],[$COCCI_SRCDIR/setup/fake-pdflatex.sh pdflat dnl determine release configuration -AC_ARG_ENABLE([release], [AS_HELP_STRING([--enable-release], [build with a release configuration (yes,no, default: no)])]) +AC_ARG_ENABLE([release], [AS_HELP_STRING([--enable-release], [build with a release configuration (yes,no,profile default: no)])]) AS_IF([test -z "$enable_release"], [dnl AC_MSG_NOTICE([choosing the development Makefile configuration because the release configuration is not explicitly requested.]) AC_SUBST([enable_release], [no]) ]) +AC_SUBST([MODULES_profiling],[]) AS_IF([test "x$enable_release" = xyes], [dnl set the default target to 'release' when enable_release is given AC_SUBST([MAKETARGET_ALL], [all-release]) ], [test "x$enable_release" = xno], [dnl otherwise, set the default target to 'dev' AC_SUBST([MAKETARGET_ALL], [all-dev]) +], [test "x$enable_release" = xprofile], +[dnl selected profiling + AS_IF([test -z "$OCAMLPROF" -o "x$OCAMLPROF" = xno], + [dnl + AC_MSG_ERROR([ocamlprof is required for profiling, but is absent.]) + ]) + + dnl configuration-time overrides for profiling + AC_SUBST([MAKETARGET_ALL], [all-dev]) + AC_SUBST([OCAMLC], ["$COCCI_SRCDIR/setup/wrapper-ocamlcp.sh \"$OCAMLCORIG\" \"$OCAMLPROF\""]) + AC_SUBST([MODULES_profiling], [profiling.cmo]) + AC_MSG_NOTICE([configured coccinelle for profiling]) ], [dnl custom target given AC_SUBST([MAKETARGET_ALL], ["$enable_release"]) @@ -491,7 +501,7 @@ Summary configure flags: $CONFIGURE_FLAGS findlib: $OCAMLFIND (an actual version is strongly recommended) menhir: $MENHIR (should be an optional tool) -menhirLib module: $enable_mehir (for local package use --disable-menhirLib) +menhirLib module: $enable_menhirLib (for local package use --disable-menhirLib) ocaml scripting: $enable_ocaml (overridable with --enable-ocaml) python scripting: $enable_python (overridable with --enable-python) diff --git a/ctl/Makefile b/ctl/Makefile index 6120e3c..c67d3ab 100644 --- a/ctl/Makefile +++ b/ctl/Makefile @@ -39,10 +39,10 @@ INCLUDES=-I ../commons -I ../commons/ocamlextra -I ../globals #The Caml compilers. #for warning: -w A #for profiling: -p -inline 0 with OCAMLOPT -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDES) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) diff --git a/demos/external_ana.c b/demos/external_ana.c new file mode 100644 index 0000000..b24bc0a --- /dev/null +++ b/demos/external_ana.c @@ -0,0 +1,26 @@ +/* An indirect way to compute zero, for an external analysis to find out. */ + +#include + +int sum(const int x, const int y) { + return x + y; +} + +int add4(const int z) { + return sum(z, 1) + 3; +} + +int main() { + int x = add4(1) - 5; /* should be zero */ + + if (x) { + printf("Dead code."); + } + + int y = getchar() < 0; /* can happen */ + if (y) { + printf("Not dead code."); + } + + return 0; +} diff --git a/demos/external_ana.cocci b/demos/external_ana.cocci new file mode 100644 index 0000000..3b8d371 --- /dev/null +++ b/demos/external_ana.cocci @@ -0,0 +1,54 @@ +/* +Given a file with data about the integer values that variables +x can take at certain positions, this patch identifies some +then-branches of if(x) ... statements. + +Run this example from the coccinelle main directory using: + + ./scripts/spatch --sp-file demos/external_ana.cocci demos/external_ana.c \ + --external-analysis-file demos/external_ana.data + +The analysis input was produced with a custom-made plugin for +frama-c that produced the external_ana.data file using the +commandline: + + frama-c -load-module ValueExport.cmxs -value-export \ + -export-file ./external_ana.data external_ana.c + +*/ + +@r@ +idexpression x; +position p, q; +statement S; +@@ + +if@q (x@p) S + + +@script:ocaml@ +x << r.x; +p << r.p; +@@ + +let p1 = Coccilib.basename_pos (List.hd p) in +Printf.printf "considering %s at position %s:(%d,%d)-(%d,%d):\n" + x p1.Coccilib.file p1.Coccilib.line p1.Coccilib.col + p1.Coccilib.line_end p1.Coccilib.col_end; + +let rs = Coccilib.Ana.find p1 in +Printf.printf " results: %d\n" (List.length rs); +List.iter (fun r -> Printf.printf " value: %s\n" (Coccilib.Ana.show_result r)) rs; + +let is_z = Coccilib.Ana.has_only_nul p1 in +Printf.printf " Always zero: %B\n" is_z; + +Coccilib.include_match is_z + + +@@ +position r.q; +statement S; +@@ + +- if@q (...) S diff --git a/demos/external_ana.data b/demos/external_ana.data new file mode 100644 index 0000000..79a35a2 --- /dev/null +++ b/demos/external_ana.data @@ -0,0 +1,11 @@ +external_ana.c;6;9;6;10;E;1;1 +external_ana.c;6;13;6;14;E;1;1 +external_ana.c;6;2;6;15;E;1;2 +external_ana.c;10;13;10;14;E;1;1 +external_ana.c;10;9;10;18;E;1;2 +external_ana.c;10;2;10;23;E;1;5 +external_ana.c;14;10;14;17;E;1;5 +external_ana.c;16;6;16;7;E;1;0 +external_ana.c;20;10;20;19;I;; +external_ana.c;21;6;21;7;E;2;0;1 +external_ana.c;25;2;25;11;E;1;0 diff --git a/docs/manual/main_grammar.pdf b/docs/manual/main_grammar.pdf index 14a0b048d42b0dfaf4f4d1df79e5899a3962d72d..157be13ca57f6bdfb7e3354b68bbf55ce0c17ea7 100644 GIT binary patch delta 43465 zcmV(#K;*ywkrkei6|mF?lhS%Af2|qYZsW%FeZNAF6l#sEYe|2bFF_!KBF2 z&BNnHHnq z#=uK{M}Xu)&P-IS%4Lo`>_ky9Rfx?_<*dwQ6uWiXof14bm}ctrFw)oA0(-+4_C{0= z0>`Kl#jC_T-t3a<5bEmTIMv6nJ~@3LX#ae3)WDKp&H9ha-V*tcOEwk=N=bh;_L3Zl2Lng{9Ihif6@}%)^@RV)Jldwwyz?Duvj=K|33AoyWUb5B> zM7-|0z~1?+ZBx4$0dQ^|^Ahu=tl-6ecnlmQsciuIy0HeC#E+*_>s=1OvHoQXY7D2$ z5CI#mnTTLkAbz040cwvYl4OTMI9x50+C}nPQ6@+4QoyUX7{%Bv#=3KcAn=oL+iQ45 zzG-l0-LyY*F43iAuE0hEsH1O(y4!*}QO-P1+~mcCePD=!q1coV3^}C$h=B@!qKFgP z_OKE#aH7cLiMtgf858gw4m4%}$9#!J3YMx17SEg>8`MZz%=Q94t$x&~5wQGdXvzBw z0#0Kj;+C6^NA1QaJjRp15l;?vuOqMJH5Z1#d#Pq7X$0SWILTK?<9k3SH! zEHZ!(@KSCo3zp{DG9X5uzcKB{{OuDKEyb;RD>>kWyi~VcO|1Ds)3rl?fa|D*>e>}@ z$x1Q1_-P!^@9*!MIc2l1J?HGv-UDrS-`DN%DMU6qjeWPK*Ak-Y;$6Z2Qoe!2tW4i%?4y zm>0$SJ&qRnmDq4XTWhQ%*!S0X7#k1khZ0yl=utPmJ;SZ1lh*`~Eb&=$oT{@&iUfZ1 zRlk|wDryH>qz{vYOBUPky9Tv*g!GcjlY0#(e+s?RO;Y~p$||mbh`2SOcY#~4d8E1S z>fAtTSZ_n1@sa8+Q5POdvz4be;ACQFp6b8|HgWj7*9(V{xBy%n+hMqI%BwRor+yjd zp*wPwtI00}MfwMy6bFj(WLrCGJ?-(~3Ee}u9Y;sjiDE~@CMkGO8ad)sKSy3z_&ShvDF_l-Twf7F*p zyp{4=LQgSwCa8OylGi+(1K)E>JsTTzQ7Rhl$~5Q#7J4s79IHqUIzouGOs9!~QamV7y{v zu4r48th_vpU4?xSg0hU!e^tC1_T_EZ7jsH?^cim$uO!6ze2#mO%o_G^Bv>5|J+=5S zjBESARM0N$%_Xgn{*i8>rln0|$1ui!d{D-n=NU2yG_(Hwd+n(u{(@@@mT~N=AsH7+ z#21_EOMiKI_g{5Sv04gcZe(+Ga%Ev{3T19&Z(?c+I5r?KAa7!7gB%fu91#JB91#My z91#N#+cqn*yPeaE6kTJ8;cXCj$ zv68W2m!eiMGI0X@l{5b&CKj|e(sMMku@=&EG~xiL7#RYDj0^w_3;=p|cJ`md06`mn zTQ_?%6H`Y3nUaDEIVC04e@gx_0qDE^hvu)RgPDmnfaLFkvyr8Zt(B3r<6nsXYscS4 zMgT`sBY?4)r4c|-R!&V^Mif9MDx(AtHL^Cc*Rur3Iq6%P833fr42-NDjK~4THueC^ ze;)t_Hr9q_|CHuH^B0TX0iXwPur)G&F#GFfwW&O&>~KjmNI%)e+S^-I|lG~$>>=F{_Yuo6yTplW2tBV|MStaGP891KY9IEYZaq^ zr~7{Z6L-}6+ZKLnlfTr^(a`-{Xyzbd=4xapXXa>N3NY5Q{M)mC$(5`@4UOzA&8&_7 za{I5g0;uWf=>CgN(bUYq!ulT)nE$OZvNrs$75t^^U-{FDO9;pa%2NJs7VN(a<^B$W zqoSMb-$${{2meoq@^ge-rXwK=l84mezB$H**DO{H>dg{$JJqkI#RewEhc> zu(g4W;XkAE+fmQj@b9$!Pr*NG11Ed?za;-_0sO7{KhFP}dm|%PBZHr7%Qgm_f##_h zX^yq%Im44e8vVWWAj3hnB@K#&`M%XQJwBy|7Uu|wn=eD1R5)?gwFZCC`3=TaNY(f^)aZO2#r6GY75RUND@w;pGXJCMuvxaZo&Evu_?1- zpols3(7k_?&IuA7-E{3A8VtU`-kez-Dwi@_RH_jZlw91g-$*UD4#N~oF85TgWyeVita+Jagn?_AZC2S3_%pzvTDTVh!oEuzW2OO(r)R|=;}@t zX7+!FUEtN7Iq7edEZ&23YZz7&>%RO^Dhb6CEtBibl%#&~3AdC=2gl|9)}Hf4Yz<>h#sm%k{APe)S)$@vpkciR)wku zaCWFiU}zZEzvP7rTLH)DukQIseN1ga2)=&}`V`H0mQNo5IDFC)%Q5o*kOMTcKd2%I!Qb;=7OK2d{Xzx{XEXycRKU;)%-)yh0|z$D zm09-&ZLPU{ikGF%t$GzYykfFubkMPOHA7?Ci{y8^i`g*Y=`*K<;`t+AsE0uJy|>tx zCv44A1%?eYCZm;oCKaT4kKKACbR2(jw_ldC8mzu3(?%``w~*eOsx6_(MuS#PZ9Txr zZgXZxPqeA(vkkSdYI1hHE#4onCG^QyD_M9xb?Mh|vhduSrL1mRDR}yGj~5t(E-Tl4gat5@cd6=x&y8LM0c)-#K@J21 zy*VfsNeb{eGwf_H7HPoMc#Db;^0bU68AJFQh+ zv6lGbZ|0X_o*xq}ek{yKiQi?WVbN*sL~b20l}(ZD*Pk@Ip+U~f{DM@OjK#E9l5V_Y zC+kH$bKEq31NRi)`uNBMgJ@{Wgr_`xk+}AA0?*4JIeMsp+63>^pv5Pg1lLx2;rF%2 z$te8?!S9WY-lL#|Y!ZK<*7{C7DbqO6sMN-LVtYfO9NBqlio=GR)6c#s)5^Yoh}U}7 z1sl>#=bMy_C>Hmm`9Y0ykST=&Pq+x~CWOiS+MUNn?$j^dJtr=~cyv?uc|(4$c2kc4 z$Dz;X+!Q1i7FI~sPYq}YLpgB3-% zj?X4cx9{B!k=)9WPVl@bWAIKDGO&f>G@)HB5}X%|`L5WR}Fy;F#rEM9a#%`-Q$ zwrl|*=+#}TYT3o!^~_e?l zDQ19)VJZc3OLu?o^RT8BhNR+JZ3UeTUuH0<;Z7xRfx0Z{b%a#$WTlX5`1+T#S_|;;2Mdmuy zV*6^C z9wd`x0+A#V9^v!;hcU9C9_jSA{JnYLNsH;ykAQBSphud4s_C!5n4faM?8rGLMz-i_ zeWcrldIB1u7azGA)1Mt!VqxUliG+NGKkFoqMvMxJevaQbG^pS=9^&~IbEHdm5F`mK z<;s7$=CY^HF~@AmAgdp((*uYt<4K9NKZpoZECMf`a_I~v;f_30x+LJs?6WRhFw!4v z)@4O@zbsZCS>V!QMszALCSD-OB4A6|1C@@|9x7_E5BIP^++tXzobjo7t9r+=*og_v6nON&IO2gmuGE|hz-_syS4wE zC(@dVBMH8ReW_BI)YdZMY~p?)-r%A_Wxh8Kkihxl3xD=yvFR~(9EwY;kE$Ca?z6oO zx}yJV;Z6#mjPFm~p&7BY&T$#dl~l+a`s{FFnsI|vT^jTtS-BAVDc(fdG(?rMdFNbzXi~k*{}O1MnkI zm2PNNnlvZcV@w3B1TzWgz+otOYj!gINRxB1x|FL3zg|Q1mlO!-XB>5uU9ubywEmG2 z*s^W=7T^EL2Tp(@tQ;Pqbm?W*C}mq|ESv0qU4I8r>f7f&8gGcmngbXGc`Rr2$JP`Noz%pDazG9rhRSSzpNu(X=bL2wRH!;#!#3hPht zk*a97FEq;l9?V6pvsLa|Lx+FbE%vN{v?zw3{`I;_M^+Ls4S$%9CZq&_YT)b2grAM! zm#XlV%bU;~Iv_&QZkC;b)IsRB`R4sAq%D3*lPt0H4-{d|qkOs-R*1JfVm$nQ_kuiY zot{-W6si-*1@mgSI%z5LJGcj}{9pZ8DX&&jZjk&8_nyon;1s1%w}uYN)^5Ks~i<5b-$Js?~2jF@&u zO$hDd`U{ncEWU;qXwE#A1Tcb{9yn@XBJzZJBgx6Pc#jmt6HSV2(2V&9pIN*6Vz$d1 zK)K8h-oS&g-vxh%uUp=n6o0b8OxRC1>doX8>Y|LKVs|Xvf@2p6l3#9cF*TQX#MCD( z*Fw32-ViM%!snSwCWy>dgq%6+W?Ft<<`E9dF_Om72mVNm5$8_3^9xWkbSI-Z3fD?X4jZV9^?m!Mkbs_5UV zdtl^X#*^ff5PHfab%Zvut!H$MeCi+Cnc18_V3&o+=WJsIAq$|Q_I+J4@;?oX=gon7 zxiJXvul#?9%waXF1BQQ_uWqzq1mpRFH+RBfZ1uba(bbxl?@)$_(y&HB$&Lb75|UJJ z9X?s+YxTuY2^CkH9vt+>ZxA#LM=w)Tj{6nhjdGvFD|{3yUa{aq=FJ*5X(B(5i~GNi~ASvntn7T!S$;U* zYfpd1Yg?BhWXszu@w92F(KsYTNP}u7Y%TxEe4h#XD0z62bNK^dn0A<;u9*1he?TcU z8j)^L;f;MCc?ihBo5sTt58eE{ad>e%CD+cW4v6e%YesrLU@cxpcj-j!^UzTdqREtx!ka!1M&900!V@QOEVz0Yw zGql&W1FfxfZ|o%}bnMR+(+Jz}9oNIXMCN5+BDrZJtaJ#j_X)YvAJ}^9&w}EtU;+s{ zRNhx_9ed75v;nZmhQiZYHUs4t*f9Lc4Yf0Us=4RvLl(shyI?v zc&(Xko&`e&CnJH&zm|oDu56Oh0UAl`FS<6ko+IpjwWC**_tGKpaN;!{*YMU_?i0Kh z%FK@MgXC@N8~Evb@h4kJhpBg7jf*uhLU9>rT2KG>P}oUlR@33pST`O z2`Hm`;s(6ko2b2+sBCnwqCd}Xmr*Ln={33Z$ApOq4`>pcIk_o)oh3z$!nTQ z*0XyDZwU_-Dxpo5eil;N#i@@l!d5WBqk(OY(|m_qshD_#v%x>R(5s97+xI<=pqT8> zMBKVC&sXRfU7UHEsvn{Z;Oc+J+hw$Cf_1a|oL6_%tf8jAUiG1ngHw`92&HcDGp%CZ zj+d_Q!pa(@d5XD&T1aaY)j2QYT00o|qsdsCpnl)rpOy8trNj7V&=+JUZ}2t?L$#0q z?<*5kn^oTv8P@))d=FC+VmIGV4`b#+CV$0$+SRUV!e-P|`H=D*)7*csrw0V_>?huJ ztbiMCmXAQ0R=@iQkIEIw{xXRlg+aQULRQvwBrmz=vr9zpyfNODf>PrAgeP{~DRK}9 zevjWxVd~1E2=GEquR9a}P3=`6o*Q(eYb)z(h@eUe-w`?D_?Ch$v=02y^XFlmgX7Hm z%~f#(l)PC|@|MMY`rUu=)hg6tRFH%Ar>@5+Z5B3-X3&68{3?s&1xS2FBM34%Hx}Q< zEodW(EZ=L}SqcJ(++M_Pe1tg0l1vz5b~48^)7cqbo{PB3z{}cDBryEwu9!+#HdzZ8 zv7oj*R8E>OSb4!>P^mV9d;CghXJZz>S;|+~4RFDl1*BVZ9>;$d)Q%3HH)7u`2~Af# zR-*Oli4h8C`)783SgLKQ9BhLsaB&nx`O652nqvR=Zr@d+Kxq2BywNWU@f9#wp&Dp? z5&T_lK`o%~TWxnep2|Z!`+B_e<&MO@(uLgZ<>Zoc%`4u+_+AQR{~eoYvJFShF-n>N zXIA(Hr8meCnfHGli??!Xb~e6AUh29P#aG8X0bh7DyLvE_8D6M4tdMlv?6UZVcegY= zt9bf^@XXmux!_|1)iteI#pZyMKoRe~VUKNCHhIvIUI*yw#2xO8dNgGEy=!_VSBRbJ zmbou-pek(-vU9;q`2r%yje^f3AaWcczSVOSc(6cu{aBM@1t0Dy z_7EdB*%?c0T0vbVLY49tky_sS(qYo!yUq?BbM1eMKnF&4Mbf1(dl}w-7UGaEG-*$^ z-sW}H1Wm;1?Yn>{+m7-}M$W!(W+@MQqtt3vu=ZZ+)Y_zbC`QC|;I*;Z?U6EMEfp`; z>t+<5gc{>_w*r!4m|K_br418y<>2;HLRLCsx&R%vKh*?SR}x)aCbf2xyipn7Kj7@E zn0zjYqCli~(F|(K~lf0}5yqDZ>Ye@)7)6$38 zs4?HtlB_q#q(@bEHUZXijN<%h4p>p=w`U|mIrh}13b|RZ7>p%am#t&q**h2e<+Aib zV|93PJ8dh5mt?Yz)kal$hCp@QGUrQZ)m%0)VX|4A^Y-jSZqSs71er$!Dg|<7u5*9s zNN{CW(v8;+i-5#4f=lr@ctxh8g*!s^whgbkv?XtAoA1|(8K+VA9-BU9-RZfgMF+O~ zHqakr$W|nH#64B1k-68+jg1a=H>tLV%f$uo$X(uG%32&cWy{zdsMyN&nkKCj#iZGW zT$`qoD^$F*^tdK1^xgsZOR=bpqbz?5kXz-0Zi0CS_PluR%E&4QK`$L3Mmy5buQkdX zE;fQ_2sYyR`q_i*9S$ARxyZrh8bxrzU&N=j1VUZll{y`TPg9N<;M2-ZO%zQ(&gJnh z=A!2m2&*tsTh*{@odxJrAZ;U9^U$BUZF(NnYAG?Zb9^5 zZ!i)k@S*it$K!LjB^?)k$FfvYsQf&kX8a?>Lt zn>(c){{bf4%4I-WRlI+94li<$83y#}0Z-6AfW4GW%^FxtW> zlm6l9d3$2f0Et_kt7B*C&p^f+y*c+|w3LGH1CQGpOWxdMl$(EyreGcx?U)RK_zW7**Tys3 zC#na|Mi$1jz?C}FSJ3D@ z_BMP0gIWQqmMs-85MD!*xNf^P7O4Of`1k>4kah5Zl@RCYJPK^G5}{bdUJx#hc5zkk ze&FVBLl@p|J1re~JUrnK%s6izD4&1fx8)frEmZ? zEy;jv_CtSJ(lruyU8^78XQc>%Bcqrl@e29Fa|>PPOJIT2`=C!BpAvPEh5VPcZsaGiH%;Y+g|6N*B5T1h$?AsA3d(-*Cs8yyMX zEf^L?;-CWL5}ic_d6}QPEw@A<*U*|Mlpa;EXN`ZgC;N2T+9I5T6G>@5olFsGvBG5x z?g}yi;;~?zJhvu4hfl6#wHnCc(A&xWqy>fgJ}YnjLVb?d?RF7_C0;9MG6$-YF`J~| zfqUjdg5B3JUcUj48XMLG@$@!jSU|J)&V3=?Gz+?LP=zYH7$anl>&u;v#wW>FA$aC{ z+fRSy(=4N?J55dX35y*LiorKUC)MBbpUaz1nM>i(BmVZ)Mqh|@er&+bQeKi=WW-Br zBVf5oDSlCnim@E?aWduCg@U`?#Hn?J=FO{@HKx1Ai`5&#NRvHFP1T0Hbrg{`cvVP? z@;;LSqGs$WX0*@M{ ziM{YaKAc{VK_Ei}Npe8TD+x9@S(z}@0zB@nRNZ6Uy@f?>&I;F!PYfMC`Zqrsl9zvh zELuefZZ$D1!IVT4eO`Yau3x3`FG@!xXnJ^D=t`|#Wjd~gGJ64y`7Bup#(Oyf-00V$ zJj0H}=0MsLhkVQ<+3T*`G{X@WE19Uz9GuEmVSp1*7l5kX?Qy zkUr!;AD~xfGT4fI0RNU1;9m?{ju?Mb!x2ifc03)uCF)6UVDYs?bd0l>RCQ%sDAHbZ z-JH{qa^=DrNC|f^qWg&cZMtqXLuyjO;O?cGwr&4`7gfe2j1O9(=B4mZ=h&m|eie#B zmBCH8Ih6NyI4?L82zn;ARPt0wR(%+Et91+^F68IC?7q(+YmGi#ZLd7Wx^{mcTnYt& z9D&u?G;9TizT+U?dNH~#)4<+%r@=Ky+dAy@gl$!qa?_7;`_?MrWgm~uX8RTAU8zIY zE?(RNi9KMg-qNz255y4XabTI80L3kiFR$wpjml7^ARjw!suZ+WU|~dqMD25X{l4g^ zY+;nEgb=(T(Li0-K}$&2&Fz1@KxKW{g=#5h5LCSq&CS_gKj@U*;2|7$4dulI`#hLG zanaBm{AZf%LM9iFvtTkbay3Vul^iMp)lb?YM6l{Hpq*IO#jnO;&~YIZgFTbOFi`-D z;Mt7Lid14Zru+({dA`CIkT7H%vA0wjP&E{(rH_Lp=dMP}k`NyV{AYi(#@HK(O744_ zuV&7`UJvBFG*_buFn3K&aRc{Ka_W}9sw{61J-p`MZ<#EZfN^^jw8nOIjAAZE$+lV9 zMARKQV?ZZNByuT^-Wiziwnp>GNM?-*7nSsy)+T@T(jgioKF&H~>DStWb!fLvsGpX< z#5&gDaya^N$KDPDez|{b3jX%Y$I}v87Jd;hXX2fmWyyI)dxA*MSRfPfiEo<;Efr_ zi+WWG>i-<-)AjJ>Nu-%Oy`|m#NpxMluFP;@44o;+7%(n!mFa&H4g9q)B4?3`BSpOS zt_eA7bU{jURpm1PYhn{m?n~H|C!uX%D4SV$NcK$e*)t_#fwYpF0jq}_Tapym?(&C! zqjKN>MVcH7H{vJSJORHuFHqUKJP-w_qtj6agSMUC&IHc_8O=;Hljk}0g=Ug-kh(TL zAYF!F{hDvu+5>;J5Qj5WZ4~`IvIZrw*1g&@gH$`Mc|NCo%s_~ zt#)lXaD$%Py009GqhLD>pFy$%9*s-+v=Q{tUd_SqWf~-%UXYcZns8##v*;m>by25_ z$4;Ws_}Zi2$qOBNPG>yauL?P~^GH%1BO(2X(2Sz43nyh@Lc2A zYs$IkRLp*VgD^UkukVWd89qF1u`_P(8pDi)(3ZIJ zq2xuk!#`w-?Hlpz@j-*cPJLqH!7O(NP~HOC9@>AOsg*CVYNWZJyw}BL6ia@?AY--< zfzS{gw)tCHmy7KvMS?CqiI7o4KXLH;#*ZgfWY3y5Qc_&kxzw_hpv(OdEmTBiUxr?0 z^6kv+UDx3feqB208o)Bc=<;7=32k=3FIj0eto=OA7S_G(iN9avYqq8k$y`if9bnm6 zi&TFQ4qdqtF&YHVabHDb6yV~ToJGb3Ym0Hivh~e}LOx0Xy1qWtPq(zf@zYMllCuCA z$A4GMY!(d6-m$$-s~cOtiahQ{NsB_cTin&dFv*QRGI|}WhH2QqKlaP#kB8IW(g}|f z+h6|Wf#~o{u792sL3)yZayMla6VA8o;h2BklU~vkk={4bbY@~A9xg_PjHOq-SZiX7 z?y(Geh{ERKg<83H?bElcLzB+}NQUL+mhVhB(EAYxxMlQ`As`CZ2 zEB8@Zbh7*C+k9`oV)wQ1gmmDmPabW2cm!C z9J_L}4+j%?CUQi8#OAs;C#>OFDOP)IkY3v{TZzO)Xjeqvn+^Xah4lKOiAHDTrt8gC zhatR5^1XQwHb&b1&)>H&7&U8;wB-FM5RSsblAUTm#dezKUKUe%MF2qv7S!^e>g9X> zaN`9nGrod%#pJ70JIfp}YD?pVw<~`j zE_a~stF=bnr%8ScQ_*!0ee;-2uE0bd0UvLnPB`Xgfcoo{qKL5+I}b?8ZZv-;X8SQT zyz%>kFuaO>Yvn_0ccdrP2EniQ&|mkZykp>t?4-(AZdc}Ge63LKmp|lES02JI(KjwC zMG5g6%M>@9zq=`#4&pp{jaVfEb<7q0@LZ;6YwcUzAx<_7;dhsVu%PQEZd3nc8n&6H zFBQ_O?>^agkHjj0I^CbC*IR#X>#1`68bZudbY-kJ zxb4hW9KXpUC`i@t+OiY6AE{ew2!HHzlBGoK-&2|~@Yz$T60V@}(xzKa{XLvT?dv8} z;y6D4r%)ApDSX4cPI3JtnTVtTerXY|&|vy8A}B<;VOsCIP+CEx(A|HX4EKi*zV*Qb z`tE0)$*dB1ndRBr3rPai0=4-c(->gI@%G1YtrH$L(|XhGL*!nS*N|E;p>XtXEak&R(pA6J3H|$w zV;e^3GmRx)rP<(_E7*VRak$1UAy9 z6gE5y`4-+0<af zmj+E#%X;GHTB}_UClavyH)Xiql8B}+h^e2AXbI~m$}nhxQ|^ED6zz4Cz5`_4WsEot z67Suhrz1pt9EHrvr>0|jIp46a`-cojw9>nw>C+TrCzI_JJScS#1e7ei>7zmT<$h!6 z4f%a-Q;4e>9uWW86|Z8x2vvQ_di8jQ!4} zb*J5ykD$7{Ji>qXV?@z1P&;$z z06!twIAUY^ejE6`9Jk_8(L34t+x)}x%>+noK9tawa%FWt9+DZwUy_U=UN-n49_6b; zl4DmL>1Lj85#}y&8heEAPi(HUOf2a#&QU@H68=)C?lXTfQq(>`i*)|-Bk?L3*9vvq z79cQfbA^+htUSL4wb=_|F$7j8-J$z-WrjfDMahAG7AV!uZ@-IS!|V^gxq!;}_^Wfv zRI5fKsh)-|)nk&_DdSSL6$%v1!D$I;T z_B1X&*j=z}$jxaV>_GSoOTu^!@w3c;^{Lf~dv;l;@V>U=W`AAq^htAglxP=spbFIh zRk>L1Fj7pu{`;kw2oeb95$66<-x_}g<}xx=Tk3!8(^KGU+(EF^@^G{h4C;&gyy<=< zLJR0fM!`<3Ii>9Pf}SnwaBZ7sA(S@@XL)mY!A-M9u_GM~XfI_?Q^BWk6iWW(%5sj^ zT^T7!qJ8lRyQb;lgIJIU%M{L0YRa9y-^XOhHu(?Vg0x3Ta032Vx?C&|SFv-I!aOrA zAi#eKx`R&x^$}Y=EJ9d*e2;I2gN*I@2U&{rJo1zu{?K`wo-7CCFy-Blk=*jdhEF zgD$B1fx&PMx{3ERTuPPhguG1c5if3MqE&yYvYMsutOo8*c@$cANuvuYhmtvv;*Nu+ zM~>lYFnv~v%a8}q(tt3^ep7woG^(OoYVx7W&?R+y_W+p!L;Zd{xrg%U_t8ujbY4e7 zVG#rlA}=-2vfCh-jDomkhw0P}zA!BGL zeY^^68Zs|cJPvx|2pT{pm#s#1!g+tm5=0g#4xo+uYx+qo$7#!S+>3!8?TUe^!QEwe?fJ!Jr_z~2=V6^6 zP;Jp7usH(TLV~l`X&^G;5xdl&GVcp)<_B%7o4);G1ZeZ@49?5;HE16 zMV&H4q(IsimS{$Q0mEE5pvw(SbXw;&QhLFgS=vP~hpmu%x97&g`?hK{5p;CUv+B(7 zd%^4p7cbnuyG2)p7+&{W`E!3Zmn)arWzwi0Z4gz88$;ymNZSzX9(pEP1zK=RqZ{^Y z_u=J0D6Q4IF^+tLu|VnG zYR6}(4ZiFI`G?g;kIhD;L+J;_(*CUZ@3U<%ZdKoeO_J0=lKUpq3iE#_EF5Kz4?ier zn{z?LhXhFX(!y;Z+1}$H8305#S=EZjM&I?2iBMvsD*Mlzq<1e&qGm70vsXJMvq=Xn zxds?bQqJfI`C!%Y6K;$B{AT&iOb)b+AFxSVqp_(4XKat5Gxx!{CPR<)b-PZuwM;5P z85yV+c&J6VIRuPu%n^SfqE^Ob*WAtri)TlYNDZ}o&v!6({<={4t;q|j%hY)ZE5^z9 zc1554an~n&*OzHCgNHIp?gLWhUmcueIKW)-WvF3~q3jJCL5K@)P$HIhD|Ha6qp^K_ zVD)RvPnwyarp?krqB?`yS-w(WKp7nVA#m2~LU0s-zb`-eOHqFz6c7o|uG}rVh;Tmk zrITnz_1T5w&&N)*hh#^0TPTz`gGHt#l~q6I1?-$oo~fJs&isoJ7u~3sF738Cv`%Kh ztLpR&|I^%I>A*(9uPbIwt z#xq%b+_5s{px=IdWztq$6G7Fn7B=v^a>MZCrXRtPKL=azLh(1N+F_It97lTA73yp< zkDs2W4fmdkyhmf?{wYnCv+Nfq6++$xT|ACyhi`qtwwQmCyO?d%XpL!r%I(U0(8R|e zW&_)(Dy{KQQkidm%E8|ZUZ!zOnrm6YqErrCs;#L-D(l&l7EhkB4nXj#Ss&U(aG0vc z3l%8K8hD9fn?3M~P)*w*=K)*Pj5t%hDZdv)TmhL0PcQ0H=uu8mnwof|r;jo(d@7F0 zF2KC;t+Ib?2hg}rTW6`lO7zaWU>!Zs5AX+AN^87~P-hK2*Mk#LgxFms?ln;R*dL^d zHeyOgt`R87s=kGb(eLIv6RxlUDT)=$l71EM;~5mhZDp^pCSGPVF*kHj-+<=p=X;O` zP2q7?(0#HIo9>sRADkO@wSgkU%(NZZ{^sH?&60obo;c=0+))7mVfF_;fTa;#wO<}r z;rI7ijFJAe(b*aR*&slY`BYBK@7E8%=L6pZGC$auI5yEMwW>-^WA~kv5O9w76tL#K z*38Oy)=|rEmYqeePQYQAPflp_0c^3kR5Iz6f&`@1^lM&`QR?mCTJU)!z?K>AbuOr^ z-u8dYWAdJ??!rf9K+$NJ1AeR)FC)E5 zYg9D>gk1j_f8}?koUcTknNG-e$ERbONY{U#9lI>~xlFEa7r9LVVHd>KWvS(LbCLev zj8!&#N3%^#PXzy^xgp7D_(pywU(_fVLn!;V$1Vf7Xs z)jQ@@M_W2*x!KCT{OlC%ltR6)fkTclaWI?(rPWHI49RwqlH6)K0l}CFI3^JgHcg97 zIXK=&8c@MN%rmzJr8cqI1~_ahT&sTrwLyv%RZS+z+{Lt1JEl}78V3oqoJGtnX=Re< z+Zgb+{&FzR_`) zS%r(w2F4~FUDX0_;k&G#X&5+RRG$*A9Kh{*EskyHSFgUOCH&i1tql6KOA?G`5@Yz1J! z@Js|{Bd_~0A>_J|__Ga5p6!>^F;5oL-Djw&ZL_#O=yy%_}zrW(z|`R5O%!Gx3X zBm8M0SR0Zd+@EVBmr?gSvyZf5@1}^fZz$$O>QcSjOeCv;Lc^z}$25O2`cj#NJYD0` z0e_q&aZ`x(f6`ZnjpW<#EF$jQx2n11F|xMU`4I?6 z5_Zpi!{mtbJQ~xcboKMPouzf{c1h(kzZkX~b|!bRO6i3dy4jQ(?8-#9_gfxlA?s+P z**=~fX<&oMFk+=LV$84GRJM7*l?F~d8O@5za(Y!PcA2ZzbUuH35!89@lq010Mt)7@ z0}qfu%|ivzHFVv=^3)8mWokfO9{6r%o^Kl?xLC<5VYP)_cX*BG`!^CRN`|dQ zDMF2R4~b3e(Wn`-h!LBZP2Z|b5HXIKnl)k-wHjNENX1qaGc*(>h%Zw7K5t~4bKkkH zpMQGgKF_@Odfp!1-D^-xPU-i3J}cYxPg?l8{gl|~UzZJ4x?Q{bw5nV1{e@=!8G~w! zyWB)@Ma?1yMAeD~rvR(PTm=o3)Q z`(#AEDs%ON-?yGsWRM>DrqGe7V&xZ9cxXz^^EJxx?Rs&6@AUzXnpN?Mo7w(oopDJ$ z7vBzbm_Pl!Z%xiGL+9o_T3R3MJ1Ez09rOLtZ-CpCjj6pW*EmomYT)L!Z|=u$nh||k zx;!~-aF-unm|in>P3U{FVp5((ksBuW-ECERTjY<;i~jB!J8xX$ru82#4Vk*Q!i-m! z%a-`(%OB6(5c_m875zkIOn?}#bEU1n8!x9z(pm4dFl&r`t5EoNGs?*AkQ z*B`UH)ZC`MN5)hut_&};&#UJ8JC_=EI@$TxpQ;Qfczgc#yIc2{oD%nPk=wCvijA$? z#eY@8e#`yQreSBTN_95YaD+#Ac7KxRZTl*bjjsgNe!pu>vs#lkY}%b~*~0bv->sYe zOWftAjZRgYS?RATuk{JlCtWD|VNQI0k0A$(FJ3!&>#aYR_D_@ty*_gE53Sy=+ihoh z-2W`k{oui86K{n3zu$Y#zg+$BD@Xs!aVux>@4Rk>CAZmFby@D;i={s9SK%AOdj55b z#mz=X?afy~9%Q~c_~xg{-;Ii&6%{*k_Lk;;Yu6V)K6OJq&l~xT>;9+YxgNoz9#kxw zZ}-^o6}KL1(sEeqfg5Mlet*tfuFRQLqIth=Er-6pRI#OW?o83(oeyqzDmHn~P)Eh$ zJNrNN`l3aXFEq30yvD75^geL)Sl&4WSFF!HeMGcX`R_-Y<`mVZ7HUy-etqfO{h#vW z*xI#6$bbaDC7xY_YW6yqTA_?p{ohl)o7EOxO)GGA)17iVLfYNA6ySS3zIunFTh^8c zm4m(3m%LdaGUxLuUf*o5J+^fTVz0N>gM%>>Rlhu?0NexrCa)reIMvO z;bF?#)5pBJmsYRtxMj`%YE+r9wu3fycsj>tpW3;@$azv}F-1?zkmqh=1;<-W#79YA_yy~gBw>8hy>W7ja_)dKnGO6&om%(p-srMlEytVuB zk;JK!W+px##Ff^$Z$4Z2e*P zUmM5HOkA=2>ZY2`@8$1PVXDuFRxv{KA-9xgtrv}7 z^W3||uBy2%b<6)DFtpD0@6?4SkKdRWcISAlH9KmSg!-PyLo5_)fp{UcWmxA?iE z%h!KgC+FcxVrugl9p{(6V-@lnTQ~1}H}A#?Yoe#l?3=5?FJWCHdIUaER{rfc*=UK< zvh$eJCF=!u@AqG^lznamU%q_eJ#p04Ch8!+cK!Q}zjR?}orJ~#<2qF9sHgl`sLrV>88hLw4&wKCokMtG^oh4ZdDuqKJUcJEqz|zS#|T|icKHRjrx3)_n88FlB&!r2$qVAjzdYUM&>_zg<9ZgaaA#9gv0J@z z4EG!sd*?!lvQdv}3<$njb@P+1N2@8TX4X31xr5KmoR#aBx7PmYxDx)fSEW~lbDbW3 zHXZ#Zn9Z1<#N6={PdjYxAAhi#d0e(#o7#k{A$nY0^=7gD<#ANT&=?!yy>6{~Y3C9l8qXzmvmgW}JAR<>AN;~$d>hhFe6{cqg1 z1)IA)_K3L29^gOwSNhIy}SV$M!KmD{;2a8&2jHT>E=jgStUTRr&5vUvaZc_W7V zyt_26_|5;h_jW&Wa;{Y&&(gdHy%z2-SE}Pa?;^f6pDHOySDF;O<{2{2y?#{NyIaq; z?KID7`^Pu(jKx#?L`4@W|841nTy18TbC0QY=ch+C{5}fWoai4WCoeklXx)_6?q_{h zS6dV1T{HUP$0e^k#ytq@da>=?@L!g0{Jihs_U)sKAD@3}a@5$7g9e!%T^2r=u8yeq z_F?1bu<2vphOav}=4hd2A#V;ga7+zrxBC0lyPA0%{kdfH#Ua*!DnUn;5wCBou6bke zl-jWaC#E*8ak$TaB}!EG9TXlF+Of#JUenH2>DQ-w-?v9@E!G#lF7<72kv!4yWqS*b zt0_5h|L;P)Rq#RF_7x+e*YAiZF*K^$S+}m2-3%YEXJ-;)$CUhbS6s)@1M0=iSp7Ul zsm5RSUp-fv-q<_&^x%7Hy{;m1I>L>n9ZMUWShFfpiSDPvP zuVqA-)!X-rBaMEa6kPh~=6e3dwsM#Hmw#KpYeSj1_MVgPhTbkC^xq#A9{MD<`PnNT z2Y#H@`@#2n3-3yu_G-mfVabo@{vhQ2c~p@X0oxl7ntbOc|6+MQtF`r1xp}|58R*^a z`0dR%@~(Pxv|h~Ut2eFt>&7f@)w#;+n4V?3R6bj<%Bs-Evm2fWw~{AZIUSO`#@A!q zu6DahU+z0LblL1Js|9sw++okz8{MZC+u+-A@sUx(@?PD2Rlnpv_4FSBaV_LI|2sT- z(KB`B;4MEpF3reW{`cE&-@M!x_g5|BMP>c)&$WK|_UI2*fxyng0t4>cj@_`c)sTa! zPtSk#?v+oD8)KFpsa@&rg7N1*8|VGPit4oVY@RV;-5ZoDS@y4azZXf4@ZS2c?Y=Lk zhEH{9Ck`JO7}cbClhW1NJ}LfdqUrz4EzxMEI6_xxXVOmg$m_>tgC)FG5 zJ$UUvJ<)ox;ftx$Rt~hRE4zPlAKAXI`?hC^FJ}!OK6}YGYYyd$+VL!WXZV=k%RRmN z;n0+Xk$?8=S~)d%>qw<^V9fE*;b+4Ci>%}2)4J^!`Cgv?tzzvl%ewe4JaM3x&k-f%kFVeN>m6O*$&r`H^fkxAIKUh-W*}VP3e#jG8qD^u_!5&+z<9Hx%+<6FrU68V92J9{!emE-@D+iJF!~@uT6dKl|HiBGo;YG zmJvRFb&jv=_oJ`(t{Z;&rbXtj9b9<%r3KcAJqbH2=9u!lYFzAJ&4S}c6dJX;b*DLB zb#1XBNB%F5&wQ|@WANHjfwwj%wR|aW?0QCjdZzHHl| zs?@W2&%#RG6^&LGy1yrXbQ`r!;;=_SUVTeH2+Her?|-!}U0%0o_@vNH?m@L3YcCv$ zY3`rbSheQBcI#l*65_jkx5{sSeJ$d`m6NANKKhulso$G1&BjL-81|&qvu$;UH2tu5 zT^&87V~>8t>m6P?sBuc=2NO&ETJ&aQ{EimYw>5m}KX_LB=wg9Jk4gb|4)yLN*PL{% zX#L-OkB7WkG~;2}(n-Z`R`~mTnVVH=U0XZ6*3gq_pr#JLd$)8hOY=I66)Kl+>6}h_ROB|pW|4( z(X#V{o$c^ti;p#g`hjnAc!sQ8{pZICuk*|c$bnZ%$K>nM(7WKpBX7%HseWt2 zyZYC!P3|~$-ocL}D_T41h1V`qwy_Q`3r=`(@9_4=ZeLIGSrEHoWS;KjgJ+yi zm{z+>;Nn8V-@SR4(7SJwn_n8W|E+k;@2Y368+8gUELXA7gOP($DioT$C^W2C-d-Ee z_Z@V%-GPQHQ%_&+{<3Ay^P6jyD*oNWIN2;&_~^pU2OkWaH-6Tp>9>Uj8>{5-^0mA| zue3WIU%rvY@=@FKbsHYJ_~BPwXLWl2!lTxNrJ(T$qh3_kP-szemEG=EVtogR;7eBqd>!@+C)vXf;zZ+4n;DqGeAwSKVtDLOf^InhW z1L6N1PpZ)H*QG<3+-Q>8Fl0@l@9SAj_TLXG5q)fJ@D9tmasA|P-6D&oHotVPS<3?x z|7~1ey%%wT!}}KlY7lN7rEy}tv?Rblor;>S#ynEB=DXfm+@~KuzhdK zj=#2^zpg=-JNsKbuG;+N@{Ws+jGR)X(9!ZCGsP92e*4<|GveKuq0h#RDtIgEaQ)6( zbCe03mC`R)?E1|_o2!*n+u^@%wRWv(zO2KO zTI;MPhgwEH4MRwfu)OW5>H}7MT)N~tpLKJp=P7mU%#q0}N8B41b3}aybD8x4omsyX_j5-w-v?P<2^!2#?%KIsMuGkz0IG zrMzJOD?hY+0sFs_sTz{z(EoAsD=M;|bVYPb|HrL%G0kMZX{zG5W>1sYPpYOmsyue{ zbG&%s=AB#7HOE-|Ra9pKWkYwI%Kj(GG#tgBV3xpUNrLI6eYp2*ZxUmvjiX{ z@6+slQcQfor<45?LylsovSWk&6T79NOSHsG8<*{0o$d z45f;qn~o%V8b60@N)G)Qeqt9>WI=UIw||n^W)kjv&Hjm>UK9;SmFJ+5^e<>6sJde; z{;~)U2!f*OhU>b3=_;WLV5UNjCJ3r1lbZl0862j_=?AnjFol7tPA~+Rp3Q=W!NzGg zHa)Z^DFi`+pvk7|g)Ko41yQGyMM0K042(@S5d}>mOo{b$oo*}&CMCZhVxVl%1w~0B zw8KDIqa+bURitPYMNOk*0@Vd}Xwg(N_OQ~`f&f7>*(Q>tu-i$p$rhAUgJDa8LL!$F zG*c$y95r6LmGq;h7Btn&IANyVk_Ce-D4CGR3yQmsC8^|`_zC>vx<6p1K=ubqX!PC~ zhfC7AKpNQ|b9FUs9JnZhk1<&=DP;uBkjNb+Q&wbxa8c9+%Cmq;glECB&<@U*>tyR3 zRa2O-C>Tg@jL8Ps7^+edoENm$6D7mpmEz`O2{Ji5_7}M*$g)NeB+9D7m_^q4db+}t z1a|l|&I!4YRGn|En;J#9Xn~^N8F{GI?mrH0$ z!cJIEW2`8eI%6@>G%S;DB0>Aon@G4H-9!>(#t{+}GM}rf6oWPwe;Q|H@-|Q)iIf*4 z5Sh|g5>=*;CD4wKGc`&k=)Vl(@JXg@`~zmNjU|<-MM*NKhQVBu(H(YDCkjT8Adn1$ zvL;znSa24`T#_Ovls_Z|TN5Uf6osizNzs`4l$1<$lVu_$*jKiosxU@^>N6RQp`zJb zm`z3!4Z6VP(7?Z>!7Fe9+AvLEn?NBlENBL2VCXqEP6zSm9=c*O6DdJ4u$$-xpKJ&m z)rQ0w)8KkjGISvW3z;TTG7Nq@Q&1RVnle+S5_ACLbm%Q6cBUy3%-H%@V6>A3NulV1 zW5|>bj*@wk3|lXYfCiA%;tWxSj&KN6duw~BU z(rAf|jSS|_WC>Ga%2ZY~wxEoul!CHiGR-claAXMvWqc)+Z=!O(lT}rtRFzeo=p{h_ z4!B%s0&^vx#M6CICtD_K3UkS2jZ37gnT$VW9gzvWoi1@Q>58jbvhgqL8k00xH#n+w zh#%d=fa}FzlFklefOc%0CRmJihR$zdm@HQ@E{I6fnYnCnf%hY_aqzm+$7R_v zhzYa65EJIF$fnAaBqEUP4oKZfNRzC(@)7W_AXuSjRS>LD*#_m9RmO$sCh)}IoDj?? zGMronQ$>@8dy1^-RM9{YGqghW(I^Evz?9iVWF&*w##ww6lp*g5G%=wQG`1>IEU2)d z^nfZ9HsvFT`=Vq7VhTGt)?}7XMW92EsltDyI8))lvYjN6#Y1puKlu~R`c;L2r0l6m z8dFtjHc_D}3;Zy$#MGuLy9#(MTLx6bBG8`{iCJ zZVcCjGM}Ogj0%bl?}g2k7>gl;$Lx=S91NFf9jb^es4!cPycicZC{%tCZb=nA!!dI* zN&qswt-!Zs=+_O#+ejv|ES&;>hg}4InG3cW+B^#_OE2Ik10u1O>p$i4?gBG zH}o`3atJWcOcXTulvHFics`V!Gz6P`93;agmNOs2#4;^`EIHFA8Z->OkA@JG-W$n8 zhDc3vjeyel82Lb^IkapdP@tCCKP{USiiQib!@wt@!~&izs?h~-9W$sJqEd!J1lzYr4Am+e6}mC7$_|KJ5LGwu)m#G+8~+-hjA@X4 zW0Q5n4s>H3i4_KeC(B?wQ>{U8Exw6K{0|%uQ7JG z!r`Jff#c2?4g$`6R-_Rbb0P9!${BSHq6vV10JB+8XCy)9hQ>LVYp`^hsv&YB=m(5p z3!J60L;)fO>dzoM%aec@#~f%?XDML27{Q`Pz%rFoW}-la+fO+dFy=tRO~{~KW>lym zI-sNjj7g4)A_LLv7EY*h)2|y$WrBa1-2#kb!4Mb|g0mO{tMEEmq5zhHsZqd~^;Qie z-YAU`4pH&6RRzPU0go>{D8RI_<7ww7{-AmU{D0LktAdSV4 z3yr}{B=T4ym0WPsC(pw%y`cMN7WW$9nK0(J14?>fupmq4pwPlnzq%|lTZdZOC%iZt zN}GS#X%UWQVl^G9@Q7qeC0!AiHx1Tjfj{J5b6zjaQ0fX|27+Q86m}j6g$`fEQ202L zQdod1#x4RgNputxupnAonhc&d*6@FKp*Pk{j()(H&j#lsi!akL2w3`|oeibQ(|D+o zF%)#(J{%(cHmv& zvNRIv*(fuFvJ7cZI7~`)6iV1uJkHS3U66Km7rmq-tYDKh7M#NG;@TU6OZ+Kld5s3K zfWbsL?P1FWfQYG`fHn-SIyVP!t*KzZsiB()sK2v3k|7ujTZSlDOj#MI%TiP$8fSqh z3fV6ea+#bq7rqYN7@IsgcHjoIQ(uceUtB)CQ z%n4%(@L)17lBJi>g~UV`ZXC-IqwUKz!E9qeHCbqbI*yA4#xTKv?sHW^z(1l1erhN+ zD#viu`C(vg8A+hTT{poVa6}kZQRx$Db`)xkrBYDO;G1Mq=`*tNG!4X5j6dKkW-x1} z1COc+)28S;;^GO@&lW_-1*0)6HN}iw!O7S--2huiIznd>&NOA7h(@J{xdSLCu{@#) z2BzX^LK9MQ+7%&DM8Vpc1yLlog1N*@#p;9#oZOc0chgA2sw zI?*^I=z^goB!>M%&_!s1N;MN5z>tn}-2^b$N(KWbQJCF!$6!*Lnz!+v5r_jX3Z)ZZ zNaeA~JW8{hg(#;ZyyiYBfKKDm=#My)-Oi3Z8Tt*A2lfV1BTft2{DiqYutylf^$hS& zO|M;$rV;_d*?3A@I}2NI6B$V|f?j8=qBn)`5!Oprdbq#Sf=JcSP2eyPhO-+rX}%RO z)~N{?YmNjA2El0$8~^bC1gdBNLzk1&z_f8XT0bZZvd#Ddt!R8)dcDf|!iH*b=7O;! z^aKiEr0K>eu@bREjZWes24lhw2BU)i zs!2rm5hW861sN(h)BnR{77zo*LOfg!!5blyh=MfLgd!>n?9g_PhRa+lt<{*upx6Zd zmCHbkQ@9R5>7O=NVH{GfY%VH_42I4Z;{RbXoHII5MS#X&ECFVdnEHBvsSGoS*fO&` znf{;Mu0u8!;LTHOXEU{H2_j8@P_)`Qg*6!i1}DPxA{Kz~QC)$6u}*tP4x)BCPDOt; zgRy=Q%oVxDL@Gli{vXiAdV&B$SV=Y!Rc>aHNnom4)KRDVs@SD)y2CtQE44;?6kWgWmkv_HT+4#>w zKN=yZ=CXT}8SRi7qBXG z)t1JE7-w<&j>|Cz1cr?|k1%%dz$vO_ZWYnO$@~hyKBaAN|19()_+e<35%#i8&|<=1 z=-=TmW{BXQx=53af7}EvFP)4yj)@(-CL-II%QCYfsLACW(J?!;s##o)QP^ZRu}g&X zfXKpS1EZ-q90pkeI#)w5kOp(||KOBl>E-m84eEm?yls_2OGSXO+#z7BSI~yJ8Z6)+ zKs4F06CydpU@+zkhW-!^W4t5wKhO zMY8-qh%pxvh&E$Fq|%s_AT!4oXuE{BHyhs-`#nF#6mO;B8SnQYJ1xyICy z#USHks9<^#yTx6h{vYzl4Am&XGXsNOc;*K{NAZneDEY=&tuGn=AG~UoSh8U>VFVbu zY3S|HAkQ~pnJ>&`PZmnpK&Gn^MmR=%Ww!~^JQRF86o}~lw!h9`+#Rs{-r3pV4zROh zxil7Y*3M}2rF}a%jLNh#U`#vPR)Go&VEo>Amg&r5Y1$d3ZW6TEkI@XqcQSlj#&;q* zW+`Uy($IMm+XA4clUa0_EqI4?GP-D~R3WuZ-Fhs@+&~+~*$GYC{4l&t5R+M@5HP%L zVFzTXV~j%rn2yUPoRAStxbTs!o$Zj3(GKwhRS#(OccEPxT2=b8$X+ii`pT$6qq;@& zo_58{w5Xy(XB-O&@D`25Cx9_)3;&E6TO{O}u>~x{*k);G86{^%C)H%uR>u1(CSnMT zI1?gjp(H^UqU(hr|9Hs2tS#zbELcKJ#iB33T&=B5PW0(f(xJ4^GITPYBGBG-OvZ~7 zdTLZL8D{JPBOAvO?RL;X>=6!#H=7xIWNBxES7@Q5XwQVLx42nAfX5GrE;DvOSVvcw zg#}T2bp_fm=HB7VoP&{uWi-wvYiBMSXbNzyfS|$0*v61(Akg^aPC2 z6Iz++dAn1IuLlQ|?t!2WykOg(toTGhF`Vjt!00OtFk}!^SP6CE*s?53R z(K(vznF0YUn^Uu=-*z&N=?}QuOn)fZB-$0rHqx1=Nh=kJXb9j61Q~hCTqqtI9GnQQik(f9E#=Isp+j4S3j-4bdjs7?_N|qE0C>bzD zf(B+-K!P-jp6M9GBS5NCPIrC zGB8zA_Hz<;KwYw!NwwdTFchLt$9Mt020I}7A1N=WFo0~XnGpjyMdxt;_>E0O50oUZ z5w1=Iu#oW<)tQ`VMqoEK71!Vk_{U^ce+G>8r2v*$)X3r)JTav=Mh8EOa{*& zfH6}Jjlx1U`-2A=q|5aG@W`F1U?9*bk^M=v0!G`x@WL_kxkM&o;x!_ZCcvm6vM`w& z2|M_qVh0#2BcN}FGa-13Dk(&YEZKsqA?QuBKUpdmKzc&p0Chgf>HO&^#wi(5O%@g; zK-pZUcGe944;}Z}oKR=>Kt(=?ABH`_!eP)Z!8Yb%Y#~-*0fPNdlQAK(4(ui}d)J6+ zAg^!Xdo`So(EE!$((s>!E@XA7%0!ULZvs`w4rpr?dSl2ewIz7@<>cb0`+optibRHw zk5nj^S%ljR3)zI*sI}3qPGE*7TvZFfK2Z2V^}sAa=QFsW=Z!Z?Nn^tv&|M27)8AS|WR0n_Mj*E%^9@(vrkhhZJLc6E_C zAodp;s3&E2m(j!Ec^SSZb=<@m$g5&-f z=tn@$+$$(~R4iRLL6r|ZViX3GPcDL*3rj`<=K9#s#=jkO(OeEbse|G?*#u{%bVuz& zrm-Sa6f@g^vG;=Z6LE`%)^LqkSqL!pwGR7}i_U?B?Tn(q0KP0aG`e8HogZd&+qa;2%KO_wH#ofvP6n3&tT;;yf8) zI^0K^q5({%@@`iGsCfrWH)wY@Dgi9^2aG-O1}y!3K^6l8#^fC^_Ms?PoXqzRnf{;s z=^e_|b_s&|0e~TRqFCVXeo?Amd1Sz7X~F&u5VB1~bP&Cx_DwfIcue>M<52r!xb2I&Pp&VB-yW`8nOuw8E_ z0Rp4}-H;Tm=%%675j(rXc*bt1bCGvDvxeGACRWq^Kl__UjJa?(#$0gwsmF@~0L%LV z#>Eri0ga|)3#A9@O364N)%}36Z_oh7zU%{-K`kK6AM5nAYhAXur{O=t0s_eV0Ko7G z2Ere9cuaW)MKOM8`&~Yri$`KvHyRs**gfE2Gno?#yW!Sq8t+f^it8DS&T!Q89lp+w2TcaMXR<$%nC5x(ayk>5iD(pn-~-JLbTW925)y4zOtm2( zG<8Q%Gxx^5M3nOsEucxGMgeA%2G}RSMk(ByfF^nav$0XPy#N0@qn-g;|~OVYwNzREq(mVbN+dMEAm8J z*P4MA0T1Il+lXvFB)0#4_?{>VR^_=wibcwJRc&^%WMw6Y;NP{=wQWvx^JvX-6oWff08pr(zzxzHOIS*+~{BBwIxwNM&jAT{!PduL-hKryVj;R>{eKY=M<0jemoe zY%`vOT@nDUboz1Joq$Tf)gJVcwRRxlb=L*<&S!0#+RX@nbL*Iwm@j1o55{BQ9!YHj z(ASMM$RvI|om%g10FL!9TTo*-WrhgYaLq&nvjXu0B@R$~Jdq?j6vE+ZnbaDK$Ajz44?{J_o132bOEK;y6y9IkLWW{VR;M3|yjT!;VkA{}K&miD5Mj~#x>3Gy`jKX6)`5W*WA!7C=y zi@;2yhq4uhg@nYIeM#=}P1Qk~s$@Lj1#>|nbHgu4Mv)@gPgt}Rx9Y9r zfEV&o-F7vx=8H_%4gs#C7OHDkP?D8mcJb3Vp5Nc!H*?BnU3*sS(cS}Xci-3T@F_$# zJB@v}rdOyz)y2Dl|7Cmwi95}dFO<71t5}fltdu1bP08}IBwS}m%wVsrFKDQ4!gU+}AUvO0egFOsD`6!nFv%PWL(@$M{mCnc z4vW;M5x9eKle09H8xTqa>w(XvYgjqUbKv>vWP@x%u08sc9iry`Lve*3nuDUa#{Rn% z)ZUBG0y~j^v%Gkf@vqWE^#x6=(9a4mhluCgXtDB=sus-(v}c*T@%8_#kp+1#tWhC< zNj1%(<56Fx3XYc*%M|qgB6_aJ)5ErsiTTc%59oh$f_j~YuNM4sYsabXRubM);j7si zGJciM$qt*`6?!R4Mfp}$2n>I9MZNUNiy%QdPvlBoCz+jEr-GY} zIfQmtRs~EqDFA|{lgJD%f2YYuuS4tReHtjPa5>#Wscakif)K){4#9)bfh}m!BVFD6 zLg0L#YF^hK+VMHG86?}nB%Ul6p_Zm#UKH>5I9jMHvEhWa)>ucd@2~MNHXhawC9rzX zqi%eAhFec3uL&Mm;8idc4ix3dy5PPU zsJ<$fCF-dKbA^^qvm?8UU7!DHOpk4UAzM@I%Cx+!B#X2FomAv0OpX{CPY4>Em?7Ix z%L%_U@+0IM=1M_iG#$;Puo$WM4?jes*8{iz*eZyO+f4%d`k8=zz~ZL8)4xt2UH7~s zt7r~|m70DI`m6_-6PggsxQ0&XwVGqUncX(lNF)_A11Uv^Oyy-Syb}S0NubkzzNgQU zf1WgkF74FxbCEdU3@8KYgGLO4=N>4SaM?%d^*M0q(HiKz5A^K^z`)WUh{Ace9tNMY;4d)nbL4q zW290sigc@tKaDtvPF;;H94_q~2d(JGcnmqNfa4tHaTD z3;<30;LOn{;SjD}P?CR_tWd?8e}@O1@ajSd5}`KyQrNioL=-a1e7ALf2I|upibWq$ zgr}Uno}Y9M;p{-aAa|o36@4Ol#YlLiA}90DRWXu)?5|TD=KLmV7rDZSj_++m0a|Uh zcs)|f8YpE+3`$^dXs;gZoR3i0_HGE??f780miANV zJM+1z)W6{qtGk@NX;Jxq#Sz=#(1OI?NO*V} zA^r1m=@xZ}#U86V*$7KXtS(*~k?~k(ys^AnOyPDDFYLqfLU02-WR`CdP&?YNMbD}T zonu$%Kdgb+>cfNQTFrVr>@Nce#w$kVinh~|m6xZntFSLZP?j-fx{6oBzPt_lVovFf zKI0AJm4rB-&v7r3S;HQV1gpcLrxqWEacv)%3fhIexug}+KhiDKw6tmL7{>Td56Zan zJVPddX4b!duRXQIUvO=~a*ka!B;z6#@x|u)(qA9m{TJ!FuqT575r+X00fzw*0=EGX z11aPJF*KKvDFYP+F*i9kGMAyD11Fbl^#cfh9HUaPy;HGm+pO5OZ9A#hwr$(C&5CV( zdEU2ApC0Gy{?mPa>@n^&aZOxv&3lhMHZg(RZ)$!+8+{`Y8*4{udKx+ofQ*@yzLSH3 zjg^cIyA-v8k%<%FTh9E0m{`!>NYByC##%_v(TD?}Vq^#qGBN-#FaYS;+1Y;(0|ae< zY~Ae5OiUdCWJ(Gul+5y05Y(g+|ZE2kzdBMKlBl~DqS8d)3J>sbQiob)Zt3;fTn&tD|4~r^Y>n)#%p4rPp8;kL026yX zYsc>%INAWrtPL!k4F5^sTW)OguY_#vZN4q6zIESVayAZ*4hHsSwvK@BsB%Ig|IX9V zRL}9B*bZjjYJiRLx22(tfzv-F{Y&=^^R0E%GqZL8I2yS+{u4{z2w-UDU~8#==k^`@ z8_d?;>|bd(Iha|S{AUJK0DB`7J$pk-BL|0Xm~ZTVy7QlP0{)lk^=xe|-Tvim^DnFa znS+_5gOQ~%%@2Bp@0bRT-?2^1tbfq{Gb`fO#x?+Yx_`?JooxR@=WJyEuLhC*Gc)Ah zN$45cSX;UQ42_I`(8}02euo5qkp17WO!MDI@_z%x|1AXnx6u3lM(%&*=zqDy|F8G? zze0;RSz5~IS$z+{zjqAad&%fo1HShRKnn2BqOsJo|Nr^uS(#b7{hz%4tF?;JztjCc zfQdWmeYb_*+T@!WIvTov3(Xuv%v_BO<;)xnOaaDvmft=5mt4u((8%6B(#+cEo7;c2 z6+lf-NB3WJil$};7S{ie!2EBOk+tD}t>Bxkf8|drs4k$)uSog7S+M^yl=~h8M@2W= z@0T(70~>#R|GpDqXJGRB--P@Z5dD9irS%-`&0GN*-*wZ`|Ev1{@%hh_)_;K!wl=Ua z{AYB2JL*{*eox!~6#Sz$aI&}mCi!0r;JfPoIR9(zjf`B441TOG*%)vJnx~|vI@X|P z4^0SZ^!3n#4h7j3*DDs}`BvF<`=o^Ku$Sw;R|kL5G)!@Pwz@5z+I}2JP#li*pjnc3 zCmCJl;&>5~_vRsPlC-l@9{SU27sIBWsYH5QEl6#Hsk6{2AMQ@bD`*$JL*P!eGulI4 zJ(2qoI_LSK5Ix$$c^f3xMWc2gGyoyhR|Z7UqGA;H&W+Elb$tEBvF~?&yUF z#oYx|shHAVn|UTjJ;ZGWO8tla$R+&Vj*E_uPt81-;wQXfDT;TG3kxJ^vjI(@ zY|^}9ZfF%8k~gI>suQu=Me=f=nDG@e1W|0$ssW!PQaqdZ&hsu&ySZDVvnxfI*&ly) zo>zDJxUWI7Xcx+@en?HM>jJ1m5}GGUCdZp8QT^-#Zb83#u%UrUBjT^-PC0f)n?O=} zcR0&l0w-=d;PHwHZI8s6S1C7X3^v#`+yZVsYOn@LVifp6ht`D7@;sZe?y`~7Y8yd9Y`YKb>Fk`o7?YD-iAuQN ziMRL>=+x8bkqC^gHe0A^Tc2vXG3^YIv7QuTTA*(+Vo-&vk^}~ftT@TjDc>l8UFw?c z?5b$7^(d7gKW<|rMXVCZDd|bsT`6ivSgtzgBUV=^l_^xoY=vOu7hIwf>6N;LjRB_$H)&P2WVoyS49wlzvI6sPy>7zOYfcHxb1q+?hd}qWyU?2}Y|T>% zjtx92qm^|c6{LBG-Et^&6moyNSDL*NtiB-AN-hXDpVpJ2EuqOqgH}du-OtHxb7DwO zw4v&=1wFrFa&omL-WRYb^ubsoS#Uae;a7h=|J0MItZs-@LH8cz*A+@o3W_18k`6NU zsizs``Ae_Z+u?zYMzsnJNU(70y;u~kh%#n}1itK{)ZJdOCYA!jeTsj)!hE|R!^?(w zvOK<$L5ZG~g){GZqwRz5HTu;>^env*cM_N!yT^eMm41EW)T>S^4HRTF%p8Ym1`}%~ zf^nvXnUdKuKE-=gj}?eSu(ff z@S#>N44)HrF@HS1S=~Q#p_m!Jt1X^mbP(%u<;TS-$Wn2o%kz%xdbw140O9jF((-X! z$C3ch48K1p(&QX_P3y_2S7q?G)nOVZ`x8HK65Qns+oW2aPmiXS}VF@&2dLx z%+EtSK;zAREX;=qU!|sDQK{}kZtXuS8YA1TK4^AAgPfW91*tL^i)b$;-FV54*9yC5 zxoQ0R?!Ai}6TDG_6&-UDTv_Rb-_;x?q4ezs zzcn;?kAM-fNq~P@>pSrzPvO9zQXB7z?GA==WaX+U4jFDtJ^3b2Df^xiuXe8q)~A}z zH7XfVEbL12gBfQdQwj$ja}nH*3zPY^IgbwCs-L}ij$eTD=%(!PhWuXXq8R%ZO#tmDQG4pX-8qrzR7LP8tmw>|^PnmxX$>rckwgVRjFN|;r&X+EbJjiF=QdeQ?^oTI)iC6BftId=C zog!kdi~j-F3w2dwj(64E`R+)_Qt3jSr=pct+sS_>A^#Q+EiR4(c#(I)Tb^^l9cND~ zKaGkb?A1&U!d49zI z#zn5&$_D~+!K&&{!^^omE{XM~&`O0^p(+WqFcJ(5nLr}w~!mCd|I zDRzHF&h+UkL6s%@2bw!n2mA5pE!rJO31I}^{I3j*FFm+BE`><~Y48+^V^^B-?zzA) z?L?UQ<760xCFbi4crRV477_n^^xEYjqvs$*uDQL|u2sY{UV*o<%Z0Y`j5VrQP%AMIFTVdPs0gnR`*Y9$YcjS32Xj9oj_tKc^r;Q1GEq)E3EBnm9%$hv># zu&2#3M{md=s~@h>1Bfl-NQt%Ii3pP|0xz6$=nN*{4n31QCE!c#GtXQw((Y~6WJPv9 zEmj^_;8LT9b;>cupCQR2U`yBom5$Wz%d4>ucCkU-qFJS!@u_($yUB+Lc}${vM*U~;C>=rr2_D8Md{~b{WZ$RLB_oXm??nbAQbtZ1rUEydt%<*Kl~;qX_NfOTvG6OZMDd z&4;}-RTNi!0^jSjq|-ef&z}hubckO9d$XfL_OU2$@VJ?PmEp6Fztw*e3t#Ldldg=n z{q3Ap5_B(FF(30G-bmUwNR_;C>s)v3)K;FXsk;B=Pl#W2;VFL*|MOYMIhDW7jFbN3 z`4Fw*CMRJTcBq#H7bFPhK>dHsLBMkz2YxwnjL$MGg6C&O^Ch)Kp59$Gz>h#xy1qqe z!klQAF#)g~%p{}(hoRuD*}(*qD(7N#Ay*!LwTkF3DG<=dIN~U~XxT4l4U`<%yk+|u z*Z08(L4YEx93G-{;bqn!Wm{n^o8*60cMDnK+v`3OXNcirLJ`jbM8ba@wFpF^yKF)! zbE*8KGp~i3%jTY*h8wgDgUHUn?vnhI884bfU}1(if(@oBRvm*Qx_h|L#&~)n3Rf)@ zh@HJ5vSb^bl@54?{Iow*Zq^fXTZNB|$RRn#%IhdBwfbWKfDP`WL?IsbBLiyzV?i!6Qpg;;YaAMOR^;;j!D_rKq~piWw*W|SBb zf32NZ%$U9{HbueGdl#a4iWxRl@i0B;xv}FIcaS728})eKae065f4$X#4K1c?F8OBX zQNZ>i(zu2eqzVJ;H?wk$IgZzujU9F9Ai5e=Glsp?N#GKcPFi5&8NaIxFV+zDh?2R7 z%qtCPf+d6bA>R1+874nE-gd`dn|g{WdZ+;kgK^ud5bmW=d`u+EoUd0CeY^{*A+bS= zyu6^ePduG_jZl9+rMildy`KnRbg6epvL-UPI$Z0CydAo+|Kt4|%EkgNy|~8c6$$y+ zwDd;4?|tPmggBUV^;~f7!vCqKSagI~9R+c^kYAGQ>XP&1@-p|B_(wcK&*}sG=cR}F z^>e^F8A2FxZzLVTb1;!=q7}?+P5wnVfwzBV>_kgN@sxk|lkr$tqB!h^ha`#m=>ts< z|C9Eu`Uuv?-6Q!^5^O`{LL&!nf(Rxmh320ZKcQ(zXo>qVsxFmo(9JnUOuNHIgtjsL z`3glAUqcKuXC6y}pMshmIBMV`@`Sm=Nl7<&4-`e?jf!kAjCuPXnLB%8wo4qqIn4Lo zAOkU9`3HY5o8Fuh=ULz;?0?tm%;Xhn{}@TdY+Jeo$1D&eJzwKuYA*7KsZUt0hH?kJ zB3ep>&oLK|6PYawIdk06W?O|}ZlW+&%+dLo-UQXAa!MjX{8a z=|6vH4y#!eF!bAeWxW+67|$1?sRI^cv->rOuExA7$>orA^==+}pR~Kf&ZVdha{Vbzn#t46buVQqqJM7T-0gT`1X5*3qwc)u@!jI7; z#Inw{1oaG4;{HWDrtghOKTVlhrbkM|BF3xP!cZOsR34w`EI%$(MM-?Ei3OE-=~xsiAXaj z_r|`9JOHHQP2u5)hi-gaJ3PDnCD+cb3W#iPZ9;n5XDwPocj-Xw_0UlfqM8-v60=a1etaJ#j_c6KCIc%NvM}AReFoA>}D({Q8 zjy-22T0i(ieZk)vHUZ(=)`x_iEHh?fM2@(Seg9@ArIX0ou8pFjN<>PV0f^gK}We}Y!g*3T~k3fY|rvjzO;BvVMj8J3;jKH_EJ67 zGy{$dK}G_XcO?r0Q_(1;13aACS9oP`HA~p_Vn?qi@1;ZH;lyh^rs1u%)GK%=l#vzJ z3&q>o+yBG)>^w_JhpA^yjf*uhLU9RrN>BghK-fuVM$_TPM%x5chp>MhpSa%7VlYPc zgmrkkS5bR2QQ4?qMSq^(E+bS>Q>$`m5AoyU9xx<0wPKIgIsWlZs#%cRl2xP6p0*U{)6Vx9++f!7$mMh`4os zK3$@xcXH-xs=kXdK&XEoZI#ll3f9i-abDh5v4)!ddeMhQ4o*%iCX~9y&#;PlJzBiF z4J&Ps<|*P5Y9_5#ROh^iZE0uZk0N7jg#LYve^T1hn)cH_ojyM+X`Q!87`mARWKWr> z%B<>+$gt*D#aoz?5WD%hdKfboGWiSsVqj<3n+LTe!J-RJjf92_U!uda&2 zVB}4bk~b{wQ*VEcFIJ%zBZ3^XKXg4tXfv^CG=utu;#OEB&p_kK8$glCxv}`xZ@?N* zWcglNPm&Qp<#r=>;v&Q`7G=U1vywQTm`+aca$Uq#`kz+^BSGLtcEnV|vdEgji3PRg zp|ewk!OQX&f=aX*+~bx*I~p?i&5}REu0irwEuh?*ayfrKp|^GTyb*h6NN76auoA3S zj*U<_+di`L!cuHYm3 zS9*mSmU(~cwsoiAUhSzkk2QATF?JD6!J`Q21l?Q7DNPfSmuB8FVdx3CLh?iJ=wXS2q(&?s+<86 z+3B*Do*$Oq|1d9UmrIum5>hwr&@w9q6wQgh6jsF6Ua%$I4uwctlHgAIH!&&GB(+>c z8h3Y#4-7Wo$r!#j#%;@Co?eSfw2jovd}Tj&)rzDQ9bUU#IBtcZ`!o{QZEr!@aYl1! zIJ$rRN~qjbvsd&zt>@h)onVN4?n#0YrnLDG&NU}_XxS}41WKRv3Xd5;2*uBGUIdlH z{BeX3tFF$QPvi=R$2A-zg@N1pV{Q3jZT|g5P=9rf@U@O3--89(3usl26=JBn$U}_S zWP3EBaT#@q2vy2oL~3dGQ-?{1?w&eGww21FwzMPPddHYl(P~UKgYA z1oSAsyA`k$!|a-L4{eyRD+jlq60*_>(;3*1{a;Ohbp_GoMPf@A$t#ud-965pirIe$ z%%GIS3vfa+#!#l{x$^KD_)utb0b>2Vzh1T-WLgl z)4(MwD#<9NTekPO<;OJ@mK#N4Q6>_s+v7eS`owkmFCvRNr7faIf4OQVu zZL}>IUXn>VR_m2z=>k=?OPtT4m9tsIgh^(x&Ra9%IYE;m5@a3`s1(Q*InIA2!@(7u ziPv7+ECLcw2rflq5ak(;7VZdDTQ9(xQf4<19d@0%aS)nv4F#ZPWdrRzr!ImDAm*kdn9X;waR}mJ_?=Rdzn zas*U?Q{)0jE$^W9&hv6#w9?8vp~&M&>P9mn5R0@NlcaxnFJ^h{yY&3}^P}cbB$;wc zl3El!p&7plq}@$$F;IV28TiWV89ypWs@*;Uaazk?I=w|qWLa6BNFcaKV3DjLO_gjD zk1AVmY_Qm|9$lKmM)GEnLY|y-5a*K50gIpo%e^m_pGyu`1DFpK?AgQtpA0CUzTQZj zz=zgn4Uf;^mJhy+PUmxmiMF@T6)uU6%q5dU;rDuAWou$Klka~YxW)V?^Q8t%H)d@r z??n?PArC)bmot3a&0=||Zt3IvX=H2thilLH#DcU&B<#zUnT!Cq<%=-{w$B0!OawRE zpqI&CN89u0;ls&{;oQkVo!e@F?>CL$xqNEgj?|Ix-S#oD5{+u?of7YJ#|AgaPfX zvf}x$h_Ea+rP9?(W7)e8MXbF?lxWBU;+v~{sG_xvIH_okXh&rT#HZ1KKi8kwK2SYy z)-y4t1TNK?K7&Tan1dHl>szFSDY5M)QbN?KuLPPFAu7kHiY2wGi+{4Em$*f6)dw69 zWr5@ehiQMzZUt--ky%;Vy9y(qkRx;w;}181rBT&2Rs5o6;$6w~iCj(RT-7UqWN*b6 zFsKorYTi`w0_8O{iS4p$WswR%fsgBF23>>bUk-7e%B8?2D;A1T>;dKCXcJe3=mTl` zGIZhXveVL$$MXZFNzJv6G5l>RdB?jo1F~2Z89#q7B7tR#Os~lm4N`3Al;!k|LhGMs>GpxHcUJ3j{rHd@EyahSBk4?ce#n$G#XNUq+LyB z7cJ)_FGLh`#xfLILT>hCloA9(EBYgHt+zIL2x6v9I&i34v~S^Ee&9}eZwVZLO-nK$ zi~WB!buBaCii>I8GsNXm-BybP+s|dJpXJ{evQV7=dSouhq(3OA~At zCa@IaaF3mO(E>WtMz$~&KTJ&W3$EkVEPQc>V_Z>4Pb*O;Jp=<9Y3i({W4%58s~N+> zNE}RnT%w~eKR4rJr}>5m^a@53h0>!E_N0HI=6H`zTU&&4U_3GPhm$En4OX~}!EJs9 zKs*M#gXhNN$I$VmtX4f)EP5N+d1_Fo@00SzFVv@qoh}zaSmM<(CUf9g8M6rr9=Iny zB-lL-cwSQAme8OUef}-(F(Mk0;{bzIMl4p~7^oYNFwbADzogeD4GnE%57Z~wUTM1Y$ zlZ&2J|3q7k`Z$^L>q5ibY~a*5!tmzS$r{t$;l=0;Vx-ERq@-v=-8hQK8oVf^M)Ir# z1CsJcfU~NZ@@iR_9<-BWBRmOKS?Pblla=RO#h}0@HOXL#QH)yDVODD>Yv6X>;$ zE;}lGXB}#tS0pyv+$fGt`? z2yQenEWwpT6n$QP9IRcY@-ImLiP!Y-IMbC{xy*1}31#*I9`#wY5{&b52Ds6${_zYu z6q^NY8!?)LrM{Nza~h{U(x{c#7ENIi1!I3SZN>*rVSQFQgRoEu5*CcQ14nlG6;FDf z_q2~*mBC;u@(%J_R)BvYXeobUKn+JI!P@cf$PH0;BB zIZ6n@>k{?Uwe7TobX|Yk&hu2(2c4*vat1+F%Te5%eRTs)S@j;mu~*PuOt4P_dE;mG zO~L0=WM?utc%1nYp^+=u@~q_05vYFB79oO_4*_k&vMzqr4g-$!DH!Y-9EJ%3SOiaI zY*wTaJJDsA7)^8KzJT~aYq!`3P_q5|niv@UN#`2qYiClkXxI}?`?up1*q~J&qufAzQ z%^01L(p*;h^uwCi#F6_FHs(rb8yL!F6daH}QG9eyidY~m=cL2x;l>mv2DZ7J^RHLz z`9DjOW8p^pK$|1rcjpBzU6Ti<0CRLYOlQ!x)7u{BnJ1%}ZesF0r9RV4bPiJ2#s{Ry z5UgGCO<8|?pcX$&0k0weG1e|>(AL-E?2w$Q>(&+(R?ye3e7Cng?)L0XBI(z6K zDv7H({GBx4uIF^Z!~LR=Z99h~)jk~3mq7l3H7_^0=Wh^3r}Ft#o;S^hr!98E?Okn{9v|8qTQ-=q z;C66Mrr5R~#~v3nK0P+sdcf?hEgc#;*$XNXYdCOe(%`P__FLt<9c$k>l&9@rV>nP&KCtU+r=AXL!XPH79?eL3Mn)Rzc{$>g5-gL*^t?)HjQ;1|NB(wIjY_ESt zDhP)zUy2wFKxDhGATkPYaZSu1nGBKqB0=5m~BiCo(rKyZusylSYGiGPb zgR;nv;zvNSoTH3qA8?q?a38-S`zbKejjz;Ik&aI0nMxUV*Ru&$MZYYMRD^#IWcev} z#YQgr-;J$a2-B?EQL75(sBreKP16<& z=+$=~?Yo9!l)#+sPSk(vEVuMjxqc0y{+0=CS7;&PJZsAP+IRcnTMi|uP;k05)*IMz z<|~TZ;1Lw0s()$T4&95?tucf@@;S~_BKGetN$>yYu22bA(0Fdut)u=L%B1#nlPPu_ zn>#O1#a;|wH?LJ(J5C}ZsfS-&fGaSVdWZ-LQLdlT`znxD5Gj9fcPGOI^1-*>A4lK$ zs5O~Uf+)2-d3`2{r<$iWKR1mAQ5g8?2? z{1CJ57>-{8A*+*EYYsqoX}sFNr!cKE-8w+-QF#fe0T&8K|H4u}SRh^TTN&5COFyz< zggMbzn(|B`iz+J(SR1ehNAovO>lqGy^f--meRMMtgDm}r(WW% z3+(SOQ7=aUv+`fl(cSDX*q6Nn1|(YPozS!?iqYeVwsIbnT1Wy)7T&axApA1FQS^II zNQ;p$ZybNOp>CcZoAPQdlDjn6%beT@UNYH_d8$B7CiECL)XqkO)Nhp22pproGicpu zx8x(JZZCfh@%`9{B!`5>Dwr5cfQw~eC8%Wl)-S1;_#=F^A8<5z{Q`T-rpDDy9NHm{ zN!Ab9n7&^7e=o%@dzAM~wEQ-I_k1-0R+|eYw542L*^7f>M)8*<17Ulck!NZnS^VFI%W$H zn6kOVNlQ|mTZP`}0ks$eua$1seZ4e8An>B(z&{C;YU8)x!LVWWhu@e-WqkP6v1zJR zt&#jDmZqhSNKuf_S9<3itQT|k5RYx|H-Z|sUI#c^tWrVh!7kI7RH?5Uuo zPoGKmxex4gN_`6v%HCs02X8~OXQeQ%a^_4EkU=tCMAdjo0G-DIFvZ2@b?sX^aZj2%~Y99^j-ASR3&BRsX}t! zEMsy~na$NfgO5=$F?*`Va!pg*A#Io#dRCMrr$_;VHs6YkHzv^eE+uGN&~<-! zM%c3HjIXd0GSUJsdZkY&UepsTyvCZ4(Yit8B!L9v8QfA3yVdeHxZj~+9UtORHJb!o z!gW$w9NxGxw>UHuHWJWU7c;nf{1Z=);h03e6i>e>ZC>pRr7gKb3XR~3cESzy5EF*y zrXI+~SvAI(+m&97NqQVU1lp~=HFZ(NE&k zb6VpikYq-a-hNpcy_rfTGL>AMcgBBAk$?O> zu{PksK8$640Ez`>&Om}ESj2{#Q`fPAn= zDGF@-&13QU&XiJwm#^cR$g`q+6kbjY#;n>};qC6u}~9s2U4n&urL z-9ub3Y%PoCkJ<|lZ1-B_C)IzFkPdqOEDOdd=s_TaKLEBNoL%9G;~ZtPq4|@@&JJhH z{wUuo=BZjRbwb3Q(8kxKmAe|_z#-L(SeWjn9zd8iq-p2UW<6jBgHJ!NoAOEj{dsTp z4y>*?cx%qN6o#FrfJfGXO_6xKV54q*27_ik6fz{Utln z0yiY!jGU{U)1vVeH<`Jt5@*zswfsv=k9d#ulf7;4_8zQJKuLOXal_2RPpen(rK}qD zk3I#$nD3ngvqGsh?j#YnJzX?*%p0M65um{vewf!>o%JE@rO*ag zpPdFB&2($y&5OMit?+*{KfR&zJWCBTU|h2$p<~yf%~?3T$rILPU5Q;?peo=O1A<4O z9QxN{MTI0e=md`%`X6(Yo$1UbWgkWfnJ21%5cf1S;339LwTzGw5(|6WVOCnaOjIl5 z6U1ydAwv#w$Ry!z?lc|Mh8dB;hLu>W%~N?3djZv7Fubv>KX!lBn`^0NFv+wG`fa%o ziQy$J3D}uS6q=0mpK+*Oj~Sxg*mkNb zuTKOWl#OEug2aE$Q#9}ee@r=FFL*rmwQ5!sdXsubl};bnQ-cJ~AQv~NOYBqe;1%pG z4~+i7uiI(_$4i_XtgVDxM=XgZOm#A@z&o8DbZRU#E)ksqCT=EJ*mnkl{)$a*fakOK z4<_7Cs%Gp%b^p+c+wvJ*Nnr3QaG+LmhWNgB$N96UC(?fb6)Jr<@Le|Lkf#-i!#{k( z@(HZdwmOyKU!%Kz=UN5-mLY6wpuX;})5lE3Oz)s2l-~2)&tFCMx+g0%(9-=P-c5&T zBChbTs9<6G6mjQMEiQ1lmVi1bu{1rucZI++GKnbbs<=e*Ng}wuspk1%S{Oi{IH@Mq zTnpiICcJ+O`xs7Uwt4P=rLQi(*p~9}geM{8%4qXvaj$Qck%L~t(bLvgDxz&Rs|1n&8-w#fkGE?Kb!v7G_(!uwn@Jg0a=MCKMj zQ0Oel>ffNn(+*+qW?Pyxit{7eTvo0>2+76sWEg+GUECZwj1tUfLAcSFS|RFx2Y>t3 z4(@rTU=wmIr>G#}t7!3Sf1QO!z1I|pJOpPk+n+V3?;(<>fuh>?w*gH6%R;?-m&Zpf z=ZSaX^Bhe^{cd{^h7p1-^(6T19&}wXQ^~g(wkT?wH|<(TjHw0Ea;2q>zUvcGJVYwR zYSMockR};1?$^0rkqy(6$PG!!s4i!8(1FvxM$i;06HQA3l1>z3jY-#w3XttSG*>$z zv;nSf(vNLPvFrfO{4mH$(Y_!&FLvS21S1y8hb?16GJk`Iuy(DjR};i3=rB+qX%Dp! z(d^8FB2oG<#;2~F(nHNn&C_#XqBYLSo-|E+*;RhSn3j*5ZPa@)q7ghAZ>r2 zCFKvjKXR5tHIbeDJfnH^m6NbpQNlomk6DLHyjzIv$pM-p2$h?9>CE5Gj|SzO9V?3- zXZ7<3_6TCUTTfH^v|AJ#DXE4jfYAgD3N$;W9NFSEWGCgF@PTToT0vYD%jl<5d}Z_B z;((f_iv~gs`&_UN zY@KNDTP~khaMFX-SJvCOCDg!aC8c$DFLw0Z~_`4^I%UtL9NzzJvb{z43-4|M=`f6#w<T?EChPs2t)*(?ZLdu*OPU<7e7PE?X&Sbe9kE8BV zpop-WE898W) zPyH0B8m}HFc=@gs37l*>6-R$$2JCeeYA)l`+@Ia7*dhCWpHC9biV($EA#!caUNdO~ zVinAD>dE7aPE8CLW9yvfCh1>SzjeI`*_s$jg?MThiO9C<^Ut1%8gp3Uxjwdm8Lk-0 z^IPad^K?r-pPb;0uOA&HI^tYKDlCp& zkg}guN#EX?FtBsB(CXS#S=IX;v80qa5$F^}(L8Cv3iHu}xvhZ?CPL4$Se6L5 zaJNCek*{H|0Ybj&GM?VnS%6O1_%nd9ObE5?@zX>>Vavdj#Ej^pPqVt{pNBSXz?hw-~0w%T|)%7ev1ofh2j|z?@}-7QS-%tG&winc^rocm$6^!MFFu zSeu}NvE71^ALSiD=;9Iyj(E#U~<8#Er3q zl>)M@c(riW{Z!tgKoe&u5QCEZ_dL@2CzXq^%rl_}l?1;ZXS-M6R8nj%1}7PyNf*Wxg?tJqFg>T?Br?=fs=bgx%V9lW3jqGW%C3Uf;`G`1d#s2NfU)S(>x z(u*iwZ)K*7x{$K)tdrbWnzEB@Qvo;BO&f=6eg_VZIF+864ne$rH)d+nnV%1uw8D^3 zLi=tY=_j*_e4_m|z@-u|RZI(+sj)?JokU%8Pt>@Bh-rG|*~B7DA4cO76N8TnJeQLc zx!%`J^(%jbx{|vf50d;d*t~S_m(shUI7E(@D&um!V9-bAkuM}K0VnBV8tqTR0`UBJ z_mPqWG)FL%dB51@9ogTl4x`J}7rQ46Cb4Gp>w&OIY^#C#gZkZSB>7q)qC#-Np#U`5WPo~A$ldq?~-oyh8_`pVi$M$t-FtZx1EFXADBKdBIwsW3&e~YW3PAG{dCmH=L5rE z9_cx@U9YFMgkxu;4h|2n*SUMPb4*a~GXBxwhrj2kF{bNH?;CY8@B4h~;Ovm>gRhQ= zJ-H~$^FFn=`wkx8ef;mgG@3a&G~1cY507Oo8#-lpsbV4ddXI2h)1!K>S)Lo(bi3ud zDQHmHn@h51-t+ato9oTzfAc=A{+4aW=!45kRr@}o^42Mxx-1C@Uih+t?R>@-h3-un zTD;<*DH(ITKU8UWw0&K|@)jXg8_vDx{vv+L)v_DTd~H&D{fG|Dyq6b$T4n0+Pt|Mp z^{RKe_EkkJp7Gr2%{4lEE_1scJ@fOu5heYi>wMPg?e8pH5(@sgyLaA;{RY=t(c?*; zdVc+j*LhdWL+Ety)!Jo8d)zv^ap<8^p_xD0dd~O$bm-oK<=?{(w0Q6O&k=WZZjB$4 z;xGR={pUK@lK*9|cHqFkk(&dbGH11Uo_tlRluUvGy+^YX> zoXYpDbH2$BwoJNVn|7?(igVi+-pRK0LnB+3ty5lh%GEc|r1`I74g`F$hrJ%vYJa&- zMg97gd>mD!-;SJaCGY#q^gl6p(P(>vmDd%0biV_e*M_z$8+c@AtZUp~Gyj>ty2_ml ztp`TOM9mz1AT(e1^RL99rtgnWT{px%$E5iQ?l}jqiyYFU+~-w|M>VY#Z)CS!tE{*9 zC8O#gZXfcY&DxGJOP2n6dfq$ZdLQ4snKR8=yt(l%_k$h{9zN{+_pKbGZbZkAcsMb- z^3wh<);G)2<+sMwUikV(w#{92*rI|tBNuuFPT6x}Y=KL)d@>iWu{EaB>PioT{G#Hv zwhLMxK6co3_myFvM#ZoH*{Ak_K_8=^RbS)vEWq~jv<`)%XD6&0kZ?I~2e0Fo&+3&o zH9z^`iL^BSQstUI+x>r(?ozMA!?{}n+r~|N9Mb4%`~QAkTf5PbYXMCoOP`6FFkj19 zzW3@Pg%?%b_tSv!f7-&jecUjwNr$X)=EJgCmAo5X$Wx!Yg<8GJS7 z(v;$tJRjWq-eP{ySljyEQ#uz}q&NG$?XrpgJ6fZ%zt5+6?zhHlllSk8ymO>}-GjcZ zudXQ2KD_gUxBE6^5KfJ%6Hw(q8C%W;cNcZkHU>Qz=+UH3xt`S)u8i;&V*Fn9jQe}{ zh@th|PW8)G`PhM3*_YILvr+VzaMTvKAVcoVC87fRT+cQ8?XW=aN`)u*9lBE0)@95u z!v8#ub~7igAOCF7p+3jmd(><5wQlqh|Bh28-}MWsurr{|w&RUFK zJzT%W-rtui?#Y*2_8s4@WEpZN$k+YeoPlrJmb+^6empg%f<%9!q+K?V) zgvY<-{dDf&rb2B`T^OD>=9k)0d#e2x(7oP{iG%)&dX+t3!i9+7f5(6A8~13H?c0-) zw?cfDU;E>Df%diL&hn8a`sT~jvDFu|Ro*cp2zronLDThx*G!z`>OXz{j+ya$rf+FzH?CxrN*=s<@uxz&pA5Ba z+}Q57J=q`R_usVm_grNMRQM4zzv{SmN6w5mxA^jbykCyBni5m$<^7Lt+g3LhfA86G zPA}UxsZ_ok`v$)(zh!#$FJ8;`44b|yqWn_N*5N%fpII4se@(#l%;iGf^=tjPz{9!c z&PA>JZ(rN}f0iiSwN$N;*8Vdx*niKEb-=mqMxz^&Td}BB5GUAAGEi2#OS2IUsPwzXW zdNzJ}^n4jnJ{JhJDSlf8tS zz7_uq$}#guNAY;pk4mRj#pm}cI`K!&t=q;{@blU@wn~;;8P1iBEwK94&A%6ZtN)>0 z_!hbAueHv;@0@$xPcv#)ofh92{;r{C{uny42uo?x}udmv;VpPH=Fps}c6`WiCuP{k-PY!>xBL>U#8a_XZz> z^S>zGHT&k9$Ex3RyS@MPr(1LK6!|_UqFX}$j{h{7HQGG4IqTGS^b=ZC>QZBEbc_NHNxdpp%`75s*to{=}; zd{pU$p{}ll`fl0OviNE5$X?@moImi*c1>*&<}077*`(QvsFQCh)&1x0jbeSybauO% z^KS6tOZiF_tmb$5bjamy)%Hy7_4&-#<;_CszNy_JXN=e4)_?Wt*rZpJtubdNbo%6f zcI&5@PQvB+IT~krbL~=u@0wy==bUKSsOP*D>;8$^7+muMfqp8=^6@J@-7bg7DA}+`BVi&%@z9qbE?_Gbs-{S!RHy3ALn6dAv zd81xm?e8^HZC$Y1nF*JEF8JbEj+>i592}WDApTq7kk>c=?Qr?+=*wgKk9*!VepS^@ z?>>4CuK&E`j+jHOmrPjnb=S$eUf27dvNd`7SEpBH3%lOkH?z_wU(dlOZGXSX8u&4| zU9MfTcibP4VQJBkSu$^I_VmZ_g8gEnHhg~GBmc^TADJp-x&5_g_`GocpEsLPYgXDa z>j4)A{t@ndzV)_F?Ut@BHsr|Lu@nCp^`QEfF3m}TaEY#&fi^nJbU0<_dmZ%%?PeLX=Ja%j6z)Rt!7w$h_s&ma} zA97T9Hhk^I3X2C5Zf}u! z?#j`#d!6gpJv=b0e{=WWCtbRoJ9B&EyG!^d|2|6>y|{5T`LJ|d%gGh*2rVsuQX}b zH}~YmHG1A()^g#afDr?)u9njQg{Duit(#q~E-I8zzNad9ZTc%z(1{pSQgp+NxF536J3(t%pQc+`M#u`M-Bc zZ;yR(E4XIK(u7>+-@1BrP1rGHSf9ej|Gj$d!MJDJrugQ0a3}kd34fgabR~PnA4=ze z)qZ)9Kk#$?>Z4DEy)v$?2^=$h%dC4#^^;R)nPZ2Z5kB|`f7zb9ZC$@7pUd9R2z&pD zAq5`=-gzAm;FjfJVDIN<%jJ)%WxBIJZo=3FbH_C=cBjSUK3lJsT=z8k{Hy43e|T;$ zKX9Atqhl`y{kv*ixsW0|tL658;&;5zA^GIEBRg77I6rZhZP$~=?w*yW?3=b=>#Uc% zrgm>)4_QBQZrI@-zPFdPUVPz6F5CS3x6iCuc5z;K$qEf3-`$_#UDRt($x%J8gwFdu zs!o=&Vz1c3Rb6KMSm+YF$tNs+)^Ank>P2IZH9axYUa`#&^<$)8t|jf>jlMRf?%r2N zd`o1DxKMRoWZ>DmP0N=J*b-JH?njB`vd^jZ?`Ay;jPS1iaL{UTK*-xIT}M@F*CNZb zfp#L*L-U&WMNviAJ&8@1kh z?Xnm2{aAH%%HAcA1=>L;0 zYN9TwifX_7!lg)>f4+a=a=Cz7Qn3Cj*{@^{>whIvH6_`8^QBA80uuX^AshDcu`V?V z>H_y;kvlkM7Da8zO(Ra9NG2ft1Cjf!E~Z(4t1S5Xu}vX}n{=Z$!a^Wt7Zt$%d+ z2mcUN`)T|morgqKu@`*jQqx9cE(kb<>C7(BAZtc56>=6qP(_(A12oCtG(}G4r!7Sf zu~0P#OF+}pd7)vlb(+8rqe+TF53R|j^M!4KAPS;RZz2k^#A%977(UC5t*ajATj%Wxr&~vP#&G zbsDG1aDGYLPospIM!A58WqNAR1jZRb(>0=)SSOnNa)#tgv%w3?D%EsR)CH=+py8cV zXQ0%CGlHrq^nHSYb%gzbD4T{!l~9H<&=Ivnld+8I8mV_ zoDlv?^@KQ|Ku#!#rmpf$43lmm!CBLbNO+nkrXUG0lN3F&C8Yu&suF)#S5p_Jt~2>2 zq9jsXkPr@1WSrt>Bt#y1xrzwXjIFR7jV`pWE|bL#)*{IU+e=cJlawTbS}vY7nWQD? zEO9r2BqOk0c+tZ7SFd&B%lFkkq(`^v~B-Zk086A--!mzU{S{f~z3dstP_vy$logc=jO@qHsR;l!1 zXG|3}L@&Ay`x-XNRvE6BEmSo2LRm4GPm|%&sOre7$g)~ll~VR_QnPC%W$b@M|fiu1WEvdty5%y-41rl)|moT zR-0ueECRz!94Sh&g9Q%2oFtSry#vw&5!S>C1H>H_TuqE94j-VPbRlMkg$9etxG>!W zIW}r0B4ZT0tRRGsa_C!1L|0@@r;Y}Wn6VX(kX9++pea-RP>?2Z8rLHmQXN{(z+-F7 zbE$&KDoj;GAxmxyb7u*^m90?yK!CE`aw7jzBf5&Zhn`v$;m+tLsKMCA$Qr5HsYvBG z4S-7O`;sF%91`8!HeV-9yn#>sgEc4)z0v;}4@sqz|hSvuyFQFMVuPb9Mf6N#cDaFdHDx=msVr|7BCDU~ydE^~X=Wr|c_V}<1b z7J|k&qbEacxPO{Wc$fw5lqUa7QY6rrPgjul@=XjTIz=~~@VrF+D@byva)CxOIly!Z zD-&SFED!ZL>nuhPyowR#t7xiN;D+()JinuNNJP{x{ZVxl_+0_nEJ6G z(k6BoWG_@dG$aQ$YM&^nSm;H9#Ly#60a{FN3^O5SENBXcKQ%QqusQNSP34t6Qg;>= zHPv8BhzgX2ZJ_O}_(E1kN*3^61C=R_mX5;d0&};T4upkr0m%kqKYSVE49wV|`JV>+ zWQQ?Cc!@+6Nc9ysA6Hh?ugr1`E6Z_y7RhpI#h9A^sYqn$P0;6HsTs_jWw%JunR2O+ z9X$-{Ch8Y#fGcqqdO}TSB2iI_Q9A~WVQs*Im=c1S7`nRb)%sde1>X^t#;ZOnHffUp3r8o=eq@!<;u8q`5! z^|=bbhMR$!%w9(j02r@PLOvt$B5w~6~ZdkE+WQ)L|$Kh;JQOHA0htTT^eWlB_Zx`Jj| z(!P!$04rc*VuVBeh^Fg8oy04*^61dW^%u?o(J9~0;kITCyz^W2)50&hC>9WUgr8%Z{E-GEvh zPAjP*w{k5iRnRo%5-gb3$q6RvyPA$vRR+~TFi;e7J9G?KVhe}N^c{E^O96DuJlN8) zToxbTR9Pg}p%BzdgO<*X)3F~omgHyC=sU6*W>lI+iy;BtoMq3TQITLB&%8lPF|=e4 z5B}@W5UQV`v5qCm4+;;!Y(?gDL1T5NuBYSDbfES$>9OJxvr_mBE_Ysk=oq+Q7tv8! zFr7gzpG->)bjZNC7sqMrS4+T3X*~<4Z&2?98eEa{URI};2Lb{9(|Mg>08gNv4M|Qi z+LXphp~j3sh^aK05)5>2seYm^XCt zLj!c9l18X!@C343jg1Bv2*ZqpGGZEKYdVn%9-2WB1|k*X79v%$I2~4sB!lI~KuS_D z>{N9!pbONsAQ@pX7X=J+Ervq7B;Y?#5t@yFhPETUu?onD(EzA38fFL>&17W_I)oa7 zrVThhrmb-8)cOoea4?Y|p=XCdd}SBW#nc#{TAH94&yX7f4MC=aux55Uh?s4XPCwA# z38zgkkUTI2K|#efu}(a|FH;jU5hB>e1}|OF%4JH3gqQ*Trp+)}6^I0Z%M&9=jIGdMY7r*n z$=B)pFj#0kYwd6g0|v#`@wyCCM9j15rcGxa4z)Tn6Q~Tmoq(#7u^+=1Oq>SfNi7Vt zqI99F9aVXOZ_&4qBNOUneVcNEgb89u#{a z>t10U;xJu@vyk|cIGxH2!A#A)Q3gnk_q}$-LE{Ol#6foA41wtYZyg&=9CdsRE+L4}%dxDiZ8LEeq2i@CSrj z7>;1rk|;Swgi?|qJgiaA3mU6~L1Tp-E+^0u6*PvlfW~Ta%;#W&gPq!%kDxaJe9yR` za36rV06KXkTC+TC4+S{}NrJEt04?1ZL!#6aMHGcp`!P06gQg{7n&DZKJdP?aISGOe z@C`< zFo{KDNf3w_wInYT0pQaci$Hhj#-i#JU6V`^gDC7-9SzvjJ(7|j%iOs)LyTaXAQqB< zX2G{7A!pRg9V_582j4$(NRSJN^9Duyw zFli_5;46>-kP~8d-??mu#aR=>RQn}pjs3UM)(kB@r^H7#;HqSY5hUY%pfTTvh{p^K zQwcPu#{1OdTs}=ihd*Rz2aQ$-c$nqNpfPOEqA^vprb3)}W<_)mnJbVm0?jys!Dfdp zCaDB)dRj~2!wn3YP{Ck|m8uh#skGyYhuQp@MWanI&{CS#j?@-?SAxixeEP5%wvHNgLy2K0F44Pcvfb94$NnM z4m7R{_|ih85gj67u?HzBHy{}hGnFyoFXIe=ZKgAru1k4VNp9PrhQPE4eIe>#CvCNq z7421fzVhi>E-GZU7kX#u&?xMN*P=$F+ha(B9SItibVvU*dWQiqrrZEnQ!bf$M+`ww z9}U=nIepM{d&UYD=<2L3xISDpyAQ;}&kh)X-G|}3cpn?_vuMc;>^y1jXsGtp)|n`3 zfc2=#>0Us}+1Y`Vv$LaCVrNJ9kDVQGY!ctoo(XlGy?#YY7Z|H`Oi{5jVTg^>xbMS2 z5kI@meIGh6NoP;%#dS1h$tE(KDK!iLwTuSnmoZmH*-S5oF1m9Jx4byq4c{0ph;PhB zRq!msf-D+^ctAswi(U>H6m214Ap@&GV;>_}H0E?+4@{j=7BHs^T8bNScyToUnAf$w z;-c~djp-e}@SxZMKH|cBFugINyt7E`mn&z<0)&(;WS`>Tg&YL|jdKA5f7DoHk;62g zB`aYXhlDOR*9Am*rkDVy*(Rty*o_h9?YrGALt}ST6qb<#pk_`NG_Fp-Qu+35#7_h? zk(^?ty(4l0rrRh5*x6AEI7x{0j)29BBcV4!Sr3{nJ$WV76Gi{ zoiPZVKBq$`I$eWd-f$QUY`19XY{Gk`vVkdb>O~C9QZbq)`=mo;xtsMN15-)h+l({# zBE}w3-O_$0L13VamJW7iec|K8AS);VQDsua=L}4$m{LoUYFbUh_>sMfkj1SW*G#lr z=(X(mez>@`#+Dkx7_HBEm=Xf5$0>CxuRD)?BNu2W7@~Rw6O3I9rw5JE=O$vTc9EY{*i+9~Rom-iH~Oq-WFWF?_o7C2>dk zb*H6vR^Og74Zt9~Bm6tl5;Q`c4xOmSunT@dOuMs9cy9)?ehfIqL_9=(3@I>X^iz-T(dfERMu05leC@L3;=16G5E$sNB1;VcpW zh}KjIQ#kx^2~#e>&g_NAIH;|lc;g2|#=-Z%x0Vz@#1Ch%+QKT8sQUyZ#UH1RHDDw( zodd!xQjth0p%gzEk^-*b=apFTV|}#9Z^wR41OAZrudR<8sb@izLF0hUa;B_0!{jat z1o*iRu1Io<9Xp~SfKaXrn1^E*LBYscf+{=+lQC?OX|<*Pl&#P>CS%BnI(DFq4lt%f zGAs@v!*9`&lI`_t!AWvXqO#@ZbbN`OELC9b0yiqSFZL`((HVm~K zvJN{)Dsht5r_|Kapd4)898)@MRKfb0LRyXkuw&u`&Cw7}agu0Lq0>Q5h#5Vq3s}c$ zI+SgQ{q$Lb<#SjE5W{($O~Myv{M49-WQXBD?}TTQXRsU=0knXiF(|vyt)UegXjXLw z`%6=AfXF5W0JGzVy_`=C8tb!LaC|aSk?OHQgYD2~5r9+mEqQJNQ6|+SQi2|6DbrnP zUWi^Kdm#XRV%wmwv1`!SCjc^jSAtE8VIjW8qNm2t7UM$NG1w$;k8+(M)}XQ8yVX~) zlCeboJ8q0To;V*Y)M)WzH6T*5EXT7bNQiQwDS<1~i{Midhi)a!O<*B|jIG}RqQwGe zP-6N*;Arg7NJEH4prHY6pwHS6B-p7j&dy#4_swK%eKbd3h-qrJ4nL*D_JCux)>-^_ zun>-!z7R<`4IF@9SSKDdme*J?4ZE>58RlSrjzsyRHNzUypdlWU+u^4gsS8HC2EA^& z4mBs`0@^yvJVgoor{;v#6AdO-|A$s?pfSt=G!oz8d@S6N${n~%QV_%aQ`wI)hE{1Z z@Br!wK||D`H%95kxPWYkU5?ClTl`0p$>6L(>z2JxPn>mf@|ZwzDX5CZ6L&}=T72v< z1`r>16Z{whlO5_E_OQtcXEe7MdI1_xF3K$c21(}W$p5gAeUb;7K~Z` zGg`YWQ2`D3U)pEEf2#+~6a+Dh7S345ayS$icw^cZTJOVP6E$PhaGkfJ^ zWCvy7zy7^5dq+BC=5*-Zu8V_OO?ukYd>TC| zrSFi^`vpobqRo>&T}c zJukC$pHlP3ha)>=9^Kq(8|**c z+tGRI#;&b{_SI`PZRpHEm9TiIgZ)fptWTE;FK4&jw)xDDzKfo9-RN9*%>1%WHuKyX ztk_n|SC(%3%&wC2p?PhCPYRuqj_2mbJuX}1w8-hF*tPi&cdF|5`*z6}V-+brHLld_+I~pYu9-_) z`BW|c`uCfC+}_tTzPtH!gu{U2w_?**Z(MY)`}7mJew#KPp1L#dgHN|#TJ^m!sBgt{ z`}>u9JipPStfVKo56AltxfuVx{nnO|4_^%&UuIvu_bQ*Ei>hA#>GnVGSB1n(dUAB> zW9|6Ew>%SF5{4E1IWJ{*m#J~4ABNv&X6>EZD>I|p7XxdIL)W)+OaEMFK?A^Uj zulAX}gVY)mS>G&N(9!4<@&I|QAaoPGks^k;tF>w{qql=9RdR@98DvtMP(e*kTo%1) ze6q~OMXTW*8ke9o1gW)J^4vR`^fQzq{!{EWs(g;w(2&uB`&4gNPvf`s8jP%77oDU~ z^_-mUxxIs0kO=`7N~;Z$T(v>V<*N;xD@bk7lZ-$mIT2Hz>!`E z^&c5mmn^83M#{w3B>_H86F_!$b^#AZNC^n?yB7K|H!19TK$?ltI=<>a=e`` zdrkO3R4@5FM6ZAMX?|M6CH76q7PK#SY~ay>6CeL@>%{(qpbYL zif`48_irf-u5skgwmp4(^!dXlKHavu(yoGg1JZxlv0`c^<@?kF12UXroGu4D+1$KU zWBRbv#m==a4qBI8_Nq(!DK!tq{oooGt@G%(et=uk!1#HNYxb9Uu_0jpnr0)Ll}kv- zSY7M2FercexrMd1r~dABr*7%vqR#DY?HP4K-nVGoGyTP~1~Ip1evY|6(>-FrlXt`O zpAVUS!fE5su1o9f^E@_o+^`B`PFHjrc7nWJ82hNGU1;`>_?W2jb5{PQFPpr4(-hYq z2GsxIeAAD2O7*$d@xhpC$;-zo25Y)yRDWbTzvS_6b?uj(p1FLw_eE2Dt?4tT-yd;z z;14a<{^shpF!;Ey@yG-9r2SJ`*8Mc-BAp?lz8iE|Bl6W1vYz&fDjzqnrGEdqRlhEJ zb?V~qAJa11&zmz$>>9a!+#hyhek<#zo3o%GYfrUPj-7f=zZ*THcFKHJm1;xtGIoV+ z$jnZ>y!Y(7a^qhfX*0?6yKb~7Mxy{6^ z&$+YjjXwV{>O;-B4UV)p>@e7A;I(UsHfM|8jCt{K<-)ooqS1$o`*H)fWzU%D`|kY; z*E{Qd<`19qV&B1Q?H>1@+@kC58knr=dp`Y*SK9+4FO{lbn^5sii^!arz+dBZrp^DF|L$wQA*G;+HkdT-Yu1 zeOC4L+plNpk_*bty1IExmGL(M-#JcMdvL_&BZKc|W#nJjvb(BLk(@gs;P#7N;mJ*+ zqiMH&i~rUweBMRpdpqry4wa_uEd6SyGAGY)VsUTnE7jFki|=N7{rcFHKD|nlBAxbO z;i>-*L#~_ZlgTDKau_(TLOSVStV`S~rjt+jU0IRk zrIPxUBzLH)kU$;)Gya1W>X6Zu6FF{Qu?~r-!rZJK`B*WD?5Wa-%&C+_+E#5uDpyV- zLbZnEa^+7-$`2E?ys8hKGIfo!Om#08G8 zogG$wtl z$wbp$2;MC8lItQ7Ly_dRZUK^{5r*3wF7pYgrOQ~Xu zX^G`rqf(RVDWQUjsD^sc>)A4!($aE^Dym)Q@>gr`0bv$vKq9l%WPv?iswC{55 zQqad0v5A?B&rYqi@x0iqZ@=qpYD~UVcle03{6h}QM^wCWy7{^JhiiUtc;=#?-ezNm z#de8x=a$_&zL~rCvZC-q8^#Y$T-}8FGQXj`#uYc|O;6c;AEBgMj zX6}l2c@dr7-gc>J8fJQNBtd`jmz)*{H)o%|k?;HJ+|mAj=e%fecEp9iajRdxuUPoY zt07ghfAf6x<1$^(8`FM@yIJhPp3|(-;+b*&6k6w)(H@J=; zRK1^iUBFzwO;`HdyH(Kp_fw}gI-kvpcj>WJ`9}Yf!FVvnZ(rT0*&h>kd^(+SpyNMd zHtbEj>EyhxUWg+9X^%t8G`DxAxo&E+r_F|}#&5Kn{;fW9j&9vQ2WH(l_D0zvu6us7 z)~|mYv8A5(^EcN&#hz|-DLHb=#j4JKZiuhjtm4+>&?Q5D?-Lq*rtgI2b!O*}+~45G z0|T_vvL`P}37Ow#!-c}SvNI`1b8?dBU~EB^fX&5B=sopyiMf(jFU zEB)vpnYvwkmv*RLh5UuTw9lB)W@-EUIIptDM&vEt7hdm8zu3(5x~qpZnQ^dmct_v( zZrOeMZgtL!-uP<7@wty2+vd6*s@3snp_>nxoxeW#=Q>$-*<*r2ihfRO_p##Nc`LJR z-Ut3vyWz?@d2gRAYdq}m8~N;4r8XRYf2ZvD?!Qc^TxM6D?K!DUg6+Hq`K|iAeogL; z>l4%86ppUGGH$$Y*Vd7Zk4VPpx^=XNf-L$;>&sucVaU(%XJwjQhM^_RhcU+FW^_eNvC6Ee$89 zT;1aMVcDBfT~{ql>|ZVU)UzfJ9rb06hm{pW{;E1Gq37HA+X7A|m1^S_+bZ$)@vDu6 zbvNEFdemvc*(+l%kC8W?mD9KJ&!buf?CttvTE~G=seu(e-0y3QFHf!=_agtFst%Xh z{n^{A^}++!r_FU+B|m+&d9~w<+8I=1=OzCV`D*=(TUVOgSvqae0*8@5H5ho+`@ZA$ zUb}|Q?S0d6e3L()-F)Oz)*t2rzgx9Q~ZJG&}(>~PIT^KZ*7eQmB~_2}|s z|Bs6vwo4s&>huRq=IqSAib=|Om$t8|xMSwA!}ppWY__syeSOi^6_an5^)1_~{6te| zrCBd$-MjFq`kHP{$|RKQT08UK`72u(j(as;vS-Vuls(ICrqmy{(%a?1#tK{K%}&}R zO!9Tpj=IsrwIIf|@u1&d_U-fB+kQ}!eQZ$>RVHj0g1j)}nIpGc6nNwgx4<)sBljSU zN{Z4oD)XA4lGcQhz8_9*LACm1adIMwOL3xC+X_{PsX-!hkG^D1gDFb2Rcxw(9@SGq zlxnNJ2upWUmGjW3zwv4&vNk20*rvO(Hr!7McW3HY_&pN|P7SC39{xYWUARk)`il?b zu`dsI?>BR1`x|mN^$0nT?nImdJUumPzT8<@Nlo0^gq1B`I=?P|8V$2(Nqy+`6fu-k zNOu#ABq=?d3~1&=ACHweLh-L&_{$C}N~Y0hh^okAHQ`&^mtp_DT=)bspsWK*zh59Aqe(cON8mXV-5>zS> zdTte=wdckg%{>HisdXz+t0EQJ)FRVcx|7LmLdX&R>r5WCi~{XU%C?ezTbh4=Y2`wz8YJ`d(rEcgWnpiv8vDs|wi+!PLFwd8W}u*9 zLx<$IaTT>1v@}Enk7}szcPrY`(V6C`Z4?_zx1Dbz7$l==c{F2L4LR{L>`N^VItG%S zbwWv-OgEJ2nW@45*IJe%hcexPu4IN0O(%xDI!2Km95n=5&C%qJk>mkKN01iYneo|o ziYA$znXH6P(ccVQt%3XuhHIQ*?=B@d)yaqWXEFBb*OkPzvkz&;skHe@lHA#wOv_?I z^EyY7lN|j9dGp()Fql!%4W#7Ycv_aQ4^p-j-~;<;^e-25RXSih{cHg*pQ& zw0kk9GRH@0w00$EP?ek*GQT^MJ_zV4N85nnhdS}u1eUisG45=fSeZiKJ%$YF@r5h5 zdokjp^HoV6vPD z4*dc|lZLFH5lWu*bzxA*3nh*Exe6w-XIT`P*v}p4BhcY~?ws?Ck~CQEMeO=>@^M}S zsV%|Cev#y-{*3+E@<_6qqnH&@44`iyjtx}RU1ANG`fo^7MHmEyas0#yp+*Q_#f>g|Fpbu#?NGj$* z8V&R&v(1!}OdjYEsJ!=O=5r-jetUZqa z>qszia1ccjy({sR6-WpqV!==|Qy`EpyaiW=CCO zW2n_w4GyhF2M->s)LE^VEPYCwV6tMY635SD#zd39$GQXU9|J!+jvf-tHb?z{E^@RP$Y%oMdpRzeG@iifQIC%% zgrgon$2nR9RB9s2eFRjWqo@fnWb{NRA|I)xfk#QA#Z0-=t5R6y?sAax3;j zlfGGbm|nJ%qsZwQ2pV*x=Hw_5y$H9}^8a#MtmhFwScDA5Ag%c+KymnB=CTa8zMd|Q zn(4gJe~Qu$lZC~jTEjQ-s8-M7(XT82)|r7|UOyv*h_l#)zB?m|ROKjiW&|0;QR|uT z#_(-Q)%-f$;t&vq^C_%k_Gd<$bC*7M!MrVXXa>_p`Lff zLcG9>(4}9JYA=W+qZWQ4e_9Yt?3cO7829c4-;OsV|GOX>@$ffC6Bg0vSIZGs=jh<7C{lI}ldM=B<*u>XU_nIBK}yniwGWxQ#+_q_ zLEhxz8YRcaknXdVrALuQSgaUty*0jstaamfB=GUItm^e^qG`lQIbW1?@ka7wO*A>M z_X`=lHcH8#K9%q`jE#+zfor|Vz;%2rVo6IFtJTuZ(r>PfCTo{Td!v|=dn0KWm>tP? z_AV@blIgT;X;N;Syl#puJvlc}5kqe$R(a7^76MOrXGDg#aD zXu!5;a&|itRtTir!O%;fRE|{Jqsau0a)1tTv~qhCQS4+=?gQ1}sN9YylFv~)pzRzz zpQ9ujc6gJwoVvUtn&@^h>ApLotmADRv~0W+R^|*-cSey%934ekVyL|}V!(=euF%HyePHo!#%`(W;VBi7%ZkM9i6-MX%H9)2ijGKQ1#HXrz}J4q)^}OD^%w$w=-wzo4kGr}A!<^R-h1)r zS|aD{jS|uISk(Tv=U<}ENHac&%8m7ZzoT6i5YISqQm( zNQqLH4u+AC!|p(Z56h9(hgn+kp)fL=r;P-(QYZCP|kem=*O2uHlEH+C#5@<^nIKHe%0V;LQfM3UvF-9^AfN21YH z|F_4Mf&n%m1wD1^CiB=>vuFa$Rxn5w;-!!OW;dgc=ewCO^K2{;E$ZW~Vi$cp+wTXH zKBrw}45z&cA(zg$!az6RqmQ2UBfe){%#`C9Kl0-js_q#-SF6peRA|H*Uvlhhv54P6 zIi4$~K7*?Jg{pMcmkc*k9%R5-A2;jcb|%q-6oT*5IY|u<^75AD4|4aMH;KIIG34lFsjd~kPFEy+AGp35hh0X%ZN?pd z_nGm+%h&{14Pz$%I!m|mBP>1eN;Jv8D%IN(c&8c91pZ*g=dZ+&3fCkZyspNOerDVV zc#|1Vz52}|0TX{5EOFPRqR!W%N!ROARY}0huCrdPzS@J#zJ{Ie7wW<_A2*$~i8!Cv zb>vtD`jUi(*L}(S8(+HaI=b!)bp(|EO-YBh*U@!mtiKUMrkio@4Rqa2Nw*C*qLupZ znCclz|4x_2-bB~kGIt$tkr}VJiLSeC?mFPDW*l}a#`=_inX1FB7!q|yVqXXr>j}#` z@m92w?+;4E7`zj2SKtG)#cdt`CAZ5d4c}?OVV3@#7Rc^|kx>uaL{w4fPC0V-wDbRd zO+uzO=r^9a<7z|RKj4SPUP!QxJ@f|4*rUzE;@D%+Ll$w&d=O5qK4c5xsRvjG90ua2;ixvyXpV*eJ$u3zNxcCP1xW9&2osjMH@_=yDw^yf1kOLivLvoe=lnP zN>X|G^Q+|KsbEjN>6;^cY)Y_sD5p0`{r2@p-(bBk>P^zNBI+L&cBj1xr8maPystOti7o}K51eXn|}Id8zC$t+mqm8*}^rENboC>8!L}3)|p%5CSQY<)3!E3eY)IMNTjbA>TU<* z+DWvb6Xil3YGaQyPKGLk2J~cG6Cojx;p3teKR0zn4z(<6g)G6-6F zN@y@23mJ4=3tCPsL<+6w4nLs@jq(waXuHxd>t2T5l*WI}nEA)})(k?AZ#W@$r>T07=YxcvbcQ|p zsMR5%3MIj)t^d*D-0%Xw1XDn(?XdV4BZM9a_DFsa%YtVs-=f&jmrty zG}?e%r!bU#6)xZaj)%FlYly%dv{9p>Gr|OHIjy_^%Qzb*d~>+M(v{&tH2ra#=ptiO zDk$sy085|1(yi86mVPK)h@yomfiEyD;Y6yaq<#^C_ct*V%dHiG$|{G$f`cLim*nE7 zhu_(#GndE4U&(=KaWH5xve{W8N$U|UGh%Chthr}l=}2LY9bG<#O_33zg83F?S^H6= zR!iMB3*j#2hkM1Yr7&47*o%=ywKO1&YMvitRP%)($jDFF)A7q9hxDLU^s+%{O4n-9 zFEveYD>ZZ&MrTauwNpB{piUKlrs#!P^j!t?U!DPJ<139IGkxro+6&L^`P&s+?9!_=P6bL&ou%AP3bJy3p(O(3toHVK1Fi zAE;s-{I@KTvD6WI&<;tEH@>d0n|4nIqV>>dp#gFycNA=BY<-OQU5va}U)VzrrU1Q2 zM3tjbfz~A8$Kaq-x&NhbszM6&^ zbmK>)6{HKhXs;$f^BY1To2Ed#^0tkH9du?>2}mqVe`*1g+7wgYvn6u*YH`1*P?Mfy)jf){n=dD zN#ol{EcIz+wzOolM3sDz32cRSOv-@d$kxc1*$yT4v_^|!+k+g`1~&Mcp;2wY^0EVR z12T|1IumIZGLT!lBhc-3&?>bPa{ISOu5)J~eFs=W{TFhpWg?f|zN4oyVZX&*@MA%p zv7%1t2m$bmiF9@+p{J;cr`6>kns*lN3L4r|0X#knHW<5u`3#(%Aikh><;*TftE0YM zFv*{e{vRfJ$@>)+j|EE3e!eX6mFUV?tVG>Dh<1gKy9jk15oxfv()jI3i_xh2?);{Q z`U=Y%=(~|p9dOS z%)1uj1UDWQ(mP`WoMusR3oHE_Owx<;DHs+!^F?QERL{E z)Mc{}SL;tUQ2t<64WvVew~HrnTAT{X9?G4Ayi?_ zDY5lu>Hf1Z&X#Qz_;U!B&}_C4DVngAdg9g1A{w>`Mh9AT8~4F!@fc z66E%@e-UC#T+>$2>vu(0?|A8&d&wQFDn8!${bi{8W?@5^IfyjzGf+%5>G~diC0$L@ zE{Vom79uS+x|oYCFz@CUV&1*mCLudoc?;XYY-h9bcdRdGwqPQK?!ZiKyA_jb>yBc+ z_gfKQChbH<_Z{Gyx=rXz?RPQf{RhaT?LsyBWEYtC{DB4F>UOyNmAgTLIgxhWga70^ z5&e8%X!=e>H52wiRHI$O3|j7Yq#^jTp_O(cl)LdeGG6b-8kYM9GB)f%F{eL~marFS z-k+!vO|YZa_o5C&CiR)(z34-Rpi4bEWM47M{y)INcWhv>r)~elD)nkVM4@fA^!cCA zx$-J3J%bf!G!(a^BmNRH>0iIXWzF9!RHs$;Ap`r?M0#MKP#4k6f{kJlZM7d-CmzDq zjK@FK4}hF@1-h0y2>sKq0$n`_mF_Ua1H5^Mgs#$J-}o>xGOi=T{Rph^rU)~WpILbt zbXLcQ7zQSK8^cP{QLGetQ)2%Y+xPg!0sQjAO^6!2Kkg$nX{k zk7M|)gbyEO@{e=*j>njM2`4gKDB*Dozmf1^hV>^T{^O97cY@cI$nYi!k7M|igby>U zJ1OaN0%db0T%X|$C%K%lC$J}cF5v?#J^mC=w>t^kUBY!w!VRpE@F9g#u5b0DRA6y>)-;<&dD{qq*W&)=>i?Wfz=7I(P;7sR)+A8%mpf4+mM%jHeKiJjTbyNFPm z+yWYK5Amz_Z6M=)q@88x^?j)hTl&i#kfZ)CCe!bN4154x;;%si*LzUy!WXjW9%5hm z5X?Mx?0w`8d4zha{|!Gm@iEXzCMxL({_FezQ`r6~Q0PNw@B0ks){ zj|LAwA=={uEbIDKm`-i}MX-%-u%-XL1@rWOk+JTbkRwAM(&q^%+Vwpg=$TD|r*uTM z=OtDx`3E>TzMbb?@z)3JPpW5unUl@_1^Mns@hR5zD`@NEe}yhet2jaxZ@}JgmJmY6 ze-zwB1G{7$>}ljDcqJBd&UW@Arc{-Ff_ajmpywxem7$+;915Z_BlehyX&`*k6888kL{H1d34g6|&{`ZefEn>rx5unBV{_k+Gq_42_0xEWco=8(I9U+; z+S2oWVkvsLoXpERUW(r>C%Z{QRRvrJX?hninRayt9|Y8+9~o-r zinJ+8p!cj;IS(%*^6p|~w(cg;&F*4dYU3r=2ZudPQ=AJ8kfe%H1T~&2)*Zv(P+}LIpC#=*IJ#M z!kAjB_7kJ2tG`sJ2P0C=#2Q9SHWQEh#7KJ3UsN*LQKdoH1V}{Z(jvC7ma#II{3|kO z6`$fY4CQW@7NclYbGcA|WcN1{?HTc#nONj6MtnOdQ2r`1XiT7_t8V~^PG+J}fEcc1 zjJanR>8xJ{saTZ!fIfMt8E*o+oNi@j;Cp}8U)`A*;YcTP57(n*biZf_K zBT#c49L!xKm|rq^{Y?08v|h}kE){_48N^(Agdtv$s}Wj_st9tf5njf>5)hhzh{c3c ztBsZ5QVyG-Oa035JS{38 zSB8=`suxR+uL2KqnUQS=;jz@cDk$5#hExnYld4cCrY6!ntHDgSYO*@2q2B(rkT#(@ z+Sa-@(C12URs5W1a!dY`Y2JZ4%{Voa9ir2-ff8})~7D|GARkUSl{K;P){tNcFD-_tq+A}B_rc> zeJIqV0YqgdiYZi?0whm@sEuuaXc7d}Zwu5gS*$~^v_*+K$q+vy186}5pr-AB5QEv! zj1-KQfoYh`cp$_>2Afn&a}YkMn6lfJQu+-mk&==oMtfM_@xgS^(22;Q4}K~ky(mqr#FTJM$86u3irHR#$Dzgl zcxYg8VplRmu$b3UpwEvJWO#SJ@LakW>ws^soG2#?_BOvvZ?V2>aAft}^}TRmD{+z# zW`0l1XQycWmsrLBqS#L~;*=;e3CwD+! zMr5#IkqLA=L+nExI|40g2egl&cI}Znyc1Ah2lQ`^&KNJ3I$*qf>I_i@nHYLIvXJ&; zM@*r-Ewd#x#YqL=TYS_}WER5%_-9XxPK}L8E#Q)v}Rc_Bg z+D~0Ea{6|M{*|+l>(B$}eKy3;WoUCZAaze5E~U#}pkXHlz*u ziJhtEAXMSdA3CmNXnueAld6Luz3~7{vQvX0{oVkSm^`FdfmH)hPf|WIG6vy4`B41# zW)K>L7zmF92LmZ0Me{jFnIR~9KUj34Ic0Dxa(M_^bu3AV)PKxY}cG97(1b(GkRcAtT?`lG=on+YTvBlckL2-BSaw8MB2cbvGx@Ko`! zUNYv;#Or9@Sg|}^EU^^=e-oH6rZziISc+jBQf^Dd^2Wi1gia7~!-^InU1@a~ zsp29SQ+tWYFdlf3g!6zsu-;onL##w0&tY!FTIV<8QTe;VlIl!A%7iT?Qu2_Zv^xFd ziWE)|t3c7$6T~pM5X7Dlf?ucao={l2q>^_+EJBi!&dMTiDYi-HsrWJ@IgfzAJfdkrQ-i&C>j~tL9Z9M?^MW`T^MrGc@ z;MH#)GC_QCDgM?t+o#l-1>fen22N$}bc|=dF0Y#d2NypBOPK&@YXg<)pMX0jY0!;hg7DLLh1@NB77=CB+qm zErKrOS7f-XVHGVxiLj+8o46SBeA`m&ik83=^j(H3z+q2kE&nr;JU#n5Vc_mxd*8rj6cJ$;*NPe~kwY6A<5yfr_4W@s&4M?lF7R4MlBCTjGtTdmU&2q^F>mZ=jZ^(dZ_2|>zAbI0@L^MM; z0rl7*&Zd<&OSRe2)*BJV1x|!p3v7hVS(){)%gc?3D`l-j5B8j?0u5S(Xl?Cpm^^qH z_O(*FzEg1%%0-VwTphsl<$ZZ_lbD4E;N*rL8`yV_=Ve3&lF@!*zIGUZ2+50((y13V+Ivqt9=Ff@C|Q9(+^{QBNrKb2LXE__hGe-ild2 zcwh0XN6IRe^0s&z$9NvGl<9w!;ECCW4Po_ta90|dwGI10>#Z0owsaecMZ?eYK#HZ@ zV<}Gi;7>I)d^-z~zHwUM>bM=Q?cT8xO8&ZCtjyHEvt10M{^JB!8%#V6Ewe+6`DQ1| zGFtC|>~D_2SIu+p4648T#8%F$lhrg}xrvFE@c%O&jkM!$o`_qxk&^=@SP*R=Y$Cr7iU2 z7NDugvKSW7vNuu+OYIkDD%kBbJO_I%mhzIW+F8bz8Xb=>6=pT(9TS7tWBX8=dK4o} z&rUPwh@+wh;I)=v^!R1bSsGFrJw0<&4F5LL#(@@fJtl^ESl_2dGxfCoF?8F2^DOq) z(-Dlgw@_y8U8L+ehTXu&qayzh-PbpfOYDb>KQ?IIHd`1(>R;(;-HZ$9Eqth>u>Wy! zqAh(eOXkit%WhtbV-%@tyMI`l*l3Fu-N5V5Me&^&xgR3;BkwIHt=2f^{ zLIEn_dY6#yaN2yh!8nIs;tK3y8Lb``Pj+OyLovLsV;y@SM|&9pyId)r;7I9?6c6i* z`!I=)u0W3TPLyY3i>ZTyNH9q2u~mOqj7eNHP-*zv+u#3?2p_I=`hC&4Fz<@k#2)sQ zc0&5^^pW1GkM`f^eU$b_45coAGmG=VTK8|!6LS8z$4&E5`Z3%`t4DAq+Kb^m5?;;l z2MOP2SpR@`UFhGyJtf@wZ&-Kr1Ku4o7!G;J@oC_1BQ(8^x;y~Wq1VOTft30z<^Gor zLdu8-sG#y2Oal;m9&laXv$R}un(iTpwfFdr)Pa7El*wy+F{Fi!Eu5W2FIh~DlJ3FC z;x~`Ne;%qD;vH7$$Z4Ix1tBj z*!>1gE%lCP(D#g}YbJDW(W0N;p~+zD!H73zV&z+S3x3vY5h;W14r9xHFO>;;2V$w2 zXz>oB107`M1rEFg??fXLeVpYCRFueZe2)XmZ(?b%)_xDxrwSQs1s%$WFk6Y(jv{pB zn-b>N|9>#Qg~h)*qZlz>UD)n}=HrDD@C{#=GNkwO-VmgU?&TdY2#JW ziAfzhnLDGny@%P!lsv14tt^7>wv)MXY9*uI7E^aYeG?uqdBJvI%ds~XYH25fVeMsZ zTm%K>frARmeG4mf(oR;6M*ErFHA``{XS~*dL~#zCr|HJSWL)~H$NWH*Tff#%Os&I~jY`r7x>Me6(tF^bMw0*F&yNbQp z5uq}>{}OK*s)diN_2zyEJ~F&PPKPjD)tBR~ z-e}%HUm0Enp&W0PaGVc1$9hz1RYuwc8T9W+^8jWkOMGNTl)maCGvUX_7X_^!0x-6Q zzUU3>4}qvy&P3$Unqe|`5yU}83@{TmeyA*-8OM2-C>gxw_eZ+LL+bAs+`J%{9QGPr z;TAucw%EGblz@@YQKV5lwy4D~oRX8+C zcFs}MshEjFym;tsxewRs;&BsQ79r=WD!pQWg~84(T-FE+>m;Aj+6W6HBiR7e&lsUP zh|!F2F-gQ9jHquWJ~3jrnJ^h)&0Qwg8D(;f=ob90G0MU`tlt&H7cEuvKF_hfEW>g_ zOc=!0pE2QOTA7$M>jM>5hMJ&>M=eRmlVGDJ80L!yN&WtS{_intd1hPka>v&L+!#@B zDx6wD=4?;5*TVE!Ra55U!A~YE$2Yz@z+8*g9MXJ!YfL45%f!O9=q1&~ZZpDo|8WM;eUM{h5l z*_?i6#k83%F3Hx{`>Dgvj{Ua3dlTSPwt>EJN}xiq`^{b1Y=8IJg9h!n@nOh^XHRN2 z4lm!OYkK&l!6zp#j*S03lVpFmUFSWSyzSoh@z-;!_-{Enq+8YMbvHUJ@LX7a#D{{R zYl&z5j;001E7AFnOI1#cyuCLru<<$jgQJFxYS?_j)%T%~(uOx3=ya(~nG42#|2Wt! ziFD|E*5<_z;o-W4!&^5^st~PT{(g*VSk>LXrnxn0Tzm2JDZGR#x1h@Lu37~%ou(8X^SO_U+(0dTAZ?~ z;>e(^;8xWHqwVRfP0qH@dpkd*)znMsMp-RZ=k(1fDyr0U_pJzHnSTzC$%@|AzwO2C z6K3|=zq9hPoct`s5Ar3msvK=D^FPoxxnaZ@_a@6{1RTFJsmk4uF)jN4a4-4vj80GO zmN(lme^$f0&0g-x%_zNMP+GLpl5)4APaZEg*=bdSD?U*x!!l2Rr+I9q4rwu)Frp>R*g@n5;b_+uAvKqw?H^O?JxMt0ez|q>frYg?G;H6e*3NkzBNoI>t&JVmE}Z|OgcUA)Ed7DP>lRA!Aqs(_e?C@ z9x8B1g4Z7W#q%JgRuVjqo(@TZ&p6dU=I&+W%U4ib(`LWs23P4D?L{Sy>OO zJe|%Et0L9UD(Q@tG8bQVuTN{uqA|wmXz&BkBSOo+qGzR%6wa9I!l#7TmzR5Drzq3n zOCET+HQ>utAq$6P-tw~Ovpn}obV{=97>#O)C1P$Gu3oi8pzA5!ytiB^OeHP3JzM6- z-mO(>v117JlpgR~XlT;YfE1W!W(r^FoUOlV$xlIKI&2p*Je7rOQ)IZMgOB|LZwdBM zA(b`Hs(!o$^fgGBJ4oio4|;UildwnupHs4q^N~gH5mp;?DZXy??fbr51y*TWPme-H zE18!I^f7Pob<$Ns3l(&DoWWEGlXm|lmP#GJk65z(Ob}BG64^&vq?_J?mRCuajm7>U z+taQvtefnTGkaajoyKR&+;A`Fn|9;NLOcKs*YVE@rk4!uT9H`rSzeG}KRl`1LXjreYbtmzi*geV@UMT|q6K0cA&z%Q<{ z-yE59p?;j~mID?)c68#U`_A?T;T>WSJC(UYdUTG=kA15P2~xZfF;nI&#sAl`W%6R- z{&Qtsg;-H13-q^nI4}5Xx~zjh4GUzRg;i$CRto4@y8FD$vtYJtMd7kVvVj8a{6Tao zRLzwQ7x3OY8+Qli$-3i>ZH|)`$Yu*P@gh#ncRAuP{`h&B4a)japGC6C5z^yohq&4~ z?Yno#%IOrO(n*)(9pY+s&ghlet9$$2ERA;AFZUB2TF}(RGOvQgGTeS#EMq69bjW^r z1YI;oW~^oLWswYx5#^)@d#RW`Ws zd|tMlrl@Tq3X3kt&X%SF(vf)Vm24jUwV_R9A$=|D7(mDMuqjWYJZw(Vte!|L=V{Z} zpB7OhE>+nqrKhJOF;8uSlihOnkoar5&1bskZzLXVXtT?o5Sp6(Lmk%gqE zO~o*JuZBE^zNa>q=;~TX{50Jrya9bTMP9xz{hm#lNXz|#)FXe}?DMAn`%r$jApbFv|k=2N-t-dhnfq0RwQ?( zj}FR%=&r+ZHyUtA?l0#-JDs#l@TFCL`Z_LMXpci^SjrLbtpOi39+JC}?6J=D(0Q2y z1}GvRnHaaR-N}&V!5Lluv7`_y3c1(^vmX3}(CXWg){tFb}C|RO9`~@Pb z>gdN^Rgn3|~l>9%>gq!Pb~B?cnhbTb77(4?leT!+{2!mU~)>(!hzatGF6- z)S*Gp!D;@v$8@|2FI@q^2Nk)fM_c^p+E+3KSF66IT3EYyS$t+q`ZY&J_*4$3@yQqI zm&b7FCBL(wr&H1d<@egEH!Gqyzf6elj&LCc^D71T$_1zKK>+qkKW!KNq-B5^uBxSm zc)?g=Hfx3#_c)Dr$@nkswo4XeSIfD$R?%WGSF5I_Bz8GgDuN4O62RRIGcbSNojrat zr$~3PX_tFqX&O5i(Hc{(rgTHvAx`R5_GrY+j>l506I2@W%fmR-HD8^^p_`P2&)qUW zE7g*frVY+w6z4)Sbakz@uN(y@sw3)9vAoO9(ykDqG0YYvJ7<;V- z?}}vf%FM~die@F={3T3eU<=JP)=B!&_{Z|nr2G~>=Ij$S`jRrZQHon_{){{Zpron! zt35&HFSG=i-&YJ$6+iHt`2-XEYGuiWrRb+K@=~Sw$Ccn}iVZ0}ZNpzI(c{738SrO4 zm6s}>0`{eKsxPcMsawA^jk-PqJ3T8ei)TGM&dUAB0dJ>rjk0pHGw~Tyoq$Ud$?X1`pNP!+a6C+{uLZD-}qVtHNR-ShIZ z4(y$SUAN@Eg0ArVE%|6$Mz?z?uR(oY$UW)ShjLX*^8k;imC~qT?X*aCV?`QP5w*Iv zFW)dXqgQSuJ^*A+tKBp;o$;72@I}H$o{CUAB)@Zf)W&9F}DkExJZ#hSocD1CsX73z}i*{9~$tFyfU5f0hM(BN3NE0v7E0?-;7=;Y96LR5Y+?K zNQ0J9y|X&yWaM_|JjH{mLssvMcG;QbvwC-Dyk=n?#CRL1V4z7a>5z|T z#M4)Dr^@D`*|ASfRtIpx4|8`C!4h&hLN)kXvoIv}=+!+}O5;631Fs7@=xZ?0p0DLv z5&NK}ujLJC*G~}d@$gV*ZojNJt5AK*8L<8rEg>kAJ-DihnK)b1tvuSCAE0<@iRt~0>Vw0ha98j zCYXU^$T#V<4ExdbZVFFHvgtD<-?V`dazD%Y4Rywhuy5;Ud1+g81qL8?9G|i8L^t3U zDu0$MXoj0YDaNYkWkIr^-Lz;$IeJX42v*=VOSF&fjaMjbRIw=420U`sSsFUuLE$lN zw*p^1rNd+jC3u-F=rbhS#;Tw$?!laJQ3OzLK~a|OQ7D3Cu_`?+AhRmCz9I=a9C zR-Pm%tJb75W3&dleJ0&59?jtt*YU0h9SiIf!7QDPMQ}Mm6#ilvE6)kqR;IA! zwaMaRwKT;>;SFvmiE|@KJ{yoYXTsR=r}#^%VRWRuA_&X|8Yffu%Aq3UvNl65bOgZ~ z4QueJAz5Rn4NR)y8Fs2zHWP4k!X@sqLAUgGfJFR-G@2vFundqxBXzXG9kVNz)lS>G zDLjyGpq~^9U)FdXF7>6^DljiujGp#l7cQ!KxS(vMG*3s05xxuObvaH z*($t|3UeWq^#F~tRoJ56S=E?>E=*r$Ap|nKxua~+&&j0}At=R+rItEZ!;PikJ%SFC zI>c7PtJ826J54M`kq*>tzRd6`d6!w5`2Djt^;L4j>=LMCcJu8)hnc zqdfH5W3R9g;^}pJg&#K{M$!T&G?$x4ZPjMNc0)D12>I7_vI-2AMz_=fF(H#&o&^y4KBA5yDtabdsaOPYy;lS{UPT#>j@Y zy*5_O6vdYrS%!!h;yUAH3K*n*sO1Pzf}0}54!q0`2G%|=_E+`*Stqg#HdYL*8@%W> zM?U=|c}Du!32LgD!Lh(`!x@|)@g*eEAx_Yvy)#;;VS~xQb%M$`wVGH;;Y*J@DdeJ& zEA7d=qz)bva=9bZ;SLTL7g-7uzjMalJ4fp^x-Rr6dq|aP1A`3k+TlCD8VQ6)CMTexiD)6R}o5ITmM%GhR zH2j|m4+2!Qm7Btk&UaPFsc4JA_7q5l2MBC+37}V8q13o7%lLC5K7S|mm)G-fqJ>%E=O);;bRKZAT=I%F^-Kx;SwNXPhe zm7F8em}5{FSl=Otk}Evyjj?JbUu~i)FXnPs1@Ko~=4vJE*Vz}{{!GbTRJ<43%f>c7 zZv@X}uR>|oR>^tUfHKlRPjpxt4>(y|8HGqbl)=I0;T#XNy0IT5PV$6fL^4}k=w}aw zoizW9u^Ofhd^gCDSYwQL}(0taq$wFTA0=YO`hrr7g4P=Ych&4J*XRegq%@E zdKCQB#S5diSAfEusj6l6)pGmVfxP-FVK#3GRFwc%$Ffw^hW^;ok5t-T{g-ws;c7x@_7M z^a~t4o#%ta9s;nCFYs3=%dqkq^A5J;T!DLM8FalLCLR-^K>)+&dNUuGKnzp_iLrWm ztSnZ3{E1M``yAek9`oT2;JPpKuB`QXI57|`KDptC^{tFA43E+6Piy+3XP!V3jrU`t z8!tUGPNp7nr%;dX@`W*3sA8+e`iyis1?IK^p`(v|Fo0R-piB1#Kpv!&qc_VSioo*B zc%LydO!k9SruZs6%dinB-E|1EXewW;q2_ZR)OZ!Dl$MTeEV*Dkl*hmB$%7)HTYFl<=WtT7tiD>SVvCVAV^XrmMB z{e!`Z;9w1(O40*OOAWA&uz*q0bErQ`v9X8w!#WZ1j2*L#mcP+PpQdM^ zT{akzbXy3bA?|Wb*hy6lz;L};Uf~|7=04M8zKmjF99^siUn+&Xc>#QWF(cXOnEEE{ zUSaoYbXh3ogPOZfL}f6wQlV#7FtJf*j|`?BR+iR*3SU3-9;}4J1_PJId)yu_i|u;g zig=$M48&+7Widudl~LHUuqL$(8(Ex5!-ppvmr6|^2P=HIU#k=Zhnimos}`>0b7qVi z2t-U!Mp1+2{Xd1Bd+;9BdEZCaIubJIg3t{S_+cz`0ZH$DcfrO;;%;#f5HJ!5{SX3V zkN`>8jtjgYZraYYnM85oGr4qJCz)~5w6<}RiQSnbs7WSM8aF1>G)?Opo=K-OPCQn~ zq@8*k`gzXozPtN;-SYx@6a6x zx$NrH&zo06&Bo<80QM(~Wk}S@#;prJW@_P0rvqF43_FC&DpJTJGNw!~FC!UAk#-NaWnLw3m`9A>GTwWgPb@$AK* z`yUwBY!rI5B+s8*9X19NNu_zRIo`j8efnE^d)IJR{^|FHjV20))pd$(Y!2}hz-B+G zyLS%}4DtLsOE<)S*aC&Tehs=SneY96X}@odH(mpI{`s}6eb-jzz?*2eweeqG!~UBM zzkHa)2Jj_l_Z9qNHN0NLZ(I{LZK#fkb*5m3^~%5DV8rUp;XT&vmiXoC!h*ePJIyiL z`0`ft6V(0M)^bw{idZ?=;3*+ixo$Hn{CKk?8Vo_M1}Ua(3U{&g`Dq4R7w=fdw?`r7_o<_b?*& zZto6ltSUm@##pihN7W}?yAKBO$hGJ@xC+l83GP4L!Q=@eTv?2br^*^y0xm6XOu}tc z9o*|auo+_s>`30tn(M-PB%#d^;j(z0nE~l}61rcymVqYya3yx7Z38ZlHHoXQON?ND zC&XX{rN0d^NVoL24TJs7-y7^mh`%p@iNCqi zj6q;n4F-!h?M$w~w|AM;G(_NZ(cuTQ_h{tzf%lr-9B8SIu<<7A2-PTKd0r7`TX{1EPk#{#D zSFDSrwxgr?Gd%=Bnsf3_Hpkm`!>_lD34+|aB)rF@F5<=_@n_8vFxfvs5!;XW`fg}F zb&%FZp$Jf@`uBQlPLhoyOwctw7JU7r>M%avgI6(ot!<)kEC~MIZ~?}d!Av}istih- z0FtO25num$4<{7qLcc!}*Y;tGzp6V&f~E;#0UYj!jT`1j8Cvjg5H^_zgSJ<)j^FKv z<(sRxT#FWIYADPr9{xcei|MB`c-#;ZZyJQ<>#LAo_oY1k^aWwP&Bc~N(D91{UOGF3 z)y?D|6$688th}Jj@yJo=;I9X;-}QObd!B5|QI&D)qQT}}ej}p8Imy->m9n}pGiHRW zewjhz&t8lyEE2CErxVG%F@!}*_SvbGtB@bqyDHlN+5^{=z8arQP$cao87sv0yz1$Dwzqwr-v$wrOIXaCjLaE&+y? zTEUhOqq8zywXm&(z{uk|Oj<&qx-q8IUyZ|$#yhVMmo28)W*xRJ+rU@lCxMVNB?Qz= zvTCLv0Rpo`71EsZE;YZi=X*}^p7*RN--f3lAO@0lRJSKknpR*CDfKL#DvnUFMJ zh8#A$aB7h}5;kf--f=^?+qC(m@i%V>E4Ixx^vu%_Ja@R+;3FKlR5;4qASwB9c=tK6~us;)yi7QM~=8 z@Dp+Gt+3g*Zwix8ZeIN6O@YsE>~W=DT91tZ zMivp=8`fL?Yqy6h9>)r|k!rEo>Z+u8oq>`4s453(Vbg+Vz$@};`WeLUf#qdMfDrd( zmA!y@qj9J{j&ALd7geIr3!A_4yhOch%X!UIIYI@|z zXd0FNn^Cc(-(u9>FfFqxa%w$J%dGC(Z-IyLvD@In!?%U7yV5kX#g-bPj>|OQv@Q&^ zGz%NA)!&3m!&$op3Q-Uq+2%ms9@gzL$EH6NGG;qxYHKzeBJ`cxE!&n}sW5K+H>2X} zyn0vINz5{}@faVay{x5a)3Nc=kkak%(fw|}0ZC!t+&PLJrG=3yON+MwThqwmfxB6J zQX%+o{#9z$?_{fOksj4aeT-^zVm3wcyr1EfWwtJJYs*0)oMup*oA=%WKaOpYqpB3E z_1G3Usx7#t<0LO?%cKF@){g2@nFef&#wm6S8XE}Y=_rba{s5?ZYLW>EZ_Ke(5@ zn56ZW7b>(LkK?!Yhjn*N(t>3>CTYQSIZ!ihT5we;*cvM>47WDT!$xdBi&P<8``8Y1 z2C4q>9FZk`R$UL)yq2Yfmo?X|-m*jpRfSxu^)P<(F7T1o3Xj=5Rx)0zMLc|8xNbAE zNE=^Usk4R)@d^sO8o~95dP`y z4a=uRTC?cJBCR>y8_`yRMOw4y#v-k`)Q#Ny+15l$xoYkmDP-2 zJ`kRbOYaYtUQ#}oy+$TJe&NH_TNkBVO~tkGC+@4?N#NNl7M6&={BZfsh4KI1$4A>1 z;@$U$6Xggz2gR-CllU74@zB4$k9qAX62lJ4U5%R_2#f1#U2x{a8Kzubfp%Z~{>4`K z)ko_uxu5uty=So9tJ}4@{Rw8?x&7hNtEeSQl|~qiwJbPuiuxh*P7@$r_4bnf3I^zL z^3|$U`F$|`E|t3d{wG#x){7547#6lZx?=bK<0p=vp~iXJ>ALrAr(b-$+9|`h<-s0# z6rbm=%@)>uIK1am?_armdB38U`1J?FKaZb$C|tfSVWjgeA?Wxf@BaLw)vNEZtw~X1 zGBe+M2qySn4~0+I>z8dva5p&Fka+uH2LIuQh!KDD!EiAFLN^J0A`YrLNYeHtnwHn?Uhbt*3u`bJ^31cjX8#IgFbhr^~z>MArV z8cZ9N#~(f%Zs7DsoIVsb2kU6OJuW#IMsfe!OE0#gv1jkX=eg-%=v`9F;*ULj?4<2N zfB5M`VfP9S!dPcL4uKsC)XUlb2tNLAN{`;*we{AP6L7X;tsRLUJVkPC0yxpP#ay2OsC@|FECykMi>y_VbY^`T4U)i9>$BA6CYrM~SEWH-jyG zg8JFZbJ9fLIEtV4(o?`*dV+Sp`2n`|t|!6@QYvph#Q^{3iEz8~KM2p9d79o&9}9P^ zGE1vwU<7yku08qwv2fe_N)1y#gPRFab{H}v*}r%!tX*Al*#aC|+Bfm9pQIC$L7Qp` z(eOi}!R?R6bH~X%J$o!HzqATG@OsJ4eZH>RA+vg8SI19$BwU z)iJ!*iNcJ!$FCg^@7+?@q~G)6nP-omJZ5LiN>_iy?z@Q{q_-z=!$-n_OB1KHj*HN5 z9$)%M_{j_N{-mFeGyJR-&xFfbKX*P8ewhr-8_$H^hEzJ=)OBeL(sfv4-0c7+(W)GA76Vm5^c0QW8x z=<&1ZY1#?*bU@X>`4dbkvpBAM*w2c%=On{UQry=)?U{Rjl2-?2e0Lva1$CTn*~4V8 zx`#RSrTypT4+;v2hTFrDnaS==Oo{lWJxq}R{}2ki>UkcH%`bEh$5{C<*u#mruZBkg^jUj#Vgc%IzmuF-&)Y+eKgmNrj*+Y;e4|B|pH6P_+3JrI=9p{M7MSDnTvAk(Q?zN9H-2vvBJe?4Q zU-B`Ya$ZO_W=#Ay9!O8qu@N^cd6f9sk1;GCG?k9+0^0NTu&~m3_oi7vdp^#n8B`-r z3DC#0>1kiZ4yUaN`h1*@Cl)#AcFa*F*!0JEm_F(39`Yg8_-cA+R;YVO_&C0457W7D z_i$nblb_%r_ua~yW82hEuo%KP`qb#`Tzb{ihU=FELtOKZ=(jKf%sm_s*j==TbHw%t z%*5ByLyOk9H?5Fm$xFOBM?wSpq{WH zlJ{j^O=mmYs}nZ-?8{;6)V(*r98d)S`#G`22ZGYcwsyA$v*b=2Ht1(ibQi|iIIf8) zVKI9pTs(Ccqob7WYj*^!Fb}c|L&rM7XYZOr;o7BSmxJ|d0Og zpo68tf-WpB{zh0!;wBSju~d*7io{(yuG{Tm3^M%ih$BHblE9NJro2@cC5$&aJx<>M z?hZ0RulYf^U`7U+49(Mb@1}b-9Bk5}h-tF+d-!Wg5}cP7vcsWKSUR@c9V8oh;oXBq z%q{A++m>bCCZu8d=47{FeCw64_IRIZN*|mkRM^D)yKWbh1Ilg6Bx4_+k!G;XL>~8{mpm`#n`w;19qGAObir+wBl6 zAV#||HfdmiST}I)EvX)*Bccul!@>gl>D^i#KsXdL_zvd?4o;%Cc&lWs0rwvW1~EGX z{dwW(XxbZ0dW!y0Zdugs>aafq{gYHI>Dr~s{v2$q^fAGQ_v!#aE#htfy?F@?Oo@h)*4)@ZJFR?Y&yi%oGr(-AyZ13#pU? zK=1PNa=LY)yJ9#@1PzDBJz58x!*2$uxP+6>vwg3(eVUKGH_X5ju_1to8884bItW(q zY<2a(xo#75X$vv@&rpLYWVOeg6{Gl+-wRH?OFQLvaOL^EH|*tBV^oik_8(v&5)POQ z%>2BAL-|8b(8}@khQ%sWb036o*su@%%ZhQqJ#h_D9I|5U1kYkz?jS4%OgL=VpOjk% zCK~h;KJnB)jB8GzrTP4dWwdLor9Xg)@dAT;?-Y#TF8O!SqB3`4B%Y3kgOsT2aw%6p zSW#GaGH5-S`+#~GX(w(g6Xc|`w8NmB!747Lib5CznB5uSCXF^BWJ?;@E~eWl}4t`(4#jK?#TUORZ`WDy0x zL=;fcCCU+4n{z8J9j9WzE^3I~>WT}$k{$tean6DHSQPDu<#(|FY&x*Zg1Q4w21@;t zbTN}_mr7(jOpK@DWNf$9xOUvrU@+F-a48sc`@{@0@rQwlb54z#T^`~F$>(69=;*D4 ze~vJ=6jv$Qfk{w?V3g8AhF$LlCg`agK_o-uOg5T|=Y$=tD=sFY2oalNlLBiKS3(Do zxwcxUV6|45w$NXwTHxf3>>aRK%%kQAqG+;pxU#YkVBM{|j`_fevUk8_?>Ovm0*Q@b zD!T>Da*y_JMo#1*#1S9yd0@W_z=U%t5EEMqnCa%O#D)dLtR*!iW-Tx=YjJR72Z8yN zO^+h7mR6`FHg2n^1z@5Us40^eA23l1M2T8zq2z%P62t4a(Ud@<=QKh%q87*~h!V$i zQ_|_T$|)m`aLdptQ^vo z*@9arjv0rC#6Slo5)(s06dW*#kd3jDJJ>S%2Po)5rU<%-^9#0s3AV;Wrxjacp?Oqfm6mhNIKTy-o@zf zT!P$cFdhHrXTlXz?Mv!Ra4pqC;m%2M9;iVRpA}}cqXFHy739WCSR(`{c*b5@64{Yp z7BIU!y3-*^Ug1K{j3Y>VJETzu#wJkjBw!EEZVJ^ZF zNjsV35~Cu&r;{e2H{-fm2u_fef(7oY^{g|Y4og--p{&qMrsW4{3{i+vjM3U4naLs| zda`#J7T|2wl^V|g`N@zR6eEt%wKxdylC`^}!^auH@NxXHUkgX4p5VzPirmAG5z;}< zI~FHJK?KOtEET9?yt09{XlcnM_*t;aNnDQ%mgpCWxsa{_@2rtrmZwjG@#*e}R=aoE zl~hYkVx>-qUOJ{B!6McKWgjTgE*}BYqK#}k@taGTQ~C~3YkaHMqQcc{sf;oF!izy6 z2_L?VAuc}DES3$uDfLlx(^&FVpaTO)7&9}YySw6ERv@1Qmag${ua0)<<1h|}Y2)AB zNa2ZJF}^ap^OK(oH*javxzB~I+oc5=K~KRD1NWw``Sq}No!?JN-p2h{{Cc=%>S=>G ztTLm8Wc(@#I|wrn77=ZNO(8Oq@I)maTYhDZ?v-_+i9E*>#}FHgTghuqnn@KaG;#!r zrX*d}M!6Y9d?Z4G_}ru-`$}L$;sm6TL}gL-;yIH{@kFo;i$-R$M18ryjBIbU?KI-vcUS=Tn}BaG(Q5)s&Ub}&xI{cZ@m# zITZt}%#t#v*~SpDl4w$4rkA(niaFVFLR(%+_lg11(qV=Y3K@jW7p}*an1#G+TMqS* zKH9;gn^`0F#bC_1jo8yHFtL0y%)kzp(lIbk$5Zl11VY?On6-CQ(Mxic#mW|io3T?x z++c7Ev08EZ#M^S{B|k87K&p_*Rps8kqpF$G z$&UKTeMx}TE?@GYAO;@z`Z-|aHM$e*Z9=e%0wZzS%i@3heAvnb-se9b)@~8zG852s z#qAQmitSO5!tkRI(-JXG*0mO34V%DqG8FN084A51V_=9uM_muO$h8Ks;9!L(IMO7_ z?}d6d1$kyq)i_@*>#?#u3Py3_9->J%k#_f(l1R5YE1CCcEnq}2y9fuCKF-wbZ;JEg z^#|E|k-;R3<_sdHAA>a2nN{N2DBTC;ftBeB!+*V>2K0^}F!8aWe!kM-S4UdI?J=o< z^r@omim9(`wM+X?Lo6rXA>#@PiI_TUVZ{P&y#tn!HCZ+|JQ`hf2mpF*a9W9Nk;xpgv{aml}fkNr&SyH*}mq*}ez zWk)Bx(+7-#LAToeNIX^ArNhOxzbj`%M6EJ+Cw_MBoCt2W_TJvJQahg|044>uz$9x8 zEO+(+{Sl3-wti-;00it8q;UY+iN^?xi_hgk2jpTi9xFTP(@Nv zM>_)4-9hjoC5}xy348*hkkc6}2K0$IU}YsITQS=~v)TNLF}rFTuxUqujc{JkWT9(g z1uTfiW-xC*S}CS4-vY*sJzXpq%!lNF$;r1J0139q%M$nN_u`sAhKKC1Om_=y2RR$= zy66)N_u_?wnvY}J$pEkSfXRUhV9C&0G=`XAmoiCjIO8;PY{X3lmhw>!La!Laz8!Ij zxc_(XA-oSsb4*8RPDa(kkQJVPsos}$Q~B&eVgy1{tbr9`^wye*l!Ay=^Kt#2VH|N% zbo-Zao`vFI2=DA-Oktn-$rGUUqM6#tCRtHNyf|4U=l1N#S!G!_&NE`2a}<6M!dtRI zSXc_fj+S>N41q!E(t+qpfa!v+F12VSIPIij379z4=%P9_(ApWA$pm3LpG@FoiQ@uO zK{I6Ho{ufu>oJ2e7d1x}d2O9FGM!gNv>GLQLN;5>4}vS_>)|ax<^w6fyg;%8h{XQ2 zL$RW1hZ=Kx+{Yb|31SI*RFi*G34=`c4k&}j@kL;AzQOz&;WS{vIaKDUibjXk3yJ^c zD`EL|ev81s>=&lzQujYF+oZsF@R*=h)U!E>TVcn3+x@Colmjbs7K76wW2B;?j*kH* z&O>^M0L0!9Sp#7=qG4Z3gYYuN=5B_hc)a&ZyP@}>?7kOMP!v1~ z&67+PR|7jilos6LLksqGN+IPTiAIk|zCvk~62JAk;pz`c4LIH8waqmX?O3Kh^J|3NMcYKP~JtR7<@1~E3!wD@hPJYRkSK4i$BK;_q z7Mt8EDLp-KU_*>jgm@SC%T0`<3HdhF@3XI-5jedfss)&L)bZi)GaX40=M}mICUi@p zuHJ-3sB%(87l~IWnAD0}b0{UQ!6zhSS1I3i(g2~#=FfXsObhh2Pt`CzOaPAsiUmnC1Rm!gI3lf|EkhZgw8E zaU_v~-12swIr-cRV~un(P$*o*{yIz0=@QMCA?3sw-I7L>c2Yq?h*3@{;w2J7D&K9` z2~R`z1aTvj&aDuliTPxP_?Q&mcI60S1Yg}9z=56cMMRTQm@X{AM=~5Q@-CM+c_Ogj zj>jO;NgwAXNPs7Mk3%7K+&%_P!*pGFhsCJH*45c(LBIBg;nMee+9I~(vm8`ls9i!N zXcQOzC|r8Xvns>YTQ*Z$oXVH5$q1F>DVD^91Oi7~C_IS2@JDzlq7^8SRvZv#@}h#} zihD+0Oq>czD}8c{XiRMuwbUDju*IFCL|s^VM1I&ydCH4Kmf_2Yh@#xMd;G?{6v9AW z&Y&Rh4Lo%a+Ekbthg?u3HYW;4%w+72;W|$&+~hwQ#RFzTd5n`SXxVC|sfHv``-u>U z7Y>l1s5esELP6a6QwyN@_J5)zi@=p%Gc}K5KU2%t4wf3XU|q;@d0-O!0EVh`xaJd@ z$yPLrct-LB*2H?l4j1dq>H-7-nffl&*NMHr8P+zbCyN}@NlFTVAsGCuiSl`oPNLCQ zHIrb~I5!6jb<)LD>6(avZb`vSgMKoIc|RFq!=j>XH@(oHuC3&gM_TBI`a~ZP4HUYz zIy8?NqFchqeBuf+KStt1)JDd7_g4$%tSME37Z-4d4agh6eXgzeZx z(fpG+!EwsPM7t9T^)*L*GJ>WdyY3yCE1$cfp`4rprqO!>y&|~Dw~0+))$YxL%M=o* zRZpDarLJH!{w3oeG6=WZZvr7Saek=VR~aXAVJ zUlKKT4A-+Z$qdWZgNgRyoKEW18ytys)&HoI71!=f3t<6Y#!5Ir7@obKznGx#q zR%K=mnUlFFvYH4Q+nUP2HWicu+i6b!G9QiedeABZJ(W<;CXBB2Z04$>2BkxS*0K_U z){T^?Hiqjzy%4A7U3ayt%(F$!Sb?&QF`sreD))+oJcDim`7OZ(`7N2!ocvZsOjkCV zIZB$ z$yjBt$0{{If>k^^sRCj$l=t{SsP^^tG!~h7Og0x!P1Fgf?LdmA9%EeRPv(>g+c7ic zU$WACT=>uC@h_nSzgq+dR8h10iXcrMLO4pzocgIYrbRkbTnK$~9fWK@CaWKqLLwm@ zuAr(1nXwGfQn!PU4(eAj&QxHEilRnQ0vb6&$1{dGPJRci5Ym$(mMzNCkqJO44#20; zL5QH&+h6ZK6BO~8Vb+h};c=B9XH|7(_1Y z+3P(BP%SwuCy5i0yb>Y=CbUfuf-uo*e-3TSE+BPew>YZiNsJ>^PQpMXRNQ;AqYl%D z`q4}?TltC^-BCX%9ddoVxt~PeWU1uVB?OI^;ler;NKz!==R_Te7&1iS#C8B?RNpmF z*jwQ@V4@>P5Q?<5T1rnCz=Vxp>6R&48Os307{LUV-6DP{yTzd-@kF?QTwDe!5kznl zQ_7G0_7jd4RsbfV8m~l{8rUp1R`VrkTydWWP9}BGF_r;}d(W%7?hGCSenj8)8&b zhQe1D&i&;a*2W80G{FlpTc}EAOZA|z5n4v5xyfiYYKuw@Nu}7ul}^r(#KVd2%1uiE zDqj}3&(hAHQs$yV*6VFDU~&!(n3OUaOawM%x1Q>mwB$E|kzjFZ%YdFRfJvSRm{i3W z%=11lk<@79rkuG}TUeWf&OExXs@xvaPHsapm=~46 zyffHraWxT|H>zmG!4WKw_;5A}9m)Y(ZWc@*hi!X%2Ad6BVSzvox7rB$`H;DjT(l#a z?6JUSzIB39yu-V4hb%C=ODow9Gk=tm6o?-`2!61ag!Y+RnY3POM}O|1kX^2ePMR&Q zD!%9L3JIYQ0vq{qLS7~m?I%cpNazFmSg?gp=i9|2-wyBI;u+LF;3IFxv)@5!QAn(G zlF6mSb{U6PKEUL#I50_&!76g=Ce;QcWSp(X%bhEpjM!*MeX7F{Jno%YN)g4u1%`By zciT66mA0N;_o#!A^zn$K49$oCcvq4`b|Z-o(~&pFWp$Goa_^!yDX0_4yyZiOa@?GD z9Des5>UkLUhzdR5j@*eYu5IhlP@+cM%_K)qfRRn}9TJ@I*s_vM8JLiE3k!)~am?gG zDuc=1nN*VwaUH$PAT95G0h~mYK|>DO2}^SEpJ+m0LLX$}y{aZsDF!N+jVs%8hh6Cl zu>RU3BVdmbaA+l1=yRyFlS9>HG9*O;jN6KQe;77xNnrS=P*_TIfQfGhhs|Onvq?kz z-r-;>XhJuz-Gkt_j=bDdR!kYINHyq4rR@Jy&l{MC6pPrAn3X~Um=v!9n-E$`LSV)R0Nd$; zWD8NaBNt%W*KB0%=3Y4-B03}&c>!xlgGy-wl-Lr>m2)P*$P~DZu*Et0Mhc(<7I@Hf0>}0rvS=~WVgAA%SVqXN0M845Q!9qtsH6qCUtngNZ)rS4GgL1VMwbM zw$lC+HI{4uu=Z6wi4`rn?4>&;x}-b&AaI?-f|c@mEdXpPS5yKNhm9l9h*UoaQqd6{ z?HYfmlK6Iwt=B5(iYh71`fKz9WNbeO2cu0m6$Fz|^EHJqe)l8sD zmo!QkpjdOjq=Jge6-6!plR6q;a#X{v1@6X8!9PH$9>gBgLGbc@2$FVkloMFz3@JOz z7#6X2TStj??u$XWXjr~rX_pTRVOl8L=>yuK>ir;kM+SHXai8b{Rqre&e=+k z{<0FYRsFyO9X&^YEJrg_IwaWZ*~CuuDoh-8ZrXvc{lJu^dErCxmCx2NWy+mgod8byrxC$(PP&jEked~OHMc0%a-JxyP(Kvo z?Ev0w9pkC&KY((o8kkfHTB)$8Sz;XidbP v&ThG7&*a91|9_K57jC?9#pyGPr_Ox*)UhX5Fk6l`EnBf=%PsfZy5j! z7WY!TXrZ{fe9z3i3%h~7zxU%0_Sl@6d*;lUGjeaX-4FixdhnWkzND;Q0J-KHNV39| zq^VzN671(ndV*HbFQ80wy}_tW(dKBi24kJ+ZVL$;-)v4Y4$>eTA@qT z5?$@sqCS)AX71Jce*5B`-`&K~HIlzg-x$lWHoa|& zo||TtKC&t6>36Z48{DdNX8@Vm@{y=(aA29!si&h{waP}dj?L_`E9>OE#ZPx{Sh?|l z=G)fOH`J`-6qT!e`Av_UKcfz4CY~En^Kx#ZJ+A%{p*??hs$bOa#E}z;DF=4mdHlL~ zXjaDlY^BbtPG|EkJ9o5x(roRo|E9Gj^Ho1Rn%QWR%iDqGW~$d2ZN2_2qp1J0ZeC3H zfH5^awm(?7A-AZwbBD#ViiVDVKKSA0hc8C79`N)|tadBICgpUpeAdg}4Q*}tsU zwXgJR%O&OmzbDS9R@`UElEx>-=Ny>*-Qkt_vnE~349+OpyJzyc5kpHqduKeD`&f1P zR%xdvkK8M5AG79d!n^SCt45`!xOF@J;nm}V(XX6BW{%V_tM)GJ)gib0C;J-dl?#H_ zABJXK;8rfDL+^qeMv)3qP_Bo!3&j<#Y&w{q3B=sx-=NR05+ z8!ROmM)K%EIK6vT=}F!lcK0zusgN=rzzETKo2-Qg4G0t&YzAo^QHK=8xDd~%`sAeyuZ*fk z#z!)`E2$SG9|hZX&qOOm|~=Q z-o|B+Qyg|7KgHJ|y<-{Og(M_YCmwMUyepvwSss^78YfmIRpYbC?Zg`7Ogz)+LcU4L zAo&Rr9Gsj%l!+4j3*f0TT)$jRl9H4|{=x5l{1&CuByE#(h(=dKom$c_Qca|XE{05+ z6cksY+j%#Y%Pc^j}U+k{RADi(%!nAWmm4atD`TV$UNn!T`exq+R+5cqrliBSmRNnIEu)YJt zQ%|-P^%__uYrf`}_)_X> zOPYU|r+E0h%-$y%&0a75koWWWzTK;i3<(`^Kjm0aJ(r}T8-oW_j5_*iNUJsL#;yP9 zPPKUkSHrrLhu*o`%V9TnANn=otDPtRnUx#yerTCTA!CaEXIPW$1M{>$TzCJw$ME+P z4W^;Q@33X#vxr)C)7QDg$E|a|d}q&vu|8?v`Iut^4h$=Qs{iGiHT)mnD(GLM=dRuH z=7}pm=;p3;pF8qgK~c=O(tF08o@#Aj7~L>>z?5;N8}*F+`;m*sgO>ptuC({BkbCV& z%IaT!`6{n|t=lAH)d8KV|QWiRMhmmQ*?RWTb5qgaT7k3ne_wRwP*mFqSAM^--TkfKGw^E#I;tQI@GOy$mAbEkcH)%4}BsmIQ*4c3XPOHck`He|a|L=Mp@HxIE`)JzLzWoB~pPRpQ{G;uA zJM5d}6nAjSjf58yK6Hss3s|cEX42Nxg^7RleMS0>@%*X$p_{!Qt=1ejjY+m1Z5s63 zi>sF!8V8N+w(89G|EZyAW`5Ye(+%%~HL9;V^JkfN7b?AS&)M7S?dP+KAthCsRit6; zFsm3+%xqRMd=|q~<=AaWkz%-oOK9~LIksC2q@Q_%(30FwZbjCo)+B>99yBdaNar!R zuB8@frSqVxmx>bMx}`R~c8o{wN@S?DHZ|E0P5Ij7b*dCH*Okv8#F9hmRH#W3tqsX_ z{QhpO%R}_giuFjF@)8`HR-e3(;cb9_tRRK)7U>O0V#PYV32)MCl7kf+lF60oldfqE ziK%jZ;+Ec!{E6RX={cmZN)1xEQX^8TYCUopzbo-Ota2k#zgj(_t#j)H@E&Cg&q zBpXw7TAk67Y&7V#hE#KM3a!##3}88!U?Ax=Lsgi((N|k`m)JcGctebpq{3_k?VJU#OzneZT+iU+nJQ9 z^Z)%`{l8BAx%O_Od$BFkzIyT?>&V0XVc+!3Ch-cYabZ&ZTC_C7~MPetd}!;u1{nC zjH-Lec}+2|NL=RMK3wzan}_Y&RH$g`vgOW^Kay^aT)ebX=!yqz%3SUhbHBS&L60As z8plm)WO+mTzgs$I;^BYP9Y)Z-fg$5ab&sM;SANRwv~SP?ZI>OxcC)n-ZJxTJ_2fN<2T(WfP**S0js8ZDY^lR($9*=gFU-HcO z_LBc1lGJm2?Ovz5P90S0k5)g_IQ{*A#1meZYSw8UHX|ouLs7`64!IN8_3bqyqt3gL zcQU?Sb}wkdcuP^K3A0vAeAYSsthVNy>Xq-bUtcguwQSDJix)0M-pB|#TX~+-?TbBE zel^#U7yLvD-&c?OW4C@sgFoK4N~|^8{XwlCGJm}P zsKtSW6Pqbk>q%;ZL;5!7&fLD+EA;-?9q+i$OFJ8|^H#)9qYqswh)jvL7PYIUnsCDF zj8B#7)14RWeckWGgRjrJJWX>NyXfl)_a9!&UM|uH?v^{j?dLr^SX=XVZ1AA;!4vvk zoV%*3SMp0^lMn4${=0iu=+E~HyhnW9T4Ol9HOCx0_S%Pz(<{uVwXDzZ2Fi^IZ!VfA ze(=kGol%F(E3CQHL>lyGo`$6#OCYki{u<47gtUevktyYgIF@39#DH4CU`mjo$ z3Ja$NZI5WNdCI*v-1H;Qf+`ELAe)Xl`L)hF#rNQ-RZzGT~mVRLK#mfzO5(u~-Kx7*$LW6SCT znF%$k`FSX3J>OdHSU}$!gN3x4djmA9M_u{ttaaq<23q=cVCpd6IssjOo_BD_phNq% z>pH&N)Z?DZ_LG-SU6`;k^j zK5f59Fz5^{oSRFAbAwKbB?g@o#tk|tjN7N-1|8MqA=z$`=}L|@s7ijVj8ECjU9WM}3iA01l@*ey6vkS{n4NC-8eD>==YZ-P*waNK|!3twHxOQRP`HPgF&Np3Lj%M;>G!q`pTn+b}EX`Rc>L zN_suBl9Jnk+|3H5Z8nRMq-8^I)LPImM$ogmOP5HJc@5;(9MAPH8vd*j^|nb>&l}>X zpHHf?{=?aU{BiXxvWJt(&Am{TEyPGlwkPerQgFB0$9HKV2Al9C+&&}6lx#5A<^*)4 z0fuMmHR9gflfL&5T-GaFs0DiYf)MU+kk;@Ht%7kLv{lF#t*I~=4eOI~*E$J$IYW__j1J8<>R7X*4f2xs)4I`MWIb!|Iz~Nd z)6qb(n@5t39lgM-Q%>9{;^_}8KLheVg zN88mz>>NPqcVs#eJ13BsPE2_op!OVE)H%V24X6@rxdwrYTp)a>ni%plB&ahhIPZ#@ z^vDY!Uw38-*G^QEmB0wc{>qCd$2jEMC7zVZV-neb>Tqa$mjp5@kLfrF=r<0zbp2xG zySl1LldgfJQWqx9uqnU>%UC@5wF^_t=t5@=dG-;@?4}|5t~TBezC5p(Sx zNbYuJ+Kt^4Nqjd3^#atHLuNf<_VHgY>Tio%CE9K|b{G5s_s!?VsRX()TPx zyDVO9u$Hudg|u82?`yD@95*ak9S}<{^y3o^BovK-hRZg2L_Vz1H9yN(j<^21inkob+YVLgB~ z{D`d@_gUy*>W=@QCU+rtlnXK}{s#^57{`<|tTV7WAF)NiM#)$L`TZk(J-pKC2V0po z;{!>xA6PS(hS}o-OD03CVmAF;7_T8axS(o60(r-wYJe(?XN8ANh$sEWGo{-AZR8M} zaY{`LAWt|p?}{I(H_?xzOkh&X8NUawyM#@QC(9==J@+OikXsze?xH4XlLAQ8L`Ls8 zDPBbXA}4C`|LaH=tztkjTMgXb3KyoFJGG@f8%`76@4OS!Q!)GM; zlnB0zydC5c*(oExnUO$VO!pRyq{jG~#i7Jm z@g!;{qvZi=%b`Vp=5T1zRyBD(OG7TsWSX?I6G+f32DJp#m_zf__6}_>oexS!LOCkUMZ_JfQD6bP&*94!O*YSMw>Vgh6V|O(2!#um*fH zH=YdU(00%^ap((A#kA=lKa_&OD~)DxeD-3R{qXd^NYB81!*7<%GJDJ7zj35Ow@#R$@RsSi(%-4}QZCZap5CciEXB<0qY zazdPu2wnPXd`u2oNSZ1IValK3wMfat+zbVP6us!r!~(+KaW!mo!?TA!*B52_G^M@IV

3x-y77mEjD)DJvxU2*BNCcqibcGW>33Ai1$Z(pi30Ac&?e;U%ksyhw3H2JR$B7yUHF866wDa~_oNczIcizjvplTo*R?%IXUWWX8^ zdiR3h=MPHBfMhc888G?_uEo#8>_(W$C{2tvH%SwtuZb^vN=UFYtm8GGC-5gJ5ujOHmiLtQsYI6WtzllZr$Sv_CWHW=>0BXviSz8ha-OOV9IY6g4 z6tMNPbp%t^Xlnv#u!V_E0yLIGN4Cb3KejNH?%U#t(^dwt_|$w`fZ9}Inr1rYAzDq{ z7C?q_$=xWkg+tkM)Wm1IhP>L!^jF*-Pt4mG)PH*d>CK@HpsnH1Bhc<~D0xR5iQCTV z?6M=Cbl}ipK=V0t9nd8Xh3||f!8>@{5SV)I)Q~1Sn07Y(tpYZgV`p}L@v;4OC6LlP znK+A59d>C*J&sM-6;DR(WJ(VK`i(=byW@$ti_tOwRpQVHK!Z876HtXUrPw0kljD8C z*JLlWOT9#sh0aS*sMmMjb514bq$RRR+JU#93r!Ye30NY3!SyU9mH;M;j^|`6b|byj zk@p9p$-~2v;{ZK(H_F#!DY4vOMS2{JCQbKzlv@gP;{hK*N3H_8!y)Z#q!)+$Nz_4a z(3>1eAgwsW{9?%=4WSYSPq+c>7{^Ku+fL($Z!t*4vEdX zJZQIuV(BkW0aD&7ZG>13<6yhF^ZJfQeo!G;53kJj$x8c~te>sIOjfoEbCxYex*QG_ ztbDaarvB+Ag3DG|>kj*fRtvfO=jR>*a_H%Vl1oez$jweCc$diBp-#KZmn=ISK-&N5 zrC?I0PREnOGVJ|VJaIcM(Hj7+d78I?EsSRUr6D6fq38Yz^e&O7KsOT%IHMsSPM2ma zXK2GSfu!PJAJK{64)}x~0(avl)b(tD58q0(4?vQh8fP^m`Hb8gfAZ~FKhjk~+0twW zxQjobZ-HL_gj&yisj;kF-*bVa)mh%Uo-2LHFXu2>*ibcj2=1A)rMa21FQ`fKdF1Nn zKH=TYYt;IZK@cWovdhkE$oO-TDH(nX_(3~7`hteIoVW24NXAE4P3B(+B;TI@RL|uL zpQYoh=c-&%lQI_rOYZmBSS>DM%jJTkg^5lFKEw_`b5TP!UyxeB`2LqP^ftW9T z;{6C-p&fqg5>`4T(pOfm?y{PA{vB8{g|)Hj{f&I(lGG$7ItF-mJA5DT<#xF0av=Hl zBc4E_|CXA>%6@ZML)y#u%FCZ`pRqcJP4FWhF8h(ovRurScv9xFq=O}l{jOkTepzbI zyekQ0h77Z~{0O`=GM;@6oqrXbe?{&T;N7kUmdtrsl}vQmRrLK8sTzjg0)EgAkG_V! zziQ*7??1xmd+rN%_Ua5%mS_di6Yw%d9v01|K}`2&fV}_ zFWgi*2`SPHV@~}nxiOoi<-ILlI{yc1FJ$evH_T4S9ZTN*$ zQ`$B(^KC;i`r%{SuA%w!T|)?6eiHlHKmYxlX};A3cb`jErOOfd9It2Cw7U5&7`^v@JPG zP2uNS_Q_Fd3O0Y9*baLRKIMlosVPz#)c++*VhS2Y5zSLimZ5#|F%_u>^Lm$8T2~qv zE~v?|XI{Ra-_J`mP<9{AYPQOw=i`02RB0WmP323>9Q-oJXTK~}X20BIbc!fgaiJpo zc_6)*CX~WiTLi7F5PDHvD-p)!r*Dz;fkOD6oO+?A6Nd}s>1Ag@MfW=i-N~KjrRc?x zVkP>GQmBieEEI`#X`o7|O`Q}%5N)#!3+dGiU9S)VKcddGt}|%;oP-?ukF!vRrYePc zbg+w%O^+ynUUC*(sn%8KP1~t}UUY@<3zblp_H+Z=*jL?_cDq7X+-8X+&mB&km|aaYu)nxy@&R1@Eg0L}vqekCtxNxyd%n$QM;Flsp$ z{C7PNJ#ff{bwd!)A6@aEPq0vn#xRpFWRM~dkU2!iqSG04ECeFBHCdN-3>9k9eYihK zUofa?FlZ~n(1kyi5z^=#h6aU!@hvL>Mg|QE1(c=*Z3TmlYVlvCGWf4UIMZAP|Gf%F z_qPoLv@rseKVeX4n2U?==%D(ZaIO#~Y-I67s2V7y5QY3EgR2 zSD_T0{gso79xD>d(*e;!S2`gQ+;TBOM#)TxIzt?yU9_g?X>fq9B^OUxED<&u`MqP1Sys*xNYT{sIz6SwX$vp^* zv1h_wzBdVViyK=7FM$S{Q6w~7aHgBfqpO#jAzi(KP=j_#73$N|3~FG3NT-VM z0e367uPTDpu{@yBX`sC<4>>5vpkpe4wkjR8kcxmRR|2%UBI-O|3Eou+H-BlH>Tup} zm4$S65f}}uEcB#p)1iJ%4Z($Ot|Acnl%dnAg7IA?8>3Yp&|XXhVT<@P!-Ue4A9)G0cufG_?7xsM;)zeA;vAKj>;d`g3|UiSR-o-J89hv zsNY-%O>?OUTK&2R&FWf!-0Fe5xE8qn^+9W28?=-4K`W>O=u!hbmZC276=cGcI~kOi zCG4UH>j6s5W(}_olRV27w$n)sg!)q&Vx&Z7Lfxi@AYEqAo<>3sdM67|(N|EsEE`2f ze~rpEuEupV|YxL9lT%ihm#?Z=b@wfsj@wP3VV@hj0xNCc~rC}Rz zXSN5oO)eBP?f?bPav|5QBf4WdUR)J*u|p*v<%4;{-FUK zp=EU!A>*?_k6kF7MbX0TqBllU3a!``8Qal{?h@VMGb-W?*;;0HAJ8^U=Sd#Zt74L6c`#_ zgwCuu7{x9Y2~+6t!5D*o3==lec0)jeunRpl9KzLy0)-YA+V&ga2YQ;JoLhAS>Lo=` zb!Y?}t8f?~sB)nbM+)QV(BWuC&u`(kUf%!`zrzIgkU>8(X!r;~5#I})Y1&BCd+B@7 zLcfLPj-%jCs~Gfp6!fKk2ZxzBT4+Gmj1u@htHq+D4@V1;v~$-_gs3rJm=_?}7IZaV zIoPGKOv7BpD7jV37?;4HK4S#roit=D;Fx$RIbzIaW04#cZxc%^7&eu$8~6LfKFtVk zFom)UEKI_89OSJw`J8cJUmVR@(||(D;)9!$;kX!OXRfno%DZ9AnY!Q zVKH@lhv-|JH(MCy%Cb3jIj*$7RXUxuUocq>(uFHqr+r$mS^1?hJ5RS7^mJ~KB7**~ z1YQSt2`toRrR1QDd3>p$rgxVJ8hUGS32OXO;q!C*k7YW8OPfeqxspXoh0nHRWa&iu z#}Wbed8FDRmSK6LT*?XcmtlNVli*#;(UjR>mdx*%7S6n|40Uc_%AbT2f|i5u){fAG z5y~(7Br$~%`hO%O(2WxOVL2*(wv0C-Z3SS%at;pyTykn+^>1P_t0kEi48AA9rj z0tFk!RlYck|Jz+07CI?fE0$BZESR83NioqK6%>9OR|#+A1NI1iX=Q5f1-g_JzWeco z3CSw2XRY#j)+(=Ot@3)-Dz9g|6btJT1v7%@CXDyYz0gvy6(tribk6TUg>484mdz06bxhwT zRHFwsgB!CQlSbPuU~Jird?RElpuRhV>2%drM2!|ZG0|mg0~ELm&;aYg6&>4F$Hy>faD{C+0#_p2Z;!5xAg zQ?6mC$M2AX*7O?ZTaPO zKv+aOGjye=m`;U*LN6%^z(VbykZ(%@1{@N4GPnbh1Jhxlhnjb_T?Bxe@SQI@4GVrJ zU`G1jF#PwAcS0#=1W`^YcLbFEr|l>OjPiP;9c4A6++Hbod@ObUh>%1V9mZfY(&VFn zLymAbpTR98cola5D*B#o*}@e4oMRBslpv^aLN1 z^fS1*1g~Q73<Ik8}C%3~qLu*R}ElmWI zO*fU`WsE-k1lRK~gU?8C>?y#Slbqg(!A&H15re4&-#7(5f1czz%l--2_Y{ZQF}R@w z&u8$D5`2Zh$0b;MT1Zs0fa2JdM%o$-n)N5Ics7IUy%E?(rj#NV*mup+MdD^|o=7X^cW74f6}LSwq)0S2Vk-`J8UK7e8P+us=Ug$Dtp+ybM` zWsKD1LqL762z}`t264uPD?%RKb_qj$(p8MRfq!GPmA!_tr7nZE^8rTh&TB$9x}Tw8 zuYnd_2Rix+GSu`NSn6e51w;E98+q>-dhRL|aJjAjKra894IOwBXwr4;)LCw!k$0~{ z!Sh?FeAx}8xa9Wgfny}pgIH*Vs;iFXjU=HCKT_pZ=~w)q#Wce^Ld zqGgx}8tFn`-xIdc)gMu}2dE?C4&-2$-ct57`TCA^xsWjm^vNl+#fL?nJ+WFTgJNpG_^bG>|*Dpci zeW`y7#sgNCqmSQWPC4~TdR}Mx-8-Oo@tC*8nFhTVx|BRYgZHp4s7Si$Jw}9?9SYNo zu{_XWqh0X<2EJaIo5G&K2r9fMe zEqYMTISLiMyc3J;CY}%(=ZgsL?M5o`N`ohV z7Xmc22GXgGfnq)msQ5lXL6F#kb`2Eyf*Dqm7D~Rsa5b!&CLI+csQYO_&5+i?VuHHF z4lGJo=`1j4lL*`30OdRr{cI3`5f~!I(Z!2r*{LR*_#)D*AZG z*I|#~KLdh83~-DNpN6{au!RrMav2U0p~N&#yS#<}Y%P)}`PfL&%^8b3yiXAkp#S_l zMyF?QVmT|KzZ4SibqXmY==hBh3~`-a4iY-O93*to3tYtu;>FDZopM?kPLUm3>4%D< zGrf~2cB7N#D%6Zto-RxhYojgmJTa{17%(`~lf^1*<;ix>aCV}kN0Y_wAPl!+K#eLV zcBfMlF;pLxhpt*FVs+Xi36iH%5DD%lLF7XfFsAFou5?&37@2wuth91~DyN7pI8a21 z=L|(<`E+awR5dkaMFXe&?HW!+x4J*Zx$QSMg|P&h*U%%Pa|j>Q^me? zuTiWsr5;0gX^(EBP-TDPLunZ?Gsyb4tsl&H(g*o-uUnxD%f{20?wykZ43cyGE`lfJ58 ztEO2cwCR_MXoOc~F^kqt1B07vU1gNG%+M-TP+`Axl!eI(s9Pn_HdPff>2D0;t!rKl z!mTR<Z?FKOy)w{)qq?DUZFt?P(0XziM^M1#7JaH++Ook?c^pwsH1 znT>1PYAIhIbB13XF!t6*EpO_8F}wk6w4pBQJDQ0W24_M^gL+^b$wUyo$spvKPIP=0 z++e^kIq>TF0a>K4zGQsWcYSHVx%4%qZ_c`7B3a zjI^9DBq@wBI0qWvWFg`J*}{-+*%IG>-1i z#cG_MXxKz?;rcvW-Do@=#zvM=0TS5A6b%wsZo+)D@+kFz8`d zXyV6dtGmIS^79Zfx^~B)itmEB5t9$-7K5%aXhByvB~-c6#RbR$+I9oO&;ySV)}5*9 zfgp2%L6zBqkL!tWF*P5krWY8E3IMHO&@Bc*B!e#O0q8h`EIpyQT_Nf?#2|2;X;dF5 zXw%DvZt8=*iKh&$))%?X_q`=8&h%nmjBQP!4V~5x#ZDF?#3c1cBRlm0qqsi|@sdGY z^S}W}ea7^Ks&WHioQ!^8UQ1neUN}xn^yS-w_GuK8 zz0PD8+e()GfyuEMxujfsaA?!9A})5(g$zC>!Pgl)aU7?Y9WN$*wu`|V#26)$IL27W z7$u`6Z`OD*9W_Nx5Tog#Uyyp(wmdr7;*>-F;~0(Xuc0`EGy6E@kS5u$j-;5!H)j!^ zs*G3o7MGeR1~}7{X^O}IgKeGj>0LV=UbO$O=(V5?qSq8Ejugt`TL4n-V?b;9y2v1X zFhC0hQWDgXF8>}utH;k6y9cMi_j-?loBTZ+iA~GtK$AwpSHN|p52wTD|6%CG*+56m zz_6Gz2HwTFRc1oC|1^|Mo(olf&IH$OI=G`}Aui3Fj)9aj8zLz)0R1x?-1{>ykmk>U z(r;!0GS3CA(kzs?Jr}|01A~^%Ls>E#(BBK8wC8+`>;`jC$J_ZB*;nU)@#_MN*x7Rd z@n$qy2$7ca*dr`NfC-(C+6Md#&AI@HBrU>Bp1(kPA{YAmBC!g-l~spkFUDB-X(8zD zOE8?He-?A-q9thUm7k$WzZBfwi%|aFQdFi|3|jql2vwt&q47HxgWU_jV~hHnr%O<9Mi4x2gC3mXt|e_98{9XFyq+3Nvu_xP|8c1-;R=r6_4 z#4q>M{uN62w)o$_iWxYkSi2j0Ej>1gwTX9TUFx)1tXuLtcGE3b`L&4^yqw_07CL1M){G@LR2btFE14w7 zdVIG6d;Kv&f!}B=(v(>r^^mOyD-AXyYXR@%RxyqJ`fNiqNI0#OcCwk)dfOn@(w%Mj zFm&uTD0$k&)|dl~dpjF93>edGJL(LLkXuk^yO`ix@<5m?84V829Ai_mZ@W~v^A4m; z$Hw!NN!oq=m@+wpB8M1bzx(PKiR@#PLzX4QCFyL)ptlsC+#x=)ecd8F02CHG9JXK# zdNU6{v9{#t(+Q!@z!zu^!5qsoKDp%o!E(Y>`pq9AJ|)4wa3pQUXiF>(9UAV?R%t=X z+bZJY73|%Z;_~~%=_%f7l=Q-x^1^iwtcRVhxHQQ?USY^xj*skjJa$5ikBQ0$2rsZW3Umfj`;@| zKEFDKmh+T2MkQY-nRHAH6LC=nR*0mR&WgB`O&^^Vt@ueehX#JQXd9If>UfSb=AMI1 z&|@W@4+7`Gp^MM*Y1{ui7tT7*gqeFe7z4s%!J#?lxbW}iv5aAJa7iKI0vfUJ9B)^} z3n-vC&*8p|-d}>(Uf?y|VWjmEDf%Kr@15tma~T|afx|Ny+*X4BV(|T=d^^PLYlpcW z*AaC1Xo+lihk@weskp8HIqB{~i4L-JV*33>tWg$T5*xe1toZUL2Au8NJ@)gx$+2rT zUPRZJrJN0p_F4GDrZrx-r{CWdOY~?k~aX?m*AF z+g$&>JG@yjcR{)*k=g>r>rB-9tr%48qa_`T>|lO}ZgL1A_6DDIhi@yn6vy2Y54#De z(zcQz^|NcfIzuW?vObQ7LwCe5$n)cX`ghUlRDK*#>aESlsTO+oC7kuM?f@g^6&NfF zbMRs?+P=aQcX^4(2xJxz-;%Eupdl7|<`rh5GqRY^Ym`yHlFHO)NCO!e^%~|K^9uWb zD6{9aXkowa81XlmXn6zi4>Hp04LIdrOX4dT(nm&aF|pV?^5ir3uBbHsAG*N7>UMF6 zwtNFOpZ-?#a2E`uN+oG~KfoZ}<#C)_tR^xU*aov2=;ELOOb3lrxMn9yLk>02H+=C?PHiBo@FL0QeSh@qoh6qv(- z?Pb_r8}`9f5k)`PFpC>_N)jQoe2B8=TK!AG#D zr@Ml^fr-yS(XWFQQv5LL477&^PdhL`Aw>*ESScTQT@Q zqJzUx@)v9-$M8>nnn)K1DM}ST3|4r!<9io89^+dld;#d-q}cOeXHd=td8+&~2=>!U zhae%r3NCzXCOAvf}Sb4Z@|iLV2qOc28{6# z4Eib+)&i1X1(ITskd9UusG|jD2WOrYJ&WJ-Rz_ zVVoQp*;^h}jJHZvd;o{NZg$w8$BwN3-w^G%b!xwMkoQq1RZt}1qZ;bs;}sNdu~_{} z=}(U3xNCIy&dBFoV%F2O*@{@{vv>4Tc?=4(6jWyYrQ~1!K{*~-Ce*e?7PEowuAzwX zE%{0#Bn|XU4VYnD1zUsx#hihDD47j1(Vk$?{xx{GS&_lx$v@JMwk9~MB~J62P2e8rI%+Y;)_WAf|)5^-#vJfVEIbx_m_F`D5d=hYjrnVqlt z1(f@_Rh^XG*|+^Bzrcq)jZ61h=bkC;B#ZgS@!p=m~O@28obja@hF@tZxTO#kzTu7tX@OBbha8|Kxc z>U3?!*+ugW!v4YU#_9UBejgjTD0ck*h-;H7{LkF5_FHz>y-|I`;FJ4~p7VS#vHA8T zFX#Tbtk;TrrH>1_8JT?*6VocCMx0t!F(UIsTO8Z0*Vji={@qs4c>BU7|8yT+XKh}L z(~WV*Ygb(2lJ}ivf5)VJwc6J?e3#};r4Fsj$87RhFnei@p`F4;dmV1uuVd_R)f~@m z(H=klyLt739YrgB_Y7YXnnS1?E(kdUHDZMX_ zsna6*O?N{`gGvXy7aiYq^|9Nb(1POg-TQUjcP8)MoWCD6yxr`_3-8oNI!~|O`>196 z@>gHae6N^##^!NG=PiiXjmp(Hl&WCl!o2c14Eh^n>1~vP1S47dR;Pov>8{dVjC!Y zeI1!5t05UzWV|&BUlH#w-~&;i9}kZmV!yl`;%SO#)lr(IxI(8kPA8&6a(iS){a;ll zC`{OMW`8iFxJ(;`e`&;O+?8iL6h6LR$SSNntB5hmD?qzR&4e#UJFXqjbbdMgcDBNk zzwnIpBfH)!eFaHfoYq5e!IKVXjX=a#{9pJMk`5n3;`=x;Cg}pN-Pe%7V{2FY2bR8v z6p0Ghabd7r9}Or{NSE=n!xTxSK*c$Iq&nsE^%QxyB-RCb`OY&9>7fW>Z!v%%Evc3i zK#%Qk(5C#w4+_uX2ICdi+>l=Jabc1+wH?wilMaIhhk3DIdJdlcIy?uGU%sa?t_W_y zzAIv@&3%|6pt$^W#RNgrnTrq3Q1k_mD)ryjvlPn(YQP2t&ARR6MBR@lOVgM+iWwE9 z@6fuHtC8QXpnYC`C#}w8+p@3LIk#6oec_P04TD)ex zqADn<3`iB|(e(;kq}-@jBpNKmA;pUF5VBGLfyF&HDWXK!|M&$oclj1Yf))WuSfucy zch4)1%Y($;W=4H6WN!!4NynA`Ovs*pT+~u}Y zwn(>q?G#sh{jSsR0dzrcr(}A@N%@WrFLa78{-9KTs6=l}hiF2Ea+*Nz&H(j(O=a2o zH2t zRUC$pjz%3;CMx-+74_IJgxLv9KCIMYjkOU1YUx6ZT@=9Er!cdg#vD;%E6_ymA6JHk zTMcgI8t1hy?99Ac-e&z|cf4H93|*EkJA%Kf5P2A_yLm(zq>{FgNvrHY>aj=>NP~_j zOVNy@N-h0`$@D*}407X}sZzISMclvRkFn*bvLdZ{MCnakjwyqD<@-OMDrA47gjd+? zm@<`~J_2P6AQ)|XLEmmz$}2hhvQrjeMbF#fcU&1qJK~$sH0!uBm+P z7DHP?>E7eYSo)j^zCW%EkryELqyO`2;O)GLyrP~blsLe|Uq7I$Pbh<8r1{bze0;6| zd!nBdgr8I<(Mrc*5vIUT{*s+z3rJwYP{LQE;e=6hC z95osYatZm8g+czKK?aL-Wm8^vYvq*&d9*r+rcG1eB;=IRFWpg>DMiwSPmS^11z)U^ zex+|wXz^hYj+-s~nOl=vzahAZdOR0CUQ*BdVwgK|r0n%X?Oj3z09~qFw zp#9S$O&UHEQ{%)l7}c%+RC-h^Q3009a$&w(jeB^uJX2?s-vk7}dj~AZO!Q4_MKJ3o z{5_R3N{`?YDs7#P48lUw&tlBpQlfS)KMU=sXO?G6*@LAc4}3ITYKiFLZm6JA8f?bRW_5aG|U3Z1+kgeQld!c~xwUCRsU5hTk{K(Z<#; z?9e?~$0$-TktupkG0`m#lwXTxymyG|+HqL}=SUqOl{RvUG|VK5iBsen8`Nmnh~e^| zFNn>|YV@(GDe~Vih|Oe;(&=?{^h3-!L*Xm9bgy!u`yMJwxk)20HaC9&6`m<$HF@pu zM7k8LtuX+!vAMlEG5z?PXBVxs&?DQreTR14m}x9VTKT!s zf<%t$+Nw14$LGp4>itmZN3TCu>fw>#maEw}w-bDZ?Zp&448HZT>xFUB=a*HR`5t{{} z+oVt%o0p$gn3vlvZy*!Zvm^C)$|5@cnbOxq?j=2~_+Dx8W`tPi`lOTd{h~ z7F50}xIIofIqa-UiPN%0J7YNOz(D|{XWuK$eE3ioLFMVJgX^0xV@NUx2_^#;$-ICO z2$D_-K_D=}7bV2Z5J|6!jVPR0hDTtSM1R0K?8*n+*-m?@^pz{HfR7Q)N=~k%Qep&W z2`WDo>NQ}Gk}K4sp=OhWOr8K4vn&H4M9O*XP;{>;x9f+~_0yhf)n6R6NYqe&{EvI0hpSqfN84~2F!Xh>@4u%BNtIjI5GYee?qZ#^w>0E^>iiW+1KCOq!!zGz@slkNgU!l?j$#3z- zcI#c3-=}-q4!x3-bjhqk4fJ@pO6>#$kP=ZN(@CWakzejDA&%!_C(`rusBNqhYV-Vn z@Rg-exoVSjcux5U9L{E63#-IPb2Tb;YBK8t`PCjrA=V@Et3HklRwvC3f?+b1Dis~c zOq9}2ts*5km2Ow50+q~#@GSDb>5EqUi}y6~LdGhPkSgBK(m(my3?Ig>9(}b3s$h z_yQPegIU05ZKao)A|2i#cg0h|H%xk?q_m8yDu({9Kuf*cR4Ro@FUer%W|x~PP^Dud z9oK%)Vpn~#jtzDADzpTKNC~B5f9rYMbvQa@pR?}188a=z=( z*Lvvzq$IfnhlLTmoPp=0+uc;oLGtWn?`ZmDn3f57sY2;nHw>J35N@CjQbJM6q^ey=maBflu-0sO%2syX%gKFjS?AP#BWU zw3WLm(23cXw$Y%U+IT<>FKOgM4a%Uk8dwvL&Uigg@@8}Ey;-q7gbq0*uNvnfUl*Tf#e zM638PTLZM1sHcxg6D&>cj$Uu#k7nVfaxrl~vf${44S{|>=$bdsPPh5MxXg!P({LYn zgqfGZX0{VziJ6zOO0H<;Etdidt)#}3V6p|4wrc3RUrMD_nOW2`(OoLUk5uN`Y;uJv zdO@vnK~K!{RrxtFGIm+v{Sbj^%{(0V(-dDm!SW_%`$Fa4o~m$H$iRMBEV06YcvDdo zpoIUS5O)HwQKcChpiDQL4$WBXau~)k>t%!PZ;t^H=7;`m;ivMXCrYcr(Lh!?uA-r! zGoQtg_@kt+O3#|8myE!t2uSgPl*%k(#%C|M7`oDo$&WW!?~l>5$4eDXwE+l$D8QPh zNJWqx?}tgjpmJgvfEjU)D+>$2)35c$(_6TYn{iEY zS0HN`dvYH6&|>!7hrMU=F^s)v+&>(rfQy_GHuZA%p&)P$WN2%0q zI$*3p*sWrv*&gjG4LWa5po)Eb95kC3grO=(8(B{v__sr#e93h7_l0+6b-?@pvfLme zYY@W6TFkvl_5jkDq7#B3h9Sl1EOeMLq5uaXdE(a0>;MOR#U|{oe$bi}44)T}VyKvd zB1Q5>BWRmogj0M?(8n3m0w-T7t5S!t{x(Q!bBE!@X9kqz&M~?xk^p7|W(77ze+_{PWCS2uy<-J1 zV9*@Q?o0-eC55F^oP~%LOheDx611n4{ zgXb+1iXyC|*f2$da3d-UBuw1AVX3rA8KfWVY4ElwdR=ZC%0|(IKtv}!pIec0vR2TC z&>3u7w%SdEdIN7ZqHhSF##qA<8xzA+ff{L($bN2xG@gNmcY($pVMv_I1fjh7b8CT7*;XAs@ogQ>-y8_VM&wjxlKw(0?&R3W_WbXQyt= z@N*(mE+S&Y@JKdY0G1?A>sRWiGQY(Fha1Dy%3H#0Fd&!27w6U9or`iWGSox2kTPMiH6em z(HL%h!=W@S21-dRb6%*#eo$^4hAms-c*dzT&TNV^V1>%npc@RB**VO@i3P#GBLevK z82E162$j~Ek0*=(rldX(SGf1YH=*oC9nT#Nsq*sNfx&8!x8LpEkmZouqg5J~im*GY zyw?4(NZ}essbE9pNj##32)_RTjR20!CUT4t~qL5dUaMyejBRkHtd{1itWKJamI)qTSfC07>>rR$)shtti7+so{pd*U9 z#$sAB^0|mD>(o+0X~1fp6-B`JOv3u{K@vI+>vtc8DOpb|C#w9BGGg4}%BSSc)stbu zyU-=2l17+#7sft+JZ5GFqiQ4K4d4Lw$_t}~vZs@F!5v05kB>&GWg$7H98{l)Q-zsu ziVShvmatvt@W5%54~FbL7IBl_Plm@bGb4N2R!$WVB)^vLD93D$G>4_@ZYglOeerOI z)}2(!V55BYVK2`EFE&hi>R3Qcp<#N|!Gf64DATat0~$S=!gE%x7uvk3sDq3DlEC9B z8`Zc(NYi!L@A$%A0%~D4HXV?!k9e)g7P2aDea%ganL5 zVjW&el6%iR_nv!r1cOO<84yf(CYbjF@_-NuQt=W8+i|80rH|Qm>T~+UifFZtwo+|7 zt&SroGqtt0&OjMEgO)PPSX(;<`dRzD*Y`Km{E^@9x6a;Y@4fbVueJBFKv^5Ri1ufO z_&~;-6@D;;H9v7-vi$5QyR)ibrr#lsV45&on{$RIyxnFjlz~1$tK9MB1GzW}x+ec}GwXeqeS&4@c#d{V*MB%j&kB*)gCrrt~h&{43V9Z>f!KL&AEzSgXHaFF7}? z93*F>9?TQTEY4`JG0I1Z$KP#MNO69Tyqw{t+V9cn$fneV@W*_dk9Utj_m&C&Egd2R zJ~2TO#hEOQGs)vjBCY3fBIdTeD=P(dmdAk?$ANKHpWP3ItjVE}S9#afMU3pk?<7D{ z2X-CVR>rUM>flra5sBYtarJvFCsBpW55$0Sb-&H|2e%yv&%ZeDT#C3Y8akg+nOqgSv83SRgGS@fs)E9 zBBowK*rYN1d~1nK;`m+U zrmPG#UD@GrTqeS?UK@5*m`$n?_l(#nvJI6CC>ydYV*S0otcxT?7r*9Kk{9c>VrA6< zzj|usVUqnDg;kee^KZ|qVRwyK7Fp%q3t88Y_71qw4mS z3Set8WyYXO!%r{4?)~#=z2MANSAC$g+FA2chh<%OJ@3p`SAA8oZe^>>dYhBk>ayx) z+G=cDSjIt)M=wo=;d4du#vPe0tgO&$UT+KQ6Mtq48`pWvxDmX)JT6&x8{5K2jdbwA za3kD#Mq3(gSj|drgQ5yXtW);ov>31a8g~6EMjKU$by^(WMm`NPz*1bDTpJcZnyU^U zFuxC6!np59K8UO~xp`S~G+c1U zybIqjCFZ$kP4aYj()jI#tN4b**=v*IxNe)PN8gd$9R8)4_x`s{YZ*mOZBLw7UaP>v zyY`f+y|Tg~eD0g`Zao7Js3MTV_wL_?D2uZz!c*@|J{aD62_tP>oA90T@M~+6HRjcQ zXKk`%S)CoYXV;D+`wkr>IXj3{L)`JTwaLVr z73+yQeXSnl1e>5yNQMRf==x;I>9yt2_Q#@mZXIOs%z6TK<$<;C{P7^ayPnZsXY~2# zusF)uS1`(*tLwFFz9Kn(Ssi!mygAZ2Ds6T}vXoC9hbQ^Ds=|8PEJ}njcibH~N(D$F z4*0Vxl0{g%|GOG}ZRlIT!p7k_P>$C7yII(=9mSqgH$km|0i%LUaa- zqJC66Uv1lnkkX?JKiZfqS!7da=SLdjp>@fM`NR`nzA9O=qZItL&C$LlqNFNh>hz8% zDT~#+FO4Xvg=zbexcF&!Zey}+kp<{GFUrF$>ys6j$%f&ZIcND3sABQe={-DhEV1<1gQc$9bUwCE-3$Ztzj45L~xG?UEYs_U|W z793YyRX26UiYv8?h>WOBBXysJW3L1oQEOziDb&0Xq>oZRsi-|N;zipwBuiITdbaHn z#anI7v|wWZyydtfHd;Fer1|%m!+f$Jt9auM+iASwQaQCRur+6O)ldtzHD~2T(A{_1 zn(>_dOKf+|agL}MgY?ccitzYVpn`FxRefIja8jBA9u*U#`3!4l-gOX09XMzvH;Id` zbB8V1HXFw`&f*lt>x`3y`>#$`%q9^DwN=#ij7X3jnM5Siu5sHsBB6GSTW~}|bzxmQ zbR?d#u47C1w~fi^r`RMq&%;&MFta>jqPCNom*x=@wR7EqBQ;b-f}M9o#MFj;+d3kq zEZFIe9Fb9$l9ZCgCeeA@IGp(|n_9$9U24|8HDaeO@@c^lJGGJBf+Ke7O0)(Xd8oE1 zT4+Q@X;zd-TV#`Hr-rNeB2$}8BYLXp$Ij!3o~mN71CHpywqJ7t`qAtEX+%d|fz!?< zuAb~hq-`6p^TJ8^@&+(8ji{)dy0&XXg=pMqL`5BuZdx03RMrr6hA1K`YLC8c92Z{t z^A(0{67AHeRrv6=Os$BhsBUrZJdUUk{ar*#5&d06)Kpi#cU}@vQx}P}bBow0D^ZQE zmY%{KI=%96^L5FJvx|rw(cMMF4%v;5ZcMJ4w>+%egw14cSw#E#Em&Iwp)PoL^7gP{ zQ?m2a_Cad#45ISa-<+IzDy=%awlZBA{_EYzh2e}Flbws(F2oQ@c8Z-&BRtp{$R37o zT+cu++?ecQK9AjmHMZ&I{;F0Mq#QqT1FfFCDY@m;nzW7_IKrk<=o{X6bCRE4TV&ML z#S$z`M(ppKlVvBwrIp~Y_dUru3y&P;D2kc!S@_}2NiiR@lAq)7*`FS>Vm?8K`i~33 z*RSRZ-q&wQj-OBb;pk=p0B^oEIWhdmGu7`*!l@ zNA@I_g-0*uE$`h+x0ele`rc$s_~zc^R2-AtyV#*$-AkiizbZN2xe_>!Kep$u?M<#+ z)HjAu7zcOr=z)F7m8W)vIGoEqzGBb*b6>K4DSta!HJS_e>`Bf!p)!+)d{{J+&H^Ky zX0J~UukT@f58siz<>ckGsrH(WftLID;+;en5AUVyp>piQeRm>^{vgHaqf%mVcwj&O zy%-ymR$6$|ej1$ni!}K6{mE(MM{eAgy!FKDBbm#G1h=C2n4flM@!USPpZWdFW{yX=rqU7UU` zzI*Ingx@=uTz`6$a^2VDB#@3flziyId^j2A={Os{eUP3v7@T*(!c`j%?OeO<$gbt* zue~Ux@_W!U312yseAJe9S28#wUhh5N-|~aY7uwI!H0P5-;bV6t#ToJQ0RAD&{*pb6 zAL(=tK~%W(?qqr;VsQ`I#_)tajE7X*!wE@|SK~vA__&8-swy_z8z&^|q@sjP zjSua7it7nd!%Oy%q@q3~v3Kb&@o-}Po9mh4Og>@{Q^oBB>xzpD6I57LL-*Y@=(5K@=UCY=s_*wVcYt8m`Jttt{KzwLQ+C3aIp{L?Q z^GMx8%VwPPK3<#IF$VY0(#Tuh$3pWcD%{hQ;L;P;l_EsxI)vF?wTA<)2=?@8q>RqXbV70bgZBzEa9Gu`1-nTZTb9v-o$L;_@ExH1FS=GIJI3R%dls(MMYw1566%flwAFziOL3amO$$Z;$mndt%(~j48aJpV-#%s!sdJNuBUIZUhRHvLb2~S(s;T&E0 zjBhyWgUNX_N31EDTUV1#ETGmMozHMlBO6JcgGB8)Z3q#@L7L;+YsfFSCFuU-&2b=Lc&pqOS6|N!ertwHk_l3YxFA;&oo55T= z%4~ZB+xrktGXci$WcEArWkRcA4iVVA0_3PG$x$x5!f$2yAM8Kp(~^3L9F$*tLskKL^Xq!Ei9cg6)56 zZXp74t0i96l6mW$^V7yVuK-9PRZ(^Ex`;YW1SeIZ(*s6?qoRr6Hlr}{5LWH z-KqPD@{)b$B!I$l3pKex3ME3yr`xTYMKgOql)wU-{mz(o3KLaI--$PTfW^<;_TR@j zY{B3xABt#&rj_7wWW1kXJ`v$F%%^rJ+YMY;La7hK>NN}+{#*1<<3ad-Lyn6HN2DTd zAuWJ@5Tv)lI0x3YEBP-)s5p&};!}}1gpOq2saEj&o(@v4^LSr8_}g6^_h!!cq-i@F zduRCE8NBnmNDZH&P;DoA$>-&>Q<0mZp zFt|zDjfCJvQ%=rxv1RyYxiKBre<4*2`oggVrCmGKfXG45iVV!5Io~(SW{UnSwKQFS z5E3_nR!Yx2d!|$TK;L(qEBdo>#oBxlu-1U+Fh&0))_nFSg9w(%aA4E(c8blYu#rWV z+xHp%(}|i*z?29l@rH=DbL=bTJMWu#e+pPG0uI=8<^@BF{imyo-$-=>7Zw=l!!T$B z{lr^@W^$@a%D%1rmtqEZ-UeowUpEL9B?{B6qXt9=9y?h9{<#!Hx?Mn_xwIW1p7(jb;`bTfL)|0FvczQPa^{` zpuH)@1gC;lV8UY5;|Yra6Sa+J*wR*Q|BX-_^`6uM37D`L>Ofcwn6MaM&ycO-wi~gA zW&p+1=0h9a#Toz;FNuOZaY6_m2>}BWtD3uBEFu)~-=cp=q|Ol%s!0?F7QW+Sv>1BU zQ$JM(KJsB!K*vI=>_32_V6cT6Hfgp5d)`aE5eiU(+deli?VmX&ZgTH9Gd=yH6R z<9mtmMD3`A6sQUF@hbYp@~{4+Cmb}8$xz-cFoGyvrEru`v4DvnyE@6m?HF-pPPPQ! zMs}Zjh-z4)QmAoNCMZ(7h^fE2oY1s~u_Ll#4&e1s4W_wb!Yu@qf{URI=THm99BQF3 zwcsXL;E4+i7h7Q{Tdz`zVvd!Nu5g_xld?>14>OcQ$<_grt>chTyLGin0ce$9?uF{v z6ONEAu@Hsdl8lg_-x6S=s7X`4a@fQGNiM$&z{ISj%*t=!fEp|D9D#{=py)~z0Webp zea(XA6HUN9@*Pc31_FSIA^<(22!M$q$jU113gMMzv9O73D-N8e9m>7L&*l<2p8>)T zRfiCm&}=qCFL|QnLU$dQE5&51sePXVCVo_gXcv;e&okOK{MVYryk`kRa@NQyxcc-7 zhbt`J9Oc>-${5`B))56I8XDFxQpN!P!WmhX^}RpV z1W37rW}THp6p_{xgP)t_eeQ<$<)vlH`djpq$Iz8bMT=6fsr$(#z)n`-%x5BriShN? zMf?+XRn&0xtH^~sRpG~dg|a1>=dut|WJ0X@c%}pADy+bkZb?3e;KG8HEy*QSg4m45 zVc4=xWC5Uf3mo^-Ex}xom4ItuF&sU&C44FzcfQL_hJVh3h_?Vt3_4`U?U7aFgyQPQTwz?jVwF;v9`wUfA|NIX~c5W${jdjmOt@iGdx3 z>%?&f))kp?-w{Wm?SOGF*T<97A?nzuku2Q$EcgK?_#y7%@WYJKp`d4+rgNYtUO;C9 zx0^a9;MSveo?_aIHNc5IQDwL>^mmV3xPQL@G*9Zz24@6U> z#Uyz`A^1ENp7ybuPjunPOF?c<0NEp)WO_>`cb2{d^f?C>D0=ao$(qR^Q>jiv+;QmD z_YKegZnAg{MOnUpiRSUUx&1Xx)urZ!uQ6ZZ_B}DI2B3t2hyqCf zgeZ_uDWXCoFixKA?S#;;#}+vzl4EXjP0sXZ$OPwbSSQ2y+0E`wW3sF9OVUbI84;0Y zn;Kz8I7_4`@=ZiFHKoEb+#@DN3j>RrhivqUZAPX(o(Sx&1lSz3K&Zp(g9%={5HN(~ zS&K}pi1Z1$|H<-;ZQND_PjD4Hqff}I$-on;cEdab-#M~dcouy#ksS=Ld?8tU{UpbO z@*9r0ktN`DcxoZ!E(QhnzC3~GMNf+8N6Jc=J)gtyB4sF!veh+v`xOZ-)6CQ89G%v~ zAh@DTcg^F;j+w^{(pxw;C%hzMQMc%&HyWxI8I6=@uN0kJ^jmFUN3`UHUnH_YLtTUg zy$GTmGNZp|1ktIj>%$P;-WV{^LdAsJaC{OefB~jlPcpzWAEisgLi+<#j1X_a>2CrX zI9=RtNa~6sN6$Tug)bX}3iVnB^Hu2$$I@>M7kvo3;RNdYs3WaVaj@AzJZUjF!H*~m zE7g-pQz+tDH76D4+i_#i!^z@f2<38!bi-$oi@7uL!=Fjc4m<1`s!s z3%d{$@Wewbf~=pPG#_j9h$VPX?_RTcT$9jo*sECR6qnYEE^c}E?1uu1pCaf{Ek=n1 zYpJo4l<*Wa=gDoEGuR4*gvq0wFws^XX}p zAecCnwCdQzrAbV<#@TR?YC)2~W5HyBADFO?L^KLcc=(;BR8|B8;UC$3Oo-{o+g#+U z#3f=XG6+6^xLpK4#Xu(-P)Dd5WG zlL01`158>%I>1uz^;+N7@UOCGcvg~(1{Obr(d7s_lQj2}A=%_PoK{MNn6jSG-$<>d z>=UsGj+Z?41+CYoY?~-=e|%tSniqNe?t6Fcw2MbF9ZWgAug z(%h2?E~Bn-3Xl7R0P2rH0Inc4>@aSH>fCAj>=#klUfxktDfU=Fd&eJaBt_@pEq|6Q z_F|MrXvhB4I18knCfA#O7L&V3<){v?7`HT5=AnQ|nItfTh72XC0=reHanmXWvMCt` zd&(YypM!xc4eJLXPO2~t)<`=-v;w1`uYnzkvV|fiG3YTznPbziYDctMR&1d+-;Vk; zM<1-%?$P@EmkjB?ITxNgQeb!~lt+UQpmlxOT5qkVHNhT4P z1o?mwF7}hbT9XMvk9`>DD7ffFC>Q*Ae-qh6lG_i$1%{5NOooZ*#f%a%#{8XTJN*kS zJ})rIDs#dy9{ui$AYf9f3JmimJpW~OT3$=YLgr5Bu8$z_!yVl%m6pUu(8eo3yJyUY zeXXLPhFx8&ZOBOsIU2^B&ARKsAcI;27^c60b^?g{a~(t?bar2aifv+S zI!OGqSr6e9&A3#B9rmG$!x?-4<5vLtow4J+jH0GdWK>ESp~nny74Lgc!`TMouB^p3 z^0(fThQw0r@;!AqClLU2x-kRp*6ZN6tm9Hk}&b*@LS-fwrw;7;Vv=UX6iewJkdaZzaUGs4} z&k5#0gsk|cr($x7JoSAE()T8a=BAWajx+jYs!*#+uB<$ZX2mkOz2NqV|ZargX6h(-|Zc=j)mX7XN6?RnnDPEq3pLiex574bFc zWb!ea94>&>0;!c|ltlShG@ZpT28Onm7fSUZ?IgbhEM7L;Ay3o86i#@n37D_YqMe*E z0467^4CZ4(z&b8VWlln{gP}+>NJ5kz)_jldAUi_fLMB738$mVxlWZpjZ%tyg`^pRX zB9})i$4PZysXwQ$gkKFN+K$R_zjZSjs!9ju^9{5kh$0h2jVVk;uoa%Vb{HY(1LwX1 z6!dc(Nl<7fcKkMBdkgxpm1Q!dNLq1|Rm3nNa$oOBEs(KH#L^}{NZIydf1MPUNi7-t zqb4_n?-^f47qjHypTd9;r#*~OTZAnizS z%0v87JiGkT2Vd+SBTqzpj5GJa9IF-e&N`;PJ2Ybw-0Xi(M0VK3%LLAvh_dEfiKq!+ zqVG6Y;)6c+mC?aWh=|;xYzeM{OwjnoZynOoa|n15wnj?VeOvKMI7j3@M@a>(Rs<@O zM$rm=pr8C?xVhQsF~lziTEr9>p<85i`Bd1DWVm}F@6)RQ?9yk|fn?|>Ui^+w@q%jd zBr+M4i>w$+Kvql$UAB{mVl9%7Z+JaC`?X~8CX#B3T_V+9(~^$$fg2XdP02zM1YN@` ze>aDs=e}mqD!@d6BbanA3aR_Ro0UpzU=%f%Q(D;AZ+wR0>)agm$!{bJ#Frv3=zT*F zElFyQa8uFZ)(S}WggTm<)SL0my{q>4%?%K-Dke@AhV03Vqa42aY?zs0>c%H?BV0g5 zxUe79-#*hxt-D67DAqPRq8}cj`;dZ%3P3@ z%8MNb*#Z<2AF})wp+dnpF z`iYp}ynp5uj-g1Tk)BnPWXs z3nhw(N-qf@V&eKDO72i;%4^yQ+C>JAwyjFcZvuBEOySz^vI(9DsN+&S%uT_bi;?wW z+*8IS5ktz(g{4U&)Luoa!zrem^(_<7Jn{%KfCtR&||@D4TF^HC&22CNgP) zSdl?cZ8C^eNcssP_BrioZzJUa$Pn@J}>VuH6BaiGx9jo|s$ad3k1|LeE!cLFQ_7 z5+t7~YQ!I7f*j)V0syrm^kMaXe&4D86I+S{U{x09ln(m&P(2@Y`Fo^?zJq{)qbClG z2@}BTBKWLO+^aLn*K}98m!+cZR)mvv_9fWd8>2xM>^t2B6pt(f(d<rK?KHh@Vj+ccwO zX?P2tOD01puJ}f_L{HB6aKZ|leD@WsMAfJ(XsD#JdH_n`l|vIkPPlGjZUGaaPidc6 z=sAH&+36WdM1YhO%B~Vg@WPz(Q&r4(s2=^q5ycCIDQ5ua2GmWp6e2mPdea=rliPjICdMTFu!CQ0@Y8f*x; zL>hG%-p7wObZI-OyTf#8Y_(RjS*4*DMUb)39WWtoC`Xt8m}onW@;RsIO?G{us#FMq z(#h+80D?TJflwboBl<%k!6C?U*M2=XwPFAfhm~~`^{Oq$7C~0(=&1mhn6U_8F>JVM zOH2u1LiU6i9KT_{0~93zzlrcAz#|L{O!$aaVy9aDsMn}O1v3eLl7SFa3E_w%LM@i~ z2m}d5a!}r`?;}H9^F@<;qD(*pH!@!e6o84vZM7O+_7)bv@ic?c?65GiqZYdFFsWC) z+)vUJeAbeKNTsg0yd)EG+)AB->|(v*wy%BQlB?!>4axk@PSEJUM5+8PSk6;nVo8#-cHtRg7P!T2p}Al_ z6ogA5H(7K46sM5qF4`CkR{@kG*}ymlB$Gkw3QR73qpuXdfQ8O2r&XOXKtd1xg&bp-)oGrLIEEa& zpt@PA4;Vw_VLBr*==29y>9Ax^NZiltV_US7Fo(gs`~pT|$1M(+1s!`fzFnK@92vVx zb?6-^i`@9wjlpUSTpO*x#MCxeXK|&CPkv6W+`yBUC?@5boEY#cA*d$U(#k51eu>4K z4rf$WId6rAax}_d-d+JF^>POD!VDN+0PvGWuiBP$ZG0NaRXhgsZX_@{>R~Wn?+OOx zS|)>a^-J7;$Xo)aG!!KY3~}aH!i9vgIxJ{uN61&&O(+x*%G7cLCP+b+ADCRB?7Lp5 zMqerA0#+$D*56R8$x%-WP=c@ArL){7$z_Iee>X5W{cTlD~8r%d)cZ$+Mllb(c_4UEPlwee)OWMpC zK)EA|&M0_4F!4_>mMyyF>4W#6AI*f(8K1UNaN6opCF+=(dfw1j_fNX zHl?dl!$Z82ax=GE_ywXWEJ*HmkkoreEkutQa+f;ZlncEYSGeI^$jN&UWcT@cikl47 zDT9!A5)nk$sI%g7G8Wdd#q}gM*TH-1n$Ve4rNNM?cVmr7g=TU7eDI9J4ZZs9D6zQ> ziQ2dR>VSzQX9pg_Vbqj?*~KEoy-zkldpPOl}c{ zFu5kuErd**CrrdrbvaWQ5xHb|%O!FXUcM41(GU%%xS0b9~nDQ-@Z8KvK_BxW6DlPSz^G~O zzmM`ym{bO#Xhet$>p@Tr!3$as^%HI9Jc!2(mEtYUlqQ1R8q!TCm>#iE zy{A^np(U{i40QQH&?%0MX(v(DY`|x%eRPwfmelt77vfS2El^^k?Icmj`y_ykNmR;( zu8CmR>Ut9an4EUB%TRsg9557@n>42_WztyKU9%yY2;9HhEg_0V3^4h;6fh}xz>pIc z7#NH8lc7?@V{ka+o(<1BywAsdk-u_N1~9qB9T;ES@B?dACRdVHd5(^WV3!8_I4!Wu zyDq@QTL31imvDicAhHlb4-1BWfLNt|);Rcr8O~?P>L|yPzE)!9-={aGQ*1Sy`2+&M z%m;RWH3ma%!;m49v=A_fBm%>j^OL~`Ds@il)X|W-A!(R(j~Qmm_)BPu8uUtXa1<8(lsbt)HZ8ihT9* m|G&wW<*QdOyywWa!$$1XhQoORc&U-*9qQoL^f diff --git a/docs/manual/options.pdf b/docs/manual/options.pdf index da59921915c022d854b3d968384cd5d7b30244d6..bdb4d8d9acc1d30a97af0ece28bcbca1e1416b00 100644 GIT binary patch delta 18234 zcmai6d0b81*Kenk217R)8ia(p>fUqis8LEn12QyGW}(bOhHI=S#7R4IBxOh`6e)8V zD+w7QBznjg8S}1l>z=yz{63%8ACGhP-NV{zuk~Huwf6DcF44|NAulhY!F}$rhA4^d(P5{v zW>z=GWm^15=X41BDH@jCVY#HIXX?V?yScHl%Ws3N61GHDG?wJ;Uo*L2GM9T#Fl0*~ zT|a}5?Pnqv!>ga}eBv#1c-m$cH}8_0+0{-l8=ciPmL`6>Z6L`c+TTm8Ywyu1VWf*i zMdQWshMG>Nf3MffzuV8vr^A@72HQ<)Pw3s^7RL=cWp|a!O&tC6!=ZuO^M<^RN$Osl zRe9y$64{fiW3lIQo*%M%ynoN2dd;)BmAaqWes)Upe{gES)`ey>SH8P$_ayRn8}IqS zGS7`#eb;nxs_N0;Cz*WgtDCPEF<&ie!Av9VBjc1nw291=A)U%w$APKS?8j9 z7_aKmT5_)1i{)ePM#a3fu9h8?U3*=YHmtt-+xqy^zpkH<4GxmH2Mrvauukyh^y`wB zaj!MCN3NfFb#GDC3LUfGV?+k$%N->~bL#vCFT88B-@__B`dVc4i!`gbH=;fMxQz&_ zP3=_~de%)kFaG&)&n&`5Yn#)YiV3nU+DBsiKTOGe(#0d#^@-_eX~4)c7G9OLJ*HaU zS)gwGNZ-@jqJ6-L-?EfNqsCso8>bUyeC~w*eQO`T`uQooDJ6Kw_b&q%&v-MV{?Xa9 zxQqWu<6Z~vJRLQ6chU@>*T?K`S>KCFT;&^JeesR?u9{As?nhm=^p{TTH5H93ZI|6M zimO?A*{%Ee9=^6S`@c=S>oB17#COcoe^Bx&I%$hV@wo+Bm$=gxwmqRG8vT(;_|ocg`M|59s)3sCE^K~jxFFWvH*r$BUtQFj zQEZQ0$n-qD`!`bTP#R+Mr2HlGc zXdBWky7TK>hV>bGE|Hm$kM!Ca?eIDH=xIlfvpiRm<%6$2>zKJ{xRZ@x-Q%O}FX-Nv z4GJ%9+!nU==(^LUBL<{Ty)=QBxv6W>(|+S-cbM>A^Z4v%Ywa!$_MTc6D!Zf6dgzpjM%y}e8wTt`PlEBpSHx$U*4nh`1SA0bzh01 zbpLMBI^Zum;pABswy^{RL?f1b7f1{&9`;+a|Ud~z{=CUPNVEc07+MEybC02Tsn$O0bouRv` zTX|!@eOGL6&biV?7Ps-H)SzxQnYGmH0TUO21Uroucs z`a#07r*j9ph3ndFrz&`7j?H?UrgeW);n(!aB_;RT8xMW9BvyM)p_(i_ez1>Y{rOa_ zcCRl*e~qjgdpGFVt9iE;`xJ*HEG*Q`vEq-2pWJD8(Tm94_u^6}JO3cuHdA9BiRKi1 z`uTBk0MBK1Xk6jpg3CQ;a01;73JVJUy?NVx>%%XrmR6_-w7b-GDw+9u&)Kk(t5 zlV{j{9bIK$R5Kwdf$ZS*>b!7_ZO0SY_iFwnemriRG@$;&qp(hXJJ;Knym{2&_}lFL zOVn(}KFS!nuVmHgJ+b+`pPi)>Eu5+%J!68ZR;;-_L>g8bwf*2bx9waMF}v>Ojw0E< zIca{97k@VBe_Q-dJK4fECZl@7rezh?wu?Uh7<76JS^i~imcVs@XO5rAB%hfR{%)W2 z>7})TQq`wn{ps_)j0SI%q`KF0ad$7o5yo!_)utaI2PM$C?}42P3u3C~}%( z#-gt#zb{{mer2M5_Q&?p)wNdEv%}9Po>=9dEfbeH>b~SUIga}AUiQsrNp?hG;)u_COFV-1gt2fwOO=UjE*oKf2<+{lUYZe@ zNL^^({pTuKoNxO1#pd%@zUrJ(dvWZlE+ymRlQ#Uf{GW;Nl=dgHmol#Vb-g5jY-c}jEQ+P{`wqo)%1vu3m;A&I0c!DxDigdLw_zUt314|P`rM^PxH&u z9eR6b)s?U8jXUg`v?;qp{CJ1wkmUTCZwB;Auk_Iw5s-iJ*HZqZITlWTOTOIdPW~t; z5KS2{b7}Y~*?J4@x=%Oy#U!m+6F=^1<6dK@{9lb9?mG>d6YEGJ7fzOTYOuOQiVrM7 zRw3JLZaDq4wD?W-$-IeC zwmlq=yf0jtF=bc6AlKsOg-5#m3QDxtDA70C>|1g6<8E2wh+|u?*u?6N9COEOU%)|(F8_4nZj9QkTQm&HH7r{yKw){L`oU83OHgu=iskpxD|VYn7DXIL)LE%Pob6h(vBtXG%l2)?if!DvqUwlUzjfN2_0-Xb z>S`fgHe-+D8B3F2vd|dU0(`^KZ~UKGs7>IVihWBSO_=dSFMIOlC2B!!dc~AAIQE#q ze^e|LK(Q}f?m%Lt#?-!RL+JX$?v z%Fd}L@w$y`9%S_+4(8zgNn_?&?wepadHLp)ZPQ)Wefv+XA;2%$+*h_?#HN==(_Uov zG@TXrs+sQ>bip9SxspGWX!fdp_?xdYu019>4l! z{b}El9Y=1wh~`hYVY%}zVI9yTCWKToSUDp<_F_WMC<{v@E9-pl-0DC-z1Pt*-7_6? zR$pDGRqk_n%Zjw)A@3rLi;vHfEwJ0BJO8VhAoj7Br!ePn*%{+$0rTP#tlQXp_x4c# zo@KZ-`}FZHhOXPRk9Y6qC!Y9X{+}O1>;ePTJ|DhX`r*;=j+G1ER7duAb-fm{G%WPr z#e2Die}eVS4E(sj!r{%c)b5_oF8+7zbmX!p^teo z?(X9Tk7I^S=#?W0-7@>mjn)1;=2`F2KeJ@v_I~TcmHLi%f}aPimJTK6(#8?y$7T_bQpasKEq*IP2S1HwI=vgX_@+% z9$l07W!C2;x{RK1Od~?a!7|q*qGFo+#>V%3y2%>0XKX%}};@A;c~>!)Ay%rQ0*hyMsET;`Hew(y3* zs-YjY%2Gvr^~2}?_V$?i`TOv0i#9)6-4L0LG2ZQWOr%ycuYd23=3_F?xQ^-+;b?Da z)~IFOj;zLc7ABNKfY^=xU$V<`8t<*9o4GVx8D%(t8LA`i>C|&`s$uuYpSu= zJWQh)GmFtCiczbdS}brFQq|)cP0Hg6T9fuwM3uTdFnCR?JxD3 z>#a`C>l6FYXbX!q`}=GaT3c^Oyu z=6bH{jU93i_OPhXIFP1hxWjd0gY89&4Vo*|PMmx`g}Qs)kXlh_Nd0-ir3$VUP(z9g zskp*3)Ia#!zbJ)zeVs$u9vwhAT|Z2XxXH=>aorbDV{dV&i8mXlhqpOY-ZyUcj$1B> zx_O6#d!!&PWpw8hrIDlGxKbJcAkb@mAA#V1P2iAz%Rbfb-d00(_ zJ>pR56_=>pk2%?E9(4nWo)}Um9v`8WJ>_5<0)$9-@`{>W*(4F>Ns$J1{%Iz){h49* z>PiDd6+Y)=r#$NkVpVbQd3|INc2RLx6TBmYsAuQ<3s1k?3-l}ojK zZAjU?v!+a{YbocN&e`2x_eIp+H=JzW8V^Lxe#@aU-<+q4YGH}D?uhFC&M^B)trMaK zzc5s1EHBgmchwK9o;-8|2zG0tDU>)vVrrfO~38?VCwjy`0F(Hl^6Cs zb$GeTdAX}VI_8{Nq(SFv!HJGI*T<4qiZi4&Iqlp_Viq_Wb|l`pV#LB zpHA=hx-ciXYnH_5M`={PGZ$BJj(kBfK+Ypg7JL?lzS?V`^>iK7L7ousA z5Frm%Bo!}wco8UG2zU`HUPyQmDP9EdBBlgiY-AuTpKOxOHUz}vllv#LTQ^aOG($#iT(q%ea(A%au_FA5Q) zAe=xU0-pzy3luW&d9YQ1LI^$&gcT^H;PYT*fkF&E50(}vCC zp9iahLgfbvZ?L>jAq$@m%L^G{_^`Z?5rz-T3mIYfu%M6;h7Su08DaRabs-}RpVpp` zk%mt%&j>@nf+9v3f5&jYkPYw+M>Y!^ClN2{g z)7m7PL~3P{VgXh9lR`oqz903YVt+}7(Otk=&F$^snBesIVud#769fZkQj`>S2nIsG zw4RRMC2i{gLLQGY|1GARej8A8e(Pk1{LVs{n1(o%<=;l?+dmFvpT?yoH{RZnhB{NO z|1xm`LWVoE(E;qO4iEY0G1h8>4Dm694kc(bKj3N&z@_eOPz{YxhB$u=8i3=}krp1R zf%Z@%F9GZw=VA*@^cOp5BSUIdq%{t1i|%6AcJStqW{u}+q1$+j4h;6uMqhEbE-Y^q zZH?EpL-%li9x}`c)j@3$KB5m@-r6YU&(%fAcz1im$pKWfLwIfndU<{H3`cc@r;PUK z5+2?Op5A*PYn;&mRbY1mc-`F*Wnz*8PZK+V)KWv#83%U(g>N-L2l1%R$OyZ0P(2=O z1XFt%(kpv*fj%=kg94;oLFnL{)_AQEx`oZU!Q1;7E_T*HIv96>@%_8Q#GYMYfBlR> zG1e5~;-GHmHgzDLgYCPc_c+lE=}~{Qb#feyQ6Z9oK`WaH0Y)uvX)zN5EL-_p2|h2! z!4&x;bv~cAl>RxF&5#9>(ft@(p^a5xg&}|re2Kyxz|r|)g~5ZP^Ti5#2iN8Ue#iv~ z0bk|=el)*;u}Kt`2cFEAC@hagFEB;uMgs{AI1+_#(Ws)p<`5cHB#MP-RFNtclB0@L zF}WO7q>9<)s3KKJAx9M{YCj3EH# z=-*mgm*A5*Cwn4&g!fs1nb{w-#vgkkZLHZF72@%Iz#^-9qXNve1P|VKVE}$+fgTeV1L7h)WDsZ$s3Hz_Lb({bz`WMZ$Qa>O zgW=I{5OPF#iz`fb)CHB}5;y1_8p*}^gTc8+yTddGUC{u9^M*q2mu_e-!Vf*5b(%Z! zMfk%ocq|@@bP)bN91X?h!%zv<_e7ns#&Gln8+(E1089exI0An7=>^M}d!pZ1>;pg8 zdZC-R_ehvm&l_38WFr9*>td{N?HHtw*ZZLT`2Hy9CmxB;;M&nJ=`k13yUi$c7$5e9 zzFxbyxbtW@?IUBLTjOYS1aBS-PkFxR1Ku?bo&cvyamIL9Hfb#Sg>U+SxF^OTgm9`q zG};-%d>_W6r#LSFdO!06g(e5mGx)=~#0J5VB>@1>@e`o!gC%tCG7NRVp98_xN+!~? z2BB|sEHunHG67j4Y&HoR_b-8t?StVIEhod~G(%7~gvlu|1t6|94w?k3{GHMy6BkdN zjEb8A)Yd{So<9Y};IQd1tm9PF6Apg{>YM|n)ED9OnJ@!vgNxIr!;mkba8l;wTzqZ@ zz_|8o_%YKSS?AQvM4AXsnnSM)B(c99AOE*%glT)R9CUymLzCp*u)M`!xf}Ks*S7fe!!(!00AOfCqw5KnX$rq5um5 zkb_X*2m!zW4NYT!G7`|x`~p}+D8L7J9RZXFexV^5;2zMVxgWqi0Vviq2;iOonVMe! z+W@qhU+C!+um?1b003+L1%%@(Rs|AA0DWry1y*Ik3NSbV!iucvCtz>{6IX!15lkon z{zfpN1n3*VL>ypm1QWl2yb(bj5Wt8QDh+ZoR2rxj!BA3@Oj<01g%~Og`XCr8 z4eB5mCJh=O7$OZCAQ&DE8Xy=N4H_UA77ZF87!nOOOE44~%#~c6;m{ zfpl{K`5?&EE(grIvJ|aHIB_MwkbeY ztYR%Z{+6LcghlJ2d+HiA9O3mFU_PyN$QI!nkpP=?c_3%edYUs7MFB*I+QIvk4M+pw zz>N^&Dd@~N_8M6iTLHO!6kYnpsG!Wq~6s-F!4!y>`;sJQQk06^I z&FzSTujHTtTc|F$F4>Cef^J$-U3$S5hol#5@kd%C3h3s8K1o|e z_5F|73oQqEfqaqK~K4eOp`oWYh z4ub}8=Dsx?Iw~#7#col*4bHpyaS3g+q+4s;Klh$eAN+pb6#X6DO^sIcZTEG5LX6!? z?_Eac6aKue-}$PGk!Hggp;iyAK%AIAYGm;D>v@Sgyz9TNd_4Kgs%IS=0wQjCT$p^e zPu0;7?p@cO86z#`$PAChOnT;iAgW{03u4l^4Ku88!352Y-$F;&+RRjIS9^buX5#8l z)9q@b~~2Y;G3rJ~+$^-ZlJ<2T)M?X}kxwnuRhap&LLx4n7gYSN;i_9O1( zf3TcZ^YO3ejNP@i#YTHl7IpmYAvr}9Z6Exks&mQb9zT3u>NcwXsM&x<;Llm0i^dex z8HuS&l$C7n)(c*skwPcy!4|fw)<4yCHkdm+b*zr#Vo%*Ly=cv%U)Rn#JzqI}dTJL==-WMB#r|1j7AGR~+p#la59)iS7L~t>nXvfW z1nTs;f`r@?dBzd4-%B5S`|^Fee^AETf|Qy;ORU$Lyh@U(|LPRE=^2ChuKfGqT647mhA%&Q?e^bf_btWnVQflTc>UkHSALuB z)TI!W|2c>|j0*4kj(6vHhGobDNwsgShMzy0*+HP+Cu!iWEx(f29M^1b${!za@pgoS z9C7>H)2@kbk$X0q1T1^r(^%4NWu#M=jUp+ zQ9TxQ^?TB^#pzJa!6QjzZB2?EW(!8~e0ZZug}yw|SRUy+lwWOCO^AHd29dp^N6fdu zRA0O*ckM|WJOWvGZ(f7id_52%wV17Sb&=1Xt!vhFihi_aeB-}=9sV8YYT?!U_F%&k zljB0trpKvGUfx!>?a#Jt+Wu^#srSBv8IRZKbWtt7YW}xsooaQppY4auX_Ck82*d%X z^;hAzqY%jgQz0=#BsHjpuF4O=(IKwaU+M3+4b4re)Wk`!}4k293$0tpY z6h|LN?Q!j1q$gFdxt189pmeQbKr^vxg&-t}pBzU+=(;aYO1=0w9BZW`6Ejj`1Eh-- z+W;&J1vY>_K~Q^^SB*(hfHTt3G+eSD8FYn$1kGfi=)n`%+JuEKoHBKqIY1fCNJ1tu z`Fafd2ZBd3>>rpL$&hzCwlK7njx7vprGrKbYXyX4k_38Dl41OE^kmWmId~FcBZdb7 zdN!vGuy;Hx3z=X@eYiQo3_9c0%x=ccoUNI3tgb!<@pf4h7r!`(=3~hj_;p$q+J{qf z;KaISqgx0!=7L%I9D%&5_i1E^u>U#uY4{lwgs|>;h~s%V$Q9xL;F0pJ;pRA=MWzU! z$%kLU&Y`^sKPZ4n&CWyV&-@}7MB{nL!L2UA6BvXw{+5qk;P}fh<$nc8i14Q?KuIRv z1JAvJcn20y^X&RB#k3sL8sw95!CQQ&?iNAoIV?NFR_#_O)3Lv)6xPV#Zj6l5(c z%Nusp*|2SuOuK8MWq9V!E~SALcY0~BS)@5yJ8Wvtv7!Cb`i++^I~BblB|Pb?cK^}q zH%~9#n00VN%DolUxBDzubvW_k2+z=(X?9|_(8Z}Wz3z!45=L)x)ZHn)P!=<+Z{KMN z@2cZ&4m`5uc4gh)6fdKq-j>2U9US(>c-MWguMmOiGRwS{VfyccGg4odF4 zr&K%mf%=>=A6IFXXYXGddNTnvnhvw+`gM`h-?U{XL^9=1yBfY1HP#_l>x5W!Tu1n6%Z=6FaD{ayaGu zC1#~(58sFsC$-{-7gMl*5qhA=wOV{j!TwwMR&xr_%D03fJmWeN;XT(;PkiAz)N2>N zMF#j{I_ipJZy*Q5w39Mv80}I_ zIzzh@lg-dPj7esIZIMiZ1{oFEl%F-#oZBum-L3jJ0F5=^nTIwP6uv1#h13f#BRr{{x(!sQwzX65#c8S@w4Ppw3)`s=<4WK@L?RTEq&1J| z%j5O!uVd>OKE*X;;Z*Z}t^=Wt3Uy9J7i_Piz8mbJLPy=KGgK$&KjvZPI`Rh|lumhA zS6AIa1_OXixBeCM#-r7y)W#D@Xozp!#*+%<6?LUHF)5*8vUMBWoQdcPMC&%5NFb&Y zSDp-76=Fe02@Tmw9eDyF&4g9jNScf*w?TCV*sW3p!CiowV2vm=g2Y0b_tWq8;lG3S?T>s3D;UbeRFSYInM!Zt!ESkRGMxt~b* zKh}`SSn7hR8jS?XgT-PRj+EO#S*$j(lm=_%eiC{8O{Gmp(-HUsB|C*vLW;^dPsmhR z_5t}SU9VK0P)f247*bi5!9fyBr+F=7Y5haS%5pKtRO#YPOGkKul$5U4sUpfOkcqQ|ftmoTAB3c4SCld8CrKe) z099Uu6tj0iN?QYnd;ml>7Q#UQYd+(aBL*a-%O|bY0R02%DWqu;M#y9DL@2Kcwi*m$ zg$hGzwTKWLUTG1!pOj_PqzLNFmZ}{^;P9+AF`m~+og?G15SA2^EC&Leu{@U)1MI3! zE0GtymG>hN(B(yyHVIv~P{t}!%A<*raz`mi*DY1rL^QKeX_JC+DYps0-c|bv0B%|f zBgZNML_$^V3gF(9HJC3iuqrJqfNwNZ1r+ebEXNS=r7Y7C5PTV3XHuRJoPf0xD9N^# znjQd_$nsJFWH+jzM*s%O+6bI+lV7yLDnJ(YPC#td?m&a=HZfg)Q{D*JJ4#~@9f^=9WvO2XhN+5kLip-O)wYE2 zxr?&UpnoBJN1%G1Lb&f@w+ZM%sueM=7TCPYb+!gEMWjt_%hWA1w0mF3&Ap3 z3j_aD1s@^kRn-<~EM+Y$6w=9td?PYNq!tPReN=@J$-jA0-Z5YgyPt@@BT?xGtX{QE zEdPY7bw3#oxIfE~gklj}3t}nD#e~4ES(=fs*_}|rc2C$ZPzgEywZs`Alz|kgVKf7< zz)~y3OVu5VfJCZ}74g_EE8`zUPO?tu_ojTS*ZiWHlJ35P=$0&r<~W z!5Rzz$I_OlDfppFXpj>ju`SjRc(oRLit8${WIzUj>8HjVklgw z`mq?`mNg-Ka;d68I#*)#qto;jTxjw?F?^H2?kJ=yE=p<@!xsUnt|*2Zr&bfn2Z+Ib zSwcfKN7atR0{C=P)!-m4qObat7lx3pdL&{960EU82&$@Mh5zH2gwm#f1^aJNKfo<( zCjhrBVZfhQyMxS)r5P|9mVJojAGk4_lj~nBCfS3*`dN#Jf%2;EPQqiKu|$4Z$}B=Z zKn6;G+M&`Wk+FaQPME$?RPHDRO37*y)0c!w{Ukt=R2Pwe^{Z+@!V@;9mO(A*m+(Mr z)d`^x&RPV%hh|L(fl~G8Bz!UcYzip`pA{A)|AXU7;F|!}6p+TU_5+1}RzFh2vIq&; zTqtU7Vt~1HI6J-GcZr5F(S>5F;g38B2A3M~?;m=(7mzf)2xJqb`47U%+*RW6ax`Uh@D-^9~@ z7`Tx_QB+l}K>k@QPzqHORU?$bhq0>KlEU|As_K`*M@cf)!eHsF!Epc2T7;Ar?UjWl zMXaio6cRVqSb_YbCwlDAmK_U(EzGN#ctKp17j2a^0|}X`RYQ>ppX^C{Gt1zmVgajA zB^66pCoPq*X^>PRW<@0_mw5?UqaKLH_`iMP8!+-s?G;(P|{HC z2j5Vs_yu4wsl)0n|5DCj^sV3B$%d7|SXcKxrAANOeAvl&J=L=qO?f z1386?Q^5rQV-gCBfHt9WK2C2=AXY7W(U%9!+^xl%;noIfys8p{Gpjfiz(31#p^a6@ zgbE`>Al3QAP_b#<2KtANP)={%NViGkAJi+Ky9DZbtbP#eRokRIRbvH9AXO<8w227S z;wCgoRLKKewy>NE+E^q5+QjttI!Z!=`Kn?c02MbNQ2t{o7R_ln)ZXPE1S^e&%TNV!w%7?Y zva|r0CXiz5zUrnjk&f-C@bHD^5LlYNcJK(B77lN)Df(XodbpYg*t-rPM1$PictZw> z2E+fkM&L5UMNH?uLkJhbjVEw%H2?p*1erTJ>MU3oGJoOH`BSIq0IUl5BAq^(ecZf< G==>jaRwWn! delta 16810 zcmai5d0b7~+qV)WQk)Vuak#olr9Ga#Pbeu<=HZtiMImFPxVSFIJP&1K$&i`LmFdKB z4Ixu1^OPa;OqsdH-e;XUyUyPC^Le{}+_Rp&hG(tyJm2U0JbT-7+dlWaeUc|)rQ{J_ zhLb(pCEn6GXFTok>`HR1?=tPN9wWAHDQJM}y!do!bbxcEUduaAw^`ir$LoXhD*Ri$ zKpYZqxF==*>f0^5N&6>!{L#rbf0ysojD0=1|GsEn zuf+{oENoe)LEGIo8tUznHOI$J{9$jJT)*AO_~f_^Ni9b=oB6Wo?D0c)z7Eb_d+$qZ z-KW9TPK8b`_%wgU{ZDbmc{ld4zYNR^pLk>4pAA~>nKEz4lKM;Ijf;9Fv0L8cx82)d z%#3YMZ|w=niM5+|E-uHgk9*PYNZYaLP4tP+DkqFO=yuQXLC{}e;pvIZ0~V!cjCr(r z;I#bI)3tUT*?hv(aEe>qH;cacuG)I_OZ~8hwNlm`|EEE|!-mnXE9mFc2(6IcB_g5R zkiQqj*Z<^j)Mf;A@7TUU_sV6C-L}!m?c&m`qR^tbIh(>aJ)@{GQ||`Y8*Be>?DN^>6(3AD2Xfcf0$8+f*<)M)p|n!sRdDfPXq~yYjT1 zUz713P0|y&udi<3K2td@&#~IY*rDG0J9Os$dUtj8m!)q*LW8z#b-8DB;|F+99$Ovs zoA3R(a7nE`!3}d~)ZXLLyt3PwPyKfWv~3q0w6}2Zl;8IrnLcFKq#849$21sqEv<=t ztbPL>b}HTB4r=}!y3(utv?|w(S%$iMh8t#h?}+J?)^d3H z9hzM~zfob->8y!!ysxdeI%(XwY~SeM>@Qxc&;D&{IK<=2v1wtWb9^(h7W|nqaLMsr z-`bq9A8NnKcH^~uUo&TPb?4%C#X2vW+A~_$DYz(GJHUR}@~i#&MI+A@9UQBE`jlP_dxy^G|C7dfqyA<L+)Pb z-aAPv-fZ`%_D%QGp}ZzDg{`~l`iQ$NYtGrbe*2UsQxEvhO&hU&-2-+J?5`CcKd3j+xu$<9d33nGj_)vj~0f4dd}6u zhdb3Yj=po+^rOe+z+D#xJ$G0x4Xk0etyYU$DQj%-F6yJr-c>g~ak&xwKib^y-6Zbk zqA%wTpqnjTr+%!F>^kbGarlZKN9P898*g_nCi%y^f4{u4%W8Y0veY;AZLfFbN93jF zRXFFCH9YCzvPoXv2cjBu?7#N(vK@WKy}DtTxuU|a=lbS#-uZbE751)vQLDmD%V%}? z+11UdZuf52CVGBu*e;~|rS!i~*0Wi<`Ktf9)G2 zc8SV8{M5a&yZys*h9BeZm5*NGt9L1Pp=Q6qo8R|ta(1_WmHA%T+NAe8D>*LTaq0G_ zQ^w~n3KkzuHpD%R{c=A!b5POWvkt60$)5Um*~}O2&kM>e*!XPY8n1|ernSdgIbgIgy@ zJ{o-T?+a6E+}z%y^|Om}y~aCi?=kNQ1^fKRUh3sm}hJk--h{95Qa_Uc>YT_Hl2{ zcsZ_{GGz&F{d2W@(BZFd3$F%M8Zs{lU-Us5V|n{6{cJcvO1{#_5GS2ocuVUt(-znM}6uK^#5EqZi%iaf6|0;ryhqzMQ8Pt)_G0RpU-}F zXzh}z({@K6n>?ns&&2s#7X9XLZ?KEpl29eRcEyw{t0q?!rM%6hf zo_HK%->P*{IhQkCgTu1i6SjyE@8^2G_b58uk8dE%-I@70ee1zrM&4Qasr`nY&b6E; zICU%k@X7uoy*y4n_<7E~Uo+$UOVch#dU0{}Lz^T|-f<_mLrhRs=Ccu%*YD7#J!|py zxZw|{j4|&%rD9j-@LIyA`H3SV$F=oFeB z+v@X+pWiE+jF+E|i@Cl#^~Czi$6Ncl{N0Onh*pcGq(cKX!88{qUFYb`gKnD-^aoI>h_h>oTIc{v7?( z_%V7@UhWc`&)r7-&gND=RdaBsMwK3n<$Vq}wHI=4B_7q@tvTT0tTy_?g^h8}P~o2A z@#&oNmvUjb+6T{1pYrk=+o__d7(hds4Hz8XT|<^d5Qd zsYKm#F%G@2MN;^EjkNl~U1{zEjd9UK576qN1`gzz z?mc-ft$pHZyz{gnlCqz=;BOho#~At?##MN(kw(8bBt^f_7(-sRK@#=S#kl5G5R&G- za*=W-`A8mxFQhvKa1g0J#wBm^k*L#B+O7`%El2bpIbg_$L0VcT6iY$|M<;Yn7}-A& zM50*~7^odMV!+6lp$@c8CvAP#6;X@d`y)!?-oHhHL??Jj9Y5&GYk3ymH6lN0+XsiL zTAkj%@raS52MmnW3Y2mG2Q9MEiPFuFK0IB#PBc%!3XG*eLxZ(67-(>o1_upZYW=CP zL4Xk~RU#Ll6Kk1EV4-1|OVB~XGM6Ag!!nmhCg4jZ5XqR5V~7@E6}IFAqTz68ws`OU z(Rwn0o{TX#KugrpoJ9q_9vT)EXbL9hEIQB>Y>2ZcK~tbCXVHSDU}est22H`zoJ9|s z;-O_xgr;C|&Z3EdrpW4MT|gC@g5}{5&G#5h)3CgJwlodP^RhBDEYHiz(6AscD?`JA zysQijTjynEXjqG(T)VxTL`W97}78E%crxfi$ zNQaX($OX4S=sT{~47o`6w))^{HYgV}2)W_`<+9#jKV8Br5eM7Wz9jF?>u-NF$yVRi!Nc>OOZ2am1=$|o)GA!p!#P3|y3|6ibQ zTy5BPoICt#kC6|a=mGogRU4X-bFh*tf-0qX9!`fRAE(0yv-na!MM|4Irna0e&u6 z`~@7I7A;@_{!R-P>jZbF0hx-&fX&hXM$jN|LoiCTI440O3vQc%NVF_OfJn3~WCkM9 zGPxOu^p@GpK%}>5VFn_-j1mNh^p;)GlmQgh%P>KZ2t21)Niz`XEqgWt5hz#ki~te9 zq@@K10_s^>jFthMw6r*A$;to_F@TenXSz^m%Gv-DF`%F2p$IKm8Cnl5Ss8#O29zZ| z;g0dn`e0OP6YTLLPxKW6q>FTSgAaE44NTOtAvz`1+oi!j8=|B5&Tq&C=S~4*{ON`M zz%LtuV=eGTM{tH0SZUuzXcZpk4PBgk&{f>75qLvC$q&zOgsNcL7Y)H*8^M5`zUVG~ z3?!Be@Wp5SP&{7g3mObq3WnPl?ZXTGV2;-Q2;*jrp&Ph_FZQ4SDOi7KI?(6^zC(U} zp9>F?b|70UFz7J;Ou;bl-)r~-4gSxahEW{4kKZ#OA2<~H2J!$+`7Eko>a0VK2p4hS z-J=8)jBpbj(rh^?B7`Fam^x37-s3$Y3UQ;HOIq(muxW4|sizHp2$?%53$;U-<-Itg@D>Wv)n#_nhhuGI}X z%-Z9J!+L@!>3?V<4(|>CSFp_ocMM0Haf|=KweG||nCk(zQZ*cAuG153#UIJ9TRl-B zcIXMe%%Bd_Zp5ddX*RxBz0o;*rWdrx@GlWCJgqlu06@$aSB*rs@qq{!`7;uo!RPzH z)!mGOt9u>^TY23VVEt4S`~oxdA)9x?)uO>PZ}o){fV4jNRWuAc-Ve?%D+V=$^NWV5 zk4%868xKH_@ZK0W!`}v?nh3w{4^NIp!;^`zFsAxI((Db*8G}H8-Q574cBQ(_XdJH;? z48-|m+y+9!0CtxE2cQU`MR5b93}e9?2A(h$L}3747z@}ifG&&$U4VTu(6x91hyn~_ zK`5Yz3~g=@+=iII00k@V2NaP323FEwp<$UDC?Nx|SMr2RXTe4Y5DchZ@`R{uSrzCY zBgkW5RXO$m7i1vzK->ai9}QfPk%JFVK}L=@zyujN-T)C~R4n%-4Yy zGBRI>O*1lIhfOmwUl$ByA&UyIX-4MjuxUo->#$Eort7dzMrP}@|)xjni znW}>|GBQ(#=*yH4b%Qx)U}T;Sv5=8zI)p-|l%+!`WJ*~&ghHm2r9&uWN?AHYLZ+0Z zLnLHMSvo{Qrj(^q22iq;r9&uWN?AHEB&LL=7bg&m&SIq`fnel(j3f|@oRHCAzKooa z(O~BcTzl~)(_qbv&SI)G%^RR;F;<$mUr8DX3z8@=-2O`>=SEr*^Yio@-f zEJ0k=k`=%+P)3yyFlPQk++Na8t84g`C<)>7e*y^A znT%E-JZKU?Rn8O$MGlieICCnRitzp^fLHF*(QZ!F&wnfd_MIXD)ehJRpzFB|X%K#~1fBq2{)`_jg&9f0Fm*XPi$x6b{wa_vge-?? znyx^@5bl%$T_7_vJz0rD5cXa{o~$NVzGWr+9FdA5K)M=!-d=IwOF1!d?NUxmT)UJLgKM+JoR~xoQVw8CNip~~TS|(-ec4h@49N{!h7-ft zl;OlQv`U>4PN#$u6E7qySP&Z=7Fxw{=|vvu;J7SNh&U`;635EiBO|Sw;DWbrMkfiO zCfT2l;c+hQklEbD_Cloy+ez!(oZtDcJxI5b!e&=%UvKchdf`L2tX)6m)8IOut#`Gr zwx@9Fj2S}w+#b0{PYhk#HN1ABA#20()0OJBIMDS`*h%U9o}g~wNw?#dEbf!HV!-Z4 z-wH-GNJ)#Wy*PKg`<|O!lGy{N()%{A={T;Ut|;?Lm!b2#5J$SG|Gz~=cDAGb`6Ho10xGvCKI*1o>toI zoW95TesjMHt_3GJ##QzA1`^a~e0nC{r=OZ-qV@bS1) zPSp-~?#8dm{n`6-r}Xx1@5Zl6%7`Cx>AB~T!x=$~qoP)i3jO1xsoKgWVLkd>pRp~+ zunykOBI}?JvxjP;UC_8V!$TW~O&!wl_(9bX078?S)(R?<1ORF@3zS zExXIe$1#!d7Y26U&M3Ei55<=s3wBh`3-~&SqF${MCS|7<);zMqF0A{e6HYfA z&u4sJRhLU#(jlterSW0cKa`I++q0nq)Cm(uCk&KsbgYbj+Xjf$G7VKmxc%R7+N5qu zGMXj0*>=F7y9WTP2JD10!&DmdT(ApmM0S)GqN7ePjXI+5#&Hh*?V}S%6HL+44DI0G zW5|HfgA=u^g;bQ{kA+#3!JiU-QO0gr3ZK}6S}jhfUV*0?Q+ny`|4sN8@)PS3@+g3sxqjKpR+@U=p~K2_}I%nOYGXlbIDP$;#Z7WaF$%M9n@cvsYLc zo)yPx%SqrPdr)Qkj|iD-lX$oUkG;qp;Za*qkZJ5bh#k_!(Hgwkgi?#Mz>fRjm#`1H z?E44hAUwweff6pSIl=+^;U{|tMIv0VA0mjuVqeqw!z8uHJpfOjKHUak?I8#o;YZPG zs4^XfcvmqKBHz;t`1Lpw{ewe}!mrRY$U5?mlYI6V^uBlk=@7n{2}V=<6vV#O$05~n zzTso)avC*4`0xoZm!vGz7J~9A=>F;qi7C}j!$g5OkVpQRg@XBYj+ITyuRDd_l6iars4;zt-;(zWtUFcK1YJi$$q@+~3=! z?;mTIdAdPTEhc46?K&^p-{ONVZJCjg^SI00gj{yz&1q++`3|Fn170Wl%s&|OqTP@0 z9}@gy$B)^ZNc&7&`Et15$1pqHOzpp04Vm#V(~WcNG;aR}jQSk$v9QYFk>|280t^B8sGoojuvG3jmnmc*w#D1^4i_1psgK@QE zm&Z(XU6yxmauc`wz@inO4Wr&3EBg99)mUK4-?Hj@f?r=_f73~e8%D?Bg=bN&g~XS7 zi-lK~@s<*DX|WM7b13I8K8JL+I-xNqy&dI&pPz%Gp-&DnS6uPl^C-lgfn=dj1LM~3X5|Ec&|+530L+n8P61ra zp|m6kAUFWK;q-X&IaCwRdX1b+jV_@vwQYC-uPa1nHO0ZX?0Ji(DX)>ehYhbMJ$&%K zDmKS$co9!RJiL-g;#_e?Rhvq9 zsgsQ-qVYi|oBEXqh!t1Erc|+U#owH4f_w#9M+=Z(2tE|kkfIuTJNS1PIUqE8^gyjw zXaJPuponJaf@7U+R&uNZCI4x4JP+3vt1Xd177JvZ{AowXGKv#0U(Ke0LB|t1SN18C z40&P$)-qlo32RvyrDsKAtX47sQeL>@vNCwzL$1_HM(J3=EHi-Eq84;Cr*mZoQxwM& z#-)(4g!5U;Akl@)#!9B6L;~JcGEU@3er=KUHvi&yj$}y|q4@`(HX*H6GD=_xzf{N= zQVy|}aXOyHyQ|x1nkgSam6wDK>+S+iY}!f&@4~>GkOrnuZXakU$^NXn3lxbm)-s)* z=5ZG?g<^JiAEzg&rd4;S=n|@{kkNVuuY)NJirL|^Sk>)ArcY7;>nY%-mFEcMVuA$L z{X~vXd~2CbM?x|At7@?l3esDe#lbFWohV2>39ga9((Zye##+mC0!e4BWdcvIN+A~l3GA3A02-v4;CoEsq`OO0$T&eCDLX+i=I4NjVXXBkUpb)b)O5uKT(D*EYE*3atnBv@Ma z6U_OzLdKD@P_fKV5>8k_Q~^9IQY7434;ERKi?gDRRHPLB^dyd3%k<_ltCh?EXiVy( zRzeo6UpXNMPN7tW10Ydi1xM*fDsD9&M~NzM<_H99Df9WucgF#$DvzIo*Z%Txm7Ep_ zFCmrIPi#xM5e`b*Dy4xHl=d?eM|ckE!b+gwp!%TN3Al;UOE>^=p8{#$LarLLa3;UOkAFfjctvr;ult&F%rZO&| zo9cyGy~?$Du=KL?na`i+cohWm0Jq9}=V2>KSLA_rsr!L-DNl>ns~{c1m4UoRus&9u zn%MB*5UL~8>D8wIaH}*pUVw8|t|5q|#sYuvHpvonAg-wgi{S9e!9ZwKI~MgM!Lr_n zo>4(Hujfdew6xz~_{r-9;g^mweEJDn z@@8N+D${|GM_x}@FAt$YH7!S}{6fc>zpJnw%b8#3Sfjm;6I8@Y$5Se}(edU2lJ$gO zi^>BB+NFx2Iymvt3oJoiGKgD{H#B^z}=L4|e#un}>9a$ycYRV4#>Qpwbri@;N=xDHtqrNg`H!A-071L0kH zTLKRuRk;*kfYQ$eotnGA-K$Vp&_TLaJYSic7AWCu%F}|JScTMjD1}kV zG7Q8&mBB;AQQ53sr!Gq90S{El2x@w+7r^jJPDU=n=tc8aO=XS-P6mutb^LmDGO34Z zvg%|Y+fu*?d_YSnONa37J=DAui-1fO0YRo$78@X6GJm*RR%wv2%G?iRI;G8kOb{oiZGQOe8NWBx?0 zbS!ux2vw*CuifFcl?w};lA}OBK?%i>Y(bu&7z-Z;DvMljr~=i@0*NJo6JCnp`z zs7tF(hSaKQoa|@gVPGBnyN(<=T5G10?Yjbi(Ly2?JvtKvk%jICxg@Y}u)m!~X$= COSDP= diff --git a/docs/manual/spatch_options.tex b/docs/manual/spatch_options.tex index f319a5a..1458739 100644 --- a/docs/manual/spatch_options.tex +++ b/docs/manual/spatch_options.tex @@ -610,6 +610,16 @@ functions.} \developer{--disable-once}{Print various warning messages every time some condition occurs, rather than only once.} +\subsection{External analyses} + +\developer{--external-analysis-file}{Loads in the contents of a database +produced by some external analysis tool. Each entry contains the analysis +result of a particular source location. Currently, such a database is a +.csv file providing integer bounds or an integer set for some subset of +the source locations that references an integer memory location. +This database can be inspected with coccilib functions, e.g. to +control the pattern match process.} + \subsection{Miscellaneous} \rare{--quiet}{Suppress most output. This is the default.} diff --git a/docs/spatch.1.in b/docs/spatch.1.in index 7d5340f..cb34870 100644 --- a/docs/spatch.1.in +++ b/docs/spatch.1.in @@ -109,8 +109,6 @@ see all the available options in different categories .B \-help, \-\-help show summary of options. - - .SH EXAMPLES ./spatch -sp_file foo.cocci foo.c @@ -135,6 +133,435 @@ If the semantic patch is not working as expected, the option -debug shows selection of information about the application of a semantic patch to a file or directory. +.SH MORE OPTIONS +.IP "MAIN OPTIONS" +.TP +\fB\-\-sp\-file\fR + the semantic patch file +.TP +\fB\-o\fR + the output file +.TP +\fB\-\-in\-place\fR +do the modification on the file directly +.TP +\fB\-\-backup\-suffix\fR +suffix to use when making a backup for inplace +.TP +\fB\-\-out\-place\fR +store modifications in a .cocci_res file +.TP +\fB\-\-reverse\fR +invert the semantic patch before applying it +.TP +\fB\-U\fR +set number of diff context lines +.TP +\fB\-\-partial\-match\fR +report partial matches of the SP on the C file +.TP +\fB\-\-iso\-file\fR + (default=/usr/local/share/coccinelle/standard.iso) +.TP +\fB\-\-macro\-file\fR + +.TP +\fB\-\-macro\-file\-builtins\fR + (default=/usr/local/share/coccinelle/standard.h) +.TP +\fB\-\-recursive\-includes\fR +causes all available include files, both those included in the C file(s) and those included in header files, to be used +.TP +\fB\-\-all\-includes\fR +causes all available include files included in the C file(s) to be used +.TP +\fB\-\-no\-includes\fR +causes not even local include files to be used +.TP +\fB\-\-local\-includes\fR +causes local include files to be used +.TP +\fB\-\-ignore\-unknown\-options\fR +For integration in a toolchain (must be set before the first unknown option) +.TP +\fB\-\-include\-headers\fR +process header files independently +.TP +\fB\-I\fR +

containing the header files (optional) +.TP +\fB\-\-preprocess\fR +run the C preprocessor before applying the semantic match +.TP +\fB\-c\fR +gcc/cpp compatibility mode +.TP +\fB\-\-dir\fR + process all files in directory recursively +.TP +\fB\-\-use\-glimpse\fR +works with \fB\-dir\fR, use info generated by glimpseindex +.TP +\fB\-\-use\-google\fR +find relevant files using google code search +.TP +\fB\-\-use\-idutils\fR +find relevant files using id\-utils +.TP +\fB\-\-patch\fR + path name with respect to which a patch should be created +.IP +"" for a file in the current directory +.TP +\fB\-\-kbuild\-info\fR + improve \fB\-dir\fR by grouping related c files +.TP +\fB\-\-pyoutput\fR +Sets output routine: Standard values: +.TP +\fB\-\-version\fR +guess what +.TP +\fB\-\-date\fR +guess what +.TP +\fB\-\-shorthelp\fR +see short list of options +.TP +\fB\-\-longhelp\fR +see all the available options in different categories +.PP +.IP "ALIASES AND OBSOLETE OPTIONS" +.TP +\fB\-\-sp\fR +command line semantic patch +.TP +\fB\-\-iso\fR +short option of \fB\-\-iso\-file\fR +.TP +\fB\-\-cocci\-file\fR + the semantic patch file +.PP +.IP "MOST USEFUL SHOW OPTIONS" +.HP +\fB\-\-show\-diff\fR +.HP +\fB\-\-no\-show\-diff\fR +.TP +\fB\-\-force\-diffshow\fR +diff even if only spacing changes +.HP +\fB\-\-show\-flow\fR +.HP +\fB\-\-ctl\-inline\-let\fR +.HP +\fB\-\-ctl\-show\-mcodekind\fR +.HP +\fB\-\-show\-bindings\fR +.HP +\fB\-\-show\-transinfo\fR +.HP +\fB\-\-show\-misc\fR +.TP +\fB\-\-show\-trying\fR +show the name of each function being processed +.TP +\fB\-\-show\-dependencies\fR +show the dependencies related to each rule +.PP +.IP "VERBOSE SUBSYSTEMS OPTIONS" +.HP +\fB\-\-verbose\-ctl\-engine\fR +.HP +\fB\-\-verbose\-match\fR +.HP +\fB\-\-verbose\-engine\fR +.TP +\fB\-\-graphical\-trace\fR +generate a pdf file representing the matching process +.TP +\fB\-\-gt\-without\-label\fR +remove graph label (requires option \fB\-graphical\-trace\fR) +.HP +\fB\-\-parse\-error\-msg\fR +.HP +\fB\-\-verbose\-parsing\fR +.HP +\fB\-\-type\-error\-msg\fR +.PP +.IP "OTHER SHOW OPTIONS" +.HP +\fB\-\-show\-c\fR +.HP +\fB\-\-show\-cocci\fR +.HP +\fB\-\-show\-before\-fixed\-flow\fR +.HP +\fB\-\-show\-ctl\-tex\fR +.HP +\fB\-\-show\-ctl\-text\fR +.HP +\fB\-\-show\-SP\fR +.PP +.IP "DEBUG C PARSING/UNPARSING" +.HP +\fB\-\-debug\-cpp\fR +.HP +\fB\-\-debug\-lexer\fR +.HP +\fB\-\-debug\-etdt\fR +.HP +\fB\-\-debug\-typedef\fR +.TP +\fB\-\-filter\-msg\fR +filter some cpp message when the macro is a "known" cpp construct +.HP +\fB\-\-filter\-define\-error\fR +.TP +\fB\-\-filter\-msg\-define\-error\fR +filter the error msg +.HP +\fB\-\-filter\-passed\-level\fR +.HP +\fB\-\-debug\-unparsing\fR +.PP +.IP "SHORTCUT FOR ENABLING/DISABLING A SET OF DEBUGGING OPTIONS AT ONCE" +.HP +\fB\-\-quiet\fR +.HP +\fB\-\-very\-quiet\fR +.HP +\fB\-\-debug\fR +.HP +\fB\-\-pad\fR +.PP +.IP "BENCH OPTIONS" +.TP +\fB\-\-profile\fR +gather timing information about the main coccinelle functions +.TP +\fB\-\-bench\fR + for profiling the CTL engine +.TP +\fB\-\-timeout\fR + timeout in seconds +.TP +\fB\-\-steps\fR +max number of model checking steps per code unit +.TP +\fB\-\-iso\-limit\fR +max depth of iso application +.TP +\fB\-\-no\-iso\-limit\fR +disable limit on max depth of iso application +.TP +\fB\-\-track\-iso\fR +gather information about isomorphism usage +.TP +\fB\-\-disable\-iso\fR +disable a specific isomorphism +.TP +\fB\-\-profile\-iso\fR +gather information about the cost of isomorphism usage +.PP +.IP "CHANGE OF ALGORITHM OPTIONS" +.TP +\fB\-\-keep\-comments\fR +keep comments around removed code +.HP +\fB\-\-loop\fR +.TP +\fB\-\-no\-loops\fR +drop all back edges derived from looping constructs \- unsafe +.TP +\fB\-\-no\-gotos\fR +drop all jumps derived from gotos \- unsafe +.TP +\fB\-\-no\-saved\-typedefs\fR +drop all inferred typedefs from one parse of some code to the next +.TP +\fB\-\-ocaml\-regexps\fR +use OCaml Str regular expressions for constraints +.HP +\fB\-\-l1\fR +.TP +\fB\-\-ifdef\-to\-if\fR +convert ifdef to if (experimental) +.TP +\fB\-\-no\-ifdef\-to\-if\fR +convert ifdef to if (experimental) +.HP +\fB\-\-disable\-multi\-pass\fR +.HP +\fB\-\-noif0\-passing\fR +.HP +\fB\-\-defined\fR +.HP +\fB\-\-undefined\fR +.HP +\fB\-\-noadd\-typedef\-root\fR +.TP +\fB\-\-disallow\-nested\-exps\fR +disallow an expresion pattern from matching a term and its subterm +.HP +\fB\-\-disable\-worth\-trying\-opt\fR +.HP +\fB\-\-only\-return\-is\-error\-exitif\fR this flag is not set, then break and continue are also error exits +.TP +\fB\-\-allow\-inconsistent\-paths\fR +if this flag is set don't check for inconsistent paths; dangerous +.TP +\fB\-\-no\-safe\-expressions\fR +make an expression disjunction not prioritise the topmost disjunct +.TP +\fB\-\-int\-bits\fR +the number of bits in an unsigned int +.TP +\fB\-\-long\-bits\fR +the number of bits in an unsigned long +.TP +\fB\-\-linux\-spacing\fR +spacing of + code follows the conventions of Linux +.TP +\fB\-\-smpl\-spacing\fR +spacing of + code follows the semantic patch +.TP +\fB\-D\fR +indicate that a virtual rule should be considered to be matched +.TP +\fB\-\-c\fR++ +make a small attempt to parse C++ files +.PP +.IP "MISC OPTIONS" +.TP +\fB\-\-debugger\fR +option to set if launch spatch in ocamldebug +.TP +\fB\-\-disable\-once\fR +to print more messages +.TP +\fB\-\-show\-trace\-profile\fR +show trace +.HP +\fB\-\-save\-tmp\-files\fR +.PP +.IP "CONCURRENCY" +.TP +\fB\-\-index\fR +the processor to use for this run of spatch +.TP +\fB\-\-max\fR +the number of processors available +.TP +\fB\-\-mod\-distrib\fR +use mod to distribute files among the processors +.PP +.IP "PAD OPTIONS" +.TP +\fB\-\-use\-cache\fR +use .ast_raw pre\-parsed cached C file +.TP +\fB\-\-cache\-prefix\fR +directory of cached ASTs, sets \fB\-use\-cache\fR +.TP +\fB\-\-cache\-limit\fR +maximum number of cached ASTs, sets \fB\-use\-cache\fR +.PP +.IP "TEST MODE AND TEST OPTIONS (WORKS WITH TESTS/ OR .OK FILES)" +The test options don't work with the \fB\-\-sp\-file\fR and so on. +.TP +\fB\-\-test\fR + launch spatch on tests/file.[c,cocci] +.TP +\fB\-\-testall\fR +launch spatch on all files in tests/ having a .res +.TP +\fB\-\-test\-okfailed\fR +generates .{ok,failed,spatch_ok} files using .res files +.TP +\fB\-\-test\-regression\-okfailed\fR +process the .{ok,failed,spatch_ok} files in current dir +.TP +\fB\-\-compare\-with\-expected\fR +use also file.res +.TP +\fB\-\-expected\-score\-file\fR +which score file to compare with in \fB\-testall\fR +.TP +\fB\-\-no\-update\-score\-file\fR +do not update the score file when \fB\-testall\fR succeeds +.HP +\fB\-\-relax\-include\-path\fR +.PP +.IP "ACTION MODE" +The action options don't work with the \fB\-\-sp\-file\fR and so on. +It's for the other (internal) uses of the spatch program. +.TP +\fB\-\-tokens\-c\fR + +.TP +\fB\-\-parse\-c\fR + +.TP +\fB\-\-parse\-h\fR + +.TP +\fB\-\-parse\-ch\fR + +.TP +\fB\-\-parse\-i\fR + +.TP +\fB\-\-parse\fR + +.TP +\fB\-\-show\-flow\fR + +.TP +\fB\-\-control\-flow\fR + +.TP +\fB\-\-control\-flow\-to\-file\fR + +.TP +\fB\-\-test\-cfg\-ifdef\fR + +.TP +\fB\-\-parse\-unparse\fR + +.TP +\fB\-\-type\-c\fR + +.TP +\fB\-\-compare\-c\fR + +.TP +\fB\-\-comment\-annotater\-c\fR + +.HP +\fB\-\-compare\-c\-hardcoded\fR +.TP +\fB\-\-test\-attributes\fR + +.TP +\fB\-\-test\-cpp\fR + +.TP +\fB\-\-extract\-macros\fR + +.TP +\fB\-\-extract\-macros\-select\fR + +.TP +\fB\-\-xxx\fR + <> +.TP +\fB\-\-parse\-cocci\fR + +.TP +\fB\-\-compare\-c\fR + + .SH FILES .I @SHAREDIR@/standard.iso .RS diff --git a/engine/Makefile b/engine/Makefile index b30babf..87f6a09 100644 --- a/engine/Makefile +++ b/engine/Makefile @@ -33,7 +33,8 @@ endif TARGET=cocciengine CTLTARGET=engine -SRC= flag_matcher.ml lib_engine.ml pretty_print_engine.ml \ +SRC= externalanalysis.ml \ + flag_matcher.ml lib_engine.ml pretty_print_engine.ml \ check_exhaustive_pattern.ml \ check_reachability.ml \ c_vs_c.ml isomorphisms_c_c.ml \ @@ -59,11 +60,11 @@ SYSLIBS= str.cma unix.cma #for warning: -w A #for profiling: -p -inline 0 with OCAMLOPT -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDESDEP) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) diff --git a/engine/asttoctl2.ml b/engine/asttoctl2.ml index f779b57..f6df332 100644 --- a/engine/asttoctl2.ml +++ b/engine/asttoctl2.ml @@ -1409,8 +1409,8 @@ let dots_au is_strict toend label s wrapcode n x seq_after y quantifier = let v = get_let_ctr() in op s x (match stop_early with - Common.Left x1 -> Printf.printf "left\n"; ctl_or y x1 - | Common.Right stop_early -> Printf.printf "right\n"; + Common.Left x1 -> ctl_or y x1 + | Common.Right stop_early -> CTL.Let(v,y, ctl_or (CTL.Ref v) (ctl_and CTL.NONSTRICT (label_pred_maker label) @@ -1595,7 +1595,8 @@ and make_whencond_headers e e1 label guard quantified = header_pred (Ast.rewrap e (Ast.ForHeader - (Ast.make_mcode "for",Ast.make_mcode "(",None,Ast.make_mcode ";", + (Ast.make_mcode "for",Ast.make_mcode "(", + Ast.ForExp(None,Ast.make_mcode ";"), Some e1,Ast.make_mcode ";",None,Ast.make_mcode ")"))) in let if_headers = List.fold_left ctl_or CTL.False (List.map if_header e1) in diff --git a/engine/check_exhaustive_pattern.ml b/engine/check_exhaustive_pattern.ml index 3a209d6..234b95b 100644 --- a/engine/check_exhaustive_pattern.ml +++ b/engine/check_exhaustive_pattern.ml @@ -58,7 +58,7 @@ let dumb_astcocci_rule_elem = function | A.WhileHeader (_, _, ea, _) -> () | A.DoHeader _ -> () | A.WhileTail (_,_,ea,_,_) -> () - | A.ForHeader (_, _, ea1opt, _, ea2opt, _, ea3opt, _) -> () + | A.ForHeader (_, _, _, ea2opt, _, ea3opt, _) -> () | A.IteratorHeader (ia1, ia2, ea, ia3) -> () | A.SwitchHeader _ -> () | A.Break _ -> () diff --git a/engine/cocci_vs_c.ml b/engine/cocci_vs_c.ml index de16aed..9d70ab1 100644 --- a/engine/cocci_vs_c.ml +++ b/engine/cocci_vs_c.ml @@ -4087,28 +4087,39 @@ let rec (rule_elem_node: (A.rule_elem, Control_flow_c.node) matcher) = - | A.ForHeader (ia1, ia2, ea1opt, ia3, ea2opt, ia4, ea3opt, ia5), - F.ForHeader (st, (((eb1opt,ib3s), (eb2opt,ib4s), (eb3opt,ib4vide)), ii)) + | A.ForHeader (ia1, ia2, firsta, ea2opt, ia4, ea3opt, ia5), + F.ForHeader (st, ((firstb, (eb2opt,ib4s), (eb3opt,ib4vide)), ii)) -> assert (null ib4vide); let (ib1, ib2, ib5) = tuple_of_list3 ii in - let ib3 = tuple_of_list1 ib3s in let ib4 = tuple_of_list1 ib4s in + (match (firsta,firstb) with + (A.ForExp(ea1opt, ia3),B.ForExp(eb1opt,ib3s)) -> + let ib3 = tuple_of_list1 ib3s in + tokenf ia3 ib3 >>= (fun ia3 ib3 -> + option expression ea1opt eb1opt >>= (fun ea1opt eb1opt -> + return (A.ForExp(ea1opt, ia3),B.ForExp(eb1opt,[ib3])))) + | (A.ForDecl (mckstart,allminus,decla),B.ForDecl declb) -> + declaration (mckstart,allminus,decla) declb >>= + (fun (mckstart,allminus,decla) declb -> + return ( + A.ForDecl (mckstart,allminus,decla), + B.ForDecl declb + )) + | _ -> fail) + >>= + (fun firsta firstb -> tokenf ia1 ib1 >>= (fun ia1 ib1 -> tokenf ia2 ib2 >>= (fun ia2 ib2 -> - tokenf ia3 ib3 >>= (fun ia3 ib3 -> tokenf ia4 ib4 >>= (fun ia4 ib4 -> tokenf ia5 ib5 >>= (fun ia5 ib5 -> - option expression ea1opt eb1opt >>= (fun ea1opt eb1opt -> option expression ea2opt eb2opt >>= (fun ea2opt eb2opt -> option expression ea3opt eb3opt >>= (fun ea3opt eb3opt -> return ( - A.ForHeader (ia1, ia2, ea1opt, ia3, ea2opt, ia4, ea3opt, ia5), - F.ForHeader (st, (((eb1opt,[ib3]), (eb2opt,[ib4]), (eb3opt,[])), - [ib1;ib2;ib5])) - - ))))))))) + A.ForHeader(ia1, ia2, firsta, ea2opt, ia4, ea3opt, ia5), + F.ForHeader(st,((firstb,(eb2opt,[ib4]),(eb3opt,[])),[ib1;ib2;ib5])) + )))))))) | A.SwitchHeader(ia1,ia2,ea,ia3), F.SwitchHeader (st, (eb,ii)) -> diff --git a/engine/externalanalysis.ml b/engine/externalanalysis.ml new file mode 100644 index 0000000..83a1235 --- /dev/null +++ b/engine/externalanalysis.ml @@ -0,0 +1,313 @@ +(* + * Copyright 2012, INRIA + * Julia Lawall, Gilles Muller + * Copyright 2010-2011, INRIA, University of Copenhagen + * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle 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 + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +# 0 "./externalanalysis.ml" +(* Support code for the integration of results + * from external analysis tools. + * + * the file should contain a result per line, where each line + * is of the form: + * filename;begin_row;begin_column;end_row;end_column;data + * where data can be: + * E;n;int_1;...;int_n (an integer set) + * I;bnd;bnd (integer bounds, either integer or empty) + * other + * + * Note: for the moment the analysis results are assumed to be + * integer ranges or sets. Other types of analysis results will + * be regarded as a plain string. + * + * Todo: implement a proper querying facility that keeps different + * types of analysis apart. + *) + + +(* provides a search structure for providing a map from posl to + * some value, and search operations that find the nearest posl. + * This is mainly a hack for backwards compatibility with older + * ocaml versions that provide only limited functionality on + * Maps. + *) +module PoslMap = struct + module PComp = struct + type t = Ast_c.posl + let compare = Ast_c.compare_posl + end + + module PMap = Map.Make (PComp) + module PSet = Set.Make (PComp) + + type 'a t = (PSet.t * 'a PMap.t) + + let empty = (PSet.empty, PMap.empty) + let mem x (s, _) = PSet.mem x s + let find k (_, m) = PMap.find k m + let add k v (s, m) = (PSet.add k s, PMap.add k v m) + + (* throws Not_found if such a key does not exist *) + let nearest_key find_smaller k s = + match PSet.split k s with + (_, true, _) -> k + | (smaller, false, greater) -> + match find_smaller with + true -> PSet.max_elt smaller + | false -> PSet.min_elt greater + + (* throws Not_found if such an entry does not exist *) + let find_nearest find_smaller (s, m) k = + PMap.find (nearest_key find_smaller k s) m +end + +module StringMap = Map.Make (String) + +module Int64Set = Set.Make (Int64) + +(* bound: either concrete or unbounded *) +type bound = int64 option + +(* The type of analysis results, which for the moment focusses on integers. + * The lower bound should be smaller or equal to the upper bound (not enforced) + *) +type result = + IntSet of Int64Set.t + | IntBounds of bound * bound + | Other of string + +(* for printing *) +let show_bound b = + match b with + None -> "*" + | Some i -> Printf.sprintf "%Ld" i + +let show_result result = + let out = Buffer.create 120 in + begin match result with + IntSet s -> + Buffer.add_string out "{"; + Int64Set.iter (fun i -> + Buffer.add_string out (Printf.sprintf "%Ld;" i)) s; + Buffer.add_string out "}" + | IntBounds (l, u) -> + Buffer.add_string out (show_bound l); + Buffer.add_string out "-"; + Buffer.add_string out (show_bound u) + | Other s -> + Buffer.add_string out s + end; + Buffer.contents out + +(* search structure for results *) +type result_map = (((result list) PoslMap.t) PoslMap.t) StringMap.t + +let empty_map : result_map = StringMap.empty + +(* this module is organized that it contains the analysis results as a singleton. *) +let current_map = ref empty_map + +(* regular expressions for extracting results from the .csv file *) +let loc_regexp = Str.regexp "\\([^;]*\\);\\([0-9]+\\);\\([0-9]+\\);\\([0-9]+\\);\\([0-9]+\\);\\(.+\\)" +let intset_regexp = Str.regexp "E;\\([0-9]+\\)\\(\\(;[0-9]+\\)*\\)" +let intbounds_regexp = Str.regexp "I;\\([0-9]*\\);\\([0-9]*\\)" +let split_regexp = Str.regexp "[;]" + +(* Loading of results from a .cvs-like format. + * Skips over unparsable entries without reporting an error. + *) +let load_external_results filename = + let chan = open_in filename in + try while true do + let line = input_line chan in + match Str.string_match loc_regexp line 0 with + false -> () + | true -> + let s_file = Str.matched_group 1 line in + let s_lbegin = Str.matched_group 2 line in + let s_cbegin = Str.matched_group 3 line in + let s_lend = Str.matched_group 4 line in + let s_cend = Str.matched_group 5 line in + let s_data = Str.matched_group 6 line in + let mk_posl s_row s_col = + (int_of_string s_row, int_of_string s_col) in + let posl_begin = mk_posl s_lbegin s_cbegin in + let posl_end = mk_posl s_lend s_cend in + + (* map the line to a value *) + let value = + match Str.string_match intset_regexp s_data 0 with + true -> + let n_fields = int_of_string (Str.matched_group 1 s_data) in + let s_fields = Str.matched_group 2 s_data in + let strs = Str.bounded_split split_regexp s_fields n_fields in + let ints = List.map Int64.of_string strs in + let set = List.fold_right Int64Set.add ints Int64Set.empty in + IntSet set + | false -> + match Str.string_match intbounds_regexp s_data 0 with + true -> let mk_bound s = + match String.length s == 0 with + true -> None + | false -> Some (Int64.of_string s) in + IntBounds (mk_bound (Str.matched_group 1 s_data), + mk_bound (Str.matched_group 2 s_data)) + | false -> Other s_data in + + (* add the new value to the current map *) + let ensure_str m k f = + let v = match StringMap.mem k m with + true -> f (StringMap.find k m) + | false -> f PoslMap.empty in + StringMap.add k v m in + let ensure_posl k e f m = + let v = match PoslMap.mem k m with + true -> f (PoslMap.find k m) + | false -> f e in + PoslMap.add k v m in + + current_map := ensure_str !current_map s_file + (ensure_posl posl_begin PoslMap.empty + (ensure_posl posl_end [] (fun xs -> value :: xs ))) + done with End_of_file -> (); + close_in chan + + + +(* finds all nearest results in the map that enclose the given position *) +let find_results filename p_begin p_end = + try + let m_begin = StringMap.find filename !current_map in + let m_end = PoslMap.find_nearest true m_begin p_begin in + let results = PoslMap.find_nearest false m_end p_end in + results + with Not_found -> [] + + +(* + * some convenience functions on analysis results. + *) + +let within_bounds c l u = + match (l, u) with + (None, None) -> true + | (None, Some k) -> c <= k + | (Some k, None) -> k <= c + | (Some k, Some n) -> k <= c && c <= n + +let contains_bounds m n l u = + match (l, u) with + (None, None) -> true + | (None, Some k) -> begin + match (m, n) with + (_, None) -> false + | (_, Some j) -> j <= k + end + | (Some k, None) -> begin + match (m, n) with + (None, _) -> false + | (Some j, _) -> k <= j + end + | (Some k, Some q) -> begin + match (m, n) with + (Some i, Some j) -> k <= i && j <= q + | _ -> false + end + +(* given two result values, computes their intersection. An empty intersection + is indicated with a None result value. +*) +let intersect_results r1 r2 = + let sets s1 s2 = + match Int64Set.inter s1 s2 with + s when Int64Set.is_empty s -> None + | s -> Some (IntSet s) in + let bounds_set r l u s = + if Int64Set.for_all (fun c -> within_bounds c l u) s + then Some r + else None in + let bounds r m n l u = + if contains_bounds m n l u + then Some r + else None in + match r1 with + IntSet s1 -> begin + match r2 with + IntSet s2 -> sets s1 s2 + | IntBounds (l, u) -> bounds_set r2 l u s1 + | Other _ -> None + end + | IntBounds (l, u) -> begin + match r2 with + IntSet s2 -> bounds_set r1 l u s2 + | IntBounds (m, n) -> bounds r1 l u m n + | Other _ -> None + end + | Other _ -> None + +(* a predicate over the analysis results *) +let satisfy f filename p_begin p_end = + try f (find_results filename p_begin p_end) + with Not_found -> false + +(* satisfy, but with the intersection of all analysis results. *) +let satisfy1 f = + let inter mbR r = + match mbR with + None -> None + | Some s -> intersect_results r s in + satisfy + begin fun ls -> + match ls with + [] -> false + | (x :: xs) -> + match List.fold_left inter (Some x) xs with + None -> false + | Some r -> f r + end + +let has_any_result = satisfy (fun rs -> List.length rs > 0) + +let for_all p = satisfy (List.for_all p) + +let for_all1 p = satisfy + (fun rs -> List.length rs > 0 && List.for_all p rs) + +let exists p = satisfy (List.exists p) + +let single_int c r = + match r with + | IntSet s when Int64Set.is_empty s -> true (* unreachable memory, thus any propery holds *) + | IntSet s -> Int64Set.equal (Int64Set.singleton c) s + | IntBounds (Some l, Some u) -> l == c && u == c + | _ -> false + +let contains_int c r = + match r with + IntSet s -> Int64Set.mem c s + | IntBounds (l, u) -> within_bounds c l u + | _ -> false + +let has_only_nul = for_all1 (single_int Int64.zero) +let has_also_nul = exists (contains_int Int64.zero) +let has_also_int c = exists (contains_int Int64.zero) diff --git a/engine/externalanalysis.mli b/engine/externalanalysis.mli new file mode 100644 index 0000000..6681bf7 --- /dev/null +++ b/engine/externalanalysis.mli @@ -0,0 +1,62 @@ +(* + * Copyright 2012, INRIA + * Julia Lawall, Gilles Muller + * Copyright 2010-2011, INRIA, University of Copenhagen + * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix + * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen + * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix + * This file is part of Coccinelle. + * + * Coccinelle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, according to version 2 of the License. + * + * Coccinelle 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 + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Coccinelle. If not, see . + * + * The authors reserve the right to distribute this or future versions of + * Coccinelle under other licenses. + *) + + +# 0 "./externalanalysis.mli" +module Int64Set : Set.S with type elt = int64 + +type bound = int64 option + +type result = + IntSet of Int64Set.t + | IntBounds of bound * bound + | Other of string + +val show_bound : bound -> string +val show_result : result -> string + +val load_external_results : string -> unit +val find_results : Common.filename -> Ast_c.posl -> Ast_c.posl -> result list + +val intersect_results : result -> result -> result option + +val satisfy : + (result list -> bool) -> Common.filename -> Ast_c.posl -> Ast_c.posl -> bool +val satisfy1 : + (result -> bool) -> Common.filename -> Ast_c.posl -> Ast_c.posl -> bool + +val has_any_result : Common.filename -> Ast_c.posl -> Ast_c.posl -> bool +val for_all : + (result -> bool) -> Common.filename -> Ast_c.posl -> Ast_c.posl -> bool +val for_all1 : + (result -> bool) -> Common.filename -> Ast_c.posl -> Ast_c.posl -> bool +val exists : + (result -> bool) -> Common.filename -> Ast_c.posl -> Ast_c.posl -> bool + +val single_int : int64 -> result -> bool +val contains_int : int64 -> result -> bool +val has_only_nul : Common.filename -> Ast_c.posl -> Ast_c.posl -> bool +val has_also_nul : Common.filename -> Ast_c.posl -> Ast_c.posl -> bool +val has_also_int : int64 -> Common.filename -> Ast_c.posl -> Ast_c.posl -> bool diff --git a/extra/Makefile b/extra/Makefile index e646075..b0cf223 100644 --- a/extra/Makefile +++ b/extra/Makefile @@ -13,11 +13,11 @@ INCLUDES= -I ../commons -I ../globals -I ../parsing_cocci -I ../parsing_c #for warning: -w A #for profiling: -p -inline 0 with OCAMLOPT -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDESDEP) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) diff --git a/globals/Makefile b/globals/Makefile index af2432f..e0d2d9d 100644 --- a/globals/Makefile +++ b/globals/Makefile @@ -31,7 +31,7 @@ endif ############################################################################## TARGET=globals -OCAMLCFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g OPTFLAGS ?= -g SRC=config.ml flag.ml iteration.ml $(REGEXP_FILE) regexp.ml @@ -44,8 +44,8 @@ INCLUDEDIRS= ../commons $(PCREDIR) ############################################################################## INCLUDES=$(INCLUDEDIRS:%=-I %) -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDES) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) diff --git a/install.txt b/install.txt index 4dd6b4f..34c0c3c 100644 --- a/install.txt +++ b/install.txt @@ -1,3 +1,9 @@ + ** News ** + +- Coccinelle no longer needs ocaml-sexplib nor ocaml-extlib. +- Parallel building is possible when you do not build the bytecode + and native version of spatch simultaneously. + ** Compilation ** @@ -18,14 +24,17 @@ On Debian/Ubuntu, install the following packages - ocaml-native-compilers (or alternatively ocaml) - ocaml-findlib - libpycaml-ocaml-dev - - libsexplib-camlp4-dev - menhir and libmenhir-ocaml-dev On Fedora, install the following packages - pkgconfig (optional, but strongly recommended) + - chrpath - ocaml - ocaml-findlib - - ocaml-sexplib-devel + - ocaml-camlp4-devel + - ocaml-findlib-devel + - ocaml-ocamldoc + - ocaml-pcre-devel Note that on Fedora, there is currently not a package for menhir and pycaml. However, coccinelle diff --git a/main.ml b/main.ml index 05170a1..6ff9dac 100644 --- a/main.ml +++ b/main.ml @@ -615,6 +615,9 @@ let other_options = [ "--show-trace-profile", Arg.Set Common.show_trace_profile, " show trace"; "--save-tmp-files", Arg.Set Common.save_tmp_files, " "; + "--external-analysis-file", Arg.String + (Externalanalysis.load_external_results), + " import results from an external analysis"; ]; "concurrency", diff --git a/ocaml/Makefile b/ocaml/Makefile index 58d7a3c..95c0598 100644 --- a/ocaml/Makefile +++ b/ocaml/Makefile @@ -15,7 +15,7 @@ SRC=coccilib.ml ocamlcocci_aux.ml $(OCAMLCOCCI_FILE) prepare_ocamlcocci.ml run_o #LIBS=../commons/commons.cma ../parsing_c/parsing_c.cma #INCLUDES= -I ../commons -I ../parsing_c INCLUDES = -I ../commons -I ../commons/ocamlextra -I ../globals \ - -I ../parsing_cocci -I ../parsing_c + -I ../parsing_cocci -I ../parsing_c -I ../engine LIBS=../commons/commons.cma ../globals/globals.cma \ ../parsing_c/parsing_c.cma ../parsing_cocci/cocci_parser.cma @@ -27,11 +27,11 @@ SYSLIBS= str.cma unix.cma #for warning: -w A #for profiling: -p -inline 0 with OCAMLOPT -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDES) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) diff --git a/ocaml/coccilib.ml b/ocaml/coccilib.ml index f1c0d6f..f2759fc 100644 --- a/ocaml/coccilib.ml +++ b/ocaml/coccilib.ml @@ -85,3 +85,62 @@ let print_sec ?color:(color="ovl-face2") msg ps = let print_secs ?color:(color="ovl-face2") msg ps = List.iter (function i -> print_link ~color:color ~msg:msg i) ps + +(* +pos transformations +*) + +let basename_pos pos = { pos with file = Filename.basename (pos.file) } + + +(* +external analysis results interface +(in a separate module to not pollute the namespace) +*) + +module Ana = struct + type result = Externalanalysis.result + type bound = Externalanalysis.bound + + let show_bound = Externalanalysis.show_bound + let show_result = Externalanalysis.show_result + + let load_results = + Externalanalysis.load_external_results + + let find pos = + Externalanalysis.find_results pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let inter = Externalanalysis.intersect_results + + let satisfy f pos = + Externalanalysis.satisfy f pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let satisfy1 f pos = + Externalanalysis.satisfy1 f pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let has_any pos = + Externalanalysis.has_any_result pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let for_all p pos = + Externalanalysis.for_all p pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let for_all1 p pos = + Externalanalysis.for_all1 p pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let exists p pos = + Externalanalysis.exists p pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let single_int = Externalanalysis.single_int + let contains_int = Externalanalysis.contains_int + + let has_only_nul pos = + Externalanalysis.has_only_nul pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let has_also_nul pos = + Externalanalysis.has_also_nul pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + + let has_also_int c pos = + Externalanalysis.has_also_int c pos.file (pos.line, pos.col) (pos.line_end, pos.col_end) + +end diff --git a/ocaml/coccilib.mli b/ocaml/coccilib.mli index 64a1d9c..5f71790 100644 --- a/ocaml/coccilib.mli +++ b/ocaml/coccilib.mli @@ -83,3 +83,72 @@ val fcts : (string, param_type list -> string ref list -> unit) Hashtbl.t val print_main : ?color:string -> string -> pos list -> unit val print_sec : ?color:string -> string -> pos list -> unit val print_secs : ?color:string -> string -> pos list -> unit + + +(* ---------------------------------------------------------------------- *) +(* Pos transformations *) + +(** convert the filename of a pos to its basename *) +val basename_pos : pos -> pos + + +(* ---------------------------------------------------------------------- *) +(* External analysis *) + +(** external analysis integration. Note: do not use after transformations. *) +module Ana : + sig + (** the type of analysis results: currently only integer ranges. *) + type result = Externalanalysis.result + type bound = Externalanalysis.bound + + (** convert a result value to a string for showing. *) + val show_result : result -> string + + (** convert a bound to a string for showing. *) + val show_bound : bound -> string + + (** loads some analysis results from the given file. *) + val load_results : string -> unit + + (** finds the analysis results for a given position. *) + val find : pos -> result list + + (** computes the intersection of analysis results, if possible. *) + val inter : + result -> result -> result option + + (** predicate over a list of analysis results of a given position. *) + val satisfy : (result list -> bool) -> pos -> bool + + (** predicate over the intersection of analysis results. *) + val satisfy1 : (result -> bool) -> pos -> bool + + (** true if an analysis result exists for the given position. *) + val has_any : pos -> bool + + (** predicate over all analysis results of a given position. *) + val for_all : (result -> bool) -> pos -> bool + + (** predicate over all analysis results (at least one) of a given position. *) + val for_all1 : (result -> bool) -> pos -> bool + + (** true if the predicate is satisfied for at least one result + of a given position. *) + val exists : (result -> bool) -> pos -> bool + + (** true if the result contains only a single integer as range *) + val single_int : int64 -> result -> bool + + (** true if the result range contains the given integer. *) + val contains_int : int64 -> result -> bool + + (** analysis result of the position has only the zero value. *) + val has_only_nul : pos -> bool + + (** analysis result of the position contains also the zero value. *) + val has_also_nul : pos -> bool + + (** analysis result of the position contains also the given integer. *) + val has_also_int : int64 -> pos -> bool + end diff --git a/ocaml/yes_prepare_ocamlcocci.ml b/ocaml/yes_prepare_ocamlcocci.ml index a99612f..a37e01a 100644 --- a/ocaml/yes_prepare_ocamlcocci.ml +++ b/ocaml/yes_prepare_ocamlcocci.ml @@ -374,7 +374,7 @@ let load_file mlfile = (* let linklibs = link_libs lklibs in *) let flags = Printf.sprintf - "-thread -g -dtypes -I %s %s -I %s/globals -I %s/ocaml -I %s/parsing_c -I %s/commons " + "-g -I %s %s -I %s/globals -I %s/ocaml -I %s/parsing_c -I %s/commons " (sysdir ()) inc Config.path Config.path Config.path Config.path in let (obj, cmd) = if Config.dynlink_is_native diff --git a/parsing_c/Makefile b/parsing_c/Makefile index 5fb8cfa..fa9945b 100644 --- a/parsing_c/Makefile +++ b/parsing_c/Makefile @@ -50,11 +50,11 @@ SYSLIBS= str.cma unix.cma num.cma #for warning: -w A #for profiling: -p -inline 0 with OCAMLOPT -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDESDEP) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) diff --git a/parsing_c/ast_c.ml b/parsing_c/ast_c.ml index b62c388..9b8f429 100644 --- a/parsing_c/ast_c.ml +++ b/parsing_c/ast_c.ml @@ -466,6 +466,8 @@ and statement = statementbis wrap3 and exprStatement = expression option + and declOrExpr = ForDecl of declaration | ForExp of expression option wrap + (* for Switch, need check that all elements in the compound start * with a case:, otherwise unreachable code. *) @@ -477,7 +479,7 @@ and statement = statementbis wrap3 and iteration = | While of expression * statement | DoWhile of statement * expression - | For of exprStatement wrap * exprStatement wrap * exprStatement wrap * + | For of declOrExpr * exprStatement wrap * exprStatement wrap * statement (* cppext: *) | MacroIteration of string * argument wrap2 list * statement @@ -987,6 +989,11 @@ let compare_pos ii1 ii2 = let equal_posl (l1,c1) (l2,c2) = (l1 =|= l2) && (c1 =|= c2) +let compare_posl (l1,c1) (l2,c2) = + match l2 - l1 with + 0 -> c2 - c1 + | r -> r + let info_to_fixpos ii = match pinfo_of_info ii with OriginTok pi -> Ast_cocci.Real pi.Common.charpos diff --git a/parsing_c/control_flow_c.ml b/parsing_c/control_flow_c.ml index 91e09ac..8c18894 100644 --- a/parsing_c/control_flow_c.ml +++ b/parsing_c/control_flow_c.ml @@ -155,7 +155,7 @@ type node = node1 * string | DoHeader of fullstatement * info | DoWhileTail of expression wrap | ForHeader of fullstatement * - (exprStatement wrap * exprStatement wrap * exprStatement wrap) + (declOrExpr * exprStatement wrap * exprStatement wrap) wrap | SwitchHeader of fullstatement * expression wrap | MacroIterHeader of fullstatement * (string * argument wrap2 list) wrap diff --git a/parsing_c/control_flow_c.mli b/parsing_c/control_flow_c.mli index 228133f..b4f2e40 100644 --- a/parsing_c/control_flow_c.mli +++ b/parsing_c/control_flow_c.mli @@ -26,7 +26,7 @@ type node = node1 * string (* For debugging. Used by print_graph *) | DoHeader of statement * info | DoWhileTail of expression wrap | ForHeader of statement * - (exprStatement wrap * exprStatement wrap * exprStatement wrap) + (declOrExpr * exprStatement wrap * exprStatement wrap) wrap | SwitchHeader of statement * expression wrap | MacroIterHeader of statement * (string * argument wrap2 list) wrap diff --git a/parsing_c/parser_c.mly b/parsing_c/parser_c.mly index 1de46f6..b1ca186 100644 --- a/parsing_c/parser_c.mly +++ b/parsing_c/parser_c.mly @@ -982,15 +982,14 @@ iteration: | Tdo statement Twhile TOPar expr TCPar TPtVirg { DoWhile ($2,$5), [$1;$3;$4;$6;$7] } | Tfor TOPar expr_statement expr_statement TCPar statement - { For ($3,$4,(None, []),$6), [$1;$2;$5]} + { For (ForExp $3,$4,(None, []),$6), [$1;$2;$5]} | Tfor TOPar expr_statement expr_statement expr TCPar statement - { For ($3,$4,(Some $5, []),$7), [$1;$2;$6] } + { For (ForExp $3,$4,(Some $5, []),$7), [$1;$2;$6] } /*(* c++ext: for(int i = 0; i < n; i++)*)*/ - | Tfor TOPar decl expr_statement expr_opt TCPar statement - { - (* pr2 "DECL in for"; *) - MacroIteration ("toto", [], $7),[$1;$2;$6] (* TODOfake ast, TODO need decl2 ? *) - } + | Tfor TOPar decl expr_statement TCPar statement + { For (ForDecl ($3 Ast_c.LocalDecl),$4,(None, []),$6), [$1;$2;$5]} + | Tfor TOPar decl expr_statement expr TCPar statement + { For (ForDecl ($3 Ast_c.LocalDecl),$4,(Some $5, []),$7), [$1;$2;$6] } /*(* cppext: *)*/ | TMacroIterator TOPar argument_list_ne TCPar statement { MacroIteration (fst $1, $3, $5), [snd $1;$2;$4] } diff --git a/parsing_c/pretty_print_c.ml b/parsing_c/pretty_print_c.ml index ff64bf3..7079ba5 100644 --- a/parsing_c/pretty_print_c.ml +++ b/parsing_c/pretty_print_c.ml @@ -259,12 +259,15 @@ let mk_pretty_printers pr_elem iifakend - | Iteration (For ((e1opt,il1),(e2opt,il2),(e3opt, il3),st)), + | Iteration (For (first,(e2opt,il2),(e3opt, il3),st)), [i1;i2;i3;iifakend] -> pr_elem i1; pr_space(); pr_elem i2; - pp_statement (Ast_c.mk_st (ExprStatement e1opt) il1); + (match first with + ForExp (e1opt,il1) -> + pp_statement (Ast_c.mk_st (ExprStatement e1opt) il1) + | ForDecl decl -> pp_decl decl); pp_statement (Ast_c.mk_st (ExprStatement e2opt) il2); assert (null il3); pp_statement (Ast_c.mk_st (ExprStatement e3opt) il3); @@ -320,7 +323,7 @@ let mk_pretty_printers | Compound _ | ExprStatement _ | Selection (If (_, _, _)) | Selection (Switch (_, _)) | Iteration (While (_, _)) | Iteration (DoWhile (_, _)) - | Iteration (For ((_,_), (_,_), (_, _), _)) + | Iteration (For (_, (_,_), (_, _), _)) | Iteration (MacroIteration (_,_,_)) | Jump ((Continue|Break|Return)) | Jump (ReturnExpr _) | Jump (GotoComputed _) @@ -1197,7 +1200,7 @@ and pp_init (init, iinit) = pr2 "XXX"; - | F.ForHeader (_st, (((e1opt,i1), (e2opt,i2), (e3opt,i3)), ii)) -> + | F.ForHeader (_st, ((first, (e2opt,i2), (e3opt,i3)), ii)) -> (* iif i1; iif i2; iif i3; iif ii; diff --git a/parsing_c/sexp_ast_c.ml b/parsing_c/sexp_ast_c.ml deleted file mode 100644 index d40ab7a..0000000 --- a/parsing_c/sexp_ast_c.ml +++ /dev/null @@ -1,4044 +0,0 @@ -(* 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 -open Sexplib - -(* -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.List - (Sexp.Atom (("new" | "New" as tag)) :: sexp_args) - as sexp) -> - (match sexp_args with - | [ v1 ] -> let v1 = fullType_of_sexp v1 in New 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.Atom ("new" | "New") 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 (("metaDeclVal" | "MetaDeclVal" as tag)) :: sexp_args) - as sexp) -> - (match sexp_args with - | [ v1 ] -> let v1 = declaration_of_sexp v1 in MetaDeclVal v1 - | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) - | (Sexp.List - (Sexp.Atom (("metaFieldVal" | "MetaFieldVal" as tag)) :: sexp_args) - as sexp) -> - (match sexp_args with - | [ v1 ] -> let v1 = field_of_sexp v1 in MetaDeclVal 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/unparse_cocci.ml b/parsing_c/unparse_cocci.ml index d241f6e..a3f9730 100644 --- a/parsing_c/unparse_cocci.ml +++ b/parsing_c/unparse_cocci.ml @@ -61,12 +61,12 @@ let end_block () = unindent true; force_newline () in let print_string_box s = print_string s in let print_option = Common.do_option in -let print_option_prespace fn = function - None -> () - | Some x -> pr_space(); fn x in let print_option_space fn = function None -> () | Some x -> fn x; pr_space() in +let print_option_prespace fn = function + None -> () + | Some x -> pr_space(); fn x in let print_between = Common.print_between in let outdent _ = () (* should go to leftmost col, does nothing now *) in @@ -454,7 +454,12 @@ and constant = function and fullType ft = match Ast.unwrap ft with - Ast.Type(_,cv,ty) -> print_option_space (mcode const_vol) cv; typeC ty + Ast.Type(_,cv,ty) -> + (match Ast.unwrap ty with + Ast.Pointer(_,_) -> + typeC ty; print_option_prespace (mcode const_vol) cv + | _ -> print_option_space (mcode const_vol) cv; typeC ty) + | Ast.AsType(ty, asty) -> fullType ty | Ast.DisjType _ -> failwith "can't be in plus" | Ast.OptType(_) | Ast.UniqueType(_) -> @@ -812,10 +817,9 @@ and rule_elem arity re = mcode print_string whl; pr_space(); mcode print_string_box lp; expression exp; close_box(); mcode print_string rp; mcode print_string sem - | Ast.ForHeader(fr,lp,e1,sem1,e2,sem2,e3,rp) -> + | Ast.ForHeader(fr,lp,first,e2,sem2,e3,rp) -> pr_arity arity; - mcode print_string fr; mcode print_string_box lp; - print_option expression e1; mcode print_string sem1; + mcode print_string fr; mcode print_string_box lp; forinfo first; print_option expression e2; mcode print_string sem2; print_option expression e3; close_box(); mcode print_string rp @@ -882,6 +886,11 @@ and rule_elem arity re = failwith "MetaStmtList not supported (not even in ast_c metavars binding)" +and forinfo = function + Ast.ForExp(e1,sem1) -> + print_option expression e1; mcode print_string sem1 + | Ast.ForDecl (_,_,decl) -> declaration decl + and print_define_parameters params = match Ast.unwrap params with Ast.NoParams -> () @@ -1064,6 +1073,7 @@ let rec pp_any = function | Ast.Rule_elemTag(x) -> rule_elem "" x; false | Ast.StatementTag(x) -> statement "" x; false + | Ast.ForInfoTag(x) -> forinfo x; false | Ast.CaseLineTag(x) -> case_line "" x; false | Ast.ConstVolTag(x) -> const_vol x unknown unknown; false diff --git a/parsing_c/visitor_c.ml b/parsing_c/visitor_c.ml index 0fd8bb2..0ff05e3 100644 --- a/parsing_c/visitor_c.ml +++ b/parsing_c/visitor_c.ml @@ -386,8 +386,10 @@ and vk_statement = fun bigf (st: Ast_c.statement) -> | Iteration (While (e, st)) -> vk_expr bigf e; statf st; | Iteration (DoWhile (st, e)) -> statf st; vk_expr bigf e; - | Iteration (For ((e1opt,i1), (e2opt,i2), (e3opt,i3), st)) -> - statf (mk_st (ExprStatement (e1opt)) i1); + | Iteration (For (first, (e2opt,i2), (e3opt,i3), st)) -> + (match first with + ForExp (e1opt,i1) -> statf (mk_st (ExprStatement (e1opt)) i1) + | ForDecl decl -> vk_decl bigf decl); statf (mk_st (ExprStatement (e2opt)) i2); statf (mk_st (ExprStatement (e3opt)) i3); statf st; @@ -797,12 +799,18 @@ and vk_node = fun bigf node -> iif ii; vk_expr bigf e - | F.ForHeader (_st, (((e1opt,i1), (e2opt,i2), (e3opt,i3)), ii)) -> + | F.ForHeader (_st, ((ForExp (e1opt,i1), (e2opt,i2), (e3opt,i3)), ii)) -> iif i1; iif i2; iif i3; iif ii; e1opt +> do_option (vk_expr bigf); e2opt +> do_option (vk_expr bigf); e3opt +> do_option (vk_expr bigf); + | F.ForHeader (_st, ((ForDecl decl, (e2opt,i2), (e3opt,i3)), ii)) -> + iif i2; iif i3; + iif ii; + decl +> (vk_decl bigf); + e2opt +> do_option (vk_expr bigf); + e3opt +> do_option (vk_expr bigf); | F.MacroIterHeader (_s, ((s,es), ii)) -> iif ii; vk_argument_list bigf es; @@ -1134,21 +1142,30 @@ and vk_statement_s = fun bigf st -> Iteration (While ((vk_expr_s bigf) e, statf st)) | Iteration (DoWhile (st, e)) -> Iteration (DoWhile (statf st, (vk_expr_s bigf) e)) - | Iteration (For ((e1opt,i1), (e2opt,i2), (e3opt,i3), st)) -> - let e1opt' = statf (mk_st (ExprStatement (e1opt)) i1) in + | Iteration (For (first, (e2opt,i2), (e3opt,i3), st)) -> + let first = + match first with + ForExp (e1opt,i1) -> + let e1opt' = statf (mk_st (ExprStatement (e1opt)) i1) in + let e1' = Ast_c.unwrap_st e1opt' in + let i1' = Ast_c.get_ii_st_take_care e1opt' in + (match e1' with + ExprStatement x1 -> ForExp (x1,i1') + | _ -> + failwith + "cant be here if iterator keep ExprStatement as is") + | ForDecl decl -> ForDecl (vk_decl_s bigf decl) in let e2opt' = statf (mk_st (ExprStatement (e2opt)) i2) in let e3opt' = statf (mk_st (ExprStatement (e3opt)) i3) in - let e1' = Ast_c.unwrap_st e1opt' in let e2' = Ast_c.unwrap_st e2opt' in let e3' = Ast_c.unwrap_st e3opt' in - let i1' = Ast_c.get_ii_st_take_care e1opt' in let i2' = Ast_c.get_ii_st_take_care e2opt' in let i3' = Ast_c.get_ii_st_take_care e3opt' in - (match (e1', e2', e3') with - | ((ExprStatement x1), (ExprStatement x2), ((ExprStatement x3))) -> - Iteration (For ((x1,i1'), (x2,i2'), (x3,i3'), statf st)) + (match (e2', e3') with + | ((ExprStatement x2), ((ExprStatement x3))) -> + Iteration (For (first, (x2,i2'), (x3,i3'), statf st)) | x -> failwith "cant be here if iterator keep ExprStatement as is" ) @@ -1590,9 +1607,15 @@ and vk_node_s = fun bigf node -> | F.DoWhileTail (e,ii) -> F.DoWhileTail (vk_expr_s bigf e, iif ii) - | F.ForHeader (st, (((e1opt,i1), (e2opt,i2), (e3opt,i3)), ii)) -> + | F.ForHeader (st, ((first, (e2opt,i2), (e3opt,i3)), ii)) -> + let first = + match first with + ForExp (e1opt,i1) -> + ForExp (e1opt +> Common.map_option (vk_expr_s bigf), iif i1) + | ForDecl decl -> ForDecl (vk_decl_s bigf decl) in + F.ForHeader (st, - (((e1opt +> Common.map_option (vk_expr_s bigf), iif i1), + ((first, (e2opt +> Common.map_option (vk_expr_s bigf), iif i2), (e3opt +> Common.map_option (vk_expr_s bigf), iif i3)), iif ii)) diff --git a/parsing_cocci/Makefile b/parsing_cocci/Makefile index 02e2b30..fd48de5 100644 --- a/parsing_cocci/Makefile +++ b/parsing_cocci/Makefile @@ -28,8 +28,8 @@ endif TARGET=cocci_parser -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g LEXER_SOURCES = lexer_cocci.mll CLI_LEXER_SOURCES = lexer_cli.mll @@ -80,15 +80,15 @@ all.opt: @$(MAKE) $(OPTLIB) BUILD_OPT=yes $(LIB): $(GENERATED) $(OBJS) - $(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -I $(MENHIRDIR) -a -o $(LIB) $(MENHIRMOD) $(OBJS) + $(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) -I $(MENHIRDIR) -a -o $(LIB) $(MENHIRMOD) $(OBJS) $(OPTLIB): $(GENERATED) $(OPTOBJS) - $(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) -I $(MENHIRDIR) -a -o $(OPTLIB) $(MENHIROMOD) $(OPTOBJS) + $(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) -I $(MENHIRDIR) -a -o $(OPTLIB) $(MENHIROMOD) $(OPTOBJS) $(EXEC): $(OBJS) main.cmo $(LIBS) - $(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -o $(EXEC) $(SYSLIBS) $(LIBS) $(OBJS) main.cmo + $(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) -o $(EXEC) $(SYSLIBS) $(LIBS) $(OBJS) main.cmo clean:: rm -f $(LIB) @@ -100,13 +100,13 @@ clean:: .SUFFIXES: .ml .mli .cmo .cmi .cmx .ml.cmo: - $(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -c $< + $(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) -c $< .mli.cmi: - $(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -c $< + $(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) -c $< .ml.cmx: - $(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) -c $< + $(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) -c $< $(LEXER_SOURCES:.mll=.ml) : $(LEXER_SOURCES) $(OCAMLLEX) $(LEXER_SOURCES) diff --git a/parsing_cocci/adjust_pragmas.ml b/parsing_cocci/adjust_pragmas.ml index 4111b2a..d8235f1 100644 --- a/parsing_cocci/adjust_pragmas.ml +++ b/parsing_cocci/adjust_pragmas.ml @@ -117,7 +117,7 @@ let rec right_statement s = | Ast0.Do(d,body,whl,lp,exp,rp,sem) -> call_right right_mcode sem s (function sem -> Ast0.Do(d,body,whl,lp,exp,rp,sem)) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft) -> None + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft) -> None | Ast0.Iterator(nm,lp,args,rp,body,aft) -> None | Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) -> call_right right_mcode rb s @@ -340,12 +340,12 @@ let process = None -> Ast0.unwrap s | Some (pragmas,body) -> Ast0.While(whl,lp,exp,rp,body,update_before pragmas aft)) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft) -> (match right_statement body with None -> Ast0.unwrap s | Some (pragmas,body) -> Ast0.For - (fr,lp,e1,sem1,e2,sem2,e3,rp,body, + (fr,lp,first,e2,sem2,e3,rp,body, update_before pragmas aft)) | Ast0.Iterator(nm,lp,args,rp,body,aft) -> (match right_statement body with diff --git a/parsing_cocci/arity.ml b/parsing_cocci/arity.ml index ac2cda2..46bf17b 100644 --- a/parsing_cocci/arity.ml +++ b/parsing_cocci/arity.ml @@ -798,20 +798,32 @@ and statement tgt stm = let rp = mcode rp in let sem = mcode sem in make_rule_elem stm tgt arity (Ast0.Do(d,body,wh,lp,exp,rp,sem)) - | Ast0.For(fr,lp,exp1,sem1,exp2,sem2,exp3,rp,body,aft) -> + | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,aft) -> let arity = - stm_same (mcode2line fr) (List.map mcode2arity [fr;lp;sem1;sem2;rp]) in + let mcodes = [fr;lp;sem2;rp] in + let mcodes = + match Ast0.unwrap first with + Ast0.ForExp(exp1,sem1) -> sem1::mcodes + | Ast0.ForDecl _ -> mcodes in + stm_same (mcode2line fr) (List.map mcode2arity mcodes) in let fr = mcode fr in let lp = mcode lp in - let exp1 = get_option (expression arity) exp1 in - let sem1 = mcode sem1 in + let first = + match Ast0.unwrap first with + Ast0.ForExp(exp1,sem1) -> + let exp1 = get_option (expression arity) exp1 in + let sem1 = mcode sem1 in + Ast0.rewrap first (Ast0.ForExp(exp1,sem1)) + | Ast0.ForDecl (bef,decl) -> + Ast0.rewrap first + (Ast0.ForDecl(bef,declaration arity decl)) in let exp2 = get_option (expression arity) exp2 in - let sem2= mcode sem2 in + let sem2 = mcode sem2 in let exp3 = get_option (expression arity) exp3 in let rp = mcode rp in let body = statement arity body in make_rule_elem stm tgt arity - (Ast0.For(fr,lp,exp1,sem1,exp2,sem2,exp3,rp,body,aft)) + (Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,aft)) | Ast0.Iterator(nm,lp,args,rp,body,aft) -> let arity = stm_same (mcode2line lp) (List.map mcode2arity [lp;rp]) in let nm = ident false arity nm in diff --git a/parsing_cocci/ast0_cocci.ml b/parsing_cocci/ast0_cocci.ml index c1ac28a..768456b 100644 --- a/parsing_cocci/ast0_cocci.ml +++ b/parsing_cocci/ast0_cocci.ml @@ -335,8 +335,7 @@ and base_statement = string mcode (* while *) * string mcode (* ( *) * expression * string mcode (* ) *) * string mcode (* ; *) - | For of string mcode (* for *) * string mcode (* ( *) * - expression option * string mcode (*;*) * + | For of string mcode (* for *) * string mcode (* ( *) * forinfo * expression option * string mcode (*;*) * expression option * string mcode (* ) *) * statement * (info * mcodekind) (* after info *) @@ -383,6 +382,12 @@ and base_statement = | OptStm of statement | UniqueStm of statement +and base_forinfo = + ForExp of expression option * string mcode (*;*) + | ForDecl of (info * mcodekind) (* before the decl *) * declaration + +and forinfo = base_forinfo wrap + and fninfo = FStorage of Ast.storage mcode | FType of typeC @@ -470,6 +475,7 @@ and anything = | InitTag of initialiser | DeclTag of declaration | StmtTag of statement + | ForInfoTag of forinfo | CaseLineTag of case_line | TopTag of top_level | IsoWhenTag of Ast.when_modifier @@ -491,6 +497,7 @@ let param x = ParamTag x let ini x = InitTag x let decl x = DeclTag x let stmt x = StmtTag x +let forinfo x = ForInfoTag x let case_line x = CaseLineTag x let top x = TopTag x diff --git a/parsing_cocci/ast0_cocci.mli b/parsing_cocci/ast0_cocci.mli index bff4e0d..72d8df0 100644 --- a/parsing_cocci/ast0_cocci.mli +++ b/parsing_cocci/ast0_cocci.mli @@ -322,8 +322,7 @@ and base_statement = string mcode (* while *) * string mcode (* ( *) * expression * string mcode (* ) *) * string mcode (* ; *) - | For of string mcode (* for *) * string mcode (* ( *) * - expression option * string mcode (*;*) * + | For of string mcode (* for *) * string mcode (* ( *) * forinfo * expression option * string mcode (*;*) * expression option * string mcode (* ) *) * statement * (info * mcodekind) (* after info *) @@ -371,6 +370,12 @@ and base_statement = | OptStm of statement | UniqueStm of statement +and base_forinfo = + ForExp of expression option * string mcode (*;*) + | ForDecl of (info * mcodekind) (* before the decl *) * declaration + +and forinfo = base_forinfo wrap + and fninfo = FStorage of Ast_cocci.storage mcode | FType of typeC @@ -463,6 +468,7 @@ and anything = | InitTag of initialiser | DeclTag of declaration | StmtTag of statement + | ForInfoTag of forinfo | CaseLineTag of case_line | TopTag of top_level | IsoWhenTag of Ast_cocci.when_modifier (*only for when code, in iso phase*) @@ -484,6 +490,7 @@ val param : parameterTypeDef -> anything val ini : initialiser -> anything val decl : declaration -> anything val stmt : statement -> anything +val forinfo : forinfo -> anything val case_line : case_line -> anything val top : top_level -> anything diff --git a/parsing_cocci/ast0toast.ml b/parsing_cocci/ast0toast.ml index 5f0d9c0..107c495 100644 --- a/parsing_cocci/ast0toast.ml +++ b/parsing_cocci/ast0toast.ml @@ -197,7 +197,7 @@ let inline_mcodes = mcode mcode do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing - do_nothing do_nothing do_nothing + do_nothing do_nothing do_nothing do_nothing (* --------------------------------------------------------------------- *) (* For function declarations. Can't use the mcode at the root, because that @@ -265,7 +265,7 @@ let check_allminus = mcode mcode donothing donothing donothing donothing donothing donothing ident expression typeC initialiser donothing declaration - statement case_line donothing + statement donothing case_line donothing (* --------------------------------------------------------------------- *) (* --------------------------------------------------------------------- *) @@ -836,18 +836,17 @@ and statement s = tokenwrap wh s (Ast.WhileTail(wh,mcode lp,expression exp,mcode rp, mcode sem))) - | Ast0.For(fr,lp,exp1,sem1,exp2,sem2,exp3,rp,body,(_,aft)) -> + | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,(_,aft)) -> let fr = mcode fr in let lp = mcode lp in - let exp1 = get_option expression exp1 in - let sem1 = mcode sem1 in + let first = forinfo first in let exp2 = get_option expression exp2 in let sem2= mcode sem2 in let exp3 = get_option expression exp3 in let rp = mcode rp in let body = statement Ast.NotSequencible body in Ast.For(rewrap_rule_elem s - (Ast.ForHeader(fr,lp,exp1,sem1,exp2,sem2,exp3,rp)), + (Ast.ForHeader(fr,lp,first,exp2,sem2,exp3,rp)), body,([],[],[],convert_mcodekind (-1) aft)) | Ast0.Iterator(nm,lp,args,rp,body,(_,aft)) -> Ast.Iterator(rewrap_rule_elem s @@ -1078,6 +1077,18 @@ and statement s = statement Ast.Sequencible s +and forinfo fi = + match Ast0.unwrap fi with + Ast0.ForExp(exp1,sem1) -> + let exp1 = get_option expression exp1 in + let sem1 = mcode sem1 in + Ast.ForExp(exp1,sem1) + | Ast0.ForDecl ((_,bef),decl) -> + let allminus = + check_allminus.VT0.combiner_rec_declaration decl in + Ast.ForDecl (convert_allminus_mcodekind allminus bef, + allminus, declaration decl) + and fninfo = function Ast0.FStorage(stg) -> Ast.FStorage(mcode stg) | Ast0.FType(ty) -> Ast.FType(typeC false ty) @@ -1129,6 +1140,7 @@ and anything = function | Ast0.InitTag(d) -> Ast.InitTag(initialiser d) | Ast0.DeclTag(d) -> Ast.DeclarationTag(declaration d) | Ast0.StmtTag(d) -> Ast.StatementTag(statement d) + | Ast0.ForInfoTag(d) -> Ast.ForInfoTag(forinfo d) | Ast0.CaseLineTag(d) -> Ast.CaseLineTag(case_line d) | Ast0.TopTag(d) -> Ast.Code(top_level d) | Ast0.IsoWhenTag(_) -> failwith "not possible" diff --git a/parsing_cocci/ast0toast.mli b/parsing_cocci/ast0toast.mli index f9c116a..616a5af 100644 --- a/parsing_cocci/ast0toast.mli +++ b/parsing_cocci/ast0toast.mli @@ -38,6 +38,7 @@ val expression_dots : Ast_cocci.expression Ast_cocci.dots val initialiser : Ast0_cocci.initialiser -> Ast_cocci.initialiser val statement : Ast0_cocci.statement -> Ast_cocci.statement +val forinfo : Ast0_cocci.forinfo -> Ast_cocci.forinfo val statement_dots : Ast0_cocci.statement Ast0_cocci.dots -> Ast_cocci.statement Ast_cocci.dots val declaration_dots : diff --git a/parsing_cocci/ast_cocci.ml b/parsing_cocci/ast_cocci.ml index cdc165b..ad86751 100644 --- a/parsing_cocci/ast_cocci.ml +++ b/parsing_cocci/ast_cocci.ml @@ -465,7 +465,7 @@ and base_rule_elem = expression * string mcode (* ) *) * string mcode (* ; *) | ForHeader of string mcode (* for *) * string mcode (* ( *) * - expression option * string mcode (*;*) * + forinfo * expression option * string mcode (*;*) * expression option * string mcode (* ) *) | IteratorHeader of ident (* name *) * string mcode (* ( *) * @@ -498,6 +498,11 @@ and base_rule_elem = | Default of string mcode (* default *) * string mcode (*:*) | DisjRuleElem of rule_elem list +and forinfo = + ForExp of expression option * string mcode (*;*) + | ForDecl of mcodekind (* before the decl *) * + bool (* true if all minus *) * declaration + and fninfo = FStorage of storage mcode | FType of fullType @@ -651,6 +656,7 @@ and anything = | IncFileTag of inc_file | Rule_elemTag of rule_elem | StatementTag of statement + | ForInfoTag of forinfo | CaseLineTag of case_line | ConstVolTag of const_vol | Token of string * info option @@ -760,21 +766,22 @@ and tag2c = function | SignTag _ -> "SignTag" | IdentTag _ -> "IdentTag" | ExpressionTag _ -> "ExpressionTag" - | ConstantTag _ -> "ConstantTag" - | UnaryOpTag _ -> "UnaryOpTag" - | AssignOpTag _ -> "AssignOpTag" - | FixOpTag _ -> "FixOpTag" - | BinaryOpTag _ -> "BinaryOpTag" - | ArithOpTag _ -> "ArithOpTag" + | ConstantTag _ -> "ConstantTag" + | UnaryOpTag _ -> "UnaryOpTag" + | AssignOpTag _ -> "AssignOpTag" + | FixOpTag _ -> "FixOpTag" + | BinaryOpTag _ -> "BinaryOpTag" + | ArithOpTag _ -> "ArithOpTag" | LogicalOpTag _ -> "LogicalOpTag" | DeclarationTag _ -> "DeclarationTag" - | InitTag _ -> "InitTag" - | StorageTag _ -> "StorageTag" - | IncFileTag _ -> "IncFileTag" + | InitTag _ -> "InitTag" + | StorageTag _ -> "StorageTag" + | IncFileTag _ -> "IncFileTag" | Rule_elemTag _ -> "Rule_elemTag" | StatementTag _ -> "StatementTag" - | CaseLineTag _ -> "CaseLineTag" - | ConstVolTag _ -> "ConstVolTag" + | ForInfoTag _ -> "ForInfoTag" + | CaseLineTag _ -> "CaseLineTag" + | ConstVolTag _ -> "ConstVolTag" | Token _ -> "Token" | Pragma _ -> "Pragma" | Code _ -> "Code" diff --git a/parsing_cocci/ast_cocci.mli b/parsing_cocci/ast_cocci.mli index 50304df..39321af 100644 --- a/parsing_cocci/ast_cocci.mli +++ b/parsing_cocci/ast_cocci.mli @@ -443,7 +443,7 @@ and base_rule_elem = expression * string mcode (* ) *) * string mcode (* ; *) | ForHeader of string mcode (* for *) * string mcode (* ( *) * - expression option * string mcode (*;*) * + forinfo * expression option * string mcode (*;*) * expression option * string mcode (* ) *) | IteratorHeader of ident (* name *) * string mcode (* ( *) * @@ -475,6 +475,11 @@ and base_rule_elem = | Default of string mcode (* default *) * string mcode (*:*) | DisjRuleElem of rule_elem list +and forinfo = + ForExp of expression option * string mcode (*;*) + | ForDecl of mcodekind (* before the decl *) * + bool (* true if all minus *) * declaration + and fninfo = FStorage of storage mcode | FType of fullType @@ -624,6 +629,7 @@ and anything = | IncFileTag of inc_file | Rule_elemTag of rule_elem | StatementTag of statement + | ForInfoTag of forinfo | CaseLineTag of case_line | ConstVolTag of const_vol | Token of string * info option diff --git a/parsing_cocci/check_meta.ml b/parsing_cocci/check_meta.ml index 19fd7ae..ad3c975 100644 --- a/parsing_cocci/check_meta.ml +++ b/parsing_cocci/check_meta.ml @@ -160,6 +160,9 @@ let rec expression context old_metas table minus e = | Ast0.Binary(left,op,right) -> expression ID old_metas table minus left; expression ID old_metas table minus right + | Ast0.Nested(left,op,right) -> + expression ID old_metas table minus left; + expression ID old_metas table minus right | Ast0.Paren(lp,exp,rp) -> expression ID old_metas table minus exp | Ast0.ArrayAccess(exp1,lb,exp2,rb) -> @@ -201,6 +204,8 @@ let rec expression context old_metas table minus e = get_opt (expression ID old_metas table minus) w | Ast0.Edots(_,Some x) | Ast0.Ecircles(_,Some x) | Ast0.Estars(_,Some x) -> expression ID old_metas table minus x + | Ast0.OptExp(x) | Ast0.UniqueExp(x) -> + expression ID old_metas table minus x | _ -> () (* no metavariable subterms *) and get_type_name = function @@ -378,8 +383,12 @@ and statement old_metas table minus s = | Ast0.Do(d,body,wh,lp,exp,rp,sem) -> statement old_metas table minus body; expression ID old_metas table minus exp - | Ast0.For(fr,lp,exp1,sem1,exp2,sem2,exp3,rp,body,_) -> - get_opt (expression ID old_metas table minus) exp1; + | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,_) -> + (match Ast0.unwrap first with + Ast0.ForExp(exp1,sem1) -> + get_opt (expression ID old_metas table minus) exp1 + | Ast0.ForDecl (_,decl) -> + declaration ID old_metas table minus decl); get_opt (expression ID old_metas table minus) exp2; get_opt (expression ID old_metas table minus) exp3; statement old_metas table minus body @@ -505,7 +514,7 @@ let positions table rules = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing donothing in + donothing donothing donothing in List.iter fn.VT0.combiner_rec_top_level rules @@ -559,7 +568,7 @@ let dup_positions rules = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing expression typeC donothing donothing declaration statement - donothing donothing in + donothing donothing donothing in let res = List.sort compare @@ -616,6 +625,7 @@ let check_meta rname old_metas inherited_metavars metavars minus plus = let err_table = make_table (err@ierr) in let other_table = make_table other in let iother_table = make_table iother in + add_to_fresh_table fresh; rule old_metas [iother_table;other_table;err_table] true minus; positions [iother_table;other_table] minus; diff --git a/parsing_cocci/compute_lines.ml b/parsing_cocci/compute_lines.ml index d6c32ec..1e18f13 100644 --- a/parsing_cocci/compute_lines.ml +++ b/parsing_cocci/compute_lines.ml @@ -877,18 +877,32 @@ let rec statement s = let rp = normal_mcode rp in mkres s (Ast0.Do(d,body,wh,lp,exp,rp,sem)) (promote_mcode d) (promote_mcode sem) - | Ast0.For(fr,lp,exp1,sem1,exp2,sem2,exp3,rp,body,(_,aft)) -> + | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,(_,aft)) -> let fr = normal_mcode fr in let lp = normal_mcode lp in - let exp1 = get_option expression exp1 in - let sem1 = normal_mcode sem1 in + let first = + match Ast0.unwrap first with + Ast0.ForExp(None,sem1) -> + let sem1 = normal_mcode sem1 in + mkres first (Ast0.ForExp(None,sem1)) + (promote_mcode sem1) (promote_mcode sem1) + | Ast0.ForExp(Some exp1,sem1) -> + let exp1 = expression exp1 in + let sem1 = normal_mcode sem1 in + mkres first (Ast0.ForExp(Some exp1,sem1)) + exp1 (promote_mcode sem1) + | Ast0.ForDecl((_,bef),decl) -> + let decl = declaration decl in + let left = promote_to_statement_start decl bef in + mkres first (Ast0.ForDecl ((Ast0.get_info left,bef),decl)) + decl decl in let exp2 = get_option expression exp2 in let sem2 = normal_mcode sem2 in let exp3 = get_option expression exp3 in let rp = normal_mcode rp in let body = statement body in let right = promote_to_statement body aft in - mkres s (Ast0.For(fr,lp,exp1,sem1,exp2,sem2,exp3,rp,body, + mkres s (Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body, (Ast0.get_info right,aft))) (promote_mcode fr) right | Ast0.Iterator(nm,lp,args,rp,body,(_,aft)) -> diff --git a/parsing_cocci/context_neg.ml b/parsing_cocci/context_neg.ml index 5f9b8e7..58bdc82 100644 --- a/parsing_cocci/context_neg.ml +++ b/parsing_cocci/context_neg.ml @@ -57,6 +57,7 @@ let set_mcodekind x mcodekind = | Ast0.DeclTag(d) -> Ast0.set_mcodekind d mcodekind | Ast0.InitTag(d) -> Ast0.set_mcodekind d mcodekind | Ast0.StmtTag(d) -> Ast0.set_mcodekind d mcodekind + | Ast0.ForInfoTag(d) -> Ast0.set_mcodekind d mcodekind | Ast0.CaseLineTag(d) -> Ast0.set_mcodekind d mcodekind | Ast0.TopTag(d) -> Ast0.set_mcodekind d mcodekind | Ast0.IsoWhenTag(_) -> failwith "only within iso phase" @@ -82,6 +83,7 @@ let set_index x index = | Ast0.InitTag(d) -> Ast0.set_index d index | Ast0.DeclTag(d) -> Ast0.set_index d index | Ast0.StmtTag(d) -> Ast0.set_index d index + | Ast0.ForInfoTag(d) -> Ast0.set_index d index | Ast0.CaseLineTag(d) -> Ast0.set_index d index | Ast0.TopTag(d) -> Ast0.set_index d index | Ast0.IsoWhenTag(_) -> failwith "only within iso phase" @@ -106,6 +108,7 @@ let get_index = function | Ast0.InitTag(d) -> Index.initialiser d | Ast0.DeclTag(d) -> Index.declaration d | Ast0.StmtTag(d) -> Index.statement d + | Ast0.ForInfoTag(d) -> Index.forinfo d | Ast0.CaseLineTag(d) -> Index.case_line d | Ast0.TopTag(d) -> Index.top_level d | Ast0.IsoWhenTag(_) -> failwith "only within iso phase" @@ -156,7 +159,7 @@ let collect_plus_lines top = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing donothing in + donothing donothing donothing in fn.VT0.combiner_rec_top_level top (* --------------------------------------------------------------------- *) @@ -441,7 +444,7 @@ let classify is_minus all_marked table code = | Ast0.IfThenElse(_,_,_,_,_,_,_,(info,aft)) | Ast0.Iterator(_,_,_,_,_,(info,aft)) | Ast0.While(_,_,_,_,_,(info,aft)) - | Ast0.For(_,_,_,_,_,_,_,_,_,(info,aft)) -> + | Ast0.For(_,_,_,_,_,_,_,_,(info,aft)) -> bind (k s) (nc_mcode ((),(),info,aft,(),-1)) | _ -> k s @@ -456,7 +459,7 @@ let classify is_minus all_marked table code = (do_nothing Ast0.dotsParam) (do_nothing Ast0.dotsStmt) (do_nothing Ast0.dotsDecl) (do_nothing Ast0.dotsCase) ident expression typeC initialiser param declaration - statement case_line (do_top Ast0.top) in + statement (do_nothing Ast0.forinfo) case_line (do_top Ast0.top) in combiner.VT0.combiner_rec_top_level code (* --------------------------------------------------------------------- *) @@ -686,10 +689,16 @@ let rec equal_statement s1 s2 = | (Ast0.Do(d1,_,whl1,lp1,_,rp1,sem1),Ast0.Do(d2,_,whl2,lp2,_,rp2,sem2)) -> equal_mcode whl1 whl2 && equal_mcode d1 d2 && equal_mcode lp1 lp2 && equal_mcode rp1 rp2 && equal_mcode sem1 sem2 - | (Ast0.For(fr1,lp1,_,sem11,_,sem21,_,rp1,_,_), - Ast0.For(fr2,lp2,_,sem12,_,sem22,_,rp2,_,_)) -> + | (Ast0.For(fr1,lp1,first1,_,sem21,_,rp1,_,_), + Ast0.For(fr2,lp2,first2,_,sem22,_,rp2,_,_)) -> + let first = + match (Ast0.unwrap first1,Ast0.unwrap first2) with + (Ast0.ForExp(_,sem1),Ast0.ForExp(_,sem2)) -> + equal_mcode sem1 sem2 + | (Ast0.ForDecl _,Ast0.ForDecl _) -> true + | _ -> false in equal_mcode fr1 fr2 && equal_mcode lp1 lp2 && - equal_mcode sem11 sem12 && equal_mcode sem21 sem22 && + first && equal_mcode sem21 sem22 && equal_mcode rp1 rp2 | (Ast0.Iterator(nm1,lp1,_,rp1,_,_),Ast0.Iterator(nm2,lp2,_,rp2,_,_)) -> equal_mcode lp1 lp2 && equal_mcode rp1 rp2 @@ -824,7 +833,7 @@ let contextify_all = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing - do_nothing do_nothing do_nothing + do_nothing do_nothing do_nothing do_nothing let contextify_whencode = let bind x y = () in diff --git a/parsing_cocci/disjdistr.ml b/parsing_cocci/disjdistr.ml index a6dbfef..ced572b 100644 --- a/parsing_cocci/disjdistr.ml +++ b/parsing_cocci/disjdistr.ml @@ -49,6 +49,11 @@ let rec disjmult f = function let rest = disjmult f xs in disjmult2 cur rest (function cur -> function rest -> cur :: rest) +let rec disjmult_two fstart frest (start,rest) = + let cur = fstart start in + let rest = disjmult frest rest in + disjmult2 cur rest (function cur -> function rest -> (cur,rest)) + let disjoption f = function None -> [None] | Some x -> List.map (function x -> Some x) (f x) @@ -356,12 +361,20 @@ let rec disj_rule_elem r k re = | Ast.WhileTail(whl,lp,exp,rp,sem) -> orify_rule_elem re exp (function exp -> Ast.rewrap re (Ast.WhileTail(whl,lp,exp,rp,sem))) - | Ast.ForHeader(fr,lp,e1,sem1,e2,sem2,e3,rp) -> - generic_orify_rule_elem (disjmult (disjoption disjexp)) re [e1;e2;e3] - (function - [exp1;exp2;exp3] -> - Ast.rewrap re (Ast.ForHeader(fr,lp,exp1,sem1,exp2,sem2,exp3,rp)) - | _ -> failwith "not possible") + | Ast.ForHeader(fr,lp,first,e2,sem2,e3,rp) -> + let disjfirst = function + Ast.ForExp(e1,sem1) -> + List.map (function e1 -> Ast.ForExp(e1,sem1)) + (disjoption disjexp e1) + | Ast.ForDecl (bef,allminus,decl) -> + List.map (function decl -> Ast.ForDecl (bef,allminus,decl)) + (disjdecl decl) in + generic_orify_rule_elem + (disjmult_two disjfirst (disjoption disjexp)) re (first,[e2;e3]) + (function + (first,[exp2;exp3]) -> + Ast.rewrap re (Ast.ForHeader(fr,lp,first,exp2,sem2,exp3,rp)) + | _ -> failwith "not possible") | Ast.IteratorHeader(whl,lp,args,rp) -> generic_orify_rule_elem (disjdots disjexp) re args (function args -> Ast.rewrap re (Ast.IteratorHeader(whl,lp,args,rp))) diff --git a/parsing_cocci/function_prototypes.ml b/parsing_cocci/function_prototypes.ml index d9b1725..340d24b 100644 --- a/parsing_cocci/function_prototypes.ml +++ b/parsing_cocci/function_prototypes.ml @@ -89,7 +89,7 @@ let drop_positions = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing donothing in + donothing donothing donothing in res.VT0.rebuilder_rec_statement let get_all_functions rule = @@ -192,7 +192,7 @@ and strip = V0.flat_rebuilder mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing - ident donothing typeC donothing param donothing donothing + ident donothing typeC donothing param donothing donothing donothing donothing donothing and changed_proto = function diff --git a/parsing_cocci/get_constants2.ml b/parsing_cocci/get_constants2.ml index 0be5611..626e44b 100644 --- a/parsing_cocci/get_constants2.ml +++ b/parsing_cocci/get_constants2.ml @@ -406,7 +406,7 @@ let do_get_constants constants keywords env neg_pos = bind (keywords "while") (k re) | Ast.WhileTail(whl,lp,exp,rp,sem) -> bind (keywords "do") (k re) - | Ast.ForHeader(fr,lp,e1,sem1,e2,sem2,e3,rp) -> + | Ast.ForHeader(fr,lp,first,e2,sem2,e3,rp) -> bind (keywords "for") (k re) | Ast.SwitchHeader(switch,lp,exp,rp) -> bind (keywords "switch") (k re) diff --git a/parsing_cocci/get_metas.ml b/parsing_cocci/get_metas.ml index be94bc1..bb0c6ff 100644 --- a/parsing_cocci/get_metas.ml +++ b/parsing_cocci/get_metas.ml @@ -619,18 +619,25 @@ and statement s = let (sem_n,sem) = mcode sem in (multibind [d_n;body_n;whl_n;lp_n;exp_n;rp_n;sem_n], Ast0.Do(d,body,whl,lp,exp,rp,sem)) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft) -> let (fr_n,fr) = mcode fr in let (lp_n,lp) = mcode lp in - let (e1_n,e1) = get_option expression e1 in - let (sem1_n,sem1) = mcode sem1 in + let (first_n,first) = + match Ast0.unwrap first with + Ast0.ForExp(e1,sem1) -> + let (e1_n,e1) = get_option expression e1 in + let (sem1_n,sem1) = mcode sem1 in + (bind e1_n sem1_n, Ast0.rewrap first (Ast0.ForExp(e1,sem1))) + | Ast0.ForDecl (bef,decl) -> + let (decl_n,decl) = declaration decl in + (decl_n,Ast0.rewrap first (Ast0.ForDecl (bef,decl))) in let (e2_n,e2) = get_option expression e2 in let (sem2_n,sem2) = mcode sem2 in let (e3_n,e3) = get_option expression e3 in let (rp_n,rp) = mcode rp in let (body_n,body) = statement body in - (multibind [fr_n;lp_n;e1_n;sem1_n;e2_n;sem2_n;e3_n;rp_n;body_n], - Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft)) + (multibind [fr_n;lp_n;first_n;e2_n;sem2_n;e3_n;rp_n;body_n], + Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft)) | Ast0.Iterator(nm,lp,args,rp,body,aft) -> let (nm_n,nm) = ident nm in let (lp_n,lp) = mcode lp in diff --git a/parsing_cocci/index.ml b/parsing_cocci/index.ml index a094b1f..2784b99 100644 --- a/parsing_cocci/index.ml +++ b/parsing_cocci/index.ml @@ -26,7 +26,7 @@ # 0 "./index.ml" (* create an index for each constructor *) -(* current max is 157 *) +(* current max is 159 *) (* doesn't really work - requires that identical terms with no token subterms (eg dots) not appear on the same line *) @@ -198,7 +198,7 @@ let statement s = | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,aft) -> [73] | Ast0.While(whl,lp,exp,rp,body,_) -> [74] | Ast0.Do(d,body,whl,lp,exp,rp,sem) -> [75] - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,_) -> [76] + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,_) -> [76] | Ast0.Iterator(nm,lp,args,rp,body,_) -> [142] | Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) -> [125] | Ast0.Break(br,sem) -> [100] @@ -225,6 +225,11 @@ let statement s = | Ast0.UniqueStm(re) -> [88] | Ast0.AsStmt _ -> failwith "not possible" +let forinfo fi = + match Ast0.unwrap fi with + Ast0.ForExp(exp,sem) -> [158] + | Ast0.ForDecl (bef,decl) -> [159] + let case_line c = match Ast0.unwrap c with Ast0.Default(def,colon,code) -> [126] diff --git a/parsing_cocci/index.mli b/parsing_cocci/index.mli index e6c0539..40cd70a 100644 --- a/parsing_cocci/index.mli +++ b/parsing_cocci/index.mli @@ -38,5 +38,6 @@ val declaration : Ast0_cocci.declaration -> int list val initialiser : Ast0_cocci.initialiser -> int list val parameterTypeDef : Ast0_cocci.parameterTypeDef -> int list val statement : Ast0_cocci.statement -> int list +val forinfo : Ast0_cocci.forinfo -> int list val case_line : Ast0_cocci.case_line -> int list val top_level : Ast0_cocci.top_level -> int list diff --git a/parsing_cocci/insert_plus.ml b/parsing_cocci/insert_plus.ml index 199b04c..dbaa429 100644 --- a/parsing_cocci/insert_plus.ml +++ b/parsing_cocci/insert_plus.ml @@ -101,7 +101,7 @@ it *) (donothing Ast0.dotsDecl) (donothing Ast0.dotsCase) (donothing Ast0.ident) expression (donothing Ast0.typeC) initialiser (donothing Ast0.param) (donothing Ast0.decl) statement - (donothing Ast0.case_line) topfn in + (donothing Ast0.forinfo) (donothing Ast0.case_line) topfn in res.VT0.combiner_rec_top_level e (* --------------------------------------------------------------------- *) @@ -141,6 +141,7 @@ let create_root_token_table minus = | Ast0.InitTag(d) -> Ast0.get_index d | Ast0.DeclTag(d) -> Ast0.get_index d | Ast0.StmtTag(d) -> Ast0.get_index d + | Ast0.ForInfoTag(d) -> Ast0.get_index d | Ast0.CaseLineTag(d) -> Ast0.get_index d | Ast0.TopTag(d) -> Ast0.get_index d | Ast0.IsoWhenTag(_) -> failwith "only within iso phase" @@ -237,12 +238,13 @@ bind to that; not good for isomorphisms *) (* Ast0.IfThen(_,_,_,_,_,aft) | Ast0.IfThenElse(_,_,_,_,_,_,_,aft) | Ast0.While(_,_,_,_,_,aft) - | Ast0.For(_,_,_,_,_,_,_,_,_,aft) + | Ast0.For(_,_,_,_,_,_,_,_,aft) | Ast0.Iterator(_,_,_,_,_,aft) -> redo_branched (do_nothing r k s) aft*) | Ast0.FunDecl((info,bef),fninfo,name,lp,params,rp,lbrace,body,rbrace) -> (Toplevel,info,bef)::(k s) - | Ast0.Decl((info,bef),decl) -> (Decl,info,bef)::(k s) + | Ast0.Decl((info,bef),decl) -> + (Decl,info,bef)::(k s) | Ast0.Nest(starter,stmt_dots,ender,whencode,multi) -> mcode starter @ r.VT0.combiner_rec_statement_dots stmt_dots @ mcode ender @@ -253,6 +255,12 @@ bind to that; not good for isomorphisms *) r.VT0.combiner_rec_statement s | _ -> do_nothing r k s in + let forinfo r k s = + match Ast0.unwrap s with + Ast0.ForDecl((info,bef),decl) -> + (Decl,info,bef)::(k s) + | _ -> k s in + let expression r k e = match Ast0.unwrap e with Ast0.NestExpr(starter,expr_dots,ender,whencode,multi) -> @@ -313,7 +321,8 @@ bind to that; not good for isomorphisms *) V0.flat_combiner bind option_default mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode edots idots pdots sdots ddots cdots - ident expression typeC initialiser param decl statement case_line do_top + ident expression typeC initialiser param decl statement forinfo + case_line do_top let call_collect_minus context_nodes : @@ -362,6 +371,9 @@ let call_collect_minus context_nodes : | Ast0.StmtTag(e) -> (Ast0.get_index e, (collect_minus_join_points e).VT0.combiner_rec_statement e) + | Ast0.ForInfoTag(e) -> + (Ast0.get_index e, + (collect_minus_join_points e).VT0.combiner_rec_forinfo e) | Ast0.CaseLineTag(e) -> (Ast0.get_index e, (collect_minus_join_points e).VT0.combiner_rec_case_line e) @@ -437,6 +449,7 @@ let mk_topdeclaration x = Ast.DeclarationTag (Ast0toast.declaration x) let mk_storage x = Ast.StorageTag x let mk_inc_file x = Ast.IncFileTag x let mk_statement x = Ast.StatementTag (Ast0toast.statement x) +let mk_forinfo x = Ast.ForInfoTag (Ast0toast.forinfo x) let mk_case_line x = Ast.CaseLineTag (Ast0toast.case_line x) let mk_const_vol x = Ast.ConstVolTag x let mk_token x info = Ast.Token (x,Some info) @@ -518,7 +531,7 @@ let collect_plus_nodes root = (do_nothing mk_statement r k e) @ (info aft) | Ast0.While(whl,lp,exp,rp,body,aft) -> (do_nothing mk_statement r k e) @ (info aft) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft) -> (do_nothing mk_statement r k e) @ (info aft) | Ast0.Iterator(nm,lp,args,rp,body,aft) -> (do_nothing mk_statement r k e) @ (info aft) @@ -552,7 +565,7 @@ let collect_plus_nodes root = (do_nothing mk_ident) (do_nothing mk_expression) (do_nothing mk_typeC) (do_nothing mk_init) (do_nothing mk_param) (do_nothing mk_declaration) - stmt (do_nothing mk_case_line) toplevel + stmt (do_nothing mk_forinfo) (do_nothing mk_case_line) toplevel let call_collect_plus context_nodes : (int * (Ast0.info * Ast.count * Ast.anything) list) list = @@ -600,6 +613,9 @@ let call_collect_plus context_nodes : | Ast0.StmtTag(e) -> (Ast0.get_index e, (collect_plus_nodes e).VT0.combiner_rec_statement e) + | Ast0.ForInfoTag(e) -> + (Ast0.get_index e, + (collect_plus_nodes e).VT0.combiner_rec_forinfo e) | Ast0.CaseLineTag(e) -> (Ast0.get_index e, (collect_plus_nodes e).VT0.combiner_rec_case_line e) @@ -1059,7 +1075,7 @@ let reevaluate_contextness = (donothing r k e) @ (info aft) | Ast0.While(whl,lp,exp,rp,body,aft) -> (donothing r k e) @ (info aft) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft) -> (donothing r k e) @ (info aft) | Ast0.Iterator(nm,lp,args,rp,body,aft) -> (donothing r k e) @ (info aft) @@ -1069,8 +1085,8 @@ let reevaluate_contextness = V0.flat_combiner bind option_default mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing - donothing - donothing donothing donothing donothing stmt donothing donothing in + donothing donothing + donothing donothing donothing stmt donothing donothing donothing in res.VT0.combiner_rec_top_level (* --------------------------------------------------------------------- *) diff --git a/parsing_cocci/iso_compile.ml b/parsing_cocci/iso_compile.ml index ce4e542..45ec5e1 100644 --- a/parsing_cocci/iso_compile.ml +++ b/parsing_cocci/iso_compile.ml @@ -47,7 +47,7 @@ let sequence_tokens = V0.flat_combiner bind option_default mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing - donothing donothing + donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing (* In general, we will get a list of lists: diff --git a/parsing_cocci/iso_pattern.ml b/parsing_cocci/iso_pattern.ml index a91ee67..3ce58d6 100644 --- a/parsing_cocci/iso_pattern.ml +++ b/parsing_cocci/iso_pattern.ml @@ -62,7 +62,7 @@ let strip_info = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing donothing + donothing donothing donothing let anything_equal = function (Ast0.DotsExprTag(d1),Ast0.DotsExprTag(d2)) -> @@ -437,7 +437,7 @@ let match_maker checks_needed context_required whencode_allowed = V0.flat_combiner bind option_default mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing - ident expression typeC init param decl stmt donothing + ident expression typeC init param decl stmt donothing donothing donothing in let add_pure_list_binding name pure is_pure builder1 builder2 lst = @@ -1108,12 +1108,20 @@ let match_maker checks_needed context_required whencode_allowed = [check_mcode d1 d; check_mcode w1 w; check_mcode lp1 lp; check_mcode rp1 rp; match_statement bodya bodyb; match_expr expa expb] - | (Ast0.For(f1,lp1,e1a,sc1a,e2a,sc2a,e3a,rp1,bodya,_), - Ast0.For(f,lp,e1b,sc1b,e2b,sc2b,e3b,rp,bodyb,_)) -> + | (Ast0.For(f1,lp1,firsta,e2a,sc2a,e3a,rp1,bodya,_), + Ast0.For(f,lp,firstb,e2b,sc2b,e3b,rp,bodyb,_)) -> + let first = + match (Ast0.unwrap firsta,Ast0.unwrap firstb) with + (Ast0.ForExp(e1a,sc1a),Ast0.ForExp(e1b,sc1b)) -> + conjunct_bindings + (check_mcode sc2a sc2b) + (match_option match_expr e1a e1b) + | (Ast0.ForDecl (_,decla),Ast0.ForDecl (_,declb)) -> + match_decl decla declb + | _ -> return false in conjunct_many_bindings - [check_mcode f1 f; check_mcode lp1 lp; check_mcode sc1a sc1b; + [check_mcode f1 f; check_mcode lp1 lp; first; check_mcode sc2a sc2b; check_mcode rp1 rp; - match_option match_expr e1a e1b; match_option match_expr e2a e2b; match_option match_expr e3a e3b; match_statement bodya bodyb] @@ -1416,7 +1424,7 @@ let make_minus = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode dots dots dots dots dots dots donothing expression donothing initialiser donothing declaration - statement donothing donothing + statement donothing donothing donothing (* --------------------------------------------------------------------- *) (* rebuild mcode cells in an instantiated alt *) @@ -1481,8 +1489,8 @@ let rebuild_mcode start_line = (info,copy_mcodekind mc)) | Ast0.While(whl,lp,exp,rp,body,(info,mc)) -> Ast0.While(whl,lp,exp,rp,body,(info,copy_mcodekind mc)) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,(info,mc)) -> - Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body, + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,mc)) -> + Ast0.For(fr,lp,first,e2,sem2,e3,rp,body, (info,copy_mcodekind mc)) | Ast0.Iterator(nm,lp,args,rp,body,(info,mc)) -> Ast0.Iterator(nm,lp,args,rp,body,(info,copy_mcodekind mc)) @@ -1504,7 +1512,7 @@ let rebuild_mcode start_line = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing statement donothing donothing + donothing statement donothing donothing donothing (* --------------------------------------------------------------------- *) (* The problem of whencode. If an isomorphism contains dots in multiple @@ -1949,6 +1957,7 @@ let instantiate bindings mv_bindings = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode (dots elist) donothing (dots plist) (dots slist) donothing donothing identfn exprfn tyfn initfn paramfn declfn stmtfn donothing donothing + donothing (* --------------------------------------------------------------------- *) @@ -2083,13 +2092,13 @@ let extra_copy_stmt_plus model e = | Ast0.IfThen(_,_,_,_,_,(info,aft)) | Ast0.IfThenElse(_,_,_,_,_,_,_,(info,aft)) | Ast0.While(_,_,_,_,_,(info,aft)) - | Ast0.For(_,_,_,_,_,_,_,_,_,(info,aft)) + | Ast0.For(_,_,_,_,_,_,_,_,(info,aft)) | Ast0.Iterator(_,_,_,_,_,(info,aft)) -> (match Ast0.unwrap e with Ast0.IfThen(_,_,_,_,_,(info,aft1)) | Ast0.IfThenElse(_,_,_,_,_,_,_,(info,aft1)) | Ast0.While(_,_,_,_,_,(info,aft1)) - | Ast0.For(_,_,_,_,_,_,_,_,_,(info,aft1)) + | Ast0.For(_,_,_,_,_,_,_,_,(info,aft1)) | Ast0.Iterator(_,_,_,_,_,(info,aft1)) -> merge_plus aft aft1 | _ -> merge_plus aft (Ast0.get_mcodekind e)) @@ -2590,7 +2599,7 @@ let rewrap = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing donothing + donothing donothing donothing let rewrap_anything = function Ast0.DotsExprTag(d) -> @@ -2616,6 +2625,7 @@ let rewrap_anything = function | Ast0.ParamTag(d) -> Ast0.ParamTag(rewrap.VT0.rebuilder_rec_parameter d) | Ast0.DeclTag(d) -> Ast0.DeclTag(rewrap.VT0.rebuilder_rec_declaration d) | Ast0.StmtTag(d) -> Ast0.StmtTag(rewrap.VT0.rebuilder_rec_statement d) + | Ast0.ForInfoTag(d) -> Ast0.ForInfoTag(rewrap.VT0.rebuilder_rec_forinfo d) | Ast0.CaseLineTag(d) -> Ast0.CaseLineTag(rewrap.VT0.rebuilder_rec_case_line d) | Ast0.TopTag(d) -> Ast0.TopTag(rewrap.VT0.rebuilder_rec_top_level d) diff --git a/parsing_cocci/parse_aux.ml b/parsing_cocci/parse_aux.ml index 082d3f1..85c3ac4 100644 --- a/parsing_cocci/parse_aux.ml +++ b/parsing_cocci/parse_aux.ml @@ -528,8 +528,15 @@ let ifthenelse iff lp tst rp thn e els = (Ast0.default_info(),Ast0.context_befaft()))) let forloop fr lp e1 sc1 e2 sc2 e3 rp s = - Ast0.wrap(Ast0.For(clt2mcode "for" fr,clt2mcode "(" lp,e1, - clt2mcode ";" sc1,e2, + Ast0.wrap(Ast0.For(clt2mcode "for" fr,clt2mcode "(" lp, + Ast0.wrap(Ast0.ForExp(e1,clt2mcode ";" sc1)),e2, + clt2mcode ";" sc2,e3,clt2mcode ")" rp,s, + (Ast0.default_info(),Ast0.context_befaft()))) + +let forloop2 fr lp decl e2 sc2 e3 rp s = + let bef = (Ast0.default_info(),Ast0.context_befaft()) in + Ast0.wrap(Ast0.For(clt2mcode "for" fr,clt2mcode "(" lp, + Ast0.wrap(Ast0.ForDecl (bef,decl)),e2, clt2mcode ";" sc2,e3,clt2mcode ")" rp,s, (Ast0.default_info(),Ast0.context_befaft()))) diff --git a/parsing_cocci/parse_cocci.ml b/parsing_cocci/parse_cocci.ml index 0a240fd..bf0e4aa 100644 --- a/parsing_cocci/parse_cocci.ml +++ b/parsing_cocci/parse_cocci.ml @@ -1523,7 +1523,7 @@ let any_modif rule = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing donothing in + donothing donothing donothing in List.exists fn.VT0.combiner_rec_top_level rule let eval_virt virt = diff --git a/parsing_cocci/parser_cocci_menhir.ml b/parsing_cocci/parser_cocci_menhir.ml index 2d572b5..0b4e6ed 100644 --- a/parsing_cocci/parser_cocci_menhir.ml +++ b/parsing_cocci/parser_cocci_menhir.ml @@ -1598,19 +1598,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Obj.repr _v let default_reduction = - (16, "\000\000\000\000\003C\000\131\000\000\000\000\003\151\001\160\000\000\001\158\001\159\001\157\000\000\001\162\001\161\000\001\000\000\001\218\000\000\000\000\000\147\000\000\000\000\001\208\000\205\000\000\000\000\000\000\000\187\000\186\000\000\000\000\000\000\000\194\000\193\000\000\000\192\000\191\000\000\000\188\000\000\000\185\000\000\000\000\000\000\000\190\000\000\000\189\003\212\003\211\000\000\000\210\000\000\000\209\000\000\000\000\000\000\000\177\000\176\000\000\000\000\000\000\000\184\000\183\000\000\000\182\000\181\000\000\000\178\000\000\000\175\000\000\000\000\000\000\000\180\000\000\000\179\000\000\000\000\000\197\000\196\000\000\000\211\000\000\000\000\000\000\000\204\000\203\000\000\000\202\000\000\000\206\000\201\000\000\000\198\000\000\000\208\000\000\004\128\000\000\000\000\0028\0027\0026\0025\000\000\001H\001G\000\000\000\000\002P\000\000\001\232\002:\000\000\000\000\000\000\000\000\000\000\001P\000\000\000\000\001i\001\153\001h\001g\001f\001e\001\152\001\151\001d\001c\002\127\000\000\000\000\002~\000\000\000\000\000\000\000\159\000\000\000\000\000\158\002\130\001a\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\214\000\212\000\000\000\207\000\146\000\000\000\195\000\000\000\219\000\000\000\000\000\000\000\200\000\000\000\000\000\000\003g\000\000\003\204\003\203\003\205\000\000\003\240\000\000\003\197\000\000\000\000\000\000\000\000\001T\000\000\000\000\000\000\004w\003\n\000\000\000\000\004u\000\000\003&\000\000\000\000\000\000\000\000\000\000\000\000\004t\004v\003\016\001\147\003\015\001\146\003\014\003\r\003\012\002d\003\b\000\000\000\000\003\t\001I\000\000\000\000\000\000\003\011\000\000\000\000\003\007\004s\000\000\000\000\004T\002\226\000\000\000\000\002\229\000\000\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\001J\001\145\003\006\003\019\000m\000\021\000o\000\000\000\000\000Q\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\000\000S\000\000\000\000\000\000\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\003\003\000p\000\000\000\000\000\141\001L\002\192\003\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\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000n\000f\000\000\000e\000\000\002\227\002\230\000\000\002\228\002\231\004S\000\000\003.\000\000\001\011\000\000\000\000\002Q\000\000\001\234\002;\000\000\000\000\002O\000\000\000\000\000\250\000\000\000\000\000\000\000\232\000\231\000\000\000\000\000\000\000\239\000\238\000\000\000\237\000\236\000\000\000\233\000\000\000\230\000\000\000\000\000\000\000\235\000\000\000\234\000\000\000\255\000\000\000\254\000\000\000\000\000\000\000\222\000\221\000\000\000\000\000\000\000\229\000\228\000\000\000\227\000\226\000\000\000\223\000\000\000\220\000\000\000\000\000\000\000\225\000\000\000\224\000\000\000\000\000\242\000\241\000\000\001\000\000\000\000\000\000\000\000\249\000\248\000\000\000\247\000\000\000\251\000\246\000\000\000\243\000\000\000\253\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000\000\000\000\001\003\001\001\000\000\000\252\000\000\000\240\000\000\001\b\000\000\000\000\000\000\000\245\000\000\000\000\003\198\003\199\000\000\000\000\001\007\000\000\003\201\003f\000\000\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\165\001\017\001\018\000\000\000\000\000\000\000\000\000\000\002\147\002\164\002X\000\000\000\000\000\000\000\000\000\000\001`\001\022\000\000\002Y\000\000\000\000\000\000\000\000\001\016\000\000\001\014\000\000\001\210\000\171\000\000\000\000\000\170\002\151\002\148\000\000\000\000\003\208\000\000\003\207\000\000\000\000\000\000\000\000\000\000\001\005\000\000\000\000\000\000\000\000\001\006\001\004\003\239\000\000\000\000\003\210\003\202\000\244\000\000\001\230\0029\000\000\000\000\003-\000\000\000\000\000\000\003\024\000\000\000\000\000\000\003\017\000\000\000\000\000\000\000\000\003,\003+\003*\003)\003(\003$\000\000\004_\003%\000\000\004`\003'\000\000\004b\000\000\003#\000\000\000y\002\242\000\000\000\000\002\245\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000i\000\000\000h\000\151\003/\003\"\000\014\000\016\000g\0003\001\r\000q\000\000\000\000\000\000\000\000\000\000\000\000\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\0004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0005\000\000\000\000\000\000\000\000\000\000\000\000\002p\002t\000\000\000\000\000\150\002q\001X\001V\000\000\002\248\000\000\000\000\002\243\002\246\000\000\002\244\002\247\004a\000\000\000\000\003\005\001n\000\000\002f\000\000\000\000\000\000\000\000\000\000\001N\002k\000\000\000\000\001\248\003\004\000\000\000\000\003 \000\000\000\000\003\031\000\000\000\000\000\000\000\000\000\000\002e\000\000\000\000\000\000\000\000\001D\001C\000\000\000\000\003\030\001\178\001\177\003\029\000\000\003\028\003\027\003\026\001\180\003\022\000\000\004X\003\023\000\000\000\000\000\000\000\000\000\000\001B\000\000\004Y\003\025\000\000\004[\000\000\003\021\000\000\000\000\000w\002\234\000\000\000\000\002\237\000\000\000\000\002\240\000\000\000\000\002\235\002\238\000\000\002\236\002\239\003!\003\020\004Z\000\000\001\\\001\173\000\000\000\000\000\000\000\000\001\175\000\000\001\216\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\176\000\000\001\170\000\000\000\000\002\133\000\000\000\000\000\000\000\163\000\000\000\000\000\162\002\137\001\179\001\171\000\000\001R\001\169\002\134\000\000\001\174\000\000\002\241\000x\000\000\002\233\004\\\000\000\002\249\000z\000\000\002\232\004o\004p\004n\004m\004R\000\000\000\000\004Q\000\000\002b\000\000\003\018\000\000\000\000\000v\000\000\000\000\000\000\004c\000\000\002c\000\000\000\000\000\000\004q\000\000\000\000\000\000\004U\000\000\000c\001\012\000\000\003\209\000\000\000\000\000\216\000\000\000\000\000\000\000\000\000\217\000\215\000\000\000\000\002W\000\000\001\246\002B\000\000\003\206\000\000\000\000\000\000\000\218\000\199\000\000\000\000\001\184\000\000\001\183\000\000\001\198\000\000\001\220\000\000\000\000\000\000\004\015\000\000\000\000\000\000\003\253\003\252\000\000\000\000\000\000\004\004\004\003\000\000\004\002\004\001\000\000\003\254\000\000\003\251\000\000\000\000\000\000\004\000\000\000\003\255\000\000\004\020\000\000\004\019\000\000\000\000\000\000\003\243\003\242\000\000\000\000\000\000\003\250\003\249\000\000\003\248\003\247\000\000\003\244\000\000\003\241\000\000\000\000\000\000\003\246\000\000\003\245\000\000\000\000\004\007\004\006\000\000\004\021\000\000\000\000\000\000\004\014\004\r\000\000\004\012\000\000\004\016\004\011\000\000\004\b\000\000\004\018\000\000\000\000\000\000\000\000\004\023\000\000\000\000\000\000\000\000\004\024\004\022\000\000\004\017\000\000\004\005\000\000\004\029\000\000\000\000\000\000\004\n\000\000\002\t\000\000\004K\000\000\000\000\002T\002\n\000\000\001\240\002?\000\000\000\000\000\000\000\000\004\028\004\t\004L\000\000\004O\004N\000\000\000\000\003\167\004M\000\139\000\000\0014\000\000\000\000\000\000\000\000\004\026\000\000\000\000\000\000\000\000\004\027\004\025\000\000\000\000\004<\000\000\000\000\000\000\004*\004)\000\000\000\000\000\000\0041\0040\000\000\004/\004.\000\000\004+\000\000\004(\000\000\000\000\000\000\004-\000\000\004,\000\000\004A\000\000\004@\000\000\000\000\000\000\004 \004\031\000\000\000\000\000\000\004'\004&\000\000\004%\004$\000\000\004!\000\000\004\030\000\000\000\000\000\000\004#\000\000\004\"\000\000\000\000\0044\0043\000\000\004B\000\000\000\000\000\000\004;\004:\000\000\0049\000\000\004=\0048\000\000\0045\000\000\004?\000\000\000\000\000\000\000\000\004D\000\000\000\000\000\000\000\000\004E\004C\000\000\004>\000\000\0042\000\000\004J\000\000\000\000\000\000\0047\000\000\000\000\000\000\000\000\004I\0046\000\000\000\000\000\000\000\000\004G\000\000\000\000\000\000\000\000\004H\004F\003\193\003\195\003\196\003\194\000\000\000\000\000\000\000\000\000\000\001\165\000\000\000\000\000\000\000\000\000\000\001\020\001 \001\019\000\000\000\000\000\128\000\000\000\000\000\000\001,\000\000\003\145\000\000\000\000\001(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001/\000\000\000\000\0013\001x\001w\000\000\000\000\000\000\000\000\001\150\000\000\000\000\000\000\000\000\001%\000\000\001\"\000\000\000\000\000\000\000\000\000\000\001-\000\000\001)\000\000\000\000\000\000\000\000\001*\000\000\001&\000\000\000\000\000\000\000\000\0034\000\000\000\000\000\000\000\000\004j\000\000\003\184\000\000\003\183\000\000\000\000\000\000\000\000\004~\000\000\000\000\000\000\004\127\000\000\000\018\000\000\000\000\000\000\000\000\003;\000\000\000\000\000\000\003:\0039\0038\0037\0036\0032\000\000\004f\0033\000\000\004g\0035\000\000\004i\000\000\0031\000\000\000{\002\250\000\000\000\000\002\253\000\000\000\000\003\000\000\000\000\000\002\251\002\254\000\000\002\252\002\255\003=\0030\004h\000\000\000\000\000l\000\000\000k\000\000\003<\000\000\002<\000j\000B\001m\000r\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\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\003\001\000|\000\000\004z\000\000\001\250\000\000\000\000\000\000\001\023\003\174\001\206\000\000\001\205\001\164\001\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\155\001K\000\000\000\000\002w\000\000\000\000\000\154\002{\002x\001Z\0015\000\000\0017\0016\000\000\003\186\000\000\003\185\003\170\000\000\000\000\000\000\000\000\000\000\003\180\000\000\003\175\000\000\003\187\000\000\000\000\000\000\000\000\003\181\003\172\002\194\000\000\001\027\001\166\000\000\003\190\000\000\001\168\000\000\000\000\003\218\000\000\003\225\001\029\000\000\001#\000\000\003\219\001\028\000\000\003\220\000\000\003\227\000\000\000\000\000\000\000\000\0010\000\000\000\000\0011\000\000\001\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\0012\000\000\000\000\000\000\000\000\001\149\000\000\000\000\000\000\001$\000\000\001!\000\000\000\000\000\000\000\000\000\000\001+\000\000\001'\001\025\001\024\000\000\003\228\003\229\000\000\003\230\000\000\003\231\000\000\001\167\003\178\000\000\000\000\002V\000\000\001\244\002A\000\000\003\171\000\000\000\000\000\000\003\177\000\000\000\000\000\000\001\138\000\000\001\132\000\000\001\133\000\000\001\143\001\131\001\142\000\000\003\189\001\144\000\000\001\030\000\000\000\000\000\000\000\000\001\140\001\135\002R\000\000\001\136\000\000\001\137\000\000\001\236\002=\000\000\000\000\000\000\002^\000\000\002\\\000\000\000\000\002`\002Z\000\000\002a\002[\000\000\003\191\002g\000\000\001\026\000\000\000\000\002S\000\000\001\238\002>\000\000\004{\000\000\004x\000\000\004y\000\019\000\020\000\000\000\000\003s\000\000\003r\000\000\002\167\000\000\003u\000\000\003t\000\000\000\000\000\000\002\175\000\000\000\000\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\182\000\000\000\000\002\186\000\000\002\169\000\000\000\000\002\172\000\000\000\000\000\000\002\176\000\000\000\000\002\180\000\000\000\000\002U\000\000\000\000\002\173\000\000\000\000\002\177\000\000\000\000\003q\003p\002\170\000\000\000\000\000\000\000\000\002\183\000\000\000\000\002\184\000\000\002\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\002\185\000\000\002\168\000\000\000\000\002\171\000\000\000\000\000\000\002\174\000\000\000\000\002\178\000\000\001\242\002@\000\000\003v\000\000\000\000\004|\000\017\000~\000\000\004}\000\000\000\000\003\141\000\000\000\000\003\192\000s\000\000\000\000\000\000\000t\000\000\003\182\000\000\001\212\000\000\001\214\003\179\000\000\000\000\001\192\000\000\001\191\000\000\001\199\000\000\001\228\000\000\000\000\000\000\001\188\000\000\001\187\000\000\001\196\000\000\001\224\000\000\000\000\000\000\001\195\000\000\000\000\001\203\000\000\000\000\001\190\001\204\000\000\001\189\000\000\001\197\000\000\001\226\000\000\000\000\000\000\001\193\000\000\000\000\000\000\001\186\000\000\001\185\000\000\001\200\000\000\001\222\000\000\000\000\000\000\001\194\000\002\000\000\000`\000\000\000\000\0024\000a\000\000\000\000\003M\003Q\003U\003I\003Z\003F\000\000\000\000\003R\003Y\003J\003X\003H\003W\003L\003D\003K\003T\003G\003N\003E\003P\003V\003S\003O\002\015\002\014\000\137\000\000\000\000\003\163\000\000\000\000\000\000\000\000\003\136\003\133\000\000\000\000\003\137\003\134\003\135\003d\000\000\000\000\003\169\003\\\003[\003]\000\000\002 \000_\001\201\000\003\000\000\000\000\003@\000\000\002\190\000\000\000\138\000\000\000\000\003\165\000\000\000\000\000\000\000\130\000\000\000\000\003\149\000\000\002\161\002\160\002\006\003e\000\000\002/\000\000\003A\000\000\000\000\000\132\000\000\000\000\003\153\000\000\002\029\000\000\000\000\002\021\000\000\000\000\000\000\002\028\000\000\002\024\000\000\000\000\000\000\001\252\001\251\000\000\000\000\000\000\0020\000\000\002\019\000\000\002\018\000\000\000\127\000\000\000\000\003\143\000\000\000\000\002\r\000\000\000\000\002\017\000\000\000\000\000\135\000\000\000\000\003\159\000\000\000\000\003n\000\000\003m\000\000\000\000\000\000\002\159\002\158\003k\002\200\003`\003l\000\000\002#\000\000\000\000\000\000\002\031\000\000\002%\000\000\000\000\000\000\000\000\000\000\000\000\0023\000\000\002\023\000\000\002\022\000\000\000\000\000\000\003b\000\136\000\000\000\000\003\161\000\000\003a\000\000\002!\000\000\000\000\002\"\000\000\000\000\000\000\000\000\000\000\000\000\0022\000\000\002\027\000\000\002\026\000\000\000\000\001r\000\000\001q\000\000\000\000\000\000\000\000\000\000\0021\000\000\002\020\000\000\001p\000\000\002m\000\133\000\000\000\000\003\155\000\000\000\000\000\000\000\000\003\214\003\213\000\000\000\000\001\156\001\155\000\129\001\154\000\000\000\000\003\147\000\000\002\153\002\152\002\155\003^\002\196\002\154\001o\000\000\000\134\000\000\000\000\003\157\000\000\000\000\000\000\000\000\002\157\002\156\003j\003h\002\198\003_\003i\000\000\002*\000\000\002-\000\000\000\000\002&\000\000\000\000\000\000\002\030\000\000\002$\000\000\000\000\002\025\000\000\000\000\000\000\000\000\000\000\000\000\002\012\000\000\000\000\002,\000\000\002+\000\000\000\000\000\000\000\000\002)\000\000\000\000\002(\000\000\002'\000\000\000\000\002.\000\000\000\000\001\202\000\004\000\000\002\016\000\005\000\000\000\000\001u\000\006\000\000\002F\002G\002E\000\000\002D\003\215\002\002\000\000\000\007\000\000\002I\002J\002H\000\000\000\000\000\000\000\000\001z\000\000\000\000\000\000\000\000\001\127\001\129\001\128\001{\001}\001|\000\000\000\000\000\000\000\000\000\000\003\221\003\234\000\000\003\222\000\000\003\223\000\000\000\000\003\216\000\000\000\000\000\000\000\000\003\233\000\000\000\000\003\232\002N\002M\000\000\000\000\002\004\002C\002K\000\000\000\000\000\000\000\000\000\000\002\163\000\000\000\000\000\000\000\000\000\000\002\140\002\162\000\000\000\000\000\000\000\167\000\000\000\000\000\166\002\144\002\141\001^\001\021\000\000\000\000\000\000\000\000\001\148\001v\000\000\003\237\000\000\003\238\000\000\000\000\002j\002h\000\000\002i\000\b\000\000\000\t\000\000\002\215\002\216\002\214\000\000\002\213\000\000\000\n\000\000\002\218\002\219\002\217\000\000\002\221\000\000\000\000\000\000\002\207\000\000\000\000\002\209\000\000\002\203\000\000\002\205\000\000\002\210\000\000\002\211\000\000\002\204\002\202\002\222\002\b\002\212\000\000\002\224\000\000\002\223\000\000\002\225\000\000\003o\000\011\000\000\000\000\000\000\000\000\000\000\000\000\0018\000\000\000\000\001<\000\000\001;\000\000\0019\000\000\000\000\000\000\000\000\000\000\001=\001:\000\000\001?\000\000\000\000\000\000\003{\000\000\003z\000\000\000\000\000\000\000\000\003|\000\000\000\000\001t\000\000\000\000\000\000\000\000\000\000\003\139\000}\000\000\000\000\001F\000\000\001k\001j\000\000\001\182\000\000\003y\002\000\001\254\000\000\000\000\000\000\000\000\003}\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003x\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\132\000\000\000\000\003\131\000\000\003\128\000\000\000\000\000\000\000\000\000\000\003\129\000\000\000\000\000\000\003\130\000\r\000\000\003~\000\000\003\127") + (16, "\000\000\000\000\003\002\000\135\000\000\000\000\003V\001L\000\000\001J\001K\001I\000\000\001N\001M\000\001\000\000\001\134\000\000\000\000\000\151\002\028\000\000\000\000\003k\000\000\000\000\003r\003p\003l\003i\000\000\000\000\003n\003m\000\018\003\158\003\157\002!\002 \000\000\000\017\002\"\000\000\002\029\002\031\000\000\003\242\000\000\000\000\001\230\001\229\001\228\001\227\000\000\000\244\000\243\000\000\000\000\002\000\000\000\001\150\001\232\000\000\000\000\000\000\000\000\000\000\000\252\000\000\000\000\001\021\001E\001\020\001\019\001\018\001\017\001D\001C\001\016\001\015\002>\000\000\000\000\002=\000\000\000\000\000\000\000\163\000\000\000\000\000\162\002A\001\r\000\000\002$\000\000\000\000\000\000\002%\002\030\000\150\002*\000\000\000\000\000\000\003&\000\000\003\150\003\149\003\151\000\000\003\186\000\000\003\143\000\000\000\000\000\000\000\000\001\000\000\019\000\000\000\000\000\000\003\233\002\201\000\000\000\000\003\231\000\000\002\229\000\000\000\000\000\000\000\000\000\000\000\000\003\230\003\232\002\207\001?\002\206\001>\002\205\002\204\002\203\002\020\002\199\000\000\000\000\002\200\000\245\000\000\000\000\000\000\002\202\000\000\000\000\002\198\003\229\000\000\000\000\003\198\002\161\000\000\000\000\002\164\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\246\001=\002\197\002\210\000q\000\025\000s\000\000\000\000\000U\000\000\000\000\000\000\000\000\000\000\000\000\000V\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\000h\002\194\000t\000\000\000\000\000\145\000\248\002\127\002\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\000r\000j\000\000\000i\000\000\002\162\002\165\000\000\002\163\002\166\003\197\000\020\000\000\002\237\000\000\000\183\000\000\000\000\002\001\000\000\001\152\001\233\000\000\000\000\001\255\000\000\000\000\000\000\000\000\000\000\001\254\000\000\001\146\000\180\000\000\000\179\000\000\001\148\001\231\000\000\000\000\002\236\000\000\000\000\000\000\002\215\000\000\000\000\000\000\002\208\000\000\000\000\000\000\000\000\002\235\002\234\002\233\002\232\002\231\002\227\000\000\003\209\002\228\000\000\003\210\002\230\000\000\003\212\000\000\002\226\000\000\000}\002\177\000\000\000\000\002\180\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000m\000\000\000l\000\155\002\238\002\225\000\014\000\016\000k\0007\000\185\000u\000\000\000\000\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\000\000\000\000\000\000\000\000\000\0008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\000\000\000\000\000\000\000\000\000\000\000\000\002/\0023\000\000\000\000\000\154\0020\001\004\001\002\000\000\002\183\000\000\000\000\002\178\002\181\000\000\002\179\002\182\003\211\000\000\000\000\002\196\001\026\000\000\002\022\000\000\000\000\000\000\000\000\000\000\000\250\002\027\000\000\000\000\001\166\002\195\000\000\000\000\002\223\000\000\000\000\002\222\000\000\000\000\000\000\000\000\000\000\002\021\000\000\000\000\000\000\000\000\000\240\000\239\000\000\000\000\002\221\001^\001]\002\220\000\000\002\219\002\218\002\217\001`\002\213\000\000\003\202\002\214\000\000\000\000\000\000\000\000\000\000\000\238\000\000\003\203\002\216\000\000\003\205\000\000\002\212\000\000\000\000\000{\002\169\000\000\000\000\002\172\000\000\000\000\002\175\000\000\000\000\002\170\002\173\000\000\002\171\002\174\002\224\002\211\003\204\000\000\001\b\001Y\000\000\000\000\000\000\000\000\001[\000\000\001\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\001\\\000\000\001V\000\000\000\000\002D\000\000\000\000\000\000\000\167\000\000\000\000\000\166\002H\001_\001W\000\000\000\254\001U\002E\000\000\001Z\000\000\002\176\000|\000\000\002\168\003\206\000\000\002\184\000~\000\000\002\167\003\225\003\226\003\224\003\223\003\196\000\000\000\000\003\195\000\000\002\018\000\000\002\209\000\000\000\000\000z\000\000\000\000\000\000\003\213\000\000\002\019\000\000\000\000\000\000\003\227\000\000\000\000\000\000\003\199\000\000\000g\000\184\000\000\001~\000\000\003\155\003%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002d\000\189\000\190\000\000\000\000\000\000\000\000\000\000\002R\002c\002\b\000\000\000\000\000\000\000\000\000\000\001\012\000\194\000\000\002\t\000\000\000\000\000\000\000\000\000\188\000\000\000\186\000\175\000\000\000\000\000\174\002V\002S\000\000\000\000\003\154\000\000\003\153\000\000\000\000\000\000\003\156\003\144\003\145\000\000\002'\000\000\003\147\000\000\000\000\000\177\003\148\000\000\000\000\000\000\002(\003\185\000\000\000\000\002\007\000\000\001\164\001\240\000\000\003\152\000\000\000\000\002)\000\000\000\000\001d\000\000\001c\000\000\001r\000\000\001\136\000\000\000\000\000\000\001\183\000\000\003\189\000\000\000\000\002\004\001\184\000\000\001\158\001\237\003\190\000\000\003\193\003\192\000\000\000\000\003f\003\191\000\143\000\000\000\224\000\000\000\000\000\000\001|\003\188\000\000\003\187\003\139\003\141\003\142\003\140\000\000\000\000\000\000\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\000\192\000\204\000\191\000\000\000\000\000\132\000\000\000\000\000\000\000\216\000\000\003P\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\223\001$\001#\000\000\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\209\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\213\000\000\000\000\000\000\000\000\000\214\000\000\000\210\000\000\000\000\000\000\000\000\002\243\000\000\000\000\000\000\000\000\003\220\000\000\003\130\000\000\003\129\000\000\000\000\000\000\000\000\003\240\000\000\000\000\000\000\003\241\000\000\000\022\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\002\249\002\248\002\247\002\246\002\245\002\241\000\000\003\216\002\242\000\000\003\217\002\244\000\000\003\219\000\000\002\240\000\000\000\127\002\185\000\000\000\000\002\188\000\000\000\000\002\191\000\000\000\000\002\186\002\189\000\000\002\187\002\190\002\252\002\239\003\218\000\000\000\000\000p\000\000\000o\000\000\002\251\000\000\001\234\000n\000F\001\025\000v\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\000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\128\000\000\003\236\000\000\001\168\000\000\000\000\000\000\000\195\003w\001z\000\000\001y\001P\001O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\134\000\000\000\000\002f\000\000\000\000\000\000\002n\000\000\000\000\002r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002u\000\000\000\000\002y\000\000\002h\000\000\000\000\002k\000\000\000\000\000\000\002o\000\000\000\000\002s\000\000\000\000\002l\000\000\000\000\002p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\159\000\247\000\000\000\000\0026\000\000\000\000\000\158\002:\0027\001\006\000\225\000\000\000\227\000\226\000\000\003\132\000\000\003\131\003s\000\000\000\000\000\000\000\000\000\000\003~\000\000\003x\000\000\003\133\000\000\000\000\000\000\000\000\003\127\003u\002\129\000\000\000\199\001R\000\000\003\136\000\000\001T\000\000\000\000\003\164\000\000\003\171\000\201\000\000\000\207\000\000\003\165\000\200\000\000\003\166\000\000\003\173\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\221\000\000\000\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\218\000\000\000\000\000\222\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\208\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\215\000\000\000\211\000\197\000\196\000\000\003\174\003\175\000\000\003\176\000\000\003\177\000\000\001S\003{\000\000\000\000\000\000\000\000\000\000\003|\002i\000\000\000\000\000\000\000\000\002v\000\000\000\000\002w\000\000\002e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002t\000\000\000\000\002x\000\000\002g\000\000\000\000\002j\000\000\000\000\000\000\002m\000\000\000\000\002q\000\000\000\000\002\006\000\000\001\162\001\239\000\000\003t\000\000\000\000\000\000\003z\000\000\000\000\000\000\0016\000\000\0010\000\000\0011\000\000\001;\001/\001:\000\000\003\135\001<\000\000\000\202\000\000\000\000\000\000\000\000\0018\0013\002\002\000\000\0014\000\000\0015\000\000\001\154\001\235\000\000\000\000\000\000\002\014\000\000\002\012\000\000\000\000\002\016\002\n\000\000\002\017\002\011\000\000\003\137\002\023\000\000\000\198\000\000\000\000\002\003\000\000\001\156\001\236\000\000\003\237\000\000\003\234\000\000\003\235\000\023\000\024\000\000\000\000\0032\000\000\0031\000\000\000\000\0034\000\000\0033\000\000\000\000\002\005\000\000\0030\003/\000\000\001\160\001\238\000\000\0035\000\000\000\000\003\238\000\021\000\130\000\000\003\239\000\000\000\000\003L\000\000\000\000\003\138\000w\000\000\000\000\000\000\000x\000\000\003\128\000\000\001\128\000\000\001\130\003}\000\000\000\000\001l\000\000\001k\000\000\001s\000\000\001\144\000\000\000\000\000\000\001h\000\000\001g\000\000\001p\000\000\001\140\000\000\000\000\000\000\001o\000\000\000\000\001w\000\000\000\000\001j\001x\000\000\001i\000\000\001q\000\000\001\142\000\000\000\000\000\000\001m\000\000\000\000\000\000\001f\000\000\001e\000\000\001t\000\000\001\138\000\000\000\000\000\000\001n\000\002\000\000\000d\000\000\000\000\001\226\000e\000\000\000\000\003\012\003\016\003\020\003\b\003\025\003\005\000\000\000\000\003\017\003\024\003\t\003\023\003\007\003\022\003\011\003\003\003\n\003\019\003\006\003\r\003\004\003\015\003\021\003\018\003\014\001\189\001\188\000\141\000\000\000\000\003b\000\000\000\000\000\000\000\000\003G\003D\000\000\000\000\003H\003E\003F\003#\000\000\000\000\003h\003\027\003\026\003\028\000\000\001\206\000c\001u\000\003\000\000\000\000\002\255\000\000\002}\000\000\000\142\000\000\000\000\003d\000\000\000\000\000\000\000\134\000\000\000\000\003T\000\000\002`\002_\001\180\003$\000\000\001\221\000\000\003\000\000\000\000\000\000\136\000\000\000\000\003X\000\000\001\203\000\000\000\000\001\195\000\000\000\000\000\000\001\202\000\000\001\198\000\000\000\000\000\000\001\170\001\169\000\000\000\000\000\000\001\222\000\000\001\193\000\000\001\192\000\000\000\131\000\000\000\000\003N\000\000\000\000\001\187\000\000\000\000\001\191\000\000\000\000\000\139\000\000\000\000\003^\000\000\000\000\003-\000\000\003,\000\000\000\000\000\000\002^\002]\003*\002\135\003\031\003+\000\000\001\209\000\000\000\000\000\000\001\205\000\000\001\211\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\001\197\000\000\001\196\000\000\000\000\000\000\003!\000\140\000\000\000\000\003`\000\000\003 \000\000\001\207\000\000\000\000\001\208\000\000\000\000\000\000\000\000\000\000\000\000\001\224\000\000\001\201\000\000\001\200\000\000\000\000\001\030\000\000\001\029\000\000\000\000\000\000\000\000\000\000\001\223\000\000\001\194\000\000\001\028\000\000\002,\000\137\000\000\000\000\003Z\000\000\000\000\000\000\000\000\003\160\003\159\000\000\000\000\001H\001G\000\133\001F\000\000\000\000\003R\000\000\002X\002W\002Z\003\029\002\131\002Y\001\027\000\000\000\138\000\000\000\000\003\\\000\000\000\000\000\000\000\000\002\\\002[\003)\003'\002\133\003\030\003(\000\000\001\216\000\000\001\219\000\000\000\000\001\212\000\000\000\000\000\000\001\204\000\000\001\210\000\000\000\000\001\199\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\001\218\000\000\001\217\000\000\000\000\000\000\000\000\001\215\000\000\000\000\001\214\000\000\001\213\000\000\000\000\001\220\000\000\000\000\001v\000\004\000\000\001\190\000\005\000\000\000\000\001!\000\006\000\000\001\244\001\245\001\243\000\000\001\242\003\161\001\176\000\000\000\007\000\000\001\247\001\248\001\246\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\167\003\180\000\000\003\168\000\000\003\169\000\000\000\000\003\162\000\000\000\000\000\000\000\000\003\179\000\000\000\000\003\178\001\252\001\251\000\000\000\000\001\178\001\241\001\249\000\000\000\000\000\000\000\000\000\000\002b\000\000\000\000\000\000\000\000\000\000\002K\002a\000\000\000\000\000\000\000\171\000\000\000\000\000\170\002O\002L\001\n\000\193\000\000\000\000\000\000\000\000\001@\001\"\000\000\003\183\000\000\003\184\000\000\000\000\002\026\002\024\000\000\002\025\000\b\000\000\000\t\000\000\002\150\002\151\002\149\000\000\002\148\000\000\000\n\000\000\002\153\002\154\002\152\000\000\002\156\000\000\000\000\000\000\002\142\000\000\000\000\002\144\000\000\002\138\000\000\002\140\000\000\002\145\000\000\002\146\000\000\002\139\002\137\002\157\001\182\002\147\000\000\002\159\000\000\002\158\000\000\002\160\000\000\003.\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\232\000\000\000\231\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\233\000\230\000\000\000\235\000\000\000\000\000\000\003:\000\000\0039\000\000\000\000\000\000\000\000\003;\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\003J\000\129\000\000\000\000\000\242\000\000\001\023\001\022\000\000\001b\000\000\0038\001\174\001\172\000\000\000\000\000\000\000\000\003<\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0037\000\000\000\000\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\003C\000\000\000\000\003B\000\000\003?\000\000\000\000\000\000\000\000\000\000\003@\000\000\000\000\000\000\003A\000\r\000\000\003=\000\000\003>") let error = - (194, "\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000 \000\002\000A\128\000\000\129\012\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\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\015\240\000\000\000\000\000\000\000\001\235\218\188\000\004\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\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\016\016\149\r\000(\194\rP@\200e\002\024\004\208\b\135x\018\000\0049\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\000F\180p\000\001\0001\000\003\000\020\b`\017\000 \b@\000\000\000&C\016\016\141\012\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\173\012\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\004#C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\b\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\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\017\173\028\000\000@\012@\000\192\005\002\024\004@\b\002\016\000\000\000\t\144\196\004#C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\004+C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\001\b\208\192\000\004\000D\000\012\002@!\128D\000\128!\000\000\000\000\153\012@B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\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\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000B40\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\016\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\004+S\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\001\b\208\192\000\004\000D\000\012\002@!\128D\000\128!\000\000\000\000\153\012@B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\000\000\000\000\001\000\000\000\000\016\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\b\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\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\016\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\130\000\000\016\004\000\000\002\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\004\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\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\129\000\000\000\000\000\000\001\000\000\000\000\000\000\000\1940\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\004\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\000\000\000\000\000\129\000\000\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\000\000\000\000\000@\000\000\000\000\000\000@\000\000\000\130\000\000\016\004\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\129\000\000\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\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\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012B@!\128D\000\128!\000\000\000\000\153\012@\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\030\189\171\192\000@\000 \000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016\133\012\000\000@\004@\000\196$\002\024\004@\b\002\016\000\000\000\t\144\197\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\000\000\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\189\171\192\000A\000 \000\002\000\004\000\024\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\016\000\000@\016\000\000\b\000\000\000\000\000\000\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\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\000\000\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\189\171\192\016A\000 \000\002\b\004\000\024\016\000\000\b\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\001\235\218\188\000\004\016\002\000\000 \000@\001\129\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\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\000\000\000 \000\002 \000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016B!\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\001I\000\001 \208(\0068\204\000\002\018\001\000\000\001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\bg\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\025\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\000\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\131@\160\024\2270\000\bH\004\000\128\004\016\bg\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000@\000\000\000\000\000\000\016\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\t\000\000\003\019\004\217d\176\000\000\005\000 @\000\006\232\004'\199p\000\000\000\000\000@\000\000\000\128\000\000\016\004\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\000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\012L\019e\146\192\000\000\020\000\129\000\000\027\160\016\159\029\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\178\000\t\225\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\027 \000\158\029\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\240\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\159\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\240\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\159\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\240\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\159\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\240\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\159\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\192\004\016\b`\000\000\000\000\000\000\004@\000\000\004\000\000\000@\b\000\000\0000\000\t\160\196\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\020\144\000\018\r\002\128c\140\192\000! \016\002\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\224\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\224\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\240\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\159\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\240\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\224\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\224\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\224\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\0012\000\t\224\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\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\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\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\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\000\000\128\000\b\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\175j\208\000\016\000\b\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\004\160@\000\000\000 \000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016\141\012\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\173\012\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\004#C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\b\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\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\018\129\000\000\000\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000B40\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\016\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\000B\1800\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\016\016\141\012\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\004#C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000B\1810\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\016\016\141\012\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\016\000\000\000\001\000\000\004\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b \000\001\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\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012B@!\128D\000\128!\000\000\000\000\153\012@\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\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\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\016\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012B@!\128D\000\128!\000\000\000\000\153\012^\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\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\001\000\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\001\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\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\007\175j\240\000\016@\b\000\000\130\001\000\006\004\000\000\002\000\000\000\000\000\016\001\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\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\001\000\000\000\003\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\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\004\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\000\000\000\000\000\000\000\b\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\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000 \000\000\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 \000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\000\000\000\b\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\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\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\0000\000\000\004\001\000\000\000\128\000\000\000\002 \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\001\000\000\000\002\000\000\000@\016\000\000\b\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\235\218\188\000\004\000\002\000\000 \128F\000\001\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\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\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\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\016\000\002\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\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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:\246\173\000\001\004\000\128\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000A\000\000\000\002\016\000\000@\016\000\000\b\000\000\000\000\000\000\007\175j\240\000\016@\b\000\000\130\001\000\006\004\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\004\000\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\016\133\012\000\000@\004@\000\196$\002\024\004@\b\002\016\000\000\000\t\144\197\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\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\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\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\000\000\000\000\000\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\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\030\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\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\b\000\000\000\000\000\000\005$\000\004\131P\160\024\2270\000\bH\004\000\000\004\016\b`\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\018\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\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\b\000\000\000\000\b\000\000\003\000\004\024\020\160\000\000\004\000\000\000\000\004\b\000 @`\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\018\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\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\016\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\020\144\000\018\r\002\128c\140\192\000! \016\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\144\000\0000 E\146J\000\000\000@\000\004\000\000j\128B0F\000\000\000\000\000\004\000\000\000\b\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\007\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\130\025\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A\000\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\000\000\000\"\000\007\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000\000\001\004\130\025\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\026 \000\140\017\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\192\001\022\001(\000\000\001\000\000\000\000\001\"\000\b\192\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\018 \000\140\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\192\004\016\b`\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\192\001\022\001(\000\000\001\000\000\000\000\001\"\000\b\192\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\018 \000\140\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\192\001\022\001(\000\000\001\000\000\000\000\001\"\000\b\192\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\018 \000\140\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\192\001\022\001(\000\000\001\000\000\000\000\001\"\000\b\192\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\018 \000\140\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\018 \000\140\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\192\001\022\001(\000\000\001\000\000\000\000\001\"\000\b\192\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\018 \000\140\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012\000\017`\018\128\000\000\016\000\000\000\000\018 \000\140\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\192\001\022\001(\000\000\001\000\000\000\000\001\"\000\b\192\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\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\002 \000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\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\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\016\000\000\000 \000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\002\016\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\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\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\001\000\000\000\000\000\004\001I\000\001 \208(\0068\204\000\002\018\001\000\000\001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\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\020\144\000\018\r\002\128c\140\192\000! \016\000\000\016@!\128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\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\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\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\000R@\000@1\n\001\1422\000\001\132\128@\000\000A\000\134\000\000\000\000\000\020\144\000\018\r\226\128o\140\192\000a \016\n\128\016A!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\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\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\018\024\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\012L\019e\146\192\000\000\020\000\129\000\000\027\160\016\149\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\000\000\000\000\000\020\144\000\018\r\226\128o\140\192\000a \016\n\128\016A!\128\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\004\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\002@\000\000\196\1936Y,\000\000\001@\b\016\000\001\186\001\tQ\220\000\000\000\000\000R@\000@0\n\001\1422\000\001\132\128@\000\000A\000\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\000\000\000\000\000\000\000\000\002\000\000\000\192\129\006I(\000\000\001\000\000\016\000\001\n\001\b\016\024\000\000\000\000\000\016\000\000\000 \000\000\004\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\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\b`\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\020\144\000\018\r\002\128c\140\192\000! \016\002\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\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\004\000\000\000\b\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\002@\000\000\192\193\006I,\000\000\001\000\000\016\000\001\154\001\t\017\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@\000\000\000\000\000\000\000\000\001I\000\001 \220(\006\248\204\000\006\018\001\000\136\001\004\002\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\020\144\000\018\r\194\128o\140\192\000a \016\b\128\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\b\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\003\000\004\024\004\160\000\000\004\000\000\000\000\004\b\000 @`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\128\000\0000\000A\128J\000\000\000@\000\000\000\000@\128\002\004\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\b\000\000\003\000\004\024\004\160\000\000\004\000\000\000\000\004\b\000 @`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\128\000\0000\000A\128J\000\000\000@\000\000\000\000@\128\002\004\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\b\000\000\003\000\004\024\004\160\000\000\004\000\000\000\000\004\b\000 @`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\128\000\0000\000A\128J\000\000\000@\000\000\000\000@\128\002\004\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\b\000\000\003\000\004\024\004\160\000\000\004\000\000\000\000\004\b\000 @`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\128\000\0000\000A\128J\000\000\000@\000\000\000\000@\128\002\004\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\128\000\0000\000A\128J\000\000\000@\000\000\000\000@\128\002\004\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\b\000\000\003\000\004\024\004\160\000\000\004\000\000\000\000\004\b\000 @`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\128\000\0000\000A\128J\000\000\000@\000\000\000\000@\128\002\004\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\128\000\0000\000A\128J\000\000\000@\000\000\000\000@\128\002\004\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\b\000\000\003\000\004\024\004\160\000\000\004\000\000\000\000\004\b\000 @`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\018\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\129\000\000\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002 \004\016H`\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\002\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\129\000\000\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\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\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\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\b\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\rB\128c\140\192\000! \016\002\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\007\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\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\012\000\017`R\128\000\000\016\000\000\000\000\026 \000\140\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\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\000z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\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\002@\000\000\196A6\021,\000\000\001@\b\000\000\001\178\000\t\241\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\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\002@\000\000\196A6\021,\000\000\001@\b\000\000\001\178\000\t\241\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\133\012\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012B@!\128D\000\128!\000\000\000\000\153\012^\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\001\235\218\188\000\004\016\002\000\000 \000@\001\129\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\016\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\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\192\004\000\016\004\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\000\000\000\000\000\000\000\004\000\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001z\246\175\000\001\000\000\128\000\b\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\175j\240\000\016\000\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\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\b\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\127\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\158\189\171\192\000@\000 \000\002\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\129\000\000\000\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\024\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\000J\004\000\000\000\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\003\128\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000`\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\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\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\132\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000`\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\004\000@\n0\130D\016\003\024@\000\001$\000!\218\004\128\001\012\000\000\000\000\000\000\000\004\000\000\000\b \000\001\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\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\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@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\001\235\218\188\000\004\000\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\000\000\000\000\000\000\000\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\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\000\000\128\000\b\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\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\016\001\000(\194\t\016@\012a\000\000\004\144\000\135h\018\000\0040\000\001\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\000\000\000\000\000\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\016\000\000\000!\000\000\004\001\000\000\000\128\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b \016\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\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\198\016\000\000I\000\bv\129 \000C\000\000\030\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\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\175j\208\000\016\000\b\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\004\160@\000\000\000 \000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\006\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\001\012\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\128\000\000\000\000\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\129\000\000\000\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\024\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\006\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\001\012\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\225\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\024\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\016\000\000\000\001\000\000\004\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b \000\001\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\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\198\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\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\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\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\002\140 \145\004\000\198\016\000\000I\000\bv\129 \000C\000\000\030\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\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\004\000@\n0\130D\016\002\024@\000\001$\000!\218\004\128\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\000\000\000\000\000\000\000\000\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\132\000\000\016\004\000\000\002\000\000\000\000\000\000\001\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\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\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\004\000@\n0\130D\016\003\024@\000\001$\000!\218\004\128\001\012\000\000z\246\175\000\001\004\000\128\000\b \016\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\016\001\000(\194\t\016@\ba\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\002\004\022\144$\016\012B\132s\140\194\000g\1680\000F\020@\161\128\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\000\004\016\002\000\000 \000@\000\012\000\000\000\128\000\000\006\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\001\235\218\188\000\004\016\002\000\000 \000@\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\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\128\000\b\000\000\000\000\000\000\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\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\128\000\000\016\004\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\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\016\000\000\0000\000\000\134\001\000\000\000\128\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\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\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\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\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\128\000\b\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\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\014\189\171@\000A\000 \000\000\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\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\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\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\001\000\000\000\002\000\000\000@\016\000\000\b\000\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\b\000\000\000\000\000\000\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\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\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\007\255\235\248 Qi\nA \212)\1998\252 \006z\131\000$yF\026\024\000\000\000\144\000\01610M\182K\000\004\001P\002\004\128\000n\128@Pw\000\000\000\000\000\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\004\131@\160\024\2270\000\bH\004\000\128\004\016\bg\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\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\012D\019aR\192\000\000\020\000\128\000\000\026 \000\020\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\001I\000A \208(\0068\204\000\002\018\001\000 \001\004\002\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\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\007\255\235\248\000\001\132\128@\000\002Q\002\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\001\000\000\000\002\000\000\000@\016\000\000\b\000\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\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\01600A\178K\000\004\001@\000\004\128\000b\128@@F\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\b`\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\000 \000\000\000\000\000\000\000\000\000\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\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\012\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\016\000\000\000 \000\000\004\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\000\000\000\000\000\000\000\b\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\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\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\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\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\001\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\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\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\003\175j\208\000\016@\b\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\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\016\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\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\192\004\002\024\004\000\000\002\000\000\000\000\001\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\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\004\000\000\000\000\000\000\000\000\000\000\000\004\b\000\000\000\000 \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\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\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\020\144\000\018\r\002\128c\140\192\000! \016\002\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\007\255\235\248 Qi\nA \212)\1998\252 \006z\131\000$yF\026\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\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\016\002\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\127\254\191\128\001\004\000\128\000\b\000\016\000\003\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\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\002\000\000\000\000\000\000\000\001\127\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\128\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\235\248 Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\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\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\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\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\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\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\007\255\235\248 Qi\nA\000\196)G8\252 \006z\131\000\004iD\n\025\235\218\188\000\004RB\000@0\nA\1422\000\001\132\128@\000\000A\000\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\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\023\255\235\248 Qi\nA\000\196)G8\252 \006z\131\000\004iD\n\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\031\255\175\224\129E\164)\004\003\016\165\028\227\240\128\025\234\012\000\017\165\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\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\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\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\255\250\254\000\004\016\002\000\000 \000@\000\012\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\128\000\000\000\000\000\000\000_\255\175\224\000A\000 \000\002\000\004\000\000\192\000\000\b\000\000\000 \000\000\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\250\254\000\004\016\002\000\000 \000@\000\012\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\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\002\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\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\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\007\175j\240\1288\130\t\018@\132\003\000\000\004\144\000\133(R\000\0060\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\004\000\162\b\004A\000\001\000\000\000\002@\002\029\160H\000\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\002\000\000 \000\000\000\000\000\002\000\b\b\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\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\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\b\000\000\000\000\000\000\002 \000\000\000\000\000\002\000\b\b\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\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\000z\246\175\000\003\128 \145\004\b@0\000\000I\000\bR\005 \000c\000\000\030\189\171\192\000\224\b \001\002\016\012\000\000\018@\002\020\129H\000\024\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\004\000@\n \130F\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\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\128\000\000\000\000\000\000\002\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000\000\000\000\000\b\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\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\b\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000z\246\175\000\003\128 \144\004\b@0\000\000I\000\bR\005 \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\007\175j\240\0008\002\b\000@\132\003\000\000\004\144\000\133 R\000\006\016\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 @\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\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\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000(\130\t\016@\000@\000\000\002\144\000\135h\018\000\0048\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\b\000\000\000\000\000\000\000\000\000\000\000\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@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\001\000\016\002\136 \145\004\000\132\000\000\000)\000\bv\129 \000C\128\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\n\029\160H\000\016\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\002\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\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\000z\246\175\000\001\000\000\128\000\b\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\b\016\001\235\218\188\000\004\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\016\001\000(\130\t\016@\000`\000\000\000\144\000\135h\018\000\0040\000\000\000\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\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\024\000\000\000\000\004\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\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\000\000\000\000\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\016\001\000(\130\t\016@\004@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\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\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000.\130\t\016@\001@\000\000\002\144\000\135h\018\000\0048\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\b\000\000\000\000\000\000\000\000\000\000\000\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@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\001\000\016\002\136 \145\004\000\132\000\000\000)\000\bv\129 \000C\128\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\n\029\160H\000\016\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\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\001\002(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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\128\000\000\000\000\000\000\002\000\000\000\001\000\016\"\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\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\001\000\000\000\002\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\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\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000(\130\t\016@\b@\000\000\002\144\000\135h\018\000\0048\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000\161\218\004\128\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\000\002\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\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\n\001\b\016\002\136 \145\004\000\006\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000\001\128\000\000\002@\002\029\160H\000\016\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\004\000@\n \130D\016\000\024\000\000\000$\000!\218\004\128\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\000\000\000\000\000@\004\000\162H$A\000%\000\000\000\n@\002\029\160H\000\016\224\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\002\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\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@\004\000\162\b$A\000\001\128\000\000\002@\002\029\160H\000\016\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\004\000@\n \130D\016\000\024\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000@\000\000\000\004\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\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\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\016\000\000\000\001\000\000\000\000\000\000\128\128\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 @\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\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\024@\000\000\000\004\000\000\000\b\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\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\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\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\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\001\000\016\002\232 \145\004\000\020\000\000\000)\000\bv\129 \000C\128\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\000z\247\175\016\003\136 \145\004\bD\016\000\000I\000\bv\129 \000C\000\000\000\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\000(\130\001\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\011\164\130D\016\002X\000\000\000\164\000!\218\004\128\001\014\000\000\000\001\000\016\002\136 \145\004\000\132\000\000\000\t\000\bv\129 \000C\000\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\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\030\189\235\196\000\226\b$A\002\017\132\000\000\018@\002\029\160H\000\016\192\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\189\171\194\000\226\b$I\002\016\012\000\000\018@\002\020\161H\000\024\192\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\020\144\000\018\r\003\128c\140\192\000! \016\002\000\016@!\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\127\254\255\194\005\022\144\164\018\015C\156s\143\194\000g\1690\002F\148@\173\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \244)\1998\252 \006z\147\000$iD\n\221\239\251\255\000\004\000\002\000\000 \000@\000\000\000\000\000\004\000\000\000\000\000\000{\254\255\192\001\000\000\128\000\b\000\016\000\000\000\000\000\001\000\000\000\000\000\000\030\255\191\240\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\004!C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001\bP\192\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000B\0200\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\016\133\012\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\031\255\175\224\241E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\016(g\255\235\248 Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\024\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\173\192\000\000\000\000\000\000\000\000\128@\000\000\000\000\000\000\000\000\000\128\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\000\000\000\000\000\000\000\000\000\000\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\000\002\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\007\255\235\248 Qi\nA \212)\1998\252 \006z\131\000$iD\n\220\000\000\000\000\000\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\144\000\018\r\226\128o\140\192\000a \016\n\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\127\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\007\255\235\248 Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\220\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\254\191\131\197\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\159\255\175\224\129E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\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\030\255\191\240\000A\000 \000\002\000\004\000\000\000\000\000\b@\000\000\000\000\000\000\016\133\012\000\000@\000\000\000\192\000\002\024\004\000\000\002\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\016\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\134\001\000\000\000\128\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\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\002\000\007\175j\240\000\016\000\b\000\000\130\001\024\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\136\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\000\000\002\000\007\175j\240\000\016\000\b\000\000\130\001\024\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\002 \000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\0000\000\000\004\001\000\000\000\128\000\000\000\002 \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\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 \000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\018\rB\156s\143\194\000g\1680\002F\148A\161\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\004\002\001\000\000\000\000\000\000\000\000\000\002\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\007\255\235\248 Qi\nA \212)\1998\252 \006z\131\000$iD\n\220\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\bP\192\000\004\000\004\000\012\000\000!\128@\000\000!\000\000\000\000\000\012@\000\000\000\000\000\000\128\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\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\000R@\000H4\014\001\1423\000\000\132\128@\b\000A\000\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\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\251\255\b\020ZB\144H=\014q\206?\b\001\158\164\192\t\026Q\002\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\255\191\240\129E\164)\004\131\208\167\028\227\240\128\025\234L\000\145\165\016+p\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\251\255\b\020ZB\144@1\138q\206?\b\001\158\164\192\001\026Q\002\183\000\000\000\000\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\002\000\000\000\012_\255\191\240\129E\164)\004\003\024\167\028\227\240\128\025\234L\000\017\165\016+p\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\251\255\b\020ZB\144H5\nq\206?\b\001\158\164\192\t\026Q\002\183\127\254\255\194\005\022\144\164\016\012b\156s\143\194\000g\1690\000F\148@\173\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@ \016\000\000\000\000\000\000\000\000\000 \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\127\254\255\194\005\022\144\164\018\rB\156s\143\194\000g\1690\002F\148@\173\192\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\239\252 Qi\nA \212)\1998\252 \006z\147\000$iD\n\220\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\254\255\194\005\022\144\164\018\rB\156s\143\194\000g\1690\002F\148@\173\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\016\133\012\000\000@\000@\000\192\000\002\024\004\000\000\002\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\127\254\255\194\005\022\144\164\018\rB\156s\143\194\000g\1690\002F\148@\173\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@ \016\000\000\000\000\000\000\000\000\000 \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\127\254\255\194\005\022\144\164\018\rB\156s\143\194\000g\1690\002F\148@\173\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\016\133\012\000\000@\000@\000\192\000\002\024\004\000\000\002\016\000\000\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\004\000\000@\000\000\000\000\000\000\000\000\004\t\018\224\006\000\000\001\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\b\000\000\004\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\b\000\000@\128\000\000\000\000\000\000\000\004\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\128\000\004\b\000\000\000\000\000\000\000\000@\000\000\000 \000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\002\000\000\016 \000\000\000\000\000\000\000\001\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\b\001\000\000\000\000\000\000\000 \000\001\002\000\000\000\000\000\000\000\000\016\000\000\000\b\000\000\000\000\001\000\000\000\000\004\000\000\000\000\000\000\000\000\004\024\001\000\000\128P\000\000\000\000\000\000\002\000\000\016 \000\000\000\000\000\000\000\001\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\128\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\016\000\000\000\000@\000\000\000\000\000\000\000\000A\128\016\000\000\005\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\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\b\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\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\001\014\000`\000\000\016\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\001\128\000\000@\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\001\006\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\016`\004\000 \001\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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`\004\000\000\001\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\000A\128\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\004\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\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\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\016\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\001\014\000`\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\024\000\000\004\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\004\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\001\006\000`\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\004\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\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\016\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\002\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\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\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\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\128\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\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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") + (194, "\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000 \000\002\000A\128\000\000\129\012\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\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\015\240\000\000\000\000\000\000\000\001\235\218\188\000\004\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\017\173\028\000\000@\012@\000\192\005\002\024\004@\b\002\016\000\000\000\t\144\196\004'C@\n0\131T\0162\025@\134\0014\002!\222\004\128\001\014d1\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\2444\000\163\b5A\003!\148\b`\019@\"\029\224H\000\016\230C\016\016\157\r\000(\194\rP@\200e\002\024\004\208\b\135x\018\000\0049\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\026\209\192\000\004\000\196\000\012\000P!\128D\000\128!\000\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\004/S@\n0\131T\0162\025@\134\0014\002!\222\004\128\001\014d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\004\000\000\000\b \000\001\000@\000\000 \000\002\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\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\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\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\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\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\128\000\000\016\004\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\001\000\000\000\000\002\000\000 @\000\000\000\000\000\000@\000\000\000\000\000\0000\140\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\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\130\000\000\016\004\000\000\002\000\000\000\000\000\016\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\tP\208\002\140 \213\004\012\198P!\128M\000\136w\129 \000C\153\012@\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\001\tP\208\002\140 \213\004\012\198P!\128M\000\136w\129 \000C\153\012^\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\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\001\235\218\188\000\004\016\002\000\000 \000@\001\129\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\004\016\000\000\000!\000\000\004\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\000\000\000\000\000\000\000\000\000\030\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\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\001\235\218\188\001\004\016\002\000\000 \128@\001\129\000\000\000\128\000\000\000\000\004\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\030\189\171\192\000A\000 \000\002\000\004\000\024\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\000\000\000\000\000\000\000\128\000\b\128\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\b\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\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\000\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\bg\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\001\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\012L\019e\146\192\000\000\020\000\129\000\000\027\160\016\159\029\192\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\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\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\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\00010M\150K\000\000\000P\002\004\000\000n\128B|w\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\006\200\000'\135p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000l\128\002xw\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\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\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\003\000\016@!\128\000\000\000\000\000\000\017\000\000\000\016\000\000\001\000 \000\000\000\192\000&\131\016\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\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\004\000\000\000\b\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\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\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\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\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\000\000\128\000\b\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\175j\208\000\016\000\b\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\004\000\000\000\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\018\129\000\000\000\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\020\016\133,\000\000@\004@\000\192$\002\024\004@\b\002\016\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\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\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\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\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\000\000\000\000\000\000\000\000\000\000\000\000\000\016\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\000z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\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\020\144\000\018\rB\128c\140\192\000! \016\000\000\016@!\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\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\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\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\012\000\016`R\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000\000\001\004\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\001\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\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\000\000\000\000\000\000\000\000\002@\000\000\192\129\022I(\000\000\001\000\000\016\000\001\170\001\b\193\024\000\000\000\000\000\016\000\000\000 \000\000\004\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\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\bg\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\002\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\136\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\000\004\018\bg\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000h\128\0020F\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\003\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\004\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\016\000\000\000\000\000\000\000\000\000\000 \000\b@\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\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\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\001\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\000\000\000\016\005$\000\004\131@\160\024\2270\000\bH\004\000\000\004\016\b`\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\007\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\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\000\002\000\000\000\000\000\000\001I\000\001\000\196(\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\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\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\002\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\000\000\000\000\000\000\000\000\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\00010M\150K\000\000\000P\002\004\000\000n\128BTw\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\004\000\000\000\b\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\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\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\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\019\004\217d\176\000\000\005\000 @\000\006\232\004%Gp\000\000\000\000\001I\000\001\000\192(\0068\200\000\006\018\001\000\000\001\004\002\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\b\000\000\003\002\004\025$\160\000\000\004\000\000@\000\004(\004 @`\000\000\000\000\000@\000\000\000\128\000\000\016\004\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\000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\128\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\016\000\000\000 \000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\003\003\004\025$\176\000\000\004\000\000@\000\006h\004$D`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\005$\000\004\131p\160\027\2270\000\024H\004\002 \004\016\b`\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\000R@\000H7\n\001\1903\000\001\132\128@\"\000A\000\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\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\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\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\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\129\000\000\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\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\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\020\144\000\018\r\226\128o\140\192\000a \016\b\128\016A!\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\020\144\000\018\r\226\128o\140\192\000a \016\n\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\000\000\000\000\000R@\000H5\n\001\1423\000\000\132\128@\b\000A\000\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\030\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\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\144\000\0000\000E\129J\000\000\000@\000\000\000\000h\128\0020F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\200\000'\199p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\200\000'\199p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\000\000\000\000\000\000\000\128\000\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\0000\000\000\004\001\000\000\000\128\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\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\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\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000\000\000\000\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\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\000\000\000\000\000\000\136\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\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\001\000\000\000\003\000\000\000@\016\000\000\b\000\000\000\000\"\000\000\000\000\000\000\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\004\001\000\000\000\128\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\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\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\002\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\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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:\246\173\000\001\004\000\128\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000z\246\175\000\001\004\000\128\000\b \016\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\000\000\000\007\175j\240\000\016@\b\000\000\130\001\000\006\004\000\000\002\000\000\000\000\000\016\001\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\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\016\149\r\000(\194\rP@\204e\002\024\004\208\b\135x\018\000\0049\144\197\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\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\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\004\000\128\000\b\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\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\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\016\000\000\0000\001\000\004\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\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\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\005\235\218\188\000\004\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\030\189\171\192\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\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\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\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134z\246\175\000\001\000\000\128\000\b\000\016\000\000@\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\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\016\000\000\000\000\000\000\000\000\000\000\004\000\007\175j\240\000\016\000\b\000\000\128\001\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\016\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\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\000\000\000\000\000\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\235\218\180\000\004\000\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\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\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\128\001\004\000\128\000\b\000\016\000\003\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\246\175\000\001\004\000\128\000\b\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\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\004\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\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\004\000\000\000\012\000\000!\128@\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\016\004\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\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\128\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\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\235\218\188\000\004\000\002\000\000 \128F\000\001\000\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\000\000\000\000\000\b\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\018\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\b\000\000\128\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\003\175j\208\000\016@\b\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\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\b\000\000\128\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\000\016\004\000\000\002\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\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\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@\b@\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\255\250\254\b\020ZB\144H5\nq\206?\b\001\158\160\192\t\030Q\134\134\000\000\000$\000\004\012L\019m\146\192\001\000T\000\129 \000\027\160\016\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\025\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\136\000\005\007p\000\000\000\000\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@\016H4\n\001\1423\000\000\132\128@\b\000A\000\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\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\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\136\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\007\255\235\248 Qi\nA\000\196)\1998\252 \006z\131\000\004iD\n\025\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\026QB\134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\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\020\144\000\016\012B\128c\140\128\000a \016\000\000\016@!\128\000\000\000\000\005$\000\004\003\000\160\024\227 \000\024H\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\000\018\r\002\128c\140\192\000! \016\002\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\004\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\001I\000\001\000\192(\0068\200\000\006\018\001\000\000\001\004\002\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\t\000\000\003\019\004\217d\176\000\000\005\000 @\000\006\168\004\005\007p\000\000\000\000\000@\000\000\000\128\000\000\016\004\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\000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\128\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\016\000\000\000 \000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\003\017\004\216D\176\000\000\005\000 \000\000\006\136\000\005\007p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\020\144\000\018\r\002\128c\140\192\000! \016\002\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\192\004\016\b`\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\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\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\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\031\255\191\240\241E\164)\004\003\024\183\028\227\241\128\025\234L\000\017\229\028kp\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\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\127\254\191\130\005\022\144\164\018\rB\220s\143\194\000g\1680\002F\148P\161\159\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\165\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\255\191\240\129E\1649\004\195P\183\028\227\241\1289\234L\001\209\229\029kp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\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\002\004\022\144$\016\012B\132s\140\194\000g\1680\000F\020@\161\128\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\016(`\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\191\235\248\000\017I\bA \208)\0068\252\000\002\018\001\000 \t\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\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\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\000\134\001\000\000\000\128\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\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\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\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\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\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\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\246\173\000\001\004\000\128\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\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\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\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\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\004\001\000\000\000\128\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\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\t\000\001\003\003\004\027$\176\000@\020\000\000H\000\006(\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\000R@\016H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\018\b`\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\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\134\000\000\000\002\004\022\144$\016\012B\132s\140\194\000g\1680\000F\020@\161\128\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\000\002\000\000\000\000\000\000\000@\000\000\000\002\000\000\016\004\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\002 \000\000\000\000\000\000\004\000\000\000\000 \000\001\000@\000\000 \000\000\000\000\b\000\000\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\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\136\000\000\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\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\002 \000\000\000\000\000\000\004\000\000\000\000 \000\001\000@\000\000 \000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\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\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\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\b`\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\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\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\000\000\000\000\000\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\250\254\b\020ZB\144H5\nq\206?\024\001\158\160\192\t\026Q\002\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\000\000\000\000\000\007\255\239\252\000\001\132\128@\000\002Q\002\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\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\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\001\000\001\000\003\000\016\b`\016\000\000\b\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\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\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\016 \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\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\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\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\031\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\229\024h`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\b@\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\250\254\000\004\016\002\000\000 \000@\000\012\000\000\000\128\000\000\006\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\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\005\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\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\031\255\175\224\129E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\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\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\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\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@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\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\001\000\000\000\000\000\000\000\000\002\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\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\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\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\031\255\175\224\129E\164)\004\003\016\165\028\227\240\128\025\234\012\000\017\165\016(g\175j\240\000\017I\b\001\000\192)\0068\200\000\006\018\001\000\000\001\004\002\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\128\000\000\000\000\000\000\000_\255\175\224\129E\164)\004\003\016\165\028\227\240\128\025\234\012\000\017\165\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\127\254\191\130\005\022\144\164\016\012B\148s\143\194\000g\1680\000F\148@\161\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\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\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\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\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\007\255\235\248\000\016@\b\000\000\128\001\000\0000\000\000\002\000\000\000\b\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\127\254\191\128\001\004\000\128\000\b\000\016\000\003\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\007\255\235\248\000\016@\b\000\000\128\001\000\0000\000\000\002\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\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\b\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\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\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\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\030\189\171\194\000\226\b$I\002\016\012\000\000\018@\002\020\161H\000\024\192\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\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\001\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\016\002\136 \017\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\128\000\000\000\000\000\b\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\b\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\b\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\b\128\000\000\000\000\000\b\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\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\001\235\218\188\000\014\000\130D\016!\000\192\000\001$\000!H\020\128\001\140\000\000z\246\175\000\003\128 \128\004\b@0\000\000I\000\bR\005 \000c\000\000\000\000\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\000(\130\t\024@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\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\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\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\235\218\188\000\014\000\130@\016!\000\192\000\001$\000!H\020\128\001\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\030\189\171\192\000\224\b \001\002\016\012\000\000\018@\002\020\129H\000\024@\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\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\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\n@\002\029\160H\000\016\224\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\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\n \130D\016\002\016\000\000\000\164\000!\218\004\128\001\014\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000(v\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\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\235\218\188\000\004\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 @\007\175j\240\000\016\000\b\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\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\004\000\162\b$A\000\001\128\000\000\002@\002\029\160H\000\016\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\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\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\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\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@\004\000\162\b$A\000\017\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\186\b$A\000\005\000\000\000\n@\002\029\160H\000\016\224\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\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\n \130D\016\002\016\000\000\000\164\000!\218\004\128\001\014\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000(v\129 \000C\000\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\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\004\b\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\002\000\000\000\000\000\000\000\b\000\000\000\004\000@\138 \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\024\000\000\000\000\004\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000!\000\000\000\n@\002\029\160H\000\016\224\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\002\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\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 @\n \130D\016\000\024\000\000\000$\000!\218\004\128\001\012\000\000\000\001\000\016\002\136 \145\004\000\006\000\000\000\t\000\bv\129 \000C\000\000\000\000\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\000(\130\t\016@\000`\000\000\000\144\000\135h\018\000\0040\000\000\000\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\002\137 \145\004\000\148\000\000\000)\000\bv\129 \000C\128\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\n\029\160H\000\016\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\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\016\002\136 \145\004\000\006\000\000\000\t\000\bv\129 \000C\000\000\000\000\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\000(\130\t\016@\000`\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\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\016\000\000\000 \000\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\128\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\129\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\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\016\000\000\000 \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\016\000\000\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\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\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\000\000\000\000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\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@\n \130D\016\000\016\000\000\000$\000!\218\004\128\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\000\000\000\000\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\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\011\160\130D\016\000P\000\000\000\164\000!\218\004\128\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\222\188@\014 \130D\016!\016@\000\001$\000!\218\004\128\001\012\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@\004\000\162\b\004A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000.\146\t\016@\t`\000\000\002\144\000\135h\018\000\0048\000\000\000\004\000@\n \130D\016\002\016\000\000\000$\000!\218\004\128\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\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\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\247\175\016\003\136 \145\004\bF\016\000\000I\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\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@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\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\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\000z\246\175\b\003\136 \145$\b@0\000\000I\000\bR\133 \000c\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\000H4\014\001\1423\000\000\132\128@\b\000A\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\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\000\000\000\000\000\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\251\255\b\020ZB\144H=\014q\206?\b\001\158\164\192\t\026Q\002\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\255\191\240\129E\164)\004\131\208\167\028\227\240\128\025\234L\000\145\165\016+w\191\239\252\000\016\000\b\000\000\128\001\000\000\000\000\000\000\016\000\000\000\000\000\001\239\251\255\000\004\000\002\000\000 \000@\000\000\000\000\000\004\000\000\000\000\000\000{\254\255\192\001\000\000\128\000\b\000\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\016\133\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\004!C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001\bP\192\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000B\0200\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\254\191\131\197\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\159\255\175\224\129E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\016(`\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\183\000\000\000\000\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\002\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\016\b\004\000\000\000\000\000\000\000\000\000\b\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\031\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\165\016+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\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\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\007\255\235\248,O:\026,O:\000\000\000\000\000\000\002\240O:\000\000\000\000\000\000\000\000O:EhO:F\132O:G\012O:H(O:?HO:@dO:A\128O:H\176O:I\204O:\000\000O:JTO:KpO:K\248O:\000\000O:M\020O:M\156O:\000\000\000\000O:\000\000\002\206\000\000\000\000\000\017\000\000\000\000\000\000\003\006\000\000\003\b\000\000\000\020O:\000\000\000\020\000\000\000\000\000b2\246\000\000\031\172\023\144\000\000\0032a\184\023\144\000\000\000\000[\226a\206\023\144\000\000\000\000\023\144\000\000\000\000\023\144\000\000\023\144\000\000\003\148\0048\023\144\000\000\023\144\000\000\023\144\000\000\023\144\000\000\005\144a\210\023\144\000\000\000\000\\\na\248\023\144\000\000\000\000\023\144\000\000\000\000\023\144\000\000\023\144\000\000\004\024\004\134\023\144\000\000\023\144\000\000b<\023\144\000\000\000\000\023\144\000\000R\154bx\023\144\000\000\000\000\023\144\000\000\023\144\000\000\000\000\023\144\000\000\023\144\000\000\007\212\000\017\004N\023\144\000\000X\236\000\017\004T\023\144\000\000\000\000\023\144\000\000\023\144\000\000\023\144\000\000\004\250\0058\023\144\000\000\\\n8\132\000\000\000\000\005*\023\144\000\0008\132\000\000\000\000<\244:\188\000\000\001f\006$\000\017\005r\006R>\016>\016\000\000\000\000\000\000\000\195L\248>\016\001X@H\000\000\000\000\000\000\006h\006D\002\162\006r>\016\000\000\000\000\005\192\000\000\005\198\006\164>\016\005\216\000\000\000+\000\000\007|\000\000\000\000\002\004Fh\000\000\000\000\000\000\006>\007D\000\000\007R\000\000*\182\001f8\132\006`\023\144\000\000a(8\132\006l\023\144\000\000\000\000\000\000\000\017\007b\000\000\000\000\000\000\000b\000\000\000\000\030\202\006~\000\000\006\136]\b.<\000\000]\152\030\202\006\140\000\000\006\146-\n.<]\b\000\000\000\000\000\000\000\000\000\000\000\000[\012\000\000\000\000[\012\000\000\000\000[\012\000\000\000\006\000\000]\b\000\000\000\000m\196\000\017\000\000\025.\025.\000\000\002\138\029\174\025.\025\178O:\000\000O:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\238O:A\226O:\006\194O:\000\000O:v>O:v\164O:w\006O:w\152O:w\230O:xxO:\000\000O:x\218O:y>O:y\154O:\000\000O:y\254O:zZ\002\224\026\174\000\000\000\000\003\002\028.\000\000\000\000\000\000\000\000\006\156\000\000O:\006\156\000\000\000\000\000\017\000\000\000\000\000\000\002\184]\b\000\000\000\000\007|\000\000\000[^p\007fO:\007&\000\000\000\000]\b\000[\000\000\000\000O:\006\178\000\000\030\202\006\178\000\000\006\182nH.<]\b\006\190\000\000O:\000\232O:\006\196\000\000\000\000.<.<\000\000\000\000\000\000\000\000+\148\000\000\000\000\000\000\000\000\000\000[\012\000\000\000\000\001(\007\144O:.<\000\017\000\000[\012\000\000\000\000[\012\000\000\000\006\000\000,\188nH\000\000\000\000\027x\000\017\000\000\025.\006\220\000\000O:\006\218\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000&0\000\000\000\000\007\n.<\007&.<\000\000\000\026\000\000\000\0001tO:C\252O:D O:]\166O:k\166O:l&O:z\190O:{\026O:\000\000O:{\"O:{~O:{\176O:\000\000O:|4O:|\144\000\000\006\254\000\000\002x/(\000\000\003\2141\000.<\000\000\004\n0\020\000\000\000\000\000\000\000\000\007\132\000\000\000\000\000\000\007\002\000\000\007\n\000\000\000\000\007\012\000\000\000\000\007\016\000\000\000\000\007\024\000\000\000\000\000\000\000\000\000\000\000\000\007\026\007\236\000\000\007&\000\000\0078\000\000\007\016\b>\001\154\000\000O:\t4\000\000\000\000\000\000\t\022>\016\bJ\t>\000\000\003\186\004>O:\tP\000\000\tX\000\000*\182\000\017\004lO:\tZ\000\000\tb\000\000\000\017\004vO:\td\000\000\tt\000\000\0013\b\188\t\n%:\000\000_\000\030\202\b\152Q\164\000\000V6\000\000\t\136\000\000\003\002\tbO:\t6\000\000\t~O:\t@\000\000\001p\000\000\t\n\t\n\030\202\b\196\000\000\b\202o\no\n\000\000\000\000\000\000\000\000\000\000\000\000[\012\000\000\000\000[\012\000\000\000\000[\012\000\000\000\006\000\000o\n\000\000\000\0004.\000\017\000\000\025.\b\204\000\000O:\b\202\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000V\186O:\000\000O:\000\000\b\210\000\000\000\020\000\000\000\000\000\000\000\000\000\000crO:c\218O:\b\252O:\000\000O:d\246O:e^O:fzO:f\226O:g\254O:hfO:\000\000O:i\130O:i\234O:k\006O:\000\000O:knO:l\138.<\b\206\000\000\000\000\003\002\000\000\003\002\000\000\019\152\t\n\t\n\000\000\000\000\000\000\000\003\000\000\000\000\000\000\t\164O:\b\216\"$#6\000\017\t\202\000\000\t\174W~\t\208W~\t\212O:\b\234\"$\"$\001\022\001\022\004\012\001\226\001\022\000\000\000\000\004\018\004\026\000\000\004\028\n\"\000\000\000\000\000\000\000\000\000\000\b\244\000\000\000\000\t\228\000\000\t\232\000\000\000\000\n*\t\206O:\t\002\t\248\000\000\t\250\000\000\t8\000\000\t\230\025.\t\030\"$\000\000\000\000\000\000\007\136\000\000\000\000\003\002\000\000\t\192\000\000\015\018\0012\000\000\015\018\000\000\000\000&d\000\000\011\182\000\000\000\000\012\014\000\000\015\018\000\000\n\020\025.\tV\001\166\000\000O:\nH\000\000\0032\000\000\n\024\000\017\tb\n4>\016\th\003\132\000\000O:\nZ\000\000\n>>\016\tt\nd\000\000\004\128O:\nf\000\000\nj\000\000*\182\000\017\004\140O:\np\000\000\nt\000\000\000\000\000\000\012\014\000\000\000\000\006\016\000\000\t\n\000\000\0032\000\000\000\000\005\b#6\000\000\005\b\000\000\000\000\t\144\000\000\000\020\001\128\"$\000\000\006\006\0007\006\006\000\000\0007\000\000\t\n\000\000\t\n\000\000\000\000\000\000\t\138\000\000\000\000\t\156\000\000\0050\007\136\0007\006\006\000\000\000\000\000\000\0007\000\000\t\n\000\000\0050\000\000\000\000\025\018\n\130\019\152\000\000\020R\000\000\n\140\019\152\000\000\000\000\n\140\000\000\000\000\t\158\000\000\000\000\t\166\000\000\005@\t\n\000\000\005@\000\000\000\000\n,\000\000\006\016\000\000\t\n\000\000\000\000\000\000\022\152X\022\000\000\n\162\000\000\022\152\000\000\n\164\000\000\n\168\000\0002\246\000\017\004H\000\000O:\n\174\000\000\0122\n\128\000\017\t\200\n\152>\016\t\204\005<\000\000O:\n\192\000\000\005b\000\000O:\n\196\000\000*\182\000\017\005|\000\000O:\n\206\000\000\005\146\022\152\000\000\000\017\005\196\000\000O:\n\208\000\000&d\n\210\000\000\000\000\000\000\n\188\025.\t\248\005\198\000\000O:\n\232\000\000\007\184\000\000\n\196\000\017\n\n\n\218>\016\n\018\005\206\000\000O:\011\002\000\000\005\248\000\000O:\011\004\000\000*\182\000\017\006\004\000\000O:\011\006\000\000\005\146\000\000\000\000\n\030\000\000\025\178\n\158\000\000\000\000\000\000\n\170\000\000\000\165\001p\000\000\019\152\011\016\000\000\000\000O:\nd\t\n\000\000\n:\000\000\0013\000\0002\246\000\000\000\000\001\182\019\152\000\000\019\152\000\000\n(\000\000\001\182\000\000O:\003\236O:\000\000O:\000\000\n*\000\000\003\236\000\000O:\003\236\n4\000\000\021\024$\182\000\000\005\216\021\024\000\000\000\000\021\024\000\000\n>\000\000\005\216\000\000O:\003\236\nB\000\0002\246\005\2202\246\000\0002\246\000\000\nD\000\000\005\220\000\000O:\003\236\nH\000\000\000\000 J\000\000\000\151\n\232\000\000\000\000\n\190_\220\000\000\000\000\000\000\000\000\000\000\000\000\n\154\006\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\002v_\220\000\000\001\b\003P\n\158\000\151\000\000\000\000\n\160\000\151\000\000\000\000\000\000\000\000\002\222\003P\000\000\000\000\000\000\000\000\011\000\000\000\000\000\000\000\000\000'\230*6\000\000[\232\000\000_\220\000\000\004@_\220\000\000\002\196\001H\001H\000\000\005\024\001H\000\000\nz\000\000\000\000\000\000\000\000\011\014\000\000+\148\000\000-\188_\220\000\000\003\224_\220\000\000\011\020\000\000_\220\011\022\000\000rh`^\011\026\000\000\011$\000\000r\246o\202_\220\000\000\000\000\n\192_\220\011\\\000\000\011b\000\000\011d\000\0002\246\000\000\005\1502\246\000\000\n\222\023\148\000\000_\220\011j\000\000\003\020_\220\000\000\004\154_\220\000\000\004\132\011\240\000\000\011\246\000\000`^_\220\n\236\000\000\000\000\000\000\000\000\000\000\000\000\011~\000\000sX_\220\011\130\000\000\011\136\000\000s\230o\218_\220\011\004_\220\011\142\000\000\011\148\000\000\011\150\000\000_\220\011<\000\151\000\000\000\000\006`_\220\000\000\004\132\000\000\011\156\000\000_\220\011\160\000\000tHp\228_\220\011\026_\220\011\170\000\000\011\172\000\000\011\174\000\000m,\023\148\000\000\023\148\000\000`^_\220\011*_\220\011\184\000\000\011\186\000\000\023\148\000\000qF\000\000\000\000\006j_\220\000\000\001\128\001\218\001H\0114\000\000\000\000\001\212\001\212\000\000\000\000\000\000\000\000\005\216\001\212\000\000\0116\000\000\000\000\000\000\000\000\000\000\000\000\000\000_\220\000\000\006\158_\220\000\000\006\006\002\220\000\151\011D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\208\000\000\011\210\000\000_\220\011\212\000\000t\214_\220\011\216\000\000\011\220\000\000_\220\011\222\000\000!\174\011\142u8N\154r\006\011j\000\000_\220\011\244\000\000\011\252\000\000\011\204!\174_\220\012\000\000\000_\220\012\016\000\000\012\024\000\000_\220\012\026\000\000\000\151\011\138\000\000\000\000 J\000\000\000\000\0044\012\132\000\000\000\000\001C\000\000\000\000\000\000O:\000\000\000\000\000\000\004\132\000\000\000J\000\000\000\000\000\000\006\0062\2462\2462\246\000\000\003`\003`\003`\003`\000\000\000\000\000\000\000\000\000\000\000\000\003\002\019\152\012z\016\148\0012\000\000\000\000\004P\000\000\012\014\000\000.<\011\156\000\000\003\002\019\152\011\162\018\022\000\000\003\002\016\148\000\000\000\000\000\0002\246/6\000\000\000\000\000\000\011\240\0032\012|H\012H\012\000\000\004\136d\144H\012\006xI\176\000\000\000\000\b\170\012t\000\017\000\000\006\138KT\000\000\000\000\000\000\000\000\000\000\011\188\012\134\t\n\011\188\000\000\000\000\004P\000\000\012\014\000\000\021r\004\156\000\000\000\000\012p\000\000\000\000\0044\000\000\002\030\000\000\000\000\000\000O:\000\000\004\132\000\000\003N\000\000\000\000\000\000\007\136\000\000\r\144\005L\r\144\000\000\t\n\r\144\000\000\005\246\000\000\t\n\000\000\t\n\000\000\t\n\000\000\019\242\000\000\000\000\000\000\000\000\000\000\t\n\000\000\005\246\000\000\t\n\000\000#\144\000\000\000\000\n\140\011\248\000\151\000\151\012\164\001h\000\000\001h\012\204\000\000\012\206\000\000\004\b\000\000\001h\002\196\001h\0110\001h\000\000\000\000\003\170\000\000\0144\000\151\011\198\000\000\011\200\000\000\012\n\000\151\000\151\011\210\000\000\n\140\012\222\000\000\014\234\012\254\012\242\000\225\012\242\000\000\000\000\b\214\000\151\000\000\001D\000\000\000\000\000\007\000\000\011\218\000\000\000\000\000\000\012\024\000\151\000\151\011\226\000\000\000\000\n\140\014\234\012\254\b\214\001D\000\007\011\230\000\000\014\234\012\254\b\214\001D\000\007\011\232\000\000\005T\000\026\012\006\000\151\012\002\007\b\006J\012,\000\151\000\000\012.\000\151\000\000\012\142\000\000\012\020\003B\012\014\007\b\012\148\000\000\012\018\007\b\012\152\000\000\000\000\007\b\000\000\012\156\000\000"), (16, "\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\018&\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\014\177\025\"\007\217\030\247\030\251\014\177\007I\002\186\030\255\014%\011\005\014-\014\177\001\138\014\177\014%\014%\000&\014\177\018Z\014\177\014\177\014\149\014\177\001\138\"r\014\177\014%\019\250\0007\000;\014\177\014\177\014\177\002\162\002\226\014\177\000*\006)\000\n!\218\000\174\014\177\000\178\001\146\014\177\014\177\011\005\001\182\002\190\001\202\014\177\014\177\014%\014\177\007\"\014\177\001\"\001&\nQ\001\142\014\177\001\138\014\177\014\177!F\014\177\014\177\014\177\n2\025\n\001\150\014\177\014\177\014\177\005*\001\170\014\177\014\177\014\177\014\250\001\154\001\238\014\177\014\177\014\177\014\177\014\177\014\177\t\218\004\253\001\210\014\177\014\177\000N\r2\025r\025\154\025\170\025\222\025\238\026\022\014\254\014\177\014\177\014\177\000\n\021*\014\177\014\177\014\177\014\177\007\217\014\177\005B\014\177\002\026\000\n\014\177\001\234\001\238\014\177\014\177\t\237\"\002\001\242\001\206\000\n\006)\001\246\001\250\007A\014\177\014\177\b\217\007A\014\177\015\006\007\153\001\214\014\177\014\177\014\177\014\177\005\133\007Y\014\177\001\254\014\177\n\150\001\222\t\241\014\177\014\177\014\177\000\n\014\177\n\138\014\177\014\177\001\138\014\177\006\209\014\177\014\177\007\161\014\177\014\177\014\177\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\001\230\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\014\189\002\186\014=\026b\020z\014\189\018Z\001\138\031\031\031#\005\133\007\145\014\189\031'\014\189\019\250\018\130\005\133\014\189!N\014\189\014\189\029\138\014\189\r\018\001\150\014\189\002&\027R\r\137\0026\014\189\014\189\014\189\t\253\001\154\014\189\002m\001\146\006\250!R\0059\014\189\007\186\001\202\014\189\014\189!V\0059\017\158\018\134\014\189\014\189\015}\014\189\021\134\014\189\n:\029\158\025R\000\n\014\189\001\138\014\189\014\189\001\150\014\189\014\189\014\189\001\138\002J\026\202\014\189\014\189\014\189\001\154\026b\014\189\014\189\014\189\020~\nF\002^\014\189\014\189\014\189\014\189\014\189\014\189\011\t!\246\r\137\014\189\014\189\021*\r\026\005\173!\250\029\162\002\138\000\n\029\142\005a\014\189\014\189\014\189\020\134\005A\014\189\014\189\014\189\014\189\023j\014\189\005A\014\189!^\017j\014\189\023n\001\206\014\189\014\189\023r\015}\015}\002\142\001\150\012\222\015}\025Z\007.\022n\014\189\005\173\nA\014\189\001\154\000\006\000\"\014\189\014\189\014\189\014\189\017\162\002q\014\189\029\166\014\189!f\021\138\011\t\014\189\014\189\014\189\000\n\014\189\024\246\014\189\014\189\007i\014\189\000\n\014\189\014\189\001\138\014\189\014\189\014\189\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\014\194\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\007\225\001\138\007\137\001\146\006\250\007\225\018^\018n\018~\005\017\005Z\t\229\007\225\005j\007\225\005\138\005B!v\007\225\014\133\007\225\007\225\005\146\007\225\007\142\007\209\007\225\027N\002\157\017\006\001\150\007\225\001\146\007\225\017\n\014=\007\225\029\254\002*\031B\001\154\017\014\007\225\"\174\001\138\000.\017\018\031F\026\206 \139 \143\007\225\007\225\002\206 \147\005\154\007\225\007\225\b\017\001\150\021\154\007\225\026\218\007\225\007\225\000\n\007\225\007\225\007\225\001\154\026\222\014\157\007\225\007\225\007\225\001\146\021\158\007\225\007\225\007\225\007\185\026\190\011\186\007\225\007\225\007\225\007\225\007\225\007\225\n\t\005\170\b\170\007\225\007\225\000\n\t\197\005\017\017\174\002\214\007a\007a\021\186\001\150\017\178\007\225\007\225\007\145\007J\007\225\007\225\007\225\007\225\001\154\007\225\t\194\007\225\022>\026\234\007\225\005\017\b\017\007\225\007\225\n\237!\134\004R\0282\026\238\007A\026\250\017^\004\254!v\014\157\tr!~\007\225\000\n\t\181\n\001\007\225\007\225\007\225\007\225\005\213\000\n\007\225\002\226\007\225\025z\017j\t\130\007\225\007\225\007\225\002M\005\026\005\"\007\225\007\225\001\138\007\225!j\007\225\007\225\005\245\007\225\007\225\007\225\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001!n\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\b\001\014=\b\001\021\190\020z\b\001\023\170\014] \171 \175\011\005\b\001\b\001 \179\b\001\005\158\028J\028R\b\001\018Z\b\001\b\001\030\230\b\001\014=\001\150\b\001\025\130\019\250\014=\007A\b\001\b\001\b\001\014=\001\154\b\001\b\001\b\001\b\001\014= k\b\001\b\001\b\001\b\001!\142\b\001\b\001 o\007A\b\001\b\001\b\001\b\001\014\141\b\001!~\028Z r\000\n\b\001\030\230\b\001\011\198\b\001\b\001\b\001\b\001\027\154\b\001\n\025\b\001\b\001\b\001\005\162\014]\b\001\b\001\b\001\020~\006\n\b\001\b\001\b\001\b\001\b\001\b\001\b\001\011\025\011\214\020\130\007y\b\001\020\150\t\225\017\210\002}\t\209\020\162\014u\023\174\t\213\002]\b\001\b\001\b\001\021*\b\001\b\001\b\001\b\001\b\001\b\001\006\014\b\001\017j\027B\b\001\017\242\005\198\b\001\b\001\005\214\018\014\005\246\b\001\b\001\023\218\021\226\022J\006z\005\254\b\001\006\142\022\002\b\001\015}\015}\017j\b\001\b\001\015}\b\001\017j\018Z\b\001\023\238\b\001\017j\022\190\011\025\b\001\031\246\019\250\017j\"n\n5\023>\b\001\024\n\b\001\028>\b\001\b\001\006\006\b\001\b\001\b\001\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\026J\001v\031.\001~\017\014\001\134\002j\002r\002v\017\018\0312\006\182\026N\024.\024b\017\022\024\030\006\022\024\150\025\186\006\186\025\246\017&\026R\002~\026V\028J\028R\002\230\026Z\018.\017.\029\138\0182\000\n\026^\0186\007\201\011\005\024\170\023\222\002\134\027^\018J\026j\024\198\011\001\018Z\026n\014M\021*\011\005\002\246\"\134\026r\031f\019\250\007\169\006\214\023\242\018Z\020\014\018\142\031\146\031\158\007\177\020\018\022z\029\250\019\250\026v\003\026\024\014\003\030\006\005\"\146\002\154\021\"\020\026\001\138\0115\0115\018\166\003&\020\030\0115\006\254\018\170\nb\003.\025\198\007\006\025\254\018\174\018\178\017B\017F\018\182\020\"\011\017\007\n\026z\007F\020&\026~\028\014\007\193\015}\0242\024f\001\146\007B\0145\024\154\nr\018\186\007N\026\130\020*\020.\018\190\0202\026\134\000\n\026\138\020F\026\142\026\146\005\225\026\150\007^\020R\018\198\007f\024\174\021*\026\154\001\150\029\186\026\158\024\202\007j\007r\031\178\014}\014E\020r\001\154\021*\014e\020v\020\194\006\005\017J\026\162\007\129\018\202\007q\020\198\026\166\026\170\011\017\018\210\006\005\006\005\0115\0115\"\130\006\005\020\206\0115\018\214\000\n\b\t\b\t\014m\018\222\003r\b\t\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\007\162\001v\031.\001~\017\014\001\134\002j\002r\002v\017\018\0312\rF\007\166\028\226\rV\017\022\rv\0049\029~\007\174\007\194\0049\017&\r~\002~ \002\007\214\007\238\002\230\n%\018.\017.\b\014\0182 \"\"\215\0186\b\022\002\141\b.\007A\002\134\b6\018J\029\238\b\254\011\001\t\154\002\186\t\166\t\210\t\226\002\246\t\234\001\138\018Z\r\134\n\n\n\022\002\226\n\030\020\014\018\142\031\146\019\250\n.\020\018\022\194\001\138\nB\024v\003\026\n\142\003\030\006\021\001\138\002\154\021\"\020\026\n\222\n\234\011\026\018\166\003&\020\030\001\146\024z\018\170\nb\003.\015\"\r\150\011\"\018\174\018\178\017B\017F\018\182\020\"\011\178\011\238\011\254\021&\020&\006r\012\006\012\018\017\174\012\030\012*\012F\014^\001\150\017\178\nr\018\186\b:\012R\020*\020.\018\190\0202\001\154\000\n\012Z\020F\001\238\012b\005\225\012r\012~\020R\018\198\001\238\012\138\007A\012\154\012\166\012\178\012\186\012\206\012\246\r\002\021*\r'\r\138\020r\000\n\r\142\r\246\020v\020\194\r\250\017J\014f\007A\018\202\014z\020\198\007A\r\178\000\n\018\210\r\194\006\021\r\226\014\162\014\166\000\n\020\206\014\186\018\214\r\234\b\025\b\025\001\138\018\222\003r\b\025\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\014\230\001v\031.\001~\017\014\001\134\002j\002r\002v\017\018\0312\015\026\r\242\001\146 \018\017\022\015*\015>\015\158\015\162\015Z\016\n\017&\015j\002~\015\138\016\014\016z\002\230\016\142\018.\017.\015\146\0182\001\138\016\182\0186\016\186\016\206\016\230\001\150\002\134\016\250\018J\017\026\017\"\011\001\014\002\001\138\017*\001\154\0172\002\246\017:\017>\018Z\017f\017z\017\134\017\142\017\146\018\138\018\142\017\154\019\250\015\154\020\018\017\170\017\186\017\194\016r\003\026\017\198\003\030\0061\000\n\002\154\020\022\020\026\001\146\017\130\017\218\018\166\003&\020\030\017\226\017\250\018\170\nb\003.\018\002\018\022\001\238\018\174\018\178\017B\017F\018\182\020\"\018\030\015\170\017\174\015\133\020&\007\249\018*\001\150\017\178\018B\018V\007\249\007\249\018b\0049\nr\018\186\001\154\0049\020*\020.\018\190\0202!\234\000\n\018j\020F\018r\000\n\005\225\018z\018\150\020R\018\198\018\158\019\006\019\018\019J\019z\019\242\0206\020>\000\n\020N\021*\020V\020^\020r\020f\007\249\020n\020v\020\194\0061\017J\020\190\020\202\018\202\020\210\020\198\020\222\020\226\020\234\018\210\0061\0061\020\238\020\246\020\254\0061\020\206\001\138\018\214\021\006\011=\011=\021\014\018\222\003r\011=\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\0216\001v\021z\001~\017\014\001\134\002j\002r\002v\017\018\021\130\002\186\021\146\021\162\020z\017\022\021\170\001\138\021\174\021\182\005\201\021\198\017&\021\206\002~\021\214\021\218\021\234\002\230\021\242\018.\017.\022\n\0182\022\018\001\150\0186\tq\022b\022\170!:\002\134\ty\018J\022\182\001\154\011\001\023*\001\146\0236\018Z\tq\002\246\016\222\023V\018Z\ty\023\130\023\146\019\250\023\154\018\138\018\142\023\182\019\250\023\194\020\018\023\202\023\206\023\214\000\n\003\026\023\230\003\030\023\250\001\150\002\154\020\022\020\026\024\022\024:\024F\018\166\003&\020\030\001\154\024V\018\170\nb\003.\020~\024^\024n\018\174\018\178\017B\017F\018\182\020\"\024~\024\134\024\138\004\245\020&\024\146\024\162\024\182\024\210\tq\024\230\000\n\024\242\002a\ty\nr\018\186!\170\025\002\020*\020.\018\190\0202\025\026\000\n\025*\020F!\190\0256\025g\025\143\005\201\020R\018\198\"\022\025\167!\194\005\201\005\201\021*\025\211\004\245\025\235\026\011\021*\026#\026;\020r\026F\005\201\005\201\020v\020\194\026f\017J\026\210\026\226\018\202\027\019\020\198\027j\015\198\tq\018\210\015\214\027\127\015\246\ty\027\167\027\179\020\206\027\195\018\214\015\254\tq\005\201\027\203\018\222\003r\ty\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\027\230\001v\011\005\001~\017\014\001\134\002j\002r\002v\017\018\027\239\018Z\016\006\027\247\027\255\017\022\028\026\028+\028N\004\245\019\250\028V\017&\028f\002~\004\245\004\245\028\131\002\230\028\147\018.\017.\028\155\0182\028\174\028\183\0186\004\245\028\191\028\199\028\210\002\134\028\247\018J\029\003\029\022\011\001\016\022\001\138\029\031\029'\029/\002\246\029R\004\245\018Z\029[\029c\015}\029\150\029\198\018\138\018\142\004\245\019\250!~\020\018\030\006\030'\030/\030;\003\026\030K\003\030\030S\030_\002\154\020\022\020\026\001\146\023\190\030j\018\166\003&\020\030\030z\030\135\018\170\nb\003.\030\143\030\150\030\163\018\174\018\178\017B\017F\018\182\020\"\021*\030\175\017\174\015\133\020&\030\183\030\195\001\150\017\178\030\207\030\234\031r\031\154\031\170\031\222\nr\018\186\001\154\031\230\020*\020.\018\190\0202 \022\000\n >\020F B J w\015}\015}\020R\018\198!>\015}!J!Z!b!\159!\167!\210\000\n!\174\021*!\187!\198\020r!\214\"\011\"\026\020v\020\194\"'\017J\"K\"g\018\202\"v\020\198\"~\"\138\"\150\018\210\"\163\"\170\"\178\"\187\"\194\"\203\020\206\"\223\018\214\000\000\015\133\015\133\000\000\018\222\003r\015\133\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\000\000\001v\031.\001~\017\014\001\134\002j\002r\002v\017\018\0312\000\000\000\000\000\000\000\000\017\022\000\000\000\000\000\000\000\000\000\000\000\000\017&\000\000\002~\000\000\000\000\000\000\002\230\000\000\018.\017.\000\000\0182\000\000\000\000\0186\000\000\000\000\000\000\000\000\002\134\000\000\018J\000\000\000\000\011\001\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\007\241\000\000\000\000\000\000\020\014\018\142\007\241\007\241\000\000\020\018 \194\000\000\000\000\000\000\003\026\000\000\003\030\000\000\007\241\002\154\021\"\020\026\000\000\000\000\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\000\000\000\000\018\174\018\178\017B\017F\018\182\020\"\000\000\000\000\007\241\005\001\020&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nr\018\186\000\000\000\000\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\005\225\000\000\000\000\020R\018\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000!v\000\000\000\000\000\000\000\000\000\000\020r\000\000\000\000\000\000\020v\020\194\000\000\017J\000\000\000\000\018\202\000\000\020\198\000\000\000\000\000\000\018\210\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\018\214\000\000\011!\011!\000\000\018\222\003r\011!\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\004\253\001v\000\000\001~\017\014\001\134\002j\002r\002v\017\018\000\000\000\000\000\000\000\000\000\000\017\022\000\000\000\000\000\000\005\001\000\000\000\000\017&\000\000\002~\005\001\005\001\000\000\002\230\000\000\018.\017.\000\000\0182\000\000\000\000\0186\005\001\000\000\000\000\000\000\002\134\000\000\018J\000\000\000\000\011\001\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\014\018\142\005\001\000\000!~\020\018\021>\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\002\154\021\"\020\026\000\000\000\000\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\000\000\000\000\018\174\018\178\017B\017F\018\182\020\"\000\000\000\000\000\000\015a\020&\000\000\000\000\000\000\000\000\000\000\000\000\004\253\000\000\000\000\000\000\nr\018\186\004\253\004\253\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\004\253!F\000\000\020R\018\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020r\000\000\000\000\000\000\020v\020\194\000\000\017J\004\253\000\000\018\202\000\000\020\198\000\000\000\000\000\000\018\210\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\018\214\000\000\015a\015a\000\000\018\222\003r\015a\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\000\000\001v\000\000\001~\017\014\001\134\002j\002r\002v\017\018\000\000\000\000\000\000\000\000\000\000\017\022\000\000\000\000\000\000\000\000\000\000\000\000\017&\000\000\002~\000\000\000\000\000\000\002\230\000\000\018.\017.\000\000\0182\000\000\000\000\0186\000\000\000\000\000\000\000\000\002\134\000\000\018J\000\000\000\000\011\001\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\014\018\142\000\000\000\000\000\000\020\018\031v\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\002\154\021\"\020\026\000\000\000\000\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\000\000\000\000\018\174\018\178\017B\017F\018\182\020\"\000\000\000\000\000\000\000\000\020&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nr\018\186\000\000\000\000\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\000\000\000\000\000\000\020R\018\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020r\000\000\000\000\000\000\020v\020\194\000\000\017J\000\000\000\000\018\202\000\000\020\198\000\000\000\000\000\000\018\210\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\018\214\000\000\015\173\015\173\000\000\018\222\003r\015\173\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\000\000\001v\000\000\001~\017\014\001\134\002j\002r\002v\017\018\000\000\000\000\000\000\000\000\000\000\017\022\000\000\000\000\000\000\000\000\000\000\000\000\017&\000\000\002~\000\000\000\000\000\000\002\230\000\000\018.\017.\000\000\0182\000\000\000\000\0186\000\000\000\000\000\000\000\000\002\134\000\000\018J\000\000\000\000\011\001\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\014\018\142\000\000\000\000\000\000\020\018\031v\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\002\154\021\"\020\026\000\000\000\000\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\000\000\000\000\018\174\018\178\017B\017F\018\182\020\"\000\000\000\000\000\000\000\000\020&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nr\018\186\000\000\000\000\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\000\000\000\000\000\000\020R\018\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020r\000\000\000\000\000\000\020v\020\194\000\000\017J\000\000\000\000\018\202\000\000\020\198\000\000\000\000\000\000\018\210\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\018\214\000\000\015\169\015\169\000\000\018\222\003r\015\169\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\000\000\001v\000\000\001~\017\014\001\134\002j\002r\002v\017\018\000\000\000\000\000\000\000\000\000\000\017\022\000\000\000\000\000\000\000\000\000\000\000\000\017&\000\000\002~\000\000\000\000\000\000\002\230\000\000\018.\017.\000\000\0182\000\000\000\000\0186\017\006\000\000\000\000\000\000\002\134\017\n\018J\000\000\000\000\011\001\031B\000\000\017\014\000\000\000\000\002\246\000\000\017\018\031F\000\000\000\000\000\000\000\000\000\000\020\014\018\142\000\000\000\000\000\000\020\018\022\246\000\000\000\000\000\000\003\026\000\000\003\030\000\000\001\138\002\154\021\"\020\026\000\000\000\000\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\021\154\000\000\018\174\018\178\017B\017F\018\182\020\"\000\000\000\000\000\000\000\000\020&\000\000\000\000\001\146\021\158\000\000\000\000\000\000\000\000\000\000\000\000\nr\018\186\000\000\000\000\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\017\174\000\000\000\000\020R\018\198\001\150\017\178\tq\000\000\000\000\000\000\011\005\000\000\000\000\000\000\001\154\000\000\000\000\020r\000\000\018Z\tq\020v\020\194\000\000\017J\000\000\000\000\018\202\019\250\020\198\000\000\000\000\000\000\018\210\000\000\000\000\000\000\000\000\000\000\000\n\020\206\000\000\018\214\000\000\005\245\000\000\000\000\018\222\003r\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\000\000\001v\000\000\001~\017\014\001\134\002j\002r\002v\017\018\000\000\000\000\000\000\000\000\tq\017\022\000\000\000\000\000\000\000\000\000\000\000\000\017&\000\000\002~\000\000\000\000\000\000\002\230\000\000\018.\017.\000\000\0182\000\000\000\000\0186\017\006\000\000\000\000\000\000\002\134\017\n\018J\021*\000\000\011\001\031B\000\000\017\014\000\000\000\000\002\246\000\000\017\018\031F\000\000\000\000\000\000\000\000\000\000\025\174\018\142\000\000\000\000\000\000\020\018\tq\000\000\000\000\000\000\003\026\000\000\003\030\000\000\001\138\002\154\000\000\020\026\tq\000\000\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\021\154\000\000\018\174\018\178\017B\017F\018\182\020\"\000\000\000\000\000\000\000\000\020&\000\000\000\000\001\146\021\158\000\000\000\000\000\000\000\000\000\000\000\000\nr\018\186\000\000\000\000\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\017\174\014U\014U\020R\018\198\001\150\017\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\020r\000\000\000\000\000\000\020v\020\194\000\000\017J\000\000\000\000\018\202\000\000\020\198\000\000\000\000\000\000\018\210\000\000\000\000\000\000\000\000\000\000\000\n\020\206\000\000\018\214\000\000\005\245\000\000\000\000\018\222\003r\000R\000V\000f\000\194\000\000\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\000\000\001v\000\000\001~\017\014\001\134\002j\002r\002v\017\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014U\000\000\000\000\000\000\000\000\000\000\000\000\002~\000\000\t-\t-\002\230\000\000\018.\t-\000\000\0182\000\000\000\000\0186\014U\000\000\000\000\000\000\002\134\000\000\023v\000\000\000\000\011\001\000\000\014U\000\000\000\000\000\000\002\246\000\000\014U\014U\000\000\000\000\000\000\000\000\000\000\023\134\018\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\002\154\000\000\000\000\000\022\000\000\000\000\018\166\003&\000\000\000\000\014U\018\170\001\238\003.\000\000\014U\014U\018\174\018\178\017B\023\138\018\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\000\000\000\000\000\000\000\nr\018\186\0079\000\000\000\000\000\000\018\190\0079\000\000\000\n\000\000\000n\0079\000\000\0079\000\000\0079\000\000\018\198\0079\0079\0079\000\000\014&\0079\0146\0079\000\000\0079\000\000\014>\0079\rJ\0079\0079\0079\0079\0079\000\000\017J\0079\0079\018\202\0079\023\142\000\000\000\000\0079\018\210\0079\000\000\000\000\0079\0079\0079\023\150\0079\018\214\000\000\0079\0079\0079\018\222\003r\000\000\0079\0079\000\000\0079\000\000\0079\0079\0079\000\000\000\000\0079\002V\000\000\0079\0079\000\000\000Z\0079\000Z\0079\0079\0079\000\000\000\000\0079\014r\000\000\000\000\0079\0079\000Z\0079\014\222\0079\0079\0079\0079\000Z\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\0079\0079\000\000\000\000\0079\000\000\000\000\000\000\000\000\000\000\0079\0079\000\000\0079\0079\000\000\0079\0079\000\000\000\000\0079\0079\0079\0079\0079\0079\0079\0079\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\0079\000\000\0079\0079\0079\0079\0079\0079\000\000\0079\0079\000\000\0079\000\000\000\000\0079\000\000\000\000\0079\0079\000\000\000\000\0079\0079\0079\000\000\0079\0079\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\0079\000\000\000\000\0079\0079\0079\0079\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\0079\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\002\230\000\000\001\138\000\000\021\154\002\254\000\000\000\000\003\002\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\000\000\001\146\021\158\000\000\000\000\000\000\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\005B\003\150\b\006\000\000\003\018\000\000\000\000\b\158\000\000\017\174\000\000\003\026\000\000\003\030\001\150\017\178\002\154\001\225\000\000\000\000\001\225\000\000\bB\003&\001\154\000\000\000\000\bF\001\238\003.\000\000\000\000\b\162\bJ\bN\000\000\001\138\bR\003>\000\000\000\000\000\000\000\000\001\225\001\225\000\000\000\000\000\000\000\000\000\n\000\000\000\000\024v\000\000\000\000\bV\000\000\000\000\001\225\000\000\bZ\000\000\001\225\000\n\001\225\001\225\000\000\001\146\024z\000\000\000\000\000\000\bb\000\000\001\225\000\000\000\000\001\225\000\000\001\225\005B\000\000\000\000\b\166\000\000\000\000\000\000\000\000\000\000\017\174\007\145\000\000\000\000\000\000\001\150\017\178\bf\000\000\000\000\000\000\000\000\000\000\bn\000\000\001\154\005Y\001\225\000\000\000\000\005Q\000\000\br\000\000\005Q\000\000\000\000\bz\003r\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\n\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\005Q\000\000\000\000\000\000\000\000\001\225\b\182\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\002~\000\000\000\000\000\000\002\230\000\000\001\138\000\000\000\000\002\254\000\000\001\225\003\002\005Q\007\145\001\225\001\225\002\134\000\000\000\000\000\000\000\000\b\190\000\000\005Q\000\000\001\225\001\225\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\003\150\b\006\000\000\003\018\000\000\000\000\b\158\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\002\154\000\000\005Q\005Q\000\000\000\000\bB\003&\000\000\000\000\000\000\bF\001\238\003.\000\000\000\000\b\162\bJ\bN\000\000\004>\bR\003>\005Q\005Q\000\000\005Q\000\000\000\000\000\000\000\000\000\000\005Q\005Q\000\000\000\000\017Y\005Q\000\000\bV\000\000\000\000\000\000\000\000\bZ\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bb\000\000\000\000\000\000\000\000\000\000\017Y\017Y\000\000\000\000\000\000\b\166\000\000\000\000\n\206\000\000\000\000\000\000\000\000\000\000\000\000\017Y\000\000\000\000\bf\000\000\000\000\017Y\017Y\000\000\bn\n\214\000\000\t\185\n\226\000\000\000\000\017Y\000\000\br\017Y\000\000\017Y\000\000\bz\003r\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\017Y\000\000\000\000\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\002\230\n\238\001\138\000\000\000\000\002\254\000\000\000\000\003\002\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017Y\000\000\000\000\002\246\000\000\n\242\002\250\017Y\000\000\000\000\000\000\000\000\003\150\b\006\000\000\003\018\n\250\000\000\b\158\000\000\000\000\017Y\003\026\000\000\003\030\000\000\000\000\002\154\017Y\000\000\000\000\000\000\000\000\bB\003&\000\000\017Y\017Y\bF\001\238\003.\000\000\000\000\b\162\bJ\bN\000\000\000\000\bR\003>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\238\000\000\000\000\b\246\000\000\000\000\000\000\000\000\bV\000\000\000\000\000\000\000\000\bZ\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bb\t\006\t\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\166\000\000\000\000\000\000\000\000\t\022\000\000\000\000\000\000\0025\000\000\t\030\t&\bf\000\000\000\000\000\000\000\000\000\000\bn\000\000\t.\002Q\000\000\t6\000\000\t>\000\000\br\000\000\000\000\000\000\000\000\bz\003r\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\tF\001\134\002j\002r\002v\000\000\000\000\000\000\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\002\230\000\000\001\138\000\000\000\000\002\254\000\000\000\000\003\002\000\000\000\000\000\000\000\000\002\134\000\000\000\000\tN\000\000\000\000\0025\000\000\000\000\000\000\tV\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\003\150\b\006\000\000\003\018\0025\000\000\b\174\000\000\0025\0025\003\026\000\000\003\030\000\000\000\000\002\154\000\000\000\000\000\000\t^\tf\bB\003&\000\000\000\000\000\000\bF\001\238\003.\000\000\000\000\b\162\bJ\bN\000\000\000\000\bR\003>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bV\000\000\000\000\000\000\000\000\bZ\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000R\000V\000f\000\194\bb\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\000\000\000\000\bf\000\000\000\000\000\000\000\000\000\000\bn\000\000\000\000\t\201\002~\000\000\000\000\000\000\002\230\br\001\138\000\000\000\000\002\234\bz\003r\002\238\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\003\014\003\n\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\002\154\000\000\000\000\000\000\000\000\000\000\003\"\003&\000\000\000\000\000\000\003*\001\238\003.\000\000\000\000\000\000\0032\0036\000\000\000\000\003:\003>\000\000\005N\005V\000\194\000\000\000\198\000\000\005\178\005\186\005\194\006\030\000\000\006.\0066\000\000\006^\003B\006f\000\000\006n\006\154\003F\006\162\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003N\000\000\000\000\000\000\000\000\006\170\000\000\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\178\000\000\003V\000\000\000\000\000\000\000\000\000\000\003b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\000\000\000\000\000\000\000\000\003j\003r\001\133\001\133\001\133\001\133\000\000\001\133\0079\001\133\001\133\001\133\001\133\006\194\001\133\001\133\000\000\001\133\000\000\001\133\0079\001\133\001\133\001\133\001\133\000\000\000\000\000\000\000\000\026.\000\000\0079\000\000\0079\000\000\000\000\000\000\0079\0079\001\133\001\133\001\133\000\000\0079\000\000\0262\000\000\000\000\000\000\0079\000\000\001\133\0079\000\000\000\000\000\000\0079\001\133\000\000\000\000\001\133\000\000\0079\000\000\001\133\000\000\000\000\026>\000\000\000\000\001\133\000\000\000\000\0079\0156\000\000\000\000\001\133\0079\000Z\000\000\000\000\001\133\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\001\133\001\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\0079\000\000\000\000\0079\000\000\000\000\0079\000\000\001\133\000\000\000\000\001\133\000\000\000\000\001\133\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\0079\001\133\0079\0079\000\000\0079\001\133\000\000\001\133\000\000\000\000\001\133\0079\026B\000\000\0079\000\000\000\000\001\133\000\000\001\133\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\001\133\001\133\000\000\000\000\000\000\001\133\001\133\000\000\000\000\000\000\000R\r:\rB\000\194\000\000\000\198\027\022\r\158\r\166\r\174\014\n\000\000\014\026\014\"\026J\014J\000\000\014R\000\000\014Z\014\134\002r\014\142\000\000\000\000\000\000\026N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026R\014\150\026V\000\000\000\000\000\000\026Z\000\000\000\000\000\000\000\000\000\000\026^\000\000\000\000\000\000\000\000\000\000\030f\000\000\000\000\026j\000\000\000\000\000\000\026n\000\000\000\000\000\000\000\000\000\000\026r\000\000\000\000\000\000\000\000\000\000\000\000\014\174\000\000\000\000\000\000\000\000\028\002\000\000\000\000\000\000\026v\029n\000\000\000\000\017\022\000\000\014\218\000\000\000\000\000\000\000\000\017&\000\000\000\000\000\000\000\000\000\000\002\230\000\000\001\138\017.\000\000\0182\000\000\000\000\0186\000\000\000\000\014\242\000\000\000\000\026z\018J\000\000\026~\011\001\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\026\130\000\000\000\000\020B\018\142\026\134\000\n\026\138\020\018\026\142\026\146\000\000\026\150\003\026\000\000\003\030\000\000\000\000\000\000\026\154\020\026\000\000\026\158\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\000\000\000\000\018\174\018\178\026\162\000\000\018\182\020\"\000\000\026\166\026\170\000\000\020&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nr\018\186\000\000\000\000\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\000\000\000\000\000\000\020R\018\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020r\000\000\000\000\000\000\020v\020\194\017\022\000\000\000\000\000\000\018\202\000\000\020\198\017&\000\000\000\000\018\210\000\000\000\000\002\230\000\000\001\138\017.\020\206\0182\018\214\000\000\0186\017\006\000\000\018\222\003r\000\000\017\n\018J\000\000\000\000\011\001\031B\000\000\017\014\000\000\000\000\002\246\000\000\017\018\031F\000\000\000\000\000\000\000\000\000\000\018\162\018\142\000\000\000\000\000\000\020\018\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\001\138\000\000\000\000\020\026\000\000\000\000\000\000\018\166\003&\020\030\000\000\000\000\018\170\nb\003.\000\000\021\154\000\000\018\174\018\178\000\000\000\000\018\182\020\"\000\000\000\000\000\000\000\000\020&\000\000\000\000\001\146\021\158\000\000\000\000\000\000\000\000\000\000\000\000\nr\018\186\000\000\000\000\020*\020.\018\190\0202\000\000\000\n\000\000\020F\000\000\000\000\017\174\000\000\000\000\020R\018\198\001\150\017\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\020r\000\000\000\000\000\000\020v\020\194\000\000\000\000\000\000\000\000\018\202\000\000\020\198\000\000\000\000\000\000\018\210\000\000\000\000\000\000\000\000\000\000\000\n\020\206\000\000\018\214\000\000\005\245\000\000\000\000\018\222\003r\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\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\011m\011m\002\230\000\000\001\138\011m\000\000\0182\000\000\000\000\0186\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\174\018\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\002\154\017\253\000\000\000\000\017\253\000\000\018\166\003&\000\000\000\000\000\000\018\170\001\238\003.\000\000\000\000\000\000\018\174\018\178\000\000\r\153\018\182\000\000\000\000\000\000\000\000\000\000\017\253\017\253\000\000\000\000\000\000\017\253\000\000\000\000\017\253\017\253\000\000\nr\018\186\000\000\000\000\017\253\000\000\018\190\017\253\017\253\000\n\017\253\017\253\000\000\r\153\017\253\000\000\017\253\017\253\018\198\000\000\017\253\000\000\000\000\017\253\000\000\017\253\017\253\000\000\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\153\000\000\018\202\000\000\000\000\000\000\000\000\000\000\018\210\000\000\r\153\000\000\017\253\000\000\017\253\000\000\000\000\018\214\000\000\000\000\000\000\000\000\018\222\003r\000\000\017\253\000\000\000\000\000\000\000\000\000\000\000\000\017\253\000\000\000\000\r\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006Y\000\000\000\000\006Y\000\000\000\000\017\253\017\253\000\000\017\253\017\253\017\253\000\000\017\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\253\000\000\000\000\000\000\006Y\006Y\000\000\006Y\017\253\000\000\017\253\000\000\006Y\006Y\000\000\000\000\017\253\017\253\017\253\006Y\017\253\017\253\017\253\r\149\000\000\006Y\006Y\000\000\000\000\006Y\006Y\006Y\006Y\000\000\000\000\006Y\000\000\000\000\006Y\006Y\006Y\006Y\000\000\000\000\000\000\006Y\000\000\000\000\006Y\006Y\000\000\006Y\006Y\000\000\r\149\006Y\000\000\006Y\006Y\000\000\000\000\006Y\000\000\000\000\006Y\000\000\006Y\006Y\000\000\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\149\000\000\000\000\000\000\000\000\000\000\006Y\000\000\000\000\000\000\r\149\000\000\006Y\000\000\006Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006Y\006Y\006Y\000\000\000\000\b\209\006Y\006Y\006Y\000\000\r\149\000\000\000\000\000\000\000\000\000\000\000\000\006Y\000\000\000\000\000\000\000\000\006Y\000\000\000\000\006Y\000\000\006Y\006Y\006Y\006Y\b\209\006Y\006Y\006Y\000\000\000\000\006Y\006Y\000\000\000\000\000\000\000\000\006Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006Y\000\000\006Y\000\000\000\000\000\000\000\000\000\000\006Y\006Y\006Y\000\000\006Y\006Y\006Y\r\005\r\005\r\005\r\005\000\000\r\005\000\000\r\005\r\005\r\005\r\005\000\000\r\005\r\005\000\000\r\005\000\000\r\005\000\000\r\005\r\005\r\005\r\005\000\000\000\000\017\173\000\000\000\000\017\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\005\r\005\r\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\005\000\000\017\173\017\173\000\000\000\000\r\005\017\173\000\000\027&\003\138\017\173\000\000\027.\000\000\000\000\000\000\017\173\000\000\r\005\017\173\017\173\000\000\017\173\017\173\000\000\r\005\003\146\000\000\017\173\003\166\r\005\000\000\017\173\000\000\000\000\017\173\000\000\017\173\017\173\r\005\r\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\000\000\000\000\000\000\r\005\000\000\017\173\r\005\017\173\000\000\r\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\173\000\000\000\000\000\000\r\005\000\000\000\000\005\002\000\000\r\005\000\000\r\005\000\000\000\000\r\005\000\000\000\000\000\000\000\000\000\000\000\000\r\005\000\000\r\005\000\000\000\000\r\005\017\173\017\173\000\000\017\173\017\173\005\006\000\000\017\173\000\000\000\000\000\000\000\000\000\000\000\000\r\005\r\005\005\014\000\000\000\000\027\130\r\005\017\173\000\000\000\000\017\173\017\173\017\173\017\173\017\173\000\000\000\000\000\000\017\173\017\173\017\173\000\000\017\173\017\173\017\173\017=\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\017=\017=\000\000\000\000\000\000\017=\000\000\000\000\003\138\017=\000\000\000\000\000\000\000\000\000\000\017=\000\000\000\000\017=\017=\000\000\017=\017=\000\000\000\000\003\146\000\000\017=\003\166\000\000\000\000\017=\000\000\000\000\017=\000\000\017=\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\017=\000\000\017=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017=\012\245\012\245\012\245\012\245\000\000\012\245\005\002\012\245\012\245\012\245\012\245\000\000\012\245\012\245\000\000\012\245\000\000\012\245\000\000\012\245\012\245\012\245\012\245\000\000\000\000\000\000\017=\017=\000\000\017=\017=\005\006\000\000\017=\000\000\000\000\000\000\012\245\012\245\012\245\000\000\000\000\005\014\000\000\000\000\000\000\000\000\017=\000\000\012\245\017=\017=\017=\017=\017=\012\245\000\000\000\000\017=\017=\017=\000\000\017=\017=\017=\005N\005V\000\194\012\245\000\198\000\000\005\178\005\186\005\194\006\030\012\245\006.\0066\000\000\006^\012\245\006f\000\000\006n\006\154\000\000\006\162\000\000\000\000\012\245\012\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\170\000\000\000\000\000\000\000\000\000\000\002\162\000\000\000\000\000\000\012\245\000\000\000\000\012\245\000\000\000\000\012\245\006\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\245\000\000\000\000\000\000\000\000\012\245\000\000\012\245\000\000\000\000\012\245\000\000\000\000\000\000\000\000\000\000\000\000\012\245\000\000\012\245\000\000\000\000\012\245\006\194\000\000\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\245\012\245\000\000\000\000\000\000\027*\012\245\012\249\012\249\012\249\012\249\000\000\012\249\000\000\012\249\012\249\012\249\012\249\000\000\012\249\012\249\000\000\012\249\000\000\012\249\000\000\012\249\012\249\012\249\012\249\000\000\000\000\006a\000\n\000\000\006a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\249\012\249\012\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\249\000\000\006a\006a\000\000\000\000\012\249\006a\000\000\027\134\006a\006a\000\000\000\000\000\000\000\000\000\000\006a\000\000\012\249\006a\006a\000\000\006a\006a\000\000\012\249\006a\000\000\006a\006a\012\249\000\000\006a\000\000\000\000\006a\000\000\006a\006a\012\249\012\249\000\000\015N\015V\000\194\000\000\000\198\000\000\015\178\015\186\015\194\016\030\000\000\016.\0166\000\000\016^\000\000\016f\000\000\016n\016\154\012\249\016\162\006a\012\249\006a\000\000\012\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006a\000\000\016\170\000\000\012\249\000\000\000\000\006a\000\000\012\249\000\000\012\249\000\000\000\000\012\249\000\000\000\000\000\000\000\000\016\178\000\000\012\249\000\000\012\249\000\000\000\000\012\249\006a\006a\000\000\006a\b\221\006a\000\000\006a\000\000\000\000\000\000\000\000\000\000\000\000\012\249\012\249\006a\000\000\000\000\006]\012\249\006a\006]\000\000\006a\000\000\006a\016\194\006a\000\000\000\000\000\000\006a\006a\006a\000\000\006a\006a\006a\000\000\000\000\000\000\000\000\000\000\000\000\006]\006]\000\000\000\000\000\000\006]\000\000\000\000\006]\006]\000\000\000\000\000\000\017q\000\000\006]\000\000\000\000\006]\006]\000\000\006]\006]\000\000\000\000\006]\000\000\006]\006]\000\000\000\000\006]\000\000\000\000\006]\000\000\006]\006]\000\000\017q\017q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017q\000\000\000\000\000\000\000\000\000\000\017q\017q\000\000\006]\000\000\006]\000\000\000\000\b:\000\000\017q\000\000\000\000\017q\000\000\017q\006]\000R\r:\rB\000\194\000\000\000\198\006]\r\158\r\166\r\174\014\n\000\000\014\026\014\"\000\000\014J\000\000\014R\000\000\014Z\014\134\002r\014\142\000\000\000\000\017q\006]\006]\000\000\006]\b\213\006]\000\000\006]\000\000\000\000\000\000\027\142\014\150\027\170\000\000\000\000\006]\000\000\000\000\000\000\000\000\006]\000\000\027\182\006]\000\000\006]\000\000\006]\014\158\000\000\000\000\006]\006]\006]\000\000\006]\006]\006]\017q\000\000\000\000\027\206\000\000\000\000\000\000\017q\000\000\000\000\014\174\000\000\000\000\000\000\000\000\028\002\000\000\000\000\000\000\000\000\000\000\017q\000\000\000\000\028\"\014\218\000\000\000\000\017q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017q\017q\000\000\000\000\000\000\002\230\000\000\001\138\000\000\000\000\b\030\014\242\000\000\b\"\028.\000\000\000\000\028\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\246\028\158\000\000\b>\000\000\000\000\028\202\000\000\n\233\n\002\n\014\028\250\n&\n2\nJ\nN\000\000\000\000\029\006\003\026\0292\003\030\000\000\0302\000\000\000\000\000\000\000\000\000\000\000\000\nR\003&\000\000\nV\nZ\n^\nb\003.\030>\030V\000\000\nf\nj\000\000\030b\nn\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nr\nv\000\000\017\006\000\000\000\000\nz\000\000\017\n\000\n\000\000\000\000\000\000\031B\000\000\017\014\000\000\000\000\n\130\000\000\017\018\031F\000\000\000\000\000\000\000\000\000\000\007Y\000\000\n\134\000\000\n\150\002\230\000\000\001\138\000\000\000\000\b\030\000\000\000\000\b\"\001\138\n\158\000\000\000\000\000\000\000\000\000\000\n\166\000\000\000\000\000\000\000\000\000\000\005i\000\000\002\246\n\170\000\000\b>\000\000\000\000\n\178\003r\000\000\n\002\n\014\000\000\n&\n2\nJ\nN\001\146\017\130\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nR\003&\000\000\nV\nZ\n^\nb\003.\017\174\000\000\000\000\nf\nj\001\150\017\178\nn\001\154\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\nr\nv\000\000\000\000\000\000\000\000\nz\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\n\130\000\000\000\000\005\245\000\000\000\000\000\000\000\000\000\000\007Y\000\000\n\134\000\000\n\150\002\230\000\000\001\138\000\000\000\000\b\030\000\000\000\000\b\"\000\000\n\158\000\000\000\000\000\000\000\000\000\000\n\166\000\000\000\000\000\000\000\000\000\000\n\r\000\000\002\246\n\170\000\000\b>\000\000\000\000\n\178\003r\000\000\n\002\n\014\000\000\n&\n2\nJ\nN\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nR\003&\000\000\nV\nZ\n^\nb\003.\000\000\000\000\000\000\nf\nj\000\000\000\000\nn\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nr\nv\000\000\000\000\000\000\000\000\nz\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Y\000\000\n\134\000\000\n\150\002\230\000\000\001\138\000\000\000\000\b\030\000\000\000\000\b\"\000\000\n\158\000\000\000\000\000\000\000\000\000\000\n\166\000\000\000\000\000\000\000\000\000\000\002\129\000\000\002\246\n\170\000\000\b>\000\000\000\000\n\178\003r\000\000\n\002\n\014\000\000\n&\n2\nJ\011\202\000\000\011:\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nR\003&\000\000\nV\nZ\n^\nb\003.\000\000\000\000\000\000\nf\nj\011B\011J\nn\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011R\000\000\000\000\000\000\nr\nv\011Z\011b\000\000\000\000\nz\000\000\000\000\000\n\000\000\000\000\011j\000\000\000\000\011r\000\000\011z\n\130\000\000\017\197\000\000\000\000\017\197\000\000\000\000\000\000\007Y\000\000\000\000\000\000\n\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\158\000\000\011\130\000\000\017\197\017\197\n\166\000\000\000\000\017\197\000\000\000\000\n\029\017\197\000\000\n\170\000\000\000\000\000\000\017\197\n\178\003r\017\197\017\197\000\000\017\197\017\197\000\000\000\000\000\000\000\000\017\197\000\000\b:\000\000\017\197\000\000\000\000\017\197\000\000\017\197\017\197\011\138\000\000\000\000\000\000\000\000\000\000\000\000\011\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\173\000\000\000\000\000\000\017\197\000\000\017\197\006\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\154\011\162\017\197\000R\000V\000f\000\194\r6\000\198\017\006\000\202\000\210\000\218\0016\017\n\001F\001N\000\000\001v\031.\001~\017\014\001\134\002j\002r\002v\017\018\0312\000\000\017\197\017\197\000\000\017\197\017\197\000\000\000\000\017\197\000\000\000\000\000\000\000\000\002~\017U\000\000\000\000\017U\000\000\002\162\000\000\000\000\017\197\000\000\000\000\017\197\017\197\017\197\017\197\017\197\002\134\000\000\000\000\017\197\017\197\017\197\000\000\017\197\017\197\017\197\017U\017U\000\000\000\000\000\000\017U\000\000\000\000\000\000\017U\002\150\000\000\000\000\000\000\000\000\017U\000\000\000\000\017U\017U\000\000\017U\017U\000\000\000\000\002\154\000\000\017U\000\000\b:\000\000\017U\000\000\000\000\017U\000\000\017U\017U\000\000\000\000\000\000\000\000\000\000\000\000\017B\017F\000\000\014\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017U\000\000\017U\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\017U\005\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Q\017J\017U\017U\000\000\017U\017U\000\000\000\000\017U\000\000\007Q\000\000\000\000\000\000\017\145\007Q\000\000\017\145\000\000\000\000\000\000\000\000\017U\000\000\000\000\017U\017U\017U\017U\017U\000\000\000\000\000\000\017U\017U\017U\000\000\017U\017U\017U\017\145\017\145\000\000\000\000\000\000\017\145\000\000\000\000\018\246\017\145\000\000\000\000\000\000\000\000\000\000\017\145\000\000\000\000\017\145\017\145\000\000\017\145\017\145\000\000\000\000\018\254\000\000\017\145\019\n\000\000\000\000\017\145\000\000\000\000\017\145\000\000\017\145\017\145\000\000\000\000\000\000\000\000\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\209\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\017\145\000\000\017\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\145\000\000\000\000\000\000\001\209\001\209\000\000\019\022\000\000\001\209\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\001\209\001\209\000\000\001\209\001\209\017\145\017\145\000\000\017\145\001\209\019\026\000\000\017\145\001\209\000\000\000\000\001\209\000\000\001\209\001\209\000\000\019\"\001\209\000\000\000\000\000\000\000\000\000\000\000\000\017\145\000\000\017\145\000\000\000\000\000\000\000\000\000\000\017\145\017\145\017\145\000\000\017\145\017\145\017\145\000\000\001\209\001\209\001\209\000\000\000\000\001\209\000\000\000\000\000\000\001\209\000\000\000\000\000\000\001\209\000\000\001\209\000\000\000\000\001\209\001\209\000\000\001\209\001\209\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\001\209\000\000\000\000\001\209\000\000\001\209\001\209\000\000\000\000\001\209\003\174\000\000\001\209\001\209\000\000\000\000\001\209\000\000\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\209\000\000\001\209\001\209\001\209\001\209\001\209\000\000\000\000\000\000\000\000\004\242\001\209\001\209\000\000\001\209\001\209\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\209\003\182\000\000\001\209\001\209\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\001Y\000\000\000\000\001Y\000\000\000\000\000\000\000\000\001\209\000\000\000\000\001\209\001\209\001\209\001\209\000\000\000\000\000\000\000\000\004\230\001\209\001\209\000\000\001\209\001\209\001\209\001Y\001Y\000\000\000\000\000\000\001Y\000\000\000\000\000\000\001Y\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\001Y\001Y\000\000\001Y\001Y\000\000\000\000\000\000\000\000\001Y\000\000\000\000\000\000\001Y\000\000\000\000\003\246\000\000\004\006\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Y\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Y\005I\005I\005I\005I\000\000\005I\000\000\005I\005I\005I\005I\000\000\005I\005I\000\000\005I\000\000\005I\000\000\005I\005I\005I\005I\000\000\000\000\000\000\001Y\000\000\000\000\001Y\001Y\000\000\002\202\003\254\000\000\000\000\000\000\000\000\005I\001M\000\000\000\000\001M\000\000\005I\000\000\000\000\001Y\000\000\000\000\001Y\001Y\001Y\001Y\001Y\005I\000\000\000\000\000\000\001Y\001Y\000\000\001Y\001Y\001Y\001M\001M\000\000\000\000\000\000\001M\000\000\000\000\000\000\001M\005I\000\000\000\000\000\000\000\000\001M\005I\000\000\001M\001M\000\000\001M\001M\000\000\000\000\005I\000\000\001M\000\000\000\000\000\000\001M\000\000\000\000\003\246\000\000\001M\001M\000\000\005I\005I\000\000\000\000\000\000\000\000\000\000\000\000\005I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001M\000\000\001M\000\000\000\000\000\000\000\000\000\000\000\000\005I\000\000\000\000\000\000\001M\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\001M\000\000\000\000\001M\001M\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\001Q\005I\000\000\001Q\000\000\002\162\000\000\000\000\001M\000\000\000\000\001M\001M\001M\001M\001M\002\134\000\000\000\000\000\000\001M\001M\000\000\001M\001M\001M\001Q\001Q\000\000\000\000\000\000\001Q\000\000\000\000\000\000\001Q\002\166\000\000\000\000\000\000\000\000\001Q\002\194\000\000\001Q\001Q\000\000\001Q\001Q\000\000\000\000\002\154\000\000\001Q\000\000\000\000\000\000\001Q\000\000\000\000\003\246\000\000\001Q\001Q\000\000\002\170\002\174\000\000\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Q\000\000\001Q\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001Q\000\000\000\000\000\000\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\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Q\000\000\000\000\001Q\001Q\000\000\000\000\003\254\000\000\000\000\000\000\000\000\000\000\001U\015\029\000\000\001U\000\000\000\000\000\000\000\000\001Q\000\000\000\000\001Q\001Q\001Q\001Q\001Q\000\000\000\000\000\000\000\000\001Q\001Q\000\000\001Q\001Q\001Q\001U\001U\000\000\000\000\000\000\001U\000\000\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\001U\001U\000\000\001U\001U\000\000\000\000\000\000\000\000\001U\000\000\000\000\000\000\001U\000\000\000\000\003\246\000\000\004\006\001U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001U\000\000\001U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001U\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\001U\000\000\000\000\001U\001U\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\001e\000\000\000\000\001e\000\000\002\162\000\000\000\000\001U\000\000\000\000\001U\001U\001U\001U\001U\002\134\000\000\000\000\000\000\001U\001U\000\000\001U\001U\001U\003\230\004\014\000\000\000\000\000\000\001e\000\000\000\000\000\000\001e\002\166\000\000\000\000\000\000\000\000\003\238\002\194\000\000\001e\001e\000\000\001e\001e\000\000\000\000\002\154\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\003\246\000\000\004\006\001e\000\000\002\170\002\174\000\000\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\000\000\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\030\000\000\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001e\000\000\000\000\000\000\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\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000\000\000\000\001e\001e\000\000\000\000\003\254\000\000\000\000\000\000\000\000\000\000\001]\002\181\000\000\001]\000\000\000\000\000\000\000\000\001e\000\000\000\000\001e\001e\001e\001e\001e\000\000\000\000\000\000\000\000\001e\001e\000\000\001e\001e\001e\003\230\004\014\000\000\000\000\000\000\001]\000\000\000\000\000\000\001]\000\000\000\000\000\000\000\000\000\000\003\238\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\001]\000\000\000\000\003\246\000\000\004\006\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\001]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001]\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\001]\000\000\000\000\001]\001]\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\001a\000\000\000\000\001a\000\000\002\162\000\000\000\000\001]\000\000\000\000\001]\001]\001]\001]\001]\002\134\000\000\000\000\000\000\001]\001]\000\000\001]\001]\001]\003\230\004\014\000\000\000\000\000\000\001a\000\000\000\000\000\000\001a\002\166\000\000\000\000\000\000\000\000\003\238\002\194\000\000\001a\001a\000\000\001a\001a\000\000\000\000\002\154\000\000\001a\000\000\000\000\000\000\001a\000\000\000\000\003\246\000\000\004\006\001a\000\000\002\170\002\174\000\000\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\000\000\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\030\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001a\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\001i\002\173\000\000\001i\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\001a\001a\001a\002\134\000\000\000\000\000\000\001a\001a\000\000\001a\001a\001a\003\230\004\014\000\000\000\000\000\000\001i\000\000\000\000\000\000\001i\002\150\000\000\000\000\000\000\000\000\003\238\007\014\000\000\001i\001i\000\000\001i\001i\000\000\000\000\002\154\000\000\001i\000\000\007\018\007\022\004\022\000\000\000\000\003\246\000\000\004\006\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\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\000\000\004\030\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\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\030\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\001i\001i\000\000\000\000\003\254\000\000\000\000\000\000\005y\000\000\001q\000\000\000\000\001q\000\000\000\000\000\000\000\000\001i\000\000\000\000\001i\001i\001i\001i\001i\000\000\000\000\000\000\000\000\001i\001i\000\000\001i\001i\001i\003\230\004\014\000\000\000\000\000\000\001q\000\000\000\000\000\000\001q\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\001q\001q\000\000\001q\001q\000\000\000\000\000\000\000\000\001q\000\000\000\000\000\000\004\022\000\000\000\000\003\246\000\000\004\006\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\030\000\000\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001q\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\004&\000\000\000\000\001q\001q\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\004\134\000\000\000\000\001m\000\000\000\000\000\000\000\000\001q\000\000\000\000\001q\001q\001q\001q\001q\002\134\000\000\000\000\000\000\001q\001q\000\000\001q\004.\001q\003\230\004\014\000\000\000\000\000\000\001m\000\000\000\000\000\000\001m\002\150\000\000\000\000\000\000\000\000\003\238\007\014\000\000\001m\001m\000\000\001m\001m\000\000\000\000\002\154\000\000\001m\000\000\007\018\007\022\004\022\000\000\000\000\003\246\000\000\004\006\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\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\000\000\004\030\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\007\030\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\001m\001m\000\000\000\000\003\254\000\000\000\000\000\000\nE\000\000\004\134\000\000\000\000\001u\000\000\000\000\000\000\000\000\001m\000\000\000\000\001m\001m\001m\001m\001m\000\000\000\000\000\000\000\000\001m\001m\000\000\001m\004.\001m\003\230\004\014\000\000\000\000\000\000\001u\000\000\000\000\000\000\001u\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\001u\001u\000\000\001u\004\142\000\249\000\000\000\000\000\249\001u\000\000\000\000\000\000\004\022\000\000\000\000\003\246\000\000\004\006\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\230\004\014\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\030\003\238\001u\000\000\000\000\000\249\000\000\000\249\000\249\000\000\000\000\000\000\000\000\001u\000\000\000\000\000\000\004\022\000\000\000\000\003\246\004%\004\006\000\000\000\000\000j\004%\000\000\000z\000\000\000\154\004%\000\000\004%\000\000\000\000\000\000\000\162\004%\004%\004&\000\000\000\000\001u\001u\000\000\000\000\003\254\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\001u\000\000\000\000\001u\001u\001u\001u\001u\000\000\000\170\004%\000\000\001u\001u\004%\001u\004.\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004&\004%\004%\000\249\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\186\000\000\000\000\000\000\000\000\000\249\000\000\004%\000\000\000\249\000\249\000\000\004%\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\249\004.\004%\000\000\004!\000\000\004%\000\000\000\222\004!\000\000\000\238\000\000\001\014\004!\000\000\004!\004%\000\000\000\000\001\022\004!\004!\000\000\000\000\000\000\000\000\004%\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\000\000\001\030\004!\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\004%\004%\000\000\000\000\004%\004!\004!\000\000\003\218\004%\004%\0046\000\000\000\000\004%\000\000\000\000\000\000\004!\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\004!\004!\004f\004n\000\189\000\000\000\000\002-\000\000\000\000\004!\002-\000\000\000\000\004!\000\000\000\000\004v\000\000\000\000\002-\002-\000\165\004~\004\158\004!\000\000\000\000\000\000\002-\003\230\004\014\000\000\004\166\000\000\004!\004\174\000\000\004\182\002-\004!\000\000\000\000\000\000\000\000\003\238\000\000\000\000\000\165\000\165\000\000\000\189\000\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\022\000\000\003\238\003\246\004\190\004\006\002-\000\000\000\165\000\165\000\000\000\000\004!\000\000\000\000\004!\004!\002-\000\165\004!\000\000\003\246\000\000\004\006\004!\004!\000\000\000\000\000\000\004!\000\000\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\198\000\000\000\000\002-\002-\000\000\000\165\004\206\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\000\000\000\000\000\000\000\002-\000\000\000\000\002-\002-\002-\002-\004&\000\000\000\000\000\000\000\000\002-\002-\003\254\004\214\004\222\002-\003\230\004\014\000\000\000\000\000\000\000\129\000\000\000\165\000\000\000\129\000\189\000\000\000\000\000\000\003\254\003\238\000\000\000\189\000\129\000\129\000\000\000\129\000\129\000\000\000\000\000\189\004.\000\129\000\165\000\000\000\000\004\022\000\000\000\000\003\246\000\165\004\006\000\129\000\000\000\000\000\000\000\000\000i\000\165\000\165\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\004\030\000\000\000\129\000\000\000\000\000i\000i\000\000\000\000\000\000\000i\000\000\000\000\000\129\000i\000\000\000\000\000\000\000\000\000\000\003\238\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\003\246\004&\004\006\000i\000\129\000\129\000\000\000\000\003\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\000\000\129\000\000\000\000\000\129\000\129\000\129\000\129\000i\000\000\000i\000\000\000\000\000\129\000\129\000\000\000\129\004.\000\129\000\000\000\000\000i\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\000i\000\000\000\000\000i\000i\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\000e\000\000\000\000\000e\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000i\000i\000i\000\000\002\134\000\000\000\000\000\000\000i\000i\000\000\000i\000i\000i\000e\000e\000\000\000\000\000\000\000e\000\000\000\000\000\000\000e\002\150\000\000\000\000\000\000\000\000\003\238\007\014\000\000\000e\000e\000\000\000e\000e\000\000\000\000\002\154\000\000\000e\000\000\007\018\007\022\000e\000\000\000\000\003\246\000\000\004\006\000e\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000\000\007\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\000\000\000e\000\000\000e\000\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\007\030\000\000\000\000\000]\000\000\000\000\000\000\000]\000\000\000\000\003\246\000e\000]\000]\000e\000e\000\000\000\000\003\254\000\000\000\000\000\000\002\161\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\000e\000e\000\000\000e\000e\000e\000\000\000\000\000]\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\004\134\000\000\000\000\000\137\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000]\000]\000\000\002\134\000\000\000\000\000\000\000]\000]\000\000\000]\000]\000]\003\230\004\014\000\000\000\000\000\000\000\137\000\000\000\000\000\000\000\137\002\150\000\000\000\000\000\000\000\000\003\238\031\234\000\000\000\137\000\137\000\000\000\137\004\142\000\000\000\000\002\154\000\000\000\137\000\000\031\238\007\022\004\022\000\000\000\000\003\246\000\000\004\006\000\137\000\000\000\000\000\000\000\000\004\134\000\000\000\000\000}\000\000\007\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\000\000\004\030\000\000\000\137\000\000\000\000\003\230\004\014\000\000\000\000\000\000\000}\000\000\000\000\000\137\000}\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\000}\000}\000\000\000}\000}\000\000\031\242\000\000\000\000\000}\000\000\000\000\000\000\004\022\000\000\000\000\003\246\004&\004\006\000}\000\137\000\137\000\000\000\000\003\254\000\000\000\000\000\000\005q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\137\000\137\000\137\000\137\004\030\000\000\000}\000\000\000\000\000\137\000\137\000\000\004\150\004.\000\137\000\000\000\000\000}\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\004&\000\000\000\000\000}\000}\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\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\002\134\000\000\000\000\000\000\000}\000}\000\000\000}\004.\000}\003\230\004\014\000\000\000\000\000\000\000u\000\000\000\000\000\000\000u\002\150\000\000\000\000\000\000\000\000\003\238\031\234\000\000\000u\000u\000\000\000u\000u\000\000\000\000\002\154\000\000\000u\000\000\031\238\007\022\000u\000\000\000\000\003\246\000\000\004\006\000u\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000\000\007\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\000\000\004\030\000\000\000u\000\000\000\000\000a\000a\000\000\000\000\000\000\000a\000\000\000\000\000u\000a\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000a\000a\000\000\031\242\000\000\000\000\000a\000\000\000\000\000\000\000a\000\000\000\000\003\246\000u\000a\000a\000u\000u\000\000\000\000\003\254\000\000\000\000\000\000\n)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000u\000u\000u\000a\000\000\000a\000\000\000\000\000u\000u\000\000\000u\000u\000u\000\000\000\000\000a\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\000m\000\000\000\000\000m\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000a\000a\000\000\002\134\000\000\000\000\000\000\000a\000a\000\000\000a\000a\000a\003\230\004\014\000\000\000\000\000\000\000m\000\000\000\000\000\000\000m\002\150\000\000\000\000\000\000\000\000\003\238\031\234\000\000\000m\000m\000\000\000m\000m\000\000\000\000\002\154\000\000\000m\000\000\031\238\007\022\000m\000\000\000\000\003\246\000\000\004\006\000m\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000\000\007\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\000\000\000m\000\000\000m\000\000\000\000\003\230\004\014\000\000\000\000\000\000\000q\000\000\000\000\000m\000q\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\000q\000q\000\000\000q\000q\000\000\031\242\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\003\246\000m\004\006\000q\000m\000m\000\000\000\000\003\254\000\000\000\000\000\000\002\145\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\000m\000m\004\030\000\000\000q\000\000\000\000\000m\000m\000\000\000m\000m\000m\000\000\000\000\000q\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\000\000\001F\001N\000\000\001v\000\000\001~\000\000\001\134\002j\002r\002v\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002~\004\134\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000q\000q\000\000\002\134\000\000\000\000\000\000\000q\000q\000\000\000q\000q\000q\003\230\004\014\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\133\002\150\000\000\000\000\000\000\000\000\003\238\007&\000\000\000\133\000\133\000\000\000\133\004\142\000\000\000\000\002\154\000\000\000\133\000\000\007\018\007\022\004\022\000\000\000\000\003\246\000\000\004\006\000\133\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000\000\007\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\000\000\004\030\000\000\000\133\000\000\000\000\003\230\004\014\000\000\000\000\000\000\000y\000\000\000\000\000\133\000y\000\000\000\000\000\000\000\000\000\000\003\238\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\004\022\000\000\000\000\003\246\004&\004\006\000y\000\133\000\133\000\000\000\000\003\254\000\000\000\000\000\000\nU\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\133\000\133\000\133\000\133\004\030\000\000\000y\000\000\000\000\000\133\000\133\000\000\000\133\004.\000\133\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\016:\0079\016J\000\000\000\000\000\000\000\000\016R\000\000\000\000\000\000\000\000\000\000\0079\004&\000\000\000\000\000y\000y\000\000\000\000\003\254\000\000\000\000\0079\000\000\0079\r\t\r\t\000\000\0079\0079\000\000\r\t\000\000\000y\0079\000\000\000y\000y\000y\000y\0079\000\000\000\000\0079\000\000\000y\000y\0079\000y\000y\000y\000\000\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\016\134\000\000\r\t\000\000\0079\000Z\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\r\t\000\000\0079\000\000\000\000\0079\000\000\000\000\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\238\0079\000\000\000\000\000\000\000\000\0079\0079\0079\000\000\0079\0079\000\000\0079\000\000\000\000\002\246\000\000\000\000\002\250\0079\000\000\000\000\0079\000\000\003\006\003\n\000\000\003\018\000\000\n\146\000\000\000\000\000\000\000\000\003\026\000\000\003\030\0079\000\000\000\000\000\000\000\000\0079\0079\r\t\003\"\003&\000\000\000\000\011\230\003*\001\238\003.\000\000\000\000\000\000\0032\0036\000\000\000\000\003:\003>\000\000\000\000\000\000\000\000\rZ\0079\rj\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003B\0079\000\000\000\000\000\000\003F\000\000\000\000\000\n\r\198\0079\r\214\0079\000\000\0079\000\000\000\000\003N\0079\0079\000\000\000\000\0079\000\000\0079\0079\000\000\000\000\003R\n\249\0079\000\000\000~\0079\000\142\0079\000\000\0079\000\000\0079\0079\003V\0079\0079\000\000\0079\000\000\003b\000\000\000\000\n\249\0079\n\249\000\000\0079\016\198\003z\000\000\0079\0079\000Z\003j\003r\0079\0079\0079\015n\0079\015~\015\218\0079\015\234\000\000\000\000\000\000\0079\016\242\000\000\000\000\0079\0079\000Z\0079\000\000\000\130\0079\0079\0079\000\000\000\000\0079\000\000\0079\0079\0079\0079\0079\0079\000\000\0079\0079\000\000\0079\000\000\000Z\0079\0079\0079\0079\000\000\000\000\0079\0079\0079\0079\0079\0079\000\000\0079\000\000\000\000\0079\0079\000\000\0079\0079\000\000\0079\0079\0079\000\000\0079\0079\0079\0079\0079\0079\0079\000Z\0079\0079\000Z\000\000\0079\0079\0079\0079\000\000\0079\0079\000\000\000\000\000\000\000\000\000Z\000\000\0079\0079\000\000\000\000\000\000\0079\000\000\000\000\0079\0079\0079\000\000\0079\0079\0079\0079\0079\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\0079\0079\000\000\0079\000\000\0079\0079\0079\0079\0079\0079\000\000\0079\0079\0079\0079\000\000\0079\000\000\0079\000\000\017\169\0079\0079\017\169\0079\000\000\0079\000\000\000\000\0079\000\000\001R\000\000\001b\0079\000\000\0079\000\000\001j\0079\000\000\0079\0079\000\000\0079\0079\017\169\017\169\000\000\000\000\000\000\017\169\000\000\000\000\000\000\017\169\000\000\000\000\000\000\0079\000\000\017\169\0079\0079\017\169\017\169\0079\017\169\017\169\000\000\000\000\0079\0079\017\169\0079\b:\0079\017\169\0079\000\000\017\169\000\000\017\169\017\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\002\158\000\000\0079\r^\000\000\000Z\000\000\000\000\0079\000\000\000\000\017\169\000\000\017\169\0079\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\017\169\0079\0079\0079\000\000\000\000\000\000\0079\0079\006:\000\000\006J\0079\0079\0079\000\000\006R\000\000\000\000\0079\0079\000\000\0079\0079\000\000\000\000\0079\017\169\017\169\000\000\017\169\000\000\0079\0079\017\169\000\000\000\000\000\000\0079\000\000\0079\000\000\000\000\0079\000\000\0079\r\182\000\000\0079\000Z\000\000\017\169\0079\017\169\0079\000\000\0079\0079\000\000\017\169\017\169\017\169\000\000\017\169\017\169\017\169\000\000\000\000\0079\000\000\0079\0079\0079\000\000\0079\0079\0079\000\000\0079\0079\0079\000Z\0079\0079\0079\000\000\0079\000\000\0079\0079\000\000\000\000\000\000\0079\000\000\0079\000\000\000\000\0079\0079\0079\0079\0079\000\000\0079\0079\000\000\0079\0079\000\000\0079\000\000\0079\000\000\0079\0079\000Z\0079\000\000\000\000\000\000\0079\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\000\000\0079\000\000\000\000\0079\000\000\000\000\0079\000\000\000\000\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\238\0079\000\000\000\000\000\000\000\000\0079\0079\0079\000\000\0079\0079\000\000\0079\0079\000\000\002\246\0079\000\000\002\250\0079\000\000\0079\0079\000\000\003\006\003\n\0079\003\018\000\000\b:\000\000\000\000\000\000\000\000\003\026\000\000\003\030\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\003\"\003&\000\000\000\000\000\000\003*\001\238\003.\000\000\000\000\000\000\0032\0036\000\000\000\000\003:\003>\000\000\000\000\000\000\000\000\000\000\0079\r\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003B\0079\014\014\000\000\000\000\003F\000\000\000\000\000\n\0079\014*\000\000\0079\0079\0079\000\000\000\000\003N\0079\0079\000\000\0079\000\000\000\000\0079\000\000\0079\000\000\003R\000\000\0079\0079\0079\0079\0079\000\000\0079\0079\0079\0079\000\000\003V\0079\0079\0079\0079\000\000\003b\000\000\0079\0079\000\000\000\000\0079\0079\0079\003z\0079\000\000\0079\000Z\003j\003r\0079\015^\0079\0079\000\000\000\000\000\000\000\000\0079\000Z\000\000\0079\0079\015r\0079\000\000\0079\000Z\000\000\0079\015\202\000\000\0079\0079\0079\0079\000\000\0079\000\000\0079\0079\0079\015\222\000\000\000\000\0079\0079\0079\000\000\0079\000\000\0079\0079\0079\0079\016\"\000\000\0079\0079\0079\0079\000\000\0079\0079\0079\0079\0079\0079\016>\000\000\0079\0079\0079\0079\0079\0079\0079\0079\0079\0079\0079\000Z\0079\0079\0079\0079\0079\0079\000\000\0079\0079\000\000\0079\000Z\0079\0079\0079\0079\0079\0079\000Z\000\000\0079\000\000\000\000\0079\0079\0079\0079\000\000\0079\0079\000Z\000\000\0079\0079\0079\0079\000\000\0079\0079\0079\000\000\0079\0079\000Z\0079\0079\000\000\000\000\0079\000\000\0079\0079\0079\000\000\0079\0079\000Z\0079\000\000\000\000\0079\0079\0079\0079\0079\000\000\0079\0079\000\000\0079\0079\0079\000\000\0079\0079\000\000\0079\000\000\000\000\0079\000\000\0079\0079\0079\000\000\0079\0079\0079\0079\0079\000\000\000\000\000\000\000\000\0079\0079\0079\000\000\0079\0079\0079\0079\0079\000\000\000\000\000\000\0079\0079\0079\0079\000\000\0079\0079\0079\0079\000\000\000\000\000\000\0079\0079\000\000\0079\000\000\000\000\0079\002\230\0079\001\138\000\000\000\000\002\234\0079\0079\002\238\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\018N\0079\0079\000\000\000\000\000\000\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\003\006\003\n\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\000\000\001\233\000\000\000\000\001\233\000\000\003\"\003&\000\000\000\000\000\000\003*\001\238\003.\000\000\000\000\000\000\0032\0036\000\000\000\000\003:\003>\000\000\000\000\000\000\000\000\001\233\001\233\000\000\000\000\000\000\001\233\000\000\000\000\000\000\001\233\000\000\000\000\003B\000\000\000\000\001\233\000\000\003F\001\233\001\233\000\n\001\233\001\233\000\000\000\000\000\000\000\000\001\233\000\000\003N\000\000\001\233\000\000\000\000\001\233\000\000\001\233\001\233\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003V\000\000\000\000\000\000\000\000\000\000\003b\000\000\000\000\000\000\001\233\000\000\001\233\000\000\000\000\003z\000\000\000\000\000\000\000\000\003j\003r\000\000\001\233\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\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\238\000\000\000\000\000\000\000\000\000\000\001\233\0196\000\000\001\233\n\249\000\000\000\000\001\233\000\000\000\000\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\003\006\003\n\000\000\003\018\000\000\001\233\000\000\001\233\000\000\000\000\003\026\000\000\003\030\019>\001\233\001\233\000\000\001\233\001\233\001\233\000\000\003\"\003&\000\000\000\000\000\000\003*\001\238\003.\000\000\000\000\000\000\0032\0036\000\000\000\000\003:\003>\000\000\000\000\000\000\000\000\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\238\000\000\000\000\003B\000\000\000\000\000\000\000\000\003F\000\000\023z\000\n\000\000\000\000\000\000\000\000\002\246\000\000\000\000\002\250\003N\000\000\000\000\000\000\000\000\003\006\003\n\000\000\003\018\000\000\000\000\003R\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\003V\000\000\003\"\003&\000\000\000\000\003b\003*\001\238\003.\000\000\000\000\000\000\0032\0036\003z\000\000\003:\003>\0079\003j\003r\000\000\000\000\0079\000\000\000\242\000\000\001\002\0079\000\000\0079\000\000\000\000\000\000\003B\0079\0079\000\000\000\000\003F\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003N\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\0079\000\000\000\000\003V\000\000\002\230\000\000\001\138\000\000\003b\002\234\000\000\000\000\002\242\000\000\0079\0079\000\000\003z\000\000\006\134\000\000\000\000\003j\003r\000Z\000\000\000\000\0079\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\0079\003\006\012\146\000\000\003\018\0079\0079\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\0079\000\000\000\000\000\000\0079\000\000\000\000\003\"\003&\000\000\000\000\000\000\003*\001\238\003.\0079\000\000\000\000\0032\0036\000\000\000\000\003:\003>\000\000\0079\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\n\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\003N\002\242\000\000\000\000\000\000\000\000\0079\000\000\000\000\0079\0079\003R\000\000\0079\000\000\000\000\000\000\002\246\0079\0079\002\250\000\000\000\000\0079\003^\000\000\003\006\012\130\000\000\003\018\003b\000\000\000\000\000\000\000\000\000\000\003\026\000\000\003\030\003f\000\000\000\000\000\000\000\000\003j\003r\000\000\003\"\003&\000\000\000\000\000\000\003*\001\238\003.\000\000\000\000\000\000\0032\0036\000\000\000\000\003:\003>\000\000\000\000\000\000\000\000\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\242\000\000\000\000\003B\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\246\000\000\000\000\002\250\003N\000\000\000\000\000\000\000\000\003\006\012j\000\000\003\018\000\000\000\000\003R\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\003^\000\000\003\"\003&\000\000\000\000\003b\003*\001\238\003.\000\000\000\000\000\000\0032\0036\003f\000\000\003:\003>\000\000\003j\003r\000\000\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\242\000\000\000\000\003B\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\246\000\000\000\000\002\250\003N\000\000\000\000\000\000\000\000\003\006\003J\000\000\003\018\000\000\000\000\003R\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\003^\000\000\003\"\003&\000\000\000\000\003b\003*\001\238\003.\000\000\000\000\000\000\0032\0036\003f\000\000\003:\003>\0079\003j\003r\000\000\000\000\0079\000\000\005n\000\000\005~\0079\n\241\0079\000\000\000\000\000\000\003B\0079\0079\000\000\0079\003Z\000\000\n\241\000\n\0079\000\000\005\218\000\000\005\234\0079\000\000\0079\003N\n\241\000\000\n\241\0079\0079\000\000\n\241\000\000\000\000\000\000\003R\000\000\n\241\000\000\000\000\000\000\0079\000\000\n\241\000\000\0079\n\241\000\000\003^\0079\n\241\0272\000\000\000\000\003b\000\000\n\241\000\000\000\000\000\000\0079\0079\000\000\003f\000\000\0079\000\000\000\000\003j\003r\000Z\000\000\n\241\0079\000\000\000\000\000\000\000\000\000\000\000\000\0079\0079\0079\000\000\000\000\006\198\000\000\0079\0079\000\000\000Z\000\000\000\000\0079\000\000\000\000\000\000\0079\000\000\000\000\000\000\0079\0079\n\241\000\000\000\000\n\241\0079\0079\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\000\000\n\241\000\000\0079\0079\000\000\n\241\n\241\n\241\0079\n\241\n\241\000\000\n\241\0079\000\000\000\000\000\000\000\000\000\000\n\241\000\000\000\000\n\241\0079\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\241\000\000\000\000\000\000\0079\n\241\n\241\0079\0079\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\002\230\000\000\001\138\0079\000\000\002\254\0079\000\000\003\002\0079\0079\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\0079\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\003\022\b\006\000\000\003\018\000\000\b\026\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bB\003&\000\000\000\000\000\000\bF\001\238\003.\000\161\000\000\000\000\bJ\bN\000\000\000\000\bR\003>\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\242\000\000\000\000\000\000\000\000\000\000\000\000\bV\000\161\000\161\000\000\000\000\bZ\000\000\000\000\000\n\002\246\000\000\000\000\002\250\000\000\000\000\000\000\003\238\bb\003\006\b&\000\000\003\018\000\161\000\161\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\161\000\000\000\000\003\246\000\000\004\006\000\000\003\"\003&\bf\000\000\000\000\003*\001\238\003.\bn\000\000\000\000\0032\0036\000\000\000\000\003:\003>\br\000\000\000\000\000\000\000\000\bz\003r\000\000\000\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\n\000\000\000\000\t\222\000\000\000\000\000\000\000\000\000\000\003N\000\000\000\000\000\000\0051\000\000\0051\000\000\000\000\0051\000\000\003R\0051\000\000\000\000\000\161\000\000\000\000\000\000\000\000\000\000\000\000\003\254\000\000\003^\000\000\000\000\000\000\0051\000\000\003b\0051\000\000\000\000\000\000\000\000\000\161\0051\0051\003f\0051\000\000\000\000\000\161\003j\003r\000\000\0051\000\000\0051\000\000\000\161\000\161\000\000\000\000\000\000\000\000\000\000\0051\0051\000\000\000\000\000\000\0051\0051\0051\000\000\000\000\000\000\0051\0051\000\000\000\000\0051\0051\000\000\002\230\000\000\001\138\000\000\000\000\002\234\000\000\000\000\002\242\000\000\000\000\000\000\000\000\000\000\000\000\0051\000\000\000\000\000\000\000\000\0051\000\000\000\000\0051\002\246\000\000\000\000\002\250\000\000\000\000\000\000\000\000\0051\003\006\018:\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\"\003&\0051\000\000\000\000\003*\001\238\003.\0051\000\000\000\000\0032\0036\000\000\000\000\003:\003>\0051\000\000\000\000\000\000\000\000\0051\0051\000\000\000\000\000\000\000\000\026J\000\000\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\003Z\000\000\026N\000\n\000\000\000\000\000\000\000\000\000\000\028\206\000\000\000\000\003N\026R\000\000\026V\r]\r]\000\000\026Z\000\000\000\000\000\000\003R\000\000\026^\000\000\000\000\000\000\000\000\000\000\026b\000\000\000\000\026j\000\000\003^\000\000\026n\000\000\000\000\000\000\003b\000\000\026r\000\000\000\000\000\000\000\000\000\000\000\000\003f\000\000\000\000\000\000\026J\003j\003r\r]\000\000\026v\000\000\000\000\000\000\000\000\000\000\000\000\026N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\000\000\000\000\r1\000\000\r]\026^\026z\000\000\000\000\026~\000\000\026b\000\000\000\000\026j\000\000\000\000\000\000\026n\000\000\027\218\000\000\026\130\000\000\026r\000\000\000\000\026\134\000\n\026\138\000\000\026\142\026\146\000\000\026\150\029J\028^\000\000\r1\000\000\026v\026\154\000\000\000\000\026\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\026\162\000\000\000\000\000\000\0079\026\166\026\170\r]\000\000\0079\r1\000\000\026z\000\226\0079\026~\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\000\000\000\000\026\130\000\000\000\000\000\000\000\000\026\134\000\n\026\138\0079\026\142\026\146\000\000\026\150\0079\0079\0079\000\000\000\246\0079\026\154\0079\000\000\026\158\000\000\001:\0079\0079\0079\000\000\0079\0079\000\000\0079\0079\0079\000\000\000\000\026\162\001V\0079\000\000\0079\026\166\026\170\r1\0079\0079\0079\0079\000\000\007\206\000\000\000\000\0079\000\000\000Z\000\000\005^\0079\0079\0079\0079\0079\000\000\0079\0079\0079\0079\005r\0079\005\202\0079\0079\0079\000\000\000\000\0079\0079\0079\0079\0079\000\000\0079\0079\0079\0079\0079\000Z\000\000\005\222\0079\000\000\0079\000\000\000Z\000\000\000\000\0079\0079\0079\000\000\000\000\0079\012\198\0079\0079\0079\0079\000Z\0079\000\000\0079\0079\0079\0079\0079\000\000\0079\0079\0079\0079\0079\000\000\006\"\0079\0079\0079\000Z\0079\0079\0079\0079\0079\000\000\0079\0079\0079\000\000\000Z\0079\000Z\0079\000\000\0079\0079\0079\0079\000\000\0079\0079\0079\0079\0079\006>\0079\0079\0079\0079\0079\000Z\0079\0079\0079\000\000\0079\0079\000\000\0079\0079\0079\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\0079\0079\0079\0079\0079\0079\000\000\0079\0079\0079\0079\0079\0079\0079\000Z\0079\0079\0079\0079\0079\000\000\000\000\0079\0079\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\0079\0079\0079\0079\0079\000\000\000\000\0079\0079\000\000\000Z\0079\000\000\0079\000\000\0079\0079\0079\0079\0079\0079\0079\0079\000\000\0079\000\000\000\000\0079\0079\0079\0079\000\000\0079\000\000\0079\000\000\0079\0079\000\000\0079\0079\0079\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\0079\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\000\000\000\000\0079\000\000\000\000\0079\0079\019j\000\000\0079\019r\000\000\000\000\000\000\0079\0079\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\019\130\019\138\0079\0079\000\000\002=\0079\000\000\000\000\002=\000\000\0079\0079\000\000\000\000\019\146\0079\000\000\002=\002=\000\000\019\154\019\162\000\000\000\000\000\000\0015\002=\000\000\0015\000\000\019\170\000\000\000\000\019\178\000\000\019\186\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\003\230\004\014\000\000\000\000\000\000\0015\000\000\000\000\000\000\0015\000\000\019\194\000\000\002=\000\000\003\238\000\000\000\000\0015\0015\000\000\0015\0015\000\000\002=\000\000\000\000\0015\000\000\000\000\000\000\004\022\000\000\000\000\003\246\000\000\004\006\0015\000\000\000\000\000R\000V\000f\000\194\000\000\000\198\000\000\000\202\000\210\000\218\0016\019\202\001F\001N\002=\001v\000\000\001~\019\210\001\134\002j\002r\002v\004\030\000\000\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002=\0015\002=\002~\000\000\000\000\000\000\000\000\000\000\002=\002=\000\000\019\218\019\226\002=\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004&\000\000\000\000\0015\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\002\150\001\029\000\000\000\000\001\029\000\000\031\250\000\000\000\000\000\000\000\000\000\000\0015\000\000\0015\002\154\000\000\000\000\000\000\031\238\007\022\0015\0015\000\000\0015\004.\0015\001\029\001\029\000\000\000\000\000\000\001\029\000\000\000\000\000\000\001\029\007\026\000\000\000\000\000\000\000\000\003\238\000\000\000\000\001\029\001\029\000\000\001\029\001\029\000\000\000\000\000\000\001\025\001\029\000\000\001\025\000\000\001\029\000\000\000\000\003\246\000\000\004\006\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\001\025\001\025\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\025\000\000\001\029\000\000\001\029\000\000\003\238\000\000\000\000\001\025\001\025\000\000\001\025\001\025\000\000\001\029\n9\000\000\001\025\000\000\000\000\000\000\001\025\000\000\000\000\003\246\000\000\004\006\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\001\029\000\000\000\000\001\029\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\029\001\025\001\029\000\000\000\000\000\000\000\000\000\000\000\000\001\029\001\029\000\000\001\029\001\029\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\001\025\000\000\000\000\001\025\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\000\000\000\000\001\025\001\025\000\000\001\025\001\025\001\025\001\017\001\017\000\000\000\000\000\000\001\017\000\000\000\000\000\000\001\017\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\001\017\001\017\000\000\001\017\001\017\000\000\000\000\000\000\004\134\001\017\000\000\001=\000\000\001\017\000\000\000\000\003\246\000\000\001\017\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\003\230\004\014\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\000\001\017\000\000\001\017\000\000\003\238\000\000\000\000\001=\001=\000\000\001=\004\142\000\000\001\017\000\000\000\000\001=\000\000\000\000\000\000\004\022\000\000\000\000\003\246\000\000\004\006\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\001\017\000\000\000\000\001\017\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\004\030\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\001=\001\017\000\000\000\000\000\000\000\000\000\000\000\000\001\017\001\017\000\000\001\017\001\017\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\004&\000\000\000\000\001=\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\000\000\004\134\000\000\000\000\0011\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\000\000\000\000\001=\001=\000\000\004\150\004.\001=\003\230\004\014\000\000\000\000\000\000\0011\000\000\000\000\000\000\0011\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\0011\0011\000\000\0011\0011\000\000\000\000\000\000\001)\0011\000\000\001)\000\000\004\022\000\000\000\000\003\246\000\000\004\006\0011\000\000\000\000\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\230\004\014\000\000\000\000\000\000\001)\000\000\000\000\000\000\001)\000\000\004\030\000\000\0011\000\000\003\238\000\000\000\000\001)\001)\000\000\001)\001)\000\000\0011\000\000\000\000\001)\000\000\000\000\000\000\001)\000\000\000\000\003\246\000\000\004\006\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\004&\000\000\000\000\0011\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\004\030\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\001)\0011\000\000\000\000\000\000\000\000\000\000\000\000\0011\0011\000\000\0011\004.\0011\000\000\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\003\254\000\000\000\000\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)\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\001)\001)\000\000\001)\001)\001)\001\021\001\021\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001\021\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\021\001\021\000\000\001\021\001\021\000\000\000\000\000\000\001!\001\021\000\000\001!\000\000\001\021\000\000\000\000\003\246\000\000\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\003\230\004\014\000\000\000\000\000\000\001!\000\000\000\000\000\000\001!\000\000\001\021\000\000\001\021\000\000\003\238\000\000\000\000\001!\001!\000\000\001!\001!\000\000\001\021\000\000\000\000\001!\000\000\000\000\000\000\001!\000\000\000\000\003\246\000\000\004\006\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\001\021\000\000\000\000\001\021\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\000\001!\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\001!\001\021\000\000\000\000\000\000\000\000\000\000\000\000\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\001!\000\000\000\000\001!\000\000\000\000\000\000\003\254\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\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!\001!\001!\003\230\004\014\000\000\000\000\000\000\001%\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\003\238\000\000\000\000\001%\001%\000\000\001%\001%\000\000\000\000\000\000\004\134\001%\000\000\0019\000\000\001%\000\000\000\000\003\246\000\000\004\006\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\003\230\004\014\000\153\000\000\000\000\0019\000\000\000\000\000\000\0019\000\000\004\030\000\000\001%\000\000\003\238\000\000\000\000\0019\0019\000\000\0019\004\142\000\000\001%\000\000\000\000\0019\000\153\000\153\000\000\004\022\000\000\000\000\003\246\000\000\004\006\0019\000\000\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\153\000\153\001%\000\000\000\000\001%\000\000\000\000\000\000\003\254\000\153\000\000\000\000\003\246\004\030\000\153\0019\004\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\0019\001%\000\000\000\000\000\000\000\000\000\000\000\000\001%\001%\000\000\001%\001%\001%\000\000\000\153\003\230\004\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004&\000\000\000\000\0019\003\238\000\000\000\000\003\254\000\000\000\000\000\197\004\142\000\000\001-\000\000\000\000\001-\000\000\000\000\000\000\004\022\000\000\000\000\003\246\0019\004\006\0019\000\000\000\153\000\000\000\000\000\000\000\000\0019\0019\003\254\0019\004.\0019\003\230\004\014\000\000\000\000\000\000\001-\000\000\000\000\000\000\001-\000\153\000\000\000\000\004\030\000\000\003\238\000\000\000\153\001-\001-\000\000\001-\001-\000\000\000\000\000\153\000\153\001-\000\000\000\000\000\000\004\022\000\000\0296\003\246\029>\004\006\001-\000\000\000\000\000\000\000\000\000\000\000\000\029F\000\000\000\000\000\000\000\000\029f\000\000\000\000\000\000\004&\000\000\000\000\026N\000\000\000\000\000\000\003\254\000\000\000\000\004\030\000\000\001-\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\000\197\000\000\001-\000\000\000\000\026^\000\000\000\197\000\000\000\000\000\000\026b\000\000\000\000\026j\004\150\004.\000\000\026n\000\000\000\000\000\000\000\000\000\000\026r\000\000\000\000\000\000\000\000\004&\000\000\000\000\001-\000\000\000\000\000\000\003\254\000\000\000\000\000\000\026v\029n\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\017u\000\000\000\000\017u\000\000\001-\001-\000\000\001-\001-\001-\000\000\000\000\000\000\026z\000\000\000\000\026~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017u\017u\000\000\000\000\026\130\000\000\000\000\000\000\b\146\026\134\000\n\026\138\000\000\026\142\026\146\017u\026\150\000\000\000\000\017u\000\000\017u\017u\026\154\000\000\b\154\026\158\000\000\t\158\000\000\000\000\017u\000\000\000\000\017u\000\000\017u\000\000\000\000\000\000\000\000\026\162\000\000\000\000\000\000\000\000\026\166\026\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\230\000\000\001\138\000\000\000\000\b\030\017u\000\000\b\"\000\000\000\000\000\000\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\246\000\000\t\170\000\000\000\000\000\000\000\000\000\000\000\000\n\002\n\014\000\000\000\000\000\000\n\"\000\000\000\000\000\000\000\000\003\026\000\000\003\030\017u\017u\000\000\017u\000\000\t\174\000\000\017u\nR\003&\000\000\000\000\000\000\n^\001\238\003.\t\182\000\000\000\000\nf\nj\017u\000\000\nn\000\000\017u\017u\000\000\000\000\000\000\000\000\000\000\017u\000\000\000\000\000\000\017u\017u\000\000\000\000\nr\nv\000\000\000\000\000\000\000\000\nz\000\000\000\000\000\n\000\000\002\230\000\000\001\138\000\000\000\000\0182\000\000\n\130\0186\000\000\000\000\000\000\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\246\000\000\000\000\000\000\000\000\000\000\000\000\n\158\000\000\018\162\018\142\000\000\000\000\n\166\019\234\000\000\000\000\000\000\000\000\003\026\000\000\003\030\n\170\000\000\000\000\000\000\000\000\n\178\003r\000\000\018\166\003&\000\000\000\000\000\000\018\170\001\238\003.\000\000\000\000\000\000\018\174\018\178\000\000\026J\018\182\000\000\000\000\000\000\000\000\000\000\000\000\026J\000\000\000\000\000\000\026N\000\000\000\000\000\000\000\000\000\000\nr\018\186\026N\000\000\000\000\026R\018\190\026V\000\000\000\n\000\000\026Z\000\000\026R\000\000\026V\000\000\026^\018\198\026Z\000\000\000\000\000\000\026b\000\000\026^\026j\000\000\000\000\000\000\026n\026b\000\000\000\000\026j\000\000\026r\000\000\026n\000\000\000\000\000\000\018\202\000\000\026r\000\000\000\000\027\214\018\210\000\000\000\000\000\000\026v\000\000\000\000\028\166\000\000\018\214\000\000\000\000\026v\000\000\018\222\003r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r1\000\000\026z\000\000\000\000\026~\000\000\000\000\r1\000\000\026z\000\000\000\000\026~\000\000\000\000\000\000\000\000\026\130\000\000\000\000\000\000\000\000\026\134\000\n\026\138\026\130\026\142\026\146\000\000\026\150\026\134\000\n\026\138\000\000\026\142\026\146\026\154\026\150\000\000\026\158\000\000\026J\000\000\000\000\026\154\000\000\000\000\026\158\000\000\000\000\000\000\000\000\000\000\026N\026\162\000\000\000\000\000\000\000\000\026\166\026\170\r1\026\162\000\000\026R\000\000\026V\026\166\026\170\r1\026Z\000\000\000\000\000\000\000\000\000\000\026^\000\000\000\000\000\000\000\000\000\000\026b\000\000\000\000\026j\000\000\000\000\000\000\026n\t\173\000\000\000\000\000\000\000\000\026r\000\000\000\000\000\000\000\000\000\000\000\000\t\173\000\000\000\000\000\000\029\014\000\000\000\000\000\000\000\000\026v\000\000\t\173\000\000\t\173\000\000\000\000\000\000\t\173\000\000\000\000\000\000\000\000\000\000\t\173\000\000\000\000\000\000\000\000\000\000\t\173\000\000\000\000\t\173\000\000\000\000\000\000\t\173\000\000\r1\000\000\026z\000\000\t\173\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\026\130\000\000\t\173\029n\000\000\026\134\000\n\026\138\000\000\026\142\026\146\000\000\026\150\000\000\000\000\000\000\000\000\000\000\000\000\026\154\000\000\000\000\026\158\000\000\000\000\000\000\000\000\000\000\b)\000\000\000\000\000\000\000\000\t\173\000\000\000\000\t\173\026\162\000\000\000\000\b)\000\000\026\166\026\170\r1\000\000\000\000\000\000\000\000\t\173\000\000\b)\000\000\b)\t\173\t\173\t\173\b)\t\173\t\173\000\000\t\173\000\000\b)\000\000\000\000\000\000\000\000\t\173\b)\000\000\t\173\b)\000\000\000\000\000\000\b)\027\186\000\000\000\000\000\000\000\000\b)\000\000\000\000\000\000\t\173\000\000\000\000\026N\000\000\t\173\t\173\030v\000\000\000\000\000\000\000\000\b)\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\000\000\000\000\000\000\000\000\000\000\026^\000\000\000\000\000\000\000\000\000\000\026b\000\000\000\000\026j\000\000\000\000\000\000\026n\000\000\000\000\000\000\b)\000\000\026r\b)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b)\000\000\026v\027\210\000\000\b)\b)\b)\000\000\b)\b)\000\000\b)\000\000\000\000\026N\000\000\000\000\000\000\b)\000\000\000\000\b)\000\000\000\000\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\026z\000\000\000\000\026~\b)\026^\000\000\000\000\000\000\b)\b)\026b\000\000\000\000\026j\000\000\026\130\000\000\026n\026J\000\000\026\134\000\n\026\138\026r\026\142\026\146\000\000\026\150\000\000\000\000\026N\000\000\000\000\000\000\026\154\000\000\000\000\026\158\000\000\026v\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\000\000\000\000\000\000\000\000\026\162\026^\000\000\000\000\000\000\026\166\026\170\026b\000\000\000\000\026j\000\000\000\000\000\000\026n\000\000\000\000\000\000\026z\000\000\026r\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\026\130\000\000\028\138\028\162\000\000\026\134\000\n\026\138\000\000\026\142\026\146\000\000\026\150\000\000\000\000\026N\000\000\000\000\000\000\026\154\000\000\000\000\026\158\000\000\000\000\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\026z\000\000\000\000\026~\026\162\026^\000\000\000\000\000\000\026\166\026\170\026b\000\000\000\000\026j\000\000\026\130\000\000\026n\029\n\000\000\026\134\000\n\026\138\026r\026\142\026\146\000\000\026\150\000\000\000\000\026N\000\000\000\000\000\000\026\154\000\000\000\000\026\158\000\000\026v\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\000\000\000\000\000\000\000\000\026\162\026^\000\000\000\000\000\000\026\166\026\170\026b\000\000\000\000\026j\000\000\000\000\000\000\026n\000\000\000\000\000\000\026z\000\000\026r\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\026\130\000\000\026v\026J\000\000\026\134\000\n\026\138\000\000\026\142\026\146\000\000\026\150\000\000\000\000\026N\000\000\000\000\000\000\026\154\000\000\000\000\026\158\000\000\000\000\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\026z\000\000\000\000\026~\026\162\026^\000\000\000\000\000\000\026\166\026\170\026b\000\000\000\000\026j\000\000\026\130\000\000\026n\026J\000\000\026\134\000\n\026\138\026r\026\142\026\146\000\000\026\150\000\000\000\000\026N\000\000\000\000\000\000\026\154\000\000\000\000\026\158\000\000\030B\000\000\026R\000\000\026V\000\000\000\000\000\000\026Z\000\000\000\000\000\000\000\000\026\162\026^\000\000\000\000\000\000\026\166\026\170\000\000\000\000\000\000\026j\000\000\000\000\000\000\026n\000\000\000\000\000\000\026z\000\000\026r\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\026\130\000\000\026v\000\000\000\000\026\134\000\n\026\138\000\000\026\142\026\146\000\000\026\150\000\000\000\000\000\000\000\000\000\000\000\000\026\154\000\000\000\000\026\158\000\000\000\000\017\141\000\000\000\000\017\141\000\000\000\000\000\000\000\000\026z\000\000\000\000\026~\026\162\000\000\000\000\000\000\000\000\026\166\026\170\000\000\000\000\000\000\000\000\000\000\026\130\000\000\017\141\017\141\000\000\026\134\030n\026\138\000\000\026\142\026\146\000\000\026\150\000\000\000\000\000\000\000\000\017\141\000\000\026\154\000\000\017\141\026\158\017\141\017\141\000\225\000\000\000\000\000\225\000\000\000\000\b:\000\000\017\141\000\000\000\000\017\141\026\162\017\141\000\000\000\000\000\000\026\166\026\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\225\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\141\003\238\000\000\000\000\000\000\000\225\000\000\000\225\000\225\000\000\000\000\000\221\000\000\000\000\000\221\000\000\000\000\000\225\000\000\000\000\003\246\000\000\004\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\221\000\221\000\000\017\141\017\141\000\000\017\141\000\000\000\000\000\000\017\141\000\000\000\225\000\000\000\000\003\238\000\000\000\000\000\000\000\221\000\000\000\221\000\221\000\213\017\141\000\000\000\213\000\000\017\141\017\141\000\000\000\221\000\000\000\000\003\246\017\141\004\006\000\000\000\000\017\141\017\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\213\000\000\000\225\000\000\000\000\000\225\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\221\000\213\000\000\000\000\000\000\000\213\000\000\000\213\000\213\000\000\000\225\000\000\000\000\000\000\000\225\000\225\000\000\000\213\000\000\000\000\003\246\000\000\000\213\000\000\000\000\000\225\000\225\000\000\000\000\000\000\000\000\000\000\000\000\004\134\000\000\000\000\001\001\000\000\000\000\000\000\000\221\000\000\000\000\000\221\000\000\000\000\000\000\003\254\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\230\004\014\000\221\000\000\000\000\000\000\000\221\000\221\000\000\000\000\000\000\000\000\000\000\004\134\000\000\003\238\000\245\000\221\000\221\001\001\000\000\001\001\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\004\022\000\000\000\213\003\246\000\000\004\006\003\254\000\000\003\230\004\014\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\003\238\000\213\000\213\000\000\000\245\000\000\000\245\000\245\000\000\004\030\000\000\000\000\000\213\000\213\000\000\000\000\004\022\000\000\000\000\003\246\000\000\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\237\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\030\004&\000\000\000\000\001\001\000\000\000\000\000\000\003\254\000\000\003\230\004\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\003\238\001\001\001\001\000\000\000\237\000\000\000\237\000\237\000\217\000\000\000\000\000\217\004\150\004.\000\000\004&\000\237\000\000\000\245\003\246\000\000\004\006\003\254\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\217\000\245\000\000\000\000\000\000\000\245\000\245\000\000\000\000\000\000\000\000\000\000\000\000\004\030\000\217\000\000\000\245\004.\000\217\000\000\000\217\000\217\000\000\000\229\000\000\000\000\000\229\000\000\000\000\000\000\000\217\000\000\000\000\003\246\000\000\000\217\000\000\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\230\004\014\000\000\000\000\000\237\000\000\000\000\000\237\000\000\000\000\000\000\003\254\000\000\000\217\000\000\003\238\000\000\000\000\000\000\000\229\000\233\000\229\000\229\000\233\000\000\000\237\000\000\000\000\000\000\000\237\000\237\000\229\000\000\000\000\003\246\000\000\004\006\000\000\000\000\000\000\000\237\000\237\000\000\000\000\000\000\000\000\003\230\004\014\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\217\000\000\000\000\000\000\003\254\003\238\000\000\000\229\000\000\000\233\000\000\000\233\000\233\000\000\004\134\000\000\000\000\000\253\000\217\000\000\000\000\000\233\000\217\000\217\003\246\000\000\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\217\000\000\000\000\000\000\000\000\000\000\003\230\004\014\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\229\000\000\000\000\004\030\003\254\003\238\000\000\000\000\000\000\000\253\000\241\000\253\004\142\000\241\000\000\000\000\000\000\000\000\000\229\000\000\000\000\004\022\000\229\000\229\003\246\000\000\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\000\003\230\004\014\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\233\000\000\000\000\000\000\003\254\003\238\000\000\004\030\000\000\000\241\000\000\000\241\000\241\000\000\004\134\000\000\000\000\000\000\000\233\000\000\000\000\004\022\000\233\000\233\003\246\000\000\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\000\000\000\000\000\000\000\000\003\230\004\014\000\000\000\000\000\000\000\000\000\000\004&\000\000\000\000\000\253\000\000\000\000\004\030\003\254\003\238\000\000\000\000\000\000\000\000\000\177\000\185\000\185\000\000\000\157\000\000\000\000\000\000\000\253\000\000\000\000\004\022\000\253\000\253\003\246\000\000\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\253\004.\000\000\003\230\004\014\000\000\000\000\000\157\000\157\000\000\004&\000\000\000\000\000\241\000\000\000\000\000\000\003\254\003\238\000\000\004\030\000\000\000\157\000\000\000\177\000\177\000\000\000\169\000\157\000\157\000\000\000\241\000\000\000\000\000\177\000\241\000\241\003\246\000\157\004\006\000\000\003\246\000\000\000\157\000\000\000\000\000\241\000\241\000\000\000\000\000\000\000\000\000\173\003\230\004\014\000\000\000\000\000\000\000\000\000\000\004&\000\000\000\000\000\000\000\000\000\000\004\030\003\254\003\238\000\000\000\157\000\000\000\000\000\000\000\169\000\169\000\000\000\000\003\230\004\014\000\000\000\185\000\000\000\000\000\169\000\000\000\000\003\246\000\185\004\006\000\000\000\000\000\000\003\238\000\000\000\000\000\185\004.\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\177\000\000\000\000\000\173\000\157\000\000\003\246\003\254\004\006\000\000\000\169\003\254\004\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\000\000\000\000\000\000\157\000\000\000\000\000\177\000\000\000\000\000\000\000\157\000\000\000\000\004\030\000\177\000\177\003\230\004\014\000\157\000\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\169\000\000\000\000\003\238\000\000\000\000\000\000\003\254\000\181\000\193\004\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\022\000\000\000\169\003\246\000\000\004\006\000\173\000\000\000\000\000\169\000\000\000\000\000\000\003\254\000\000\003\230\004\014\000\169\000\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\003\238\000\000\004\030\000\000\000\173\000\000\000\181\000\181\000\000\000\000\000\000\000\000\000\173\000\173\000\000\000\000\004\022\000\000\000\000\003\246\000\000\004\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\004&\000\000\000\000\000\000\000\000\000\000\004\030\003\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\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\193\004.\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\003\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\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\181")) + ((16, "\002\130\000\185\000\000\000\000\022\134\000\185\000\000\000\000\000\026\000\000\000\000\000\000\000\213\000\000\000\000\000\000\002\130\000\000\000\005:*\000\000\000\000I\182\026P\000\000\025,\027t\000\000\000\000\000\000\000\000\000\213\0002\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\142\000\000\000\000\025,\000\000\000\000\000\006\000\000\000\017\000\017\000\000\000\000\000\000\000\000\000\r\000\000\000\000\000\144\000\017\000\000\000\144\000\000\000\000\000\017\000\162\001\244\000\017\001\242\000\000\003\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\223\000\017\000\000\000I\002\220\000\017\000\000\000\005\001f\000\000\000\000\000\000\002\016\000\000\028\152\000\017\002\028\000\000\000\000\000\000\000\000:*\029\188?\184\000\000?\184\000\000\000\000\000\000\000\017\000\000?\184\000\000>\156\003\028?\184\003P\000\000\000\000\000\017\007fW\234\000\000\000\000[0[\200\000\000^\200\000\000\\`Vn%\254%\254^\200Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\248%\254\000\000\000\000\\\248\\\248\\\248\000\000\\\248\000\006\000\000\000\000Vn\\\248\000\000\000\000/\026\000\017\000\000 b%\254Vn\000\0000jVn<\002Vn<\128Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\248Vn\000\000L\020Vn=\156Vn>\184Vn\000\000Vn\000\000Vn?\212Vn@\240VnB\012VnC(VnDDVnE`Vn!`Vn\000\000\000\000\000\000\003dVn\000\000\000\000\000\000\000\000VnL\156VnM\184VnN@VnO\\VnF|VnG\152VnH\180VnO\228VnQ\000Vn\000\000VnQ\136VnR\164VnS,Vn\000\000VnTHVnT\208Vn\000\000\000\000Vn\000\000\003\202\000\000\000\000\000\017\000\000\000\000\000\000\000\000\003\242\000\000\004\020\000\000\000\020Vn\000\000\000\020\000\000\000\000\000\194:*\000\000&\224\0032\0032m\164]\226\000\000m\164\000\000\000\000m\164\000\000\000\194\000\000\000\000%\254\004V\000\000\004x^\2005p\000\000_X%\254\004z\000\000\004\1384>5p^\200\000\000\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\000^\200\000\000\000\000n\006\000\017\000\000 b b\000\000\000\227$\226 b \230Vn\000\000Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\028Vn\024\132Vn\005\nVn\000\000Vn$\"VnI\022Vnw\154Vnw\246VnxZVnx\182Vn\000\000Vny\026VnyvVny\218Vn\000\000Vnz6Vnz\154\000\175!\226\000\000\000\000\001X#b\000\000\000\000\000\000\000\000\004\228\000\000Vn\004\252\000\000\000\000\000\017\000\000\000\000\000\000\002\184^\200\000\000\000\000\006\000\000\000\000[`0\005\242Vn\005\240\000\000\000\000^\200\000[\000\000\000\000Vn\005v\000\000%\254\005\130\000\000\005\132n\1385p^\200\005\134\000\000Vn\000|Vn\005\138\000\000\000\0005p5p\000\000\000\000\000\000\000\0002\200\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\000\164\006\136Vn5p\000\017\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\0003\240n\138\000\000\000\000\"\172\000\017\000\000 b\005\208\000\000Vn\005\212\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000-\140\000\000\000\000\006\0165p\006&5p\000\000\000\003\000\000\000\000\025\168Vn\026\204Vn\027\240Vn\029\020Vn\0308Vn8\168VnK0VnKTVn\000\000VnV\000Vn_fVna\224Vn\000\000VnkBVnk\194\000\000\006\004\000\000\001(6\\\000\000\002x845p\000\000\003\n7H\000\000\000\000\000\000\000\000\006\152\000\000\000\000\000\000\0068\000\000\006N\000\000\000\000\006T\000\000\000\000\006X\000\000\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\006d\007,\000\000\006j\000\000\006r\000\000\006rW\234\000\000%\254\006tv\188\000\000\007X\000\000%\254\006\1309*\000\000%\254\006\132:F\000\000\006\132\000\000\000\000\007f\000\000\007x\000\000\000\000\001f\007H\000\017\006\142\007`EDED\000\000\000\000\000\000\003\\T,ED\003hG|\000\000\000\000\000\000\006h\007R\002\162\007fED\000\000\000\000\006\156\000\000\006\160\007pED\006\164\000\000\001N\000\000\000\000\003\196M\156\000\000\000\000\000\000\006\168\007\156\000\000\007\158\000\0001\234\000\017\007\160\000\000\000\000\000\000\006\174\000\000?\184\000\000D(A\240\000\000\000\000\030\224?\184\006\176\000\000\000\000\001\140?\184\000\000\001\140\000\000\000\000\006\194\000\000\002\162\006\192\000\000\001V:*\000\000:*\000\000\006\174\000\000\001V\000\000\019\1524\240:*\000\000\006\208\000\000\002\000:*\000\000\000\000\002\000\000\000\000\000\000\000\000\026\000\000\000\000\001<\000\026\000\000\000\000\000\000\007\194\000\000&\224'n'n\000\000\000\000'n\000\000\000\000\000\000\000\000\000\000\007\170Vn\006\222)X\007^\000\000\007\192Vn\006\244\007\188:*\000\000\000\000\000\000:*\000\017\000\000\000\017Vn\007\242\000\000\000\017\000\000\000\017\007\244\000\000\t.\007\196\000\017\007\014\007\222ED\007\018\001\154\000\000Vn\b\004\000\000\000\000\000\000\007\230ED\007\026\b\n\000\000\003\186\004>Vn\b\020\000\000\b\022\000\0001\234\000\017\004lVn\b(\000\000\b*\000\000\000\017\004\140Vn\b.\000\000\b6\000\000\0013\007t\t\n,n\000\000`\192%\254\007LW(\000\000X\130\000\000\b<\000\000\003\002\b\018Vn\007\208\000\000\b\022Vn\007\212\000\000\001p\000\000\t\n\t\n%\254\007X\000\000\007ZoLoL\000\000\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\000oL\000\000\000\000;b\000\017\000\000 b\007`\000\000Vn\007d\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000Y\000\000\tP\000\000\000\000\000\000\012\014\000\000\000\000\001:\000\000\t\n\000\000\0032\000\000\000\000Z\000\tXVn\bl)X\000\000\000\000\tB b\bx\005t\000\000Vn\tt\000\000\007\184\000\000\tD\000\017\b\144\t`ED\b\152\005v\000\000Vn\t\136\000\000\005|\000\000Vn\t\138\000\0001\234\000\017\005\198\000\000Vn\t\140\000\000\002\200*j\000\000\002\200\000\000\000\000\b\162\000\000\000\020\001\128)X\000\000\006\006\0007\006\006\000\000\0007\000\000\t\n\000\000\t\n\000\000\000\000\000\000\b\174\000\000\000\000\b\186\000\000\004V\007\136\0007\006\006\000\000\000\000\000\000\0007\000\000\t\n\000\000\004V\000\000\000\000\022|\020R\019\152\000\000\020R\000\000\n\140\019\152\000\000\000\000\n\140\000\000\000\000\b\186\000\000\000\000\b\192\000\000\004\244\t\n\000\000\004\244\000\000\000\000\t@\000\000\001:\000\000\t\n\000\000\000\000\000\000\024\024Z\152\000\000\t\178\000\000\024\024\t\184\000\000\t\186\000\000\005\146\024\024\000\000\t\188\000\000\000\000\005\146\000\000\000\000\b\210\000\000\023@\tP\000\000\000\000\000\000\tR\000\000\000\165\000\178\000\000\019\152\t\176\000\000\000\000Vn\t\002\t\n\000\000\b\214\000\000\0013\000\000:*\000\000\000\000\003\236\019\152\000\000\019\152\000\000\b\198\000\000\003\236\000\000Vn\003\240Vn\000\000Vn\000\000\b\200\000\000\003\240\000\000Vn\003\240\b\204\000\000\021\024+\234\000\000\003\250\021\024\000\000\000\000\021\024\000\000\b\206\000\000\003\250\000\000Vn\003\240\b\208\000\000:*\005\216:*\000\000:*\000\000\b\218\000\000\005\216\000\000Vn\003\240\b\220\000\000\000\000'~\000\000\000\185\t~\000\000\000\000\tT]\212\000\000\000\000\000\000\000\000\000\000\000\000\t(\006\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\002\004]\212\000\000\001\b\003P\t*\000\185\000\000\000\000\t2\000\185\000\000\000\000\000\000\000\000\001\024\003P\000\000\000\000\000\000\000\000\t\144\000\000\000\000\000\000\000\000/\0261j\000\000q&\000\000]\212\000\000\002v]\212\000\000\002\196\001\218\001\218\000\000\003\224\001\218\000\000\t\b\000\000\000\000\000\000\000\000\t\162\000\0002\200\000\0004\240]\212\000\000\000\029]\212\000\000\t\198\000\000]\212\t\202\000\000r\194]\212\t\222\000\000\t\224\000\000s\194]\212]\212\000\000\000\000\t^]\212\t\232\000\000\t\234\000\000\t\236\000\000:*\000\000\004\n:*\000\000\tf'n\000\000]\212\t\244\000\000\002\220]\212\000\000\004\154]\212\000\000\004\132\n|\000\000\n~\000\000b\030]\212\tr\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000t\016a\156\n\n\000\000\n\020\000\000u\016p\012]\212\t\150]\212\n&\000\000\n(\000\000\n*\000\000]\212\t\208\000\185\000\000\000\000\005\154]\212\000\000\004\132\000\000\n0\000\000]\212\n2\000\000u^p\028]\212\t\176]\212\n:\000\000\n<\000\000\n>\000\000l\200'n\000\000'n\000\000b\030]\212\t\188]\212\nH\000\000\nL\000\000'n\000\000qt\000\000\000\000\005\166]\212\000\000\001\128\003\142\001\218\t\196\000\000\000\000\0032\0032\000\000\000\000\000\000\000\000\005\024\0032\000\000\t\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\212\000\000\005\236]\212\000\000\005Z\001f\000\185\t\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\\\000\000\nd\000\000]\212\nf\000\000v^a\156\nh\000\000\np\000\000]\212\nr\000\000(\226\n v\172U\206rt\t\246\000\000]\212\n\140\000\000\n\142\000\000\n^(\226]\212\n\150\000\000]\212\n\152\000\000\n\154\000\000]\212\n\156\000\000\000\185\n\b\000\000\000\000'~\000\000\000\000\0044\011\002\000\000\000\000\001C\000\000\000\000\000\000Vn\000\000\000\000\000\000\004\132\000\000\000J\000\000\000\000\000\000\006\006:*:*:*\000\000\003`\003`\003`\003`\000\000\000\000\000\000\000\000\000\000\000\000\003\002\019\152\n\248\016\148\0012\000\000\000\000\004P\000\000\012\014\000\0005p\n\026\000\000\003\002\019\152\n*\018\022\000\000\003\002\016\148\000\000\000\000\000\000:*6j\000\000\000\000\000\000\n\128\0032\011\bO@O@\000\000\004\230d,O@\005\164P\228\000\000\000\000\b\170\n\252\000\017\000\000\005\200R\136\000\000\000\000\000\000\000\000\000\000\nB\011\n\t\n\nH\000\000\000\000\004P\000\000\012\014\000\000\021r\000\027\000\000\000\000\011\002\000\000\000\000\0044\000\000\002\030\000\000\000\000\000\000Vn\000\000\004\132\000\000\002\198\000\000\000\000\000\000\007\136\000\000\r\144\005L\r\144\000\000\t\n\r\144\000\000\005\246\000\000\t\n\000\000\t\n\000\000\t\n\000\000\019\242\000\000\000\000\000\000\000\000\000\000\t\n\000\000\005\246\000\000\t\n\000\000*\196\000\000\000\000\n\140\n\130\000\185\002$\011.\005\202\000\000\005\202\011V\000\000\011Z\000\000\006\204\000\000\005\202\002\196\005\202\0110\005\202\000\000\000\000\003\170\000\000\0144\002$\nR\000\000\nV\000\000\n\156\000\185\002$\nd\000\000\n\140\011p\000\000\014\234\bd\011\132\000\225\011\132\000\000\000\000\b,\000\185\000\000\001D\000\000\000\000\000p\000\000\nn\000\000\000\000\000\000\n\172\000\185\002$\nr\000\000\000\000\n\140\014\234\bd\b,\001D\000p\nv\000\000\014\234\bd\b,\001D\000p\nx\000\000\006\170\002\012\n\148\000\185\n\144\006\220\003\230\n\186\000\185\000\000\n\190\000\185\000\000\011\030\000\000\n\164\004\140\n\160\006\220\011H\000\000\n\216\006\220\011`\000\000\000\000\006\220\000\000\011b\000\000"), (16, "\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\012:\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\019N\006\145\025#\025'\r\213\005\249\001\194\025+\r!\n\001\r)\r\213\000\190\r\213\r!\r!\026\151\r\213\012n\r\213\r\213\000\n\r\213\000\190\026\155\r\213\r!\014\014\r9\000\130\r\213\r\213\r\213\001\170\026\158\r\213\000&\004\217\0056\028\006\001N\r\213\b\193\000\198\r\213\r\213\n\001\b\233\001\198\000\254\r\213\r\213\r!\r\213\006\190\r\213\000*\0007\000;\000\194\r\213\000\190\r\213\r\213\005\254\r\213\r\213\r\213\b\177\0196\000\202\r\213\r\213\r\213\004:\rY\r\213\r\213\r\213\n\218\000\206\001\"\r\213\r\213\r\213\r\213\r\213\r\213\006f\001\006\007\022\r\213\r\213\000N\n\158\019\158\019\198\019\214\020\n\020\026\020B\n\222\r\213\r\213\r\213\000\n\015\218\r\213\r\213\r\213\r\213\006\145\r\213\012\150\r\213\001Z\000\n\r\213\001\030\001\"\r\213\r\213\b\249\011r\001&\001\002\000\n\004\217\001*\001.\006\t\r\213\r\213\007\145\007\"\r\213\000\234\021\198\000\134\r\213\r\213\r\213\r\213\011~\rY\r\213\0012\r\213\000\222\001j\b\237\r\213\r\213\r\213\000\n\r\213\002}\r\213\r\213\000\190\r\213\004R\r\213\r\213\006Y\r\213\r\213\r\213\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\028.\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\n\001\r\145\006\198\015*\r\225\012n\000\190\025K\025O\012n\n~\r\225\025S\r\225\014\014\012\150\018\186\r\225\014\014\r\225\r\225\023\182\r\225\018\190\000\202\r\225\006\210\005\129\012\133\001\238\r\225\r\225\r\225\006Q\000\206\r\225\r\153\000\198\tR\003\233\003\241\r\225\024*\000\254\r\225\r\225\003\233\003\241\011\178\012\154\r\225\r\225\014\165\r\225\014~\r\225\014\165\023\202\006I\000\n\r\225\019\"\r\225\r\225\000\202\r\225\r\225\r\225\000\190\nR\020\246\r\225\r\225\r\225\000\206\020\142\r\225\r\225\r\225\015.\028\158\n\134\r\225\r\225\r\225\r\225\r\225\r\225\n\005\028\"\012\133\r\225\r\225\015\218\021&\004]\028&\015\218\r\153\000\n\021~\004\017\r\225\r\225\r\225\0156\bF\r\225\r\225\r\225\r\225\018\186\r\225\t\005\r\225\001\n\n\230\r\225\018\190\001\002\r\225\r\225\018\194\014\165\014\165\005\241\000\202\n\186\014\165\005\241\006\014\017\190\r\225\004]\002]\r\225\000\206\000\006\000\"\r\225\r\225\r\225\r\225\011\182\002\129\r\225\006\025\r\225\001\018\014\130\n\005\r\225\r\225\r\225\r\129\r\225\019\"\r\225\r\225\006\137\r\225\000\n\r\225\r\225\000\190\r\225\r\225\r\225\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\000\n\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\000\190\000\n\000\198\tR\006\153\012r\012\130\012\146\003\193\000^\b\225\006\153\000f\006\153\000v\004R\027\162\006\153\r\137\006\153\006\153\000z\006\153\020\234\006q\006\153\021z\027r\011\026\000\202\006\153\000\198\006\153\011\030\017\154\006\153\001~\001^\025n\000\206\011\"\006\153\001\142\000\190\000.\011&\025r\020\250\026\183\026\187\006\153\006\153\003\173\026\191\000~\006\153\006\153\006\201\000\202\016J\006\153\021\006\006\153\006\153\000\n\006\153\006\153\006\153\000\206\021\n\001\214\006\153\006\153\006\153\000\198\016N\006\153\006\153\006\153\023\206\021n\bR\006\153\006\153\006\153\006\153\006\153\006\153\t\021\000\138\0045\006\153\006\153\000\n\t\233\003\193\011\194\022^\006\017\006\017\020\142\000\202\011\198\006\153\006\153\006I\t\162\006\153\006\153\006\153\006\153\000\206\006\153\006N\006\153\016\238\021\022\006\153\003\193\006\201\006\153\006\153\028\178\027\178\006\129\023\186\021\026\005\241\023\210\001\026\001\222\027\162\026\215\026\219\027\170\006\153\000\n\026\223\b\253\006\153\006\153\006\153\006\153\004\133\028\190\006\153\001\238\006\153\019~\0045\019\166\006\153\006\153\006\153\bb\019\230\0045\006\153\006\153\000\190\006\153\002\141\006\153\006\153\004\165\006\153\006\153\006\153\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\003^\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\r9\006\185\tz\015*\006\185\014\174\tM\014\194\t\134\n\001\006\185\006\185\t=\006\185\028\218\022v\022~\006\185\012n\006\185\006\185\025\018\006\185\r9\000\202\006\185\019\134\014\014\019\174\005\241\006\185\006\185\006\185\019\242\000\206\006\185\006\185\006\185\006\185\r9\018\014\006\185\006\185\006\185\006\185\027\186\006\185\006\185\014\222\005\241\006\185\006\185\006\185\006\185\t\222\006\185\027\170\022\134\002\173\000\n\006\185\025\018\006\185\004\n\006\185\006\185\006\185\006\185\021\138\006\185\0152\006\185\006\185\006\185\b\221\rI\006\185\006\185\006\185\015.\004*\006\185\006\185\006\185\006\185\006\185\006\185\006\185\n\021\022:\015F\0069\006\185\006)\b\205\011\230\r1\0042\0061\rq\014\178\b\209\014\198\006\185\006\185\006\185\015\218\006\185\006\185\006\185\006\185\006\185\006\185\014\246\006\185\011~\000\n\006\185\012\006\018\142\006\185\006\185\022v\022~\r9\006\185\006\185\r9\023\182\015R\006a\004\154\006\185\002m\012\"\006\185\014\165\014\165\011~\006\185\006\185\014\165\006\185\014\226\012n\006\185\0166\006\185\004\162\004\186\n\021\006\185\016j\014\014\011~\017\"\017V\004\194\006\185\017j\006\185\022j\006\185\006\185\024&\006\185\006\185\006\185\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\020v\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\027z\020z\n\r\017\134\011*\018\238\026\"\005\138\020\"\006&\t1\011:\020~\001\154\020\130\014\250\006i\001\242\020\134\012B\011B\027~\012F\0062\020\138\012J\016\146\n\001\027\130\016\178\000~\023\230\012^\020\150\ry\t\253\012n\020\154\rA\015\218\ra\002\002\006^\020\158\025\146\014\014\011~\006n\016:\011~\014\"\012\162\025\190\025\202\016n\014&\017\202\017&\017Z\020\162\002&\017n\002*\004\181\n\r\001\162\015\210\014.\000\190\n1\n1\012\186\0022\0142\n1\ri\012\190\006\238\002:\020*\006v\006\150\012\194\012\198\011V\011Z\012\202\0146\006\162\006\170\020\166\006\186\014:\020\170\006\206\006y\023\014\027\138\017\138\000\198\t\154\026.\023\170\006\254\012\206\t!\020\174\014>\014B\012\210\014F\020\178\000\n\020\182\014Z\020\186\020\190\004\145\020\194\026N\014f\012\218\007\026\002\157\015\218\020\198\000\202\007j\020\202\027\150\027\146\007v\025\222\028\154\028\174\015\"\000\206\024\026\007\166\015&\015r\004\181\011^\020\206\006!\012\222\007\174\015v\020\210\020\214\027\154\012\230\004\181\004\181\n1\n1\b>\004\181\015~\n1\012\234\000\n\006\193\006\193\bz\012\242\002~\006\193\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\b\138\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\b\146\000\n\029\003\b\158\011*\b\170\002\233\b\182\b\210\004\198\002\233\011:\b\222\001\154\b\230\b\238\b\254\001\242\005\241\012B\011B\t\n\012F\t\022\t&\012J\t2\tF\tV\t^\000~\tb\012^\t\158\t\166\t\253\t\182\001\238\t\190\t\194\t\202\002\002\t\242\000\190\012n\t\246\t\254\n\014\n\030\nF\014\"\012\162\025\190\014\014\nj\014&\018\018\nv\n\147\0176\002&\n\178\002*\004\197\n\250\001\162\015\210\014.\011.\0116\011>\012\186\0022\0142\000\198\017:\012\190\006\238\002:\011F\011N\011R\012\194\012\198\011V\011Z\012\202\0146\011z\011\142\011\154\015\214\014:\011\162\011\166\011\174\011\194\011\190\011\206\011\214\011\218\000\202\011\198\006\254\012\206\011\238\011\246\014>\014B\012\210\014F\000\206\000\n\005\241\014Z\012\014\012\022\004\145\012*\027\254\014f\012\218\0122\012>\012V\012j\012v\012~\012\134\012\142\012\170\012\178\015\218\005\241\r\026\015\"\000\n\005\241\r&\015&\015r\r^\011^\r\142\014\006\012\222\014J\015v\014R\014b\014j\012\230\014\138\004\197\014\150\014\158\014\162\014\170\015~\014\186\012\234\014\206\006\209\006\209\000\190\012\242\002~\006\209\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\014\234\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\015\002\015\014\000\198\026>\011*\015\022\015\030\015n\006\177\015z\015\130\011:\015\142\001\154\006\177\006\177\015\146\001\242\015\154\012B\011B\015\158\012F\015\166\015\174\012J\028\022\015\182\015\190\000\202\000~\015\230\012^\016*\0162\t\253\006\169\000\190\016B\000\206\016R\002\002\006\169\006\169\012n\016Z\016^\016f\016v\016~\012\158\012\162\006\177\014\014\006\169\014&\016\134\016\138\016\154\016\162\002&\016\186\002*\004\225\000\n\001\162\014*\014.\000\198\011\150\016\194\012\186\0022\0142\016\254\017\006\012\190\006\238\002:\017\022\006\169\017\030\012\194\012\198\011V\011Z\012\202\0146\017.\017>\011\194\014\173\014:\017F\017J\000\202\011\198\017R\017b\017v\017\146\017\178\002\233\006\254\012\206\000\206\002\233\014>\014B\012\210\014F\017\250\000\n\018\006\014Z\018z\018\134\004\145\018\166\018\210\014f\012\218\018\222\018\230\018\250\019\018\019\030\019.\019F\019V\000\n\019b\015\218\019\147\019\187\015\"\019\211\019\255\020\023\015&\015r\004\225\011^\0207\020O\012\222\020g\015v\020r\020\146\020\254\012\230\004\225\004\225\021\014\021?\021\150\004\225\015~\000\190\012\234\000\190\n9\n9\021\171\012\242\002~\n9\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\021\211\000v\021\223\000\182\011\"\000\186\001\146\001\150\000z\011&\000\198\014\146\021\239\021\247\015*\011*\022\018\022\027\022#\022+\004y\022F\011:\022W\001\154\022z\022\130\022\146\001\242\022\175\012B\011B\011\194\012F\022\191\000\202\012J\000\202\011\198\022\199\027f\000~\b9\012^\022\218\000\206\t\253\000\206\022\227\022\235\022\243\022\254\002\002\023#\023/\012n\b9\023B\023K\023S\023[\012\158\012\162\023~\014\014\023\135\014&\023\143\023\194\023\242\000\n\002&\000\n\002*\0242\024S\001\162\014*\014.\024[\024g\024w\012\186\0022\0142\024\127\024\139\012\190\006\238\002:\015.\024\150\024\166\012\194\012\198\011V\011Z\012\202\0146\024\179\024\187\024\194\003\165\014:\024\207\024\219\024\227\024\239\024\251\025\022\025\158\025\198\002q\b9\006\254\012\206\027\214\025\214\014>\014B\012\210\014F\026\n\000\n\026\018\014Z\027\234\026B\026j\026n\004y\014f\012\218\028B\026v\027\238\004y\004y\026\163\027j\003\165\027v\027\134\015\218\027\142\027\203\015\"\027\211\004y\004y\015&\015r\027\218\011^\027\231\027\242\012\222\028\002\015v\0287\028F\028S\012\230\028w\028\147\028\162\b9\028\170\028\182\015~\028\194\012\234\028\207\028\214\004y\028\222\012\242\002~\b9\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\028\231\000v\n\001\000\182\011\"\000\186\001\146\001\150\000z\011&\028\238\012n\028\247\029\011\000\000\011*\000\000\000\000\000\000\003\165\014\014\000\000\011:\000\000\001\154\003\165\003\165\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\003\165\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\003\165\012n\000\000\000\000\014\165\000\000\000\000\012\158\012\162\003\165\014\014\027\170\014&\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\014*\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\015\218\000\000\000\000\014\173\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\014\165\014\165\014f\012\218\000\000\014\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\218\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\173\014\173\000\000\012\242\002~\014\173\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\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\014\"\012\162\000\000\000\000\000\000\014&\026\238\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\003\177\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\004\145\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\162\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\n\029\n\029\000\000\012\242\002~\n\029\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\003\173\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\003\177\000\000\000\000\011:\000\000\001\154\003\177\003\177\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\003\177\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\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\014\"\012\162\003\177\000\000\027\170\014&\015\238\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\014\137\014:\000\000\000\000\000\000\000\000\000\000\000\000\003\173\000\000\000\000\000\000\006\254\012\206\003\173\003\173\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\003\173\027r\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\003\173\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\137\014\137\000\000\012\242\002~\014\137\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\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\014\"\012\162\000\000\000\000\000\000\014&\025\162\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\213\014\213\000\000\012\242\002~\014\213\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\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\014\"\012\162\000\000\000\000\000\000\014&\025\162\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\209\014\209\000\000\012\242\002~\014\209\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\011\026\000\000\000\000\000\000\000~\011\030\012^\000\000\000\000\t\253\025n\000\000\011\"\000\000\000\000\002\002\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\018F\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\b1\000\000\000\000\000\000\n\001\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\012n\b1\015&\015r\000\000\011^\000\000\000\000\012\222\014\014\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\b1\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\011\026\000\000\000\000\000\000\000~\011\030\012^\015\218\000\000\t\253\025n\000\000\011\"\000\000\000\000\002\002\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\019\218\012\162\000\000\000\000\000\000\014&\b1\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\001\162\000\000\014.\b1\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\000\000\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\rQ\rQ\000\000\000\000\000\000\000\000\000\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\007\229\007\229\001\242\000\000\012B\007\229\016J\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\t\245\000\198\016N\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\004R\002\026\002\022\000\000\002\030\000\000\000\000\000\000\000\000\011\194\000\000\002&\000\000\002*\000\202\011\198\001\162\005z\000\000\000\000\005\130\000\000\002.\0022\000\206\000\000\000\000\0026\001\"\002:\rQ\000\000\000\000\002>\002B\011V\014n\002F\002J\000\000\000\000\000\000\000\000\005\146\005\154\000\000\000\000\000\000\000\000\000\n\rQ\000\000\000\000\000\000\000\190\002N\000\000\000\000\005\162\000\000\002R\rQ\002E\000\n\005\170\005\178\000\000\rQ\rQ\000\000\0176\000\000\002Z\000\000\005\186\000\000\000\000\005\194\000\000\005\202\000\000\000\000\000\000\002^\000\000\000\198\017:\000\000\000\000\000\000\006I\000\000\000\022\011^\000\000\000\000\002b\000\000\004R\rQ\000\000\000\000\002n\000\000\rQ\rQ\005\210\011\194\000\000\000\000\000\000\002\134\000\202\011\198\000\000\000\000\002v\002~\000R\000V\000Z\000\146\000\206\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\005\218\000\n\000\000\002E\000\000\000\000\000\000\005\226\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\000\000\000\000\012F\000\000\002E\012J\000\000\000\000\002E\002E\000~\000\000\018\198\000\000\000\000\t\253\000\000\000\000\000\000\005\234\005\242\002\002\000\000\000\000\000\000\006I\000\000\000\000\000\000\000\000\018\214\012\162\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\000\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\002\242\003\026\012\194\012\198\011V\014n\012\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\001\t\000\000\001\t\001\t\006\254\012\206\000\000\000\000\000\000\000\000\012\210\000\000\003\"\000\n\000\000\003\002\000\000\003\018\000\000\000\000\r\185\000\000\012\218\000\000\000\000\r\185\000\000\000j\r\185\000r\r\185\000\000\r\185\000\000\000\178\000\000\000\000\r\185\r\185\000\000\r\185\000\000\000\000\011^\003*\000\000\012\222\000\000\018\218\000\000\000\000\r\185\012\230\r\185\000\000\000\000\000\000\r\185\r\185\018\226\000\000\012\234\000\000\r\185\000\000\000\000\012\242\002~\000\000\r\185\r\185\000\000\r\185\000\000\r\185\000\000\r\185\000\000\000\000\000\000\000\000\000\000\r\185\000\000\0032\000\000\000\000\001\t\000\000\r\185\r\185\003\n\000\000\r\185\000\000\000\000\000\000\000\000\r\185\r\185\000\000\007\198\r\185\000\000\r\185\001\t\000\000\000\000\000\000\001\t\001\t\r\185\000\000\000\000\000\000\000\000\r\185\r\185\000\000\000\000\001\t\003:\000\000\000\000\000\000\000\000\r\185\007\206\007\214\r\185\r\185\000\000\r\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\185\007\222\000\000\000\000\r\185\000\000\000\000\007\230\007\238\r\185\r\185\r\185\000\000\r\185\r\185\r\185\r\185\007\246\000\000\000\000\007\254\000\000\b\006\r\185\000\000\r\165\r\185\000\000\000\000\000\000\r\165\000\000\000\000\r\165\000b\r\165\000\000\r\165\000\000\000\000\000\000\r\185\r\165\r\165\000\000\r\165\r\185\r\185\r\185\b\014\000\000\r\185\r\185\000\000\000\000\r\185\r\165\000\000\r\165\000\000\r\185\r\185\r\165\r\165\000\000\r\185\000\000\000\000\r\165\000\000\000\000\000\000\000\000\000\000\r\165\r\165\000\000\r\165\000\000\r\165\000\000\r\165\000\000\000\000\000\000\000\000\000\000\r\165\000\000\b\022\000\000\000\000\000\000\000\000\r\165\r\165\b\030\000\000\r\165\000\000\000\000\000\000\000\000\r\165\r\165\000\000\000\205\r\165\000\000\r\165\005]\000\000\000\000\000\000\000\000\000\000\r\165\005]\000\000\000\000\000\000\r\165\r\165\000\000\000\000\b&\b.\000\000\000\000\000\000\000\000\r\165\002\242\003\026\r\165\r\165\000\000\r\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\165\002\250\000\000\000\000\r\165\000\000\000\000\000\205\000\205\r\165\r\165\r\165\000\000\r\165\r\165\r\165\r\165\003\"\000\000\000\000\003\002\000\000\003\018\r\165\000\000\r\193\r\165\000\000\000\000\000\000\r\193\000\000\000\000\r\193\000n\r\193\000\000\r\193\000\000\000\000\000\000\r\165\r\193\r\193\000\000\r\193\r\165\r\165\r\165\003*\000\000\r\165\r\165\000\000\000\000\r\165\r\193\000\000\r\193\000\000\r\165\r\165\r\193\r\193\000\000\r\165\000\000\000\000\r\193\000\000\000\000\000\000\000\000\000\000\r\193\r\193\000\000\r\193\000\000\r\193\000\000\r\193\000\000\000\000\000\000\000\000\000\000\r\193\000\000\0032\000\000\000\000\000\000\000\000\r\193\r\193\003\n\000\000\r\193\000\000\000\000\000\000\000\000\r\193\r\193\000\000\000\181\r\193\000\000\r\193\000\205\000\000\000\000\000\000\000\000\000\000\r\193\000\205\000\000\000\000\000\000\r\193\r\193\000\000\000\000\000\205\003:\000\000\000\000\000\000\000\000\r\193\000\181\000\181\r\193\r\193\000\000\r\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\193\002\250\000\000\000\000\r\193\000\000\000\000\000\181\000\181\r\193\r\193\r\193\000\000\r\193\r\193\r\193\r\193\000\181\000\000\000\000\003\002\000\000\003\018\r\193\000\000\b\137\r\193\000\000\000\000\000\000\b\137\000\000\000\000\b\137\000\000\b\137\000\000\b\137\000\000\000\000\000\000\r\193\b\137\b\137\000\000\b\137\r\193\r\193\r\193\000\181\000\000\r\193\r\193\000\000\000\000\r\193\b\137\000\000\b\137\000\000\r\193\r\193\b\137\b\137\000\000\r\193\000\000\000\000\b\137\000\000\000\000\000\000\000\000\000\000\b\137\b\137\000\000\b\137\000\000\b\137\000\000\b\137\000\000\000\000\000\000\000\000\000\000\b\137\000\000\000\181\000\000\000\000\000\000\000\000\b\137\b\137\003\n\000\000\b\137\001\134\000\000\000\000\000\000\b\137\b\137\000\000\000\177\b\137\000\000\b\137\000\181\000\000\000\000\000\000\000\000\000\000\b\137\000\181\000\000\000\000\000\000\b\137\b\137\000\000\000\000\000\181\000\181\000\000\000\000\000\000\000\000\b\137\000\177\000\177\b\137\b\137\000\000\b\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\137\002\250\000\000\000\000\b\137\000\000\000\000\000\177\000\177\b\137\b\137\b\137\000\000\b\137\b\137\b\137\b\137\000\177\000\000\000\000\003\002\000\000\003\018\b\137\000\000\r\177\b\137\000\000\000\000\000\000\r\177\000\000\000\000\r\177\000\000\r\177\000\000\r\177\000\000\000\000\000\000\b\137\r\177\r\177\000\000\r\177\b\137\b\137\b\137\000\177\000\000\b\137\b\137\000\000\000\000\b\137\r\177\000\000\r\177\000\000\b\137\b\137\r\177\r\177\000\000\b\137\000\000\000\000\r\177\000\000\000\000\000\000\000\000\000\000\r\177\r\177\000\000\r\177\000\000\r\177\000\000\r\177\000\000\000\000\000\000\000\000\000\000\r\177\000\000\000\177\000\000\000\000\000\000\000\000\r\177\r\177\003\n\000\000\r\177\001\166\000\000\000\000\000\000\r\177\r\177\000\000\000\169\r\177\000\000\r\177\000\177\000\000\000\000\000\000\000\000\000\000\r\177\000\177\000\000\000\000\000\000\r\177\r\177\000\000\000\000\000\177\000\177\000\000\000\000\000\000\000\000\r\177\000\169\000\169\r\177\r\177\000\000\r\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\177\000\169\000\000\000\000\r\177\000\000\000\000\000\169\000\169\r\177\r\177\r\177\000\000\r\177\r\177\r\177\r\177\000\169\000\000\000\000\003\002\000\000\000\169\r\177\000\000\b\149\r\177\000\000\000\000\000\000\b\149\000\000\000\000\b\149\000\000\b\149\000\000\b\149\000\000\000\000\000\000\r\177\b\149\b\149\000\000\b\149\r\177\r\177\r\177\000\169\000\000\r\177\r\177\000\000\000\000\r\177\b\149\000\000\b\149\000\000\r\177\r\177\b\149\b\149\000\000\r\177\000\000\000\000\b\149\000\000\000\000\000\000\000\000\000\000\b\149\b\149\000\000\b\149\000\000\b\149\000\000\b\149\000\000\000\000\000\000\000\000\000\000\b\149\000\000\000\169\000\000\000\000\000\000\000\000\b\149\b\149\003\n\000\000\b\149\n>\000\000\000\000\000\000\b\149\b\149\000\000\000\000\b\149\000\000\b\149\000\169\000\000\000\000\000\000\000\000\000\000\b\149\000\169\000\000\000\000\000\000\b\149\b\149\000\000\000\000\000\169\000\169\000\000\000\000\000\000\000\000\b\149\000\000\000\000\b\149\b\149\000\000\b\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\149\000\000\000\000\000\000\b\149\000\000\000\000\000\000\000\000\b\149\b\149\b\149\000\000\b\149\b\149\b\149\b\149\000\000\000\000\000\000\000\000\000\000\000\000\b\149\000\000\000\000\b\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\000\b\149\000\000\000\000\000\000\000\000\b\149\b\149\b\149\000\000\000\000\b\149\b\149\000\000\000\000\b\149\000\000\000\000\000\000\000\000\b\149\b\149\000\000\000\000\000\000\b\149\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\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\000\000\001\242\000\000\000\190\000\000\000\000\002\n\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\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\000\000\000\005*\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\001\241\000\000\000\000\001\241\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\226\000\000\000\000\001\241\000\000\004\230\000\000\001\241\000\n\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\001\241\000\000\000\000\001\241\000\000\001\241\000\000\000\000\000\000\0052\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\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\000\004\t\001\241\000\000\000\000\004\001\000\000\004\254\000\000\004\001\000\000\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\004\001\000\000\000\000\000\000\000\000\001\241\005B\000\000\001\241\000\000\000\000\000\000\001\241\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\001\241\002\014\004\001\000\000\001\241\001\241\000~\000\000\000\000\000\000\000\000\005J\000\000\004\001\000\000\001\241\001\241\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\000\000\000\005*\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\004\001\004\001\000\000\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\003J\004\222\002J\004\001\004\001\000\000\004\001\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\015!\004\001\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\000\000\000\000\000\000\000\000\015!\015!\000\000\000\000\000\000\0052\000\000\000\000\007Z\000\000\000\000\000\000\000\000\000\000\000\000\015!\000\000\000\000\004\242\000\000\000\000\015!\015!\000\000\004\250\007b\000\000\b\181\007n\000\000\000\000\015!\000\000\004\254\015!\000\000\015!\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\015!\000\000\000\000\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\000\000\001\242\007z\000\190\000\000\000\000\002\n\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\000\000\000\015!\000\000\000\000\002\002\000\000\007~\002\006\015!\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\007\134\000\000\005*\000\000\000\000\015!\002&\000\000\002*\000\000\000\000\001\162\015!\000\000\000\000\000\000\000\000\004\206\0022\000\000\015!\015!\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\000\000\241\000\000\000\000\000\000\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\241\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0052\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\241\000\000\000\241\000\241\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\241\002a\000\000\003\002\000\000\003\018\000\000\004\254\000\000\000\000\000\000\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\241\000\186\001\146\001\150\000z\000\000\000\000\000\000\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\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\241\000\000\000\000\000\241\000\000\000\000\000\000\003\n\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\241\000\000\005:\000\000\000\241\000\241\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\241\000\241\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\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\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000R\000V\000Z\000\146\004\238\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\000\b\197\001\154\000\000\000\000\000\000\001\242\004\254\000\190\000\000\000\000\001\246\005\006\002~\001\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\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\026\002\022\000\000\002\030\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\000\000\000\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000V\004^\000\146\000\000\000\150\000\000\000\154\000\158\004b\000^\000\000\000\170\000\174\000\000\000v\002N\000\182\000\000\000\186\001\146\002R\000z\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\000\000\000\000\000\000\000\000\001\154\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\002b\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\002~\001\149\001\149\001\149\001\149\000\000\001\149\005\233\001\149\001\149\001\149\001\149\001\162\001\149\001\149\000\000\001\149\000\000\001\149\005\233\001\149\001\149\001\149\001\149\000\000\000\000\000\000\000\000\020Z\000\000\005\233\000\000\005\233\000\000\000\000\000\000\005\233\005\233\001\149\001\149\001\149\000\000\005\233\000\000\020^\000\000\000\000\000\000\005\233\000\000\001\149\005\233\000\000\000\000\000\000\005\233\001\149\000\000\000\000\001\149\000\000\005\233\000\000\001\149\000\000\000\000\020j\000\000\000\000\001\149\000\000\000\000\005\233\000\000\000\000\000\000\001\149\005\233\011\006\000\000\000\000\001\149\000\000\005\233\000\000\000\000\000\000\000\000\000\000\000\000\001\149\001\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\005\233\000\000\000\000\005\233\000\000\000\000\005\233\000\000\001\149\000\000\000\000\001\149\000\000\000\000\001\149\000\000\000\000\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\233\005\233\005\233\001\149\005\233\005\233\000\000\005\233\001\149\000\000\001\149\000\000\000\000\001\149\005\233\020n\000\000\005\233\000\000\000\000\001\149\000\000\001\149\000\000\000\000\001\149\000\000\000\000\000\000\000\000\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\233\005\233\000\000\001\149\001\149\000\000\000\000\000\000\001\149\001\149\000\000\000\000\000\000\000R\000V\004^\000\146\000\000\000\150\021B\000\154\000\158\004b\000^\000\000\000\170\000\174\020v\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\001\154\020\130\000\000\000\000\000\000\020\134\000\000\000\000\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\024\146\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\n\166\000\000\000\000\000\000\000\000\022.\000\000\000\000\000\000\020\162\023\154\000\000\000\000\011*\000\000\001\162\000\000\000\000\000\000\000\000\011:\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\n\210\000\000\000\000\020\166\012^\000\000\020\170\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\014V\012\162\020\178\000\n\020\182\014&\020\186\020\190\000\000\020\194\002&\000\000\002*\000\000\000\000\000\000\020\198\014.\000\000\020\202\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\020\206\000\000\012\202\0146\000\000\020\210\020\214\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\011*\000\000\000\000\000\000\012\222\000\000\015v\011:\000\000\000\000\012\230\000\000\000\000\001\242\000\000\000\190\011B\015~\012F\012\234\000\000\012J\011\026\000\000\012\242\002~\000\000\011\030\012^\000\000\000\000\t\253\025n\000\000\011\"\000\000\000\000\002\002\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\012\182\012\162\000\000\000\000\000\000\014&\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\000\000\000\000\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\000\000\000\000\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\000\000\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\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\ni\ni\001\242\000\000\000\190\ni\000\000\012F\000\000\000\000\012J\000\000\000\000\000\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\019\218\012\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\197\000\000\000\000\015\197\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\000\000\000\000\012\194\012\198\000\000\012\149\012\202\000\000\000\000\000\000\000\000\000\000\015\197\015\197\000\000\000\000\000\000\015\197\000\000\000\000\015\197\015\197\000\000\006\254\012\206\000\000\000\000\015\197\000\000\012\210\015\197\015\197\000\n\015\197\015\197\000\000\012\149\015\197\000\000\015\197\015\197\012\218\000\000\015\197\000\000\000\000\015\197\000\000\015\197\015\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\012\149\000\000\012\222\000\000\000\000\000\000\000\000\000\000\012\230\000\000\012\149\000\000\015\197\000\000\015\197\000\000\000\000\012\234\000\000\000\000\000\000\000\000\012\242\002~\000\000\015\197\000\000\000\000\000\000\000\000\000\000\000\000\015\197\000\000\000\000\012\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\000\000\000\000\000\015\197\015\197\000\000\015\197\015\197\015\197\000\000\015\197\000\000\000\000\000\000\000\000\000\000\000\000\005\t\000\000\015\197\005\t\000\000\000\000\005\t\015\197\000\000\005\t\015\197\000\000\015\197\000\000\000\000\000\000\000\000\000\000\015\197\015\197\015\197\000\000\015\197\015\197\015\197\012\145\005\t\005\t\000\000\000\000\000\000\000\000\005\t\005\t\005\t\005\t\000\000\005\t\000\000\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\005\t\000\000\005\t\005\t\000\000\012\145\005\t\000\000\005\t\005\t\000\000\005\t\005\t\000\000\000\000\005\t\000\000\005\t\005\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\012\145\000\000\000\000\000\000\000\000\000\000\005\t\000\000\000\000\000\000\012\145\000\000\005\t\000\000\005\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\005\t\000\000\000\000\012\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\000\000\007\137\005\t\005\t\005\t\000\000\005\t\007\137\005\t\000\000\005\t\000\000\000\000\005\t\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\000\000\000\000\005\t\005\t\000\000\005\t\000\000\005\t\000\000\000\000\000\000\005\t\005\t\005\t\005\t\005\t\000\000\005\t\005\t\005\t\012\001\012\001\012\001\012\001\000\000\012\001\000\000\012\001\012\001\012\001\012\001\000\000\012\001\012\001\000\000\012\001\000\000\012\001\000\000\012\001\012\001\012\001\012\001\000\000\000\000\015u\000\000\000\000\015u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\001\012\001\012\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\001\000\000\015u\015u\000\000\000\000\012\001\015u\000\000\021R\002\150\015u\000\000\021Z\000\000\000\000\000\000\015u\000\000\012\001\015u\015u\000\000\015u\015u\000\000\012\001\002\158\000\000\015u\002\178\012\001\000\000\015u\000\000\000\000\015u\000\000\015u\015u\012\001\012\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\012\001\000\000\015u\012\001\015u\000\000\012\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015u\000\000\000\000\000\000\012\001\000\000\000\000\004\014\000\000\012\001\000\000\012\001\000\000\000\000\012\001\000\000\000\000\000\000\000\000\000\000\000\000\012\001\000\000\012\001\000\000\000\000\012\001\015u\015u\000\000\015u\015u\004\018\000\000\015u\000\000\000\000\000\000\000\000\000\000\000\000\012\001\012\001\004\026\000\000\000\000\021\174\012\001\015u\000\000\000\000\015u\015u\015u\015u\015u\000\000\000\000\000\000\015u\015u\015u\000\000\015u\015u\015u\015\005\000\000\000\000\015\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\000\000\000\000\000\000\000\000\015\005\015\005\000\000\000\000\000\000\015\005\000\000\000\000\002\150\015\005\000\000\000\000\000\000\000\000\000\000\015\005\000\000\000\000\015\005\015\005\000\000\015\005\015\005\000\000\000\000\002\158\000\000\015\005\002\178\000\000\000\000\015\005\000\000\000\000\015\005\000\000\015\005\015\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\005\000\000\015\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\005\011\241\011\241\011\241\011\241\000\000\011\241\004\014\011\241\011\241\011\241\011\241\000\000\011\241\011\241\000\000\011\241\000\000\011\241\000\000\011\241\011\241\011\241\011\241\000\000\000\000\000\000\015\005\015\005\000\000\015\005\015\005\004\018\000\000\015\005\000\000\000\000\000\000\011\241\011\241\011\241\000\000\000\000\004\026\000\000\000\000\000\000\000\000\015\005\000\000\011\241\015\005\015\005\015\005\015\005\015\005\011\241\000\000\000\000\015\005\015\005\015\005\000\000\015\005\015\005\015\005\000V\004^\000\146\011\241\000\150\000\000\000\154\000\158\004b\000^\011\241\000\170\000\174\000\000\000v\011\241\000\182\000\000\000\186\001\146\000\000\000z\000\000\000\000\011\241\011\241\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\000\000\000\000\000\000\001\170\000\000\000\000\000\000\011\241\000\000\000\000\011\241\000\000\000\000\011\241\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\000\000\000\000\000\000\011\241\000\000\011\241\000\000\000\000\011\241\000\000\000\000\000\000\000\000\000\000\000\000\011\241\000\000\011\241\000\000\000\000\011\241\001\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\011\241\011\241\000\000\000\000\000\000\021V\011\241\011\245\011\245\011\245\011\245\000\000\011\245\000\000\011\245\011\245\011\245\011\245\000\000\011\245\011\245\000\000\011\245\000\000\011\245\000\000\011\245\011\245\011\245\011\245\000\000\000\000\005\017\000\n\000\000\005\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\245\011\245\011\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\245\000\000\005\017\005\017\000\000\000\000\011\245\005\017\000\000\021\178\005\017\005\017\000\000\000\000\000\000\000\000\000\000\005\017\000\000\011\245\005\017\005\017\000\000\005\017\005\017\000\000\011\245\005\017\000\000\005\017\005\017\011\245\000\000\005\017\000\000\000\000\005\017\000\000\005\017\005\017\011\245\011\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\245\000\000\005\017\011\245\005\017\000\000\011\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\017\000\000\000\000\000\000\011\245\000\000\000\000\005\017\000\000\011\245\000\000\011\245\000\000\000\000\011\245\000\000\000\000\000\000\000\000\000\000\000\000\011\245\000\000\011\245\000\000\000\000\011\245\005\017\005\017\000\000\005\017\007\149\005\017\000\000\005\017\000\000\000\000\000\000\000\000\000\000\000\000\011\245\011\245\005\017\000\000\000\000\005\r\011\245\005\017\005\r\000\000\005\017\000\000\005\017\000\000\005\017\000\000\000\000\000\000\005\017\005\017\005\017\000\000\005\017\005\017\005\017\000\000\000\000\000\000\000\000\000\000\000\000\005\r\005\r\000\000\000\000\000\000\005\r\000\000\000\000\005\r\005\r\000\000\000\000\000\000\0159\000\000\005\r\000\000\000\000\005\r\005\r\000\000\005\r\005\r\000\000\000\000\005\r\000\000\005\r\005\r\000\000\000\000\005\r\000\000\000\000\005\r\000\000\005\r\005\r\000\000\0159\0159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0159\000\000\000\000\000\000\000\000\000\000\0159\0159\000\000\005\r\000\000\005\r\000\000\000\000\004\198\000\000\0159\000\000\000\000\0159\000\000\0159\005\r\000R\000V\004^\000\146\000\000\000\150\005\r\000\154\000\158\004b\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\0159\005\r\005\r\000\000\005\r\007\141\005\r\000\000\005\r\000\000\000\000\000\000\021\186\001\154\021\214\000\000\000\000\005\r\000\000\000\000\000\000\000\000\005\r\000\000\021\226\005\r\000\000\005\r\000\000\005\r\000~\000\000\000\000\005\r\005\r\005\r\000\000\005\r\005\r\005\r\0159\000\000\000\000\021\250\000\000\000\000\000\000\0159\000\000\000\000\n\166\000\000\000\000\000\000\000\000\022.\000\000\000\000\000\000\000\000\000\000\0159\000\000\000\000\022N\001\162\000\000\000\000\0159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0159\0159\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\004\170\n\210\000\000\004\174\022Z\000\000\000\000\022\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\022\202\000\000\004\202\000\000\000\000\022\246\000\000\t\229\006\142\006\154\023&\006\178\006\190\006\214\006\218\000\000\000\000\0232\002&\023^\002*\000\000\024^\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\024j\024\130\000\000\006\242\006\246\000\000\024\142\006\250\000\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\000\000\000\000\006\254\007\002\000\000\011\026\000\000\000\000\007\006\000\000\011\030\000\n\000\000\000\000\000\000\025n\000\000\011\"\000\000\000\000\007\014\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\190\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\004\025\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\006\218\000\198\011\150\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\011\194\000\000\000\000\006\242\006\246\000\202\011\198\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\007\014\000\000\000\000\004\165\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\000\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\t\t\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\006\218\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\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\000\000\000\000\000\000\006\242\006\246\000\000\000\000\006\250\000\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\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\000\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\bV\000\000\003\146\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\000\000\000\000\000\000\006\242\006\246\002\242\003\026\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\006\254\007\002\000\213\003\154\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\007\014\000\000\015\141\000\000\000\000\015\141\000\000\000\000\000\000\006\t\000\000\000\000\000\000\007\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007*\000\000\003*\000\000\015\141\015\141\0072\000\000\000\000\015\141\000\000\000\000\t\025\015\141\000\000\0076\000\000\000\000\000\000\015\141\007>\002~\015\141\015\141\000\000\015\141\015\141\000\000\000\000\000\000\000\000\015\141\000\000\004\198\000\000\015\141\000\000\000\000\015\141\000\000\015\141\015\141\0032\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\000\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\000\015\141\000\000\015\141\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\162\003:\015\141\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\000\000\015\141\015\141\000\000\015\141\015\141\000\000\000\000\015\141\000\000\000\000\000\000\000\000\001\154\015\029\000\000\000\000\015\029\000\000\001\170\000\000\000\000\015\141\000\000\000\000\015\141\015\141\015\141\015\141\015\141\000~\000\000\000\000\015\141\015\141\015\141\000\000\015\141\015\141\015\141\015\029\015\029\000\000\000\000\000\000\015\029\000\000\000\000\000\000\015\029\001\158\000\000\000\000\000\000\000\000\015\029\000\000\000\000\015\029\015\029\000\000\015\029\015\029\000\000\000\000\001\162\000\000\015\029\000\000\004\198\000\000\015\029\000\000\000\000\015\029\000\000\015\029\015\029\000\000\000\000\000\000\000\000\000\000\000\000\011V\011Z\000\000\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\000\000\000\000\000\000\015\029\000\000\015\029\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\015\029\004\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\011^\015\029\015\029\000\000\015\029\015\029\000\000\000\000\015\029\000\000\006\001\000\000\000\000\000\000\015Y\006\001\000\000\015Y\000\000\000\000\000\000\000\000\015\029\000\000\000\000\015\029\015\029\015\029\015\029\015\029\000\000\000\000\000\000\015\029\015\029\015\029\000\000\015\029\015\029\015\029\015Y\015Y\000\000\000\000\000\000\015Y\000\000\000\000\r\n\015Y\000\000\000\000\000\000\000\000\000\000\015Y\000\000\000\000\015Y\015Y\000\000\015Y\015Y\000\000\000\000\r\018\000\000\015Y\r\030\000\000\000\000\015Y\000\000\000\000\015Y\000\000\015Y\015Y\000\000\000\000\000\000\000\000\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\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\015Y\000\000\015Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Y\000\000\000\000\000\000\001\225\001\225\000\000\r*\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\001\225\000\000\001\225\001\225\015Y\015Y\000\000\015Y\001\225\r.\000\000\015Y\001\225\000\000\000\000\001\225\000\000\001\225\001\225\000\000\r6\001\225\000\000\000\000\000\000\000\000\000\000\000\000\015Y\000\000\015Y\000\000\000\000\000\000\000\000\000\000\015Y\015Y\015Y\000\000\015Y\015Y\015Y\000\000\001\225\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\001\225\000\000\000\000\001\225\001\225\000\000\001\225\001\225\000\000\000\000\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\001\225\000\000\001\225\001\225\000\000\000\000\001\225\002\186\000\000\001\225\001\225\000\000\000\000\001\225\000\000\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\225\000\000\001\225\001\225\001\225\001\225\001\225\000\000\000\000\000\000\000\000\003\254\001\225\001\225\000\000\001\225\001\225\001\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\225\002\194\000\000\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\001i\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\001\225\001\225\001\225\000\000\000\000\000\000\000\000\003\242\001\225\001\225\000\000\001\225\001\225\001\225\001i\001i\000\000\000\000\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001i\001i\000\000\001i\001i\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\003\002\000\000\003\018\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\003\249\003\249\003\249\003\249\000\000\003\249\000\000\003\249\003\249\003\249\003\249\000\000\003\249\003\249\000\000\003\249\000\000\003\249\000\000\003\249\003\249\003\249\003\249\000\000\000\000\000\000\001i\000\000\000\000\001i\001i\000\000\001\210\003\n\000\000\000\000\000\000\000\000\003\249\001]\000\000\000\000\001]\000\000\003\249\000\000\000\000\001i\000\000\000\000\001i\001i\001i\001i\001i\003\249\000\000\000\000\000\000\001i\001i\000\000\001i\001i\001i\001]\001]\000\000\000\000\000\000\001]\000\000\000\000\000\000\001]\003\249\000\000\000\000\000\000\000\000\001]\003\249\000\000\001]\001]\000\000\001]\001]\000\000\000\000\003\249\000\000\001]\000\000\000\000\000\000\001]\000\000\000\000\003\002\000\000\001]\001]\000\000\003\249\003\249\000\000\000\000\000\000\000\000\000\000\000\000\003\249\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\003\249\000\000\000\000\000\000\001]\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001]\000\000\000\000\001]\001]\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001a\003\249\000\000\001a\000\000\001\170\000\000\000\000\001]\000\000\000\000\001]\001]\001]\001]\001]\000~\000\000\000\000\000\000\001]\001]\000\000\001]\001]\001]\001a\001a\000\000\000\000\000\000\001a\000\000\000\000\000\000\001a\001\174\000\000\000\000\000\000\000\000\001a\001\202\000\000\001a\001a\000\000\001a\001a\000\000\000\000\001\162\000\000\001a\000\000\000\000\000\000\001a\000\000\000\000\003\002\000\000\001a\001a\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001a\000\000\000\000\000\000\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\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001e\014E\000\000\001e\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\001a\001a\001a\000\000\000\000\000\000\000\000\001a\001a\000\000\001a\001a\001a\001e\001e\000\000\000\000\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001e\001e\000\000\001e\001e\000\000\000\000\000\000\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\003\002\000\000\003\018\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000\000\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001e\000\000\000\000\001e\001e\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001u\000\000\000\000\001u\000\000\001\170\000\000\000\000\001e\000\000\000\000\001e\001e\001e\001e\001e\000~\000\000\000\000\000\000\001e\001e\000\000\001e\001e\001e\002\242\003\026\000\000\000\000\000\000\001u\000\000\000\000\000\000\001u\001\174\000\000\000\000\000\000\000\000\002\250\001\202\000\000\001u\001u\000\000\001u\001u\000\000\000\000\001\162\000\000\001u\000\000\000\000\000\000\001u\000\000\000\000\003\002\000\000\003\018\001u\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001u\000\000\000\000\000\000\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\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001u\000\000\000\000\001u\001u\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001m\002\197\000\000\001m\000\000\000\000\000\000\000\000\001u\000\000\000\000\001u\001u\001u\001u\001u\000\000\000\000\000\000\000\000\001u\001u\000\000\001u\001u\001u\002\242\003\026\000\000\000\000\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001m\001m\000\000\001m\001m\000\000\000\000\000\000\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\003\002\000\000\003\018\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\001m\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001m\000\000\000\000\001m\001m\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001q\000\000\000\000\001q\000\000\001\170\000\000\000\000\001m\000\000\000\000\001m\001m\001m\001m\001m\000~\000\000\000\000\000\000\001m\001m\000\000\001m\001m\001m\002\242\003\026\000\000\000\000\000\000\001q\000\000\000\000\000\000\001q\001\174\000\000\000\000\000\000\000\000\002\250\001\202\000\000\001q\001q\000\000\001q\001q\000\000\000\000\001\162\000\000\001q\000\000\000\000\000\000\001q\000\000\000\000\003\002\000\000\003\018\001q\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001q\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001q\000\000\000\000\001q\001q\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001y\002\189\000\000\001y\000\000\000\000\000\000\000\000\001q\000\000\000\000\001q\001q\001q\001q\001q\000~\000\000\000\000\000\000\001q\001q\000\000\001q\001q\001q\002\242\003\026\000\000\000\000\000\000\001y\000\000\000\000\000\000\001y\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\001y\001y\000\000\001y\001y\000\000\000\000\001\162\000\000\001y\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tr\000\000\000\000\000\000\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\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tv\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001y\001y\000\000\000\000\003\n\000\000\000\000\000\000\004)\000\000\001\129\000\000\000\000\001\129\000\000\000\000\000\000\000\000\001y\000\000\000\000\001y\001y\001y\001y\001y\000\000\000\000\000\000\000\000\001y\001y\000\000\001y\001y\001y\002\242\003\026\000\000\000\000\000\000\001\129\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001\129\001\129\000\000\001\129\001\129\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001\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\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\0032\000\000\000\000\001\129\001\129\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\001}\000\000\000\000\000\000\000\000\001\129\000\000\000\000\001\129\001\129\001\129\001\129\001\129\000~\000\000\000\000\000\000\001\129\001\129\000\000\001\129\003:\001\129\002\242\003\026\000\000\000\000\000\000\001}\000\000\000\000\000\000\001}\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\001}\001}\000\000\001}\001}\000\000\000\000\001\162\000\000\001}\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tr\000\000\000\000\000\000\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\001}\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\tv\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001}\001}\000\000\000\000\003\n\000\000\000\000\000\000\tA\000\000\003\146\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001}\000\000\000\000\001}\001}\001}\001}\001}\000\000\000\000\000\000\000\000\001}\001}\000\000\001}\003:\001}\002\242\003\026\000\000\000\000\000\000\001\133\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001\133\001\133\000\000\001\133\003\154\000\237\000\000\000\000\000\237\001\133\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\237\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*\002\250\001\133\000\000\000\000\000\237\000\000\000\237\000\237\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\237\000\000\000\000\003\002\002\213\003\018\000\000\000\000\000^\002\213\000\000\000f\000\000\000v\002\213\000\000\002\213\000\000\000\000\000\000\000z\002\213\002\213\0032\000\000\000\000\001\133\001\133\000\000\000\000\003\n\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\001\133\000\000\000\000\001\133\001\133\001\133\001\133\001\133\000\000\000~\002\213\000\000\001\133\001\133\002\213\001\133\003:\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\002\213\002\213\000\237\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\000\138\000\000\000\000\000\000\000\000\000\237\000\000\002\213\000\000\000\237\000\237\000\000\002\213\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\237\002\213\000\000\002\209\000\000\002\213\000\000\000^\002\209\000\000\000f\000\000\000v\002\209\000\000\002\209\002\213\000\000\000\000\000z\002\209\002\209\000\000\000\000\000\000\000\000\002\213\000\000\000\000\000\000\000\000\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\002\209\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\000\000\002\213\002\213\000\000\000\000\002\213\002\209\002\209\000\000\002\230\002\213\002\213\003B\000\000\000\000\002\213\000\000\000\000\000\000\002\209\000\000\000\138\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\002\209\002\209\003r\003z\003\146\000\000\000\000\002=\000\000\000\000\002\209\002=\000\000\000\000\002\209\000\000\000\000\003\130\000\000\000\000\002=\002=\000\193\003\138\003\170\002\209\000\000\000\000\000\000\002=\002\242\003\026\000\000\003\178\000\000\002\209\003\186\000\000\003\194\002=\002\209\000\000\000\000\000\000\000\000\002\250\000\000\000\000\002\242\003\026\000\000\000\201\000\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\"\000\000\002\250\003\002\003\202\003\018\002=\000\000\000\193\000\193\000\000\000\000\002\209\000\000\000\000\002\209\002\209\002=\000\193\002\209\000\000\003\002\000\000\003\018\002\209\002\209\000\000\000\000\000\000\002\209\000\000\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\003\210\000\000\000\000\002=\002=\000\000\003*\003\218\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\000\000\000\000\000\000\000\002=\000\000\000\000\002=\002=\002=\002=\0032\000\000\000\000\000\000\000\000\002=\002=\003\n\003\226\003\234\002=\002\242\003\026\000\000\000\000\000\000\000\145\000\000\000\193\000\000\000\145\000\201\000\000\000\000\000\000\003\n\002\250\000\000\000\201\000\145\000\145\000\000\000\145\000\145\000\000\000\000\000\201\003:\000\145\000\193\000\000\000\000\003\"\000\000\000\000\003\002\000\193\003\018\000\145\000\000\000\000\000\000\000\000\000y\000\193\000\193\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\003*\000\000\000\145\000\000\000\000\000y\000y\000\000\000\000\000\000\000y\000\000\000\000\000\145\000y\000\000\000\000\000\000\000\000\000\000\002\250\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\000y\000\000\000\000\003\002\0032\003\018\000y\000\145\000\145\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\145\000\145\000\145\000y\000\000\000y\000\000\000\000\000\145\000\145\000\000\000\145\003:\000\145\000\000\000\000\000y\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000y\000y\000\000\000~\000\000\000\000\000\000\000y\000y\000\000\000y\000y\000y\000u\000u\000\000\000\000\000\000\000u\000\000\000\000\000\000\000u\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\000u\000u\000\000\000u\000u\000\000\000\000\001\162\000\000\000u\000\000\tj\tn\000u\000\000\000\000\003\002\000\000\003\018\000u\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000\000\tr\000\000\000\000\000\000\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\000\000\000u\000\000\000\000\000m\000m\000\000\000\000\000\000\000m\000\000\000\000\000u\000m\000\000\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000m\000m\000\000\tv\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\003\002\000u\000m\000m\000u\000u\000\000\000\000\003\n\000\000\000\000\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000u\000u\000u\000m\000\000\000m\000\000\000\000\000u\000u\000\000\000u\000u\000u\000\000\000\000\000m\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000m\000m\000\000\000~\000\000\000\000\000\000\000m\000m\000\000\000m\000m\000m\002\242\003\026\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\153\001\158\000\000\000\000\000\000\000\000\002\250\026\022\000\000\000\153\000\153\000\000\000\153\003\154\000\000\000\000\001\162\000\000\000\153\000\000\026\026\tn\003\"\000\000\000\000\003\002\000\000\003\018\000\153\000\000\000\000\000\000\000\000\003\146\000\000\000\000\000\141\000\000\tr\000\000\000\000\000\000\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\153\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\141\000\000\000\000\000\153\000\141\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\141\000\141\000\000\000\141\000\141\000\000\026\030\000\000\000\000\000\141\000\000\000\000\000\000\003\"\000\000\000\000\003\002\0032\003\018\000\141\000\153\000\153\000\000\000\000\003\n\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\153\000\000\000\000\000\153\000\153\000\153\000\153\003*\000\000\000\141\000\000\000\000\000\153\000\153\000\000\003\162\003:\000\153\000\000\000\000\000\141\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\0032\000\000\000\000\000\141\000\141\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000\133\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\141\000\000\000\000\000\141\000\141\000\141\000\141\000\000\000~\000\000\000\000\000\000\000\141\000\141\000\000\000\141\003:\000\141\002\242\003\026\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\133\001\158\000\000\000\000\000\000\000\000\002\250\026\022\000\000\000\133\000\133\000\000\000\133\000\133\000\000\000\000\001\162\000\000\000\133\000\000\026\026\tn\000\133\000\000\000\000\003\002\000\000\003\018\000\133\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000\000\tr\000\000\000\000\000\000\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\133\000\000\000\000\000q\000q\000\000\000\000\000\000\000q\000\000\000\000\000\133\000q\000\000\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000q\000q\000\000\026\030\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\003\002\000\133\000q\000q\000\133\000\133\000\000\000\000\003\n\000\000\000\000\000\000\t%\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\133\000\133\000\133\000\133\000q\000\000\000q\000\000\000\000\000\133\000\133\000\000\000\133\000\133\000\133\000\000\000\000\000q\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000}\000\000\000\000\000}\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000q\000q\000\000\000~\000\000\000\000\000\000\000q\000q\000\000\000q\000q\000q\002\242\003\026\000\000\000\000\000\000\000}\000\000\000\000\000\000\000}\001\158\000\000\000\000\000\000\000\000\002\250\026\022\000\000\000}\000}\000\000\000}\000}\000\000\000\000\001\162\000\000\000}\000\000\026\026\tn\000}\000\000\000\000\003\002\000\000\003\018\000}\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\242\003\026\000\000\000\000\000\000\000\129\000\000\000\000\000}\000\129\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\129\000\129\000\000\000\129\000\129\000\000\026\030\000\000\000\000\000\129\000\000\000\000\000\000\000\129\000\000\000\000\003\002\000}\003\018\000\129\000}\000}\000\000\000\000\003\n\000\000\000\000\000\000\002\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}\000}\003*\000\000\000\129\000\000\000\000\000}\000}\000\000\000}\000}\000}\000\000\000\000\000\129\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\000\149\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\000\000\000\000\129\000\129\000\000\000\129\000\129\000\129\002\242\003\026\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\149\001\158\000\000\000\000\000\000\000\000\002\250\t~\000\000\000\149\000\149\000\000\000\149\003\154\000\000\000\000\001\162\000\000\000\149\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\000\149\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\137\000\000\tr\000\000\000\000\000\000\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\149\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\137\000\000\000\000\000\149\000\137\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\137\000\137\000\000\000\137\000\137\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\000\003\"\000\000\000\000\003\002\0032\003\018\000\137\000\149\000\149\000\000\000\000\003\n\000\000\000\000\000\000\tQ\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\149\000\149\000\149\000\149\003*\000\000\000\137\000\000\000\000\000\149\000\149\000\000\000\149\003:\000\149\000\000\000\000\000\137\000\000\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\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\181\0032\000\000\000\000\000\137\000\137\000\000\000\000\003\n\000\000\000\000\r\181\000\000\r\181\012\005\012\005\000\000\r\181\000\000\000\000\012\005\000\000\000\137\r\181\000\173\000\137\000\137\000\137\000\137\r\181\000\000\000\000\r\181\000\000\000\137\000\137\r\181\000\137\000\137\000\137\000\000\000\000\r\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\r\181\000\000\000\000\012\005\000\000\r\181\r\181\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\003\002\000\000\000\173\012\005\000\000\r\181\000\000\000\000\r\181\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\r\181\000\000\000\000\000\000\000\000\r\181\r\181\r\181\000\173\r\181\r\181\000\000\r\181\000\000\000\000\002\002\000\000\000\000\002\006\r\181\000\000\000\000\r\181\000\000\002\018\002\022\000\000\002\030\000\000\007\030\000\000\000\000\000\000\000\000\002&\000\000\002*\r\181\000\000\000\000\000\000\000\000\r\181\r\181\012\005\002.\0022\000\000\000\173\br\0026\001\"\002:\000\000\000\000\003\n\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\015q\000\000\000\173\015q\000\000\000\000\000\000\000\000\000\000\000\173\000\000\002N\000\000\000\000\000\000\000\000\002R\000\173\000\173\000\n\000\000\000\000\000\000\000\000\000\000\000\000\015q\015q\002Z\000\000\000\000\015q\000\000\000\000\000\000\015q\000\000\000\000\000\000\002^\t\245\015q\000\000\000\000\015q\015q\000\000\015q\015q\000\000\000\000\000\000\002b\015q\000\000\004\198\000\000\015q\002n\000\000\015q\t\245\015q\015q\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\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\015q\000\000\015q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\015q\015q\000\000\015q\000\000\000\000\000\000\015q\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\004\198\015q\000\000\015q\000\000\002&\000\000\002*\000\000\015q\015q\015q\000\000\015q\015q\015q\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\012b\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\t\245\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\249\000\000\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\001\249\001\249\002Z\000\000\000\000\001\249\000\000\000\000\000\000\001\249\000\000\000\000\000\000\002^\000\000\001\249\000\000\000\000\001\249\001\249\000\000\001\249\001\249\000\000\000\000\000\000\002b\001\249\000\000\000\000\000\000\001\249\002n\000\000\001\249\000\000\001\249\001\249\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\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\001\249\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\249\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\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\001\249\rJ\000\000\001\249\t\245\000\000\000\000\001\249\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\001\249\000\000\001\249\000\000\000\000\002&\000\000\002*\rR\001\249\001\249\000\000\001\249\001\249\001\249\000\000\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\018\202\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\t\030\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\t\014\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\b\246\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002V\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000R\000\000\000\000\000\000\000\000\000\000\007\241\020v\000\000\000\000\000\000\007\241\002N\000\000\000\000\000\000\007\241\002f\007\241\020z\000\n\001\150\000\000\007\241\007\241\000\000\022\250\000\000\000\000\002Z\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\000\000\000\000\002^\000\000\020\138\000\000\007\241\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\002j\000\000\020\154\007\241\000\000\000\000\002n\007\241\020\158\000\000\000\000\000\000\000\000\000\000\000\000\002r\000\000\000\000\000\000\022\002\002v\002~\007\241\007\241\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\007\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\000\000\000\000\007\241\007\241\000\000\000\000\012-\000\000\020\166\000\000\000\000\020\170\007\241\000\000\000\000\000\000\007\241\000\000\000\000\000\000\000\000\000\000\022\006\000\000\020\174\000\000\000\000\007\241\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\007\241\000\000\000\000\000\000\000\000\007\241\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\020\206\002\n\000\000\000\000\002\014\020\210\020\214\012-\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\007\241\007\241\000\000\002\002\007\241\000\000\002\006\000\000\000\000\007\241\007\241\000\000\002\"\004\146\007\241\002\030\000\000\004\166\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\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\185\000\000\000\000\004\214\004\218\000\000\000\000\004\222\002J\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\000\000\004\226\002\242\003\026\000\000\000\000\004\230\000\000\000\000\000\n\002\002\000\000\000\000\002\006\000\000\000\000\000\000\002\250\004\238\002\018\004\178\000\000\002\030\000\185\000\185\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\185\000\000\000\000\003\002\000\000\003\018\000\000\002.\0022\004\242\000\000\000\000\0026\001\"\002:\004\250\000\000\000\000\002>\002B\000\000\000\000\002F\002J\004\254\000\000\000\000\000\000\000\000\005\006\002~\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\006j\000\000\000\000\000\000\000\000\000\000\002Z\000\000\000\000\000\000\003\225\000\000\003\225\000\000\000\000\003\225\000\000\002^\003\225\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\002j\000\000\000\000\000\000\003\225\000\000\002n\003\225\000\000\000\000\000\000\000\000\000\185\003\225\003\225\002r\003\225\000\000\000\000\000\185\002v\002~\000\000\003\225\000\000\003\225\000\000\000\185\000\185\000\000\000\000\000\000\000\000\000\000\003\225\003\225\000\000\000\000\000\000\003\225\003\225\003\225\000\000\000\000\000\000\003\225\003\225\000\000\000\000\003\225\003\225\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\000\000\003\225\000\000\000\000\000\000\000\000\003\225\000\000\000\000\003\225\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\003\225\002\018\012N\000\000\002\030\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\002.\0022\003\225\000\000\000\000\0026\001\"\002:\003\225\000\000\000\000\002>\002B\000\000\000\000\002F\002J\003\225\000\000\000\000\000\000\000\000\003\225\003\225\000\000\000\000\000\000\000\000\020v\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\020z\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\020~\000\000\020\130\012Y\012Y\000\000\020\134\000\000\000\000\000\000\002^\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\189\002j\000\000\020\154\000\000\000\000\000\000\002n\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\002r\000\000\000\000\000\000\020v\002v\002~\012Y\000\000\020\162\002\242\003\026\000\000\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\020~\000\000\020\130\000\000\000\189\000\189\020\134\000\000\000\000\012-\000\000\012Y\020\138\020\166\000\189\000\000\020\170\003\002\020\142\003\018\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\020\174\000\000\020\158\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\023v\022\138\000\000\012-\003*\020\162\020\198\000\000\000\000\020\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\000\020\206\000\000\000\000\000\000\000\000\020\210\020\214\012Y\000\000\000\000\012-\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000\000\003\n\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\189\r~\000\000\000\000\r\134\000\000\020\198\000\189\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\189\000\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\000\000\r\150\r\158\020\210\020\214\012-\002M\000\000\000\000\000\000\002M\000\000\000\000\000\000\000\000\000\000\r\166\000\000\000\000\002M\002M\000\000\r\174\r\182\000\000\000\000\000\000\001E\002M\000\000\001E\000\000\r\190\000\000\000\000\r\198\000\000\r\206\002M\000\000\000\000\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\242\003\026\000\000\000\000\000\000\001E\000\000\000\000\000\000\001E\000\000\r\214\000\000\002M\000\000\002\250\000\000\000\000\001E\001E\000\000\001E\001E\000\000\002M\000\000\000\000\001E\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001E\000\000\000\000\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\r\222\000\170\000\174\002M\000v\000\000\000\182\r\230\000\186\001\146\001\150\000z\003*\000\000\001E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002M\001E\002M\001\154\000\000\000\000\000\000\000\000\000\000\002M\002M\000\000\r\238\r\246\002M\000\000\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001E\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\158\001-\000\000\000\000\001-\000\000\026&\000\000\000\000\000\000\000\000\000\000\001E\000\000\001E\001\162\000\000\000\000\000\000\026\026\tn\001E\001E\000\000\001E\003:\001E\001-\001-\000\000\000\000\000\000\001-\000\000\000\000\000\000\001-\tr\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001-\001-\000\000\001-\001-\000\000\000\000\000\000\001)\001-\000\000\001)\000\000\001-\000\000\000\000\003\002\000\000\003\018\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\001)\001)\000\000\000\000\000\000\001)\000\000\000\000\000\000\001)\000\000\001-\000\000\001-\000\000\002\250\000\000\000\000\001)\001)\000\000\001)\001)\000\000\001-\t5\000\000\001)\000\000\000\000\000\000\001)\000\000\000\000\003\002\000\000\003\018\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\001-\000\000\000\000\001-\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001)\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\001)\001-\000\000\000\000\000\000\000\000\000\000\000\000\001-\001-\000\000\001-\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\001)\000\000\000\000\001)\000\000\000\000\000\000\003\n\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\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)\001)\001)\001!\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!\000\000\000\000\001!\001!\000\000\001!\001!\000\000\000\000\000\000\003\146\001!\000\000\001M\000\000\001!\000\000\000\000\003\002\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\002\242\003\026\000\000\000\000\000\000\001M\000\000\000\000\000\000\001M\000\000\001!\000\000\001!\000\000\002\250\000\000\000\000\001M\001M\000\000\001M\003\154\000\000\001!\000\000\000\000\001M\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\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\001!\000\000\000\000\001!\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\003*\000\000\001M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\001M\001!\000\000\000\000\000\000\000\000\000\000\000\000\001!\001!\000\000\001!\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\0032\000\000\000\000\001M\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\003\146\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001M\000\000\001M\000\000\000\000\000\000\000\000\000\000\000\000\001M\001M\000\000\003\162\003:\001M\002\242\003\026\000\000\000\000\000\000\001A\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001A\001A\000\000\001A\001A\000\000\000\000\000\000\0019\001A\000\000\0019\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001A\000\000\000\000\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\242\003\026\000\000\000\000\000\000\0019\000\000\000\000\000\000\0019\000\000\003*\000\000\001A\000\000\002\250\000\000\000\000\0019\0019\000\000\0019\0019\000\000\001A\000\000\000\000\0019\000\000\000\000\000\000\0019\000\000\000\000\003\002\000\000\003\018\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001A\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\003*\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001A\0019\001A\000\000\000\000\000\000\000\000\000\000\000\000\001A\001A\000\000\001A\003:\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\0019\000\000\000\000\000\000\003\n\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\000\000\000\000\0019\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\0019\0019\000\000\0019\0019\0019\001%\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%\000\000\000\000\001%\001%\000\000\001%\001%\000\000\000\000\000\000\0011\001%\000\000\0011\000\000\001%\000\000\000\000\003\002\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\002\242\003\026\000\000\000\000\000\000\0011\000\000\000\000\000\000\0011\000\000\001%\000\000\001%\000\000\002\250\000\000\000\000\0011\0011\000\000\0011\0011\000\000\001%\000\000\000\000\0011\000\000\000\000\000\000\0011\000\000\000\000\003\002\000\000\003\018\0011\000\000\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\003\n\000\000\000\000\000\000\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\0011\001%\000\000\000\000\000\000\000\000\000\000\000\000\001%\001%\000\000\001%\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\0011\000\000\000\000\0011\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\0011\0011\000\000\0011\0011\0011\002\242\003\026\000\000\000\000\000\000\0015\000\000\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\0015\0015\000\000\0015\0015\000\000\000\000\000\000\003\146\0015\000\000\001I\000\000\0015\000\000\000\000\003\002\000\000\003\018\0015\000\000\000\000\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\242\003\026\003\146\000\000\000\000\001I\000\000\000\000\000\000\001I\000\000\003*\000\000\0015\000\000\002\250\000\000\000\000\001I\001I\000\000\001I\003\154\000\000\0015\000\000\000\000\001I\002\242\003\026\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001I\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\000\209\003\154\0015\000\000\000\000\0015\000\000\000\000\000\000\003\n\003\"\000\000\000\000\003\002\003*\003\018\001I\000\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\001I\0015\000\000\000\000\000\000\000\000\000\000\000\000\0015\0015\000\000\0015\0015\0015\000\000\003*\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001I\002\250\000\000\000\000\003\n\000\000\000\000\000\197\000\197\000\000\001=\000\000\000\000\001=\000\000\000\000\000\000\003\"\000\000\000\000\003\002\001I\003\018\001I\000\000\0032\000\000\000\000\000\000\000\000\001I\001I\003\n\001I\003:\001I\002\242\003\026\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\209\000\000\000\000\003*\000\000\002\250\000\000\000\209\001=\001=\000\000\001=\001=\000\000\000\000\000\209\003:\001=\000\000\000\000\000\000\003\"\000\000\023b\003\002\023j\003\018\001=\000\000\000\000\000\000\000\000\000\000\000\000\023r\000\000\000\000\000\000\000\000\023\146\000\000\000\000\000\000\0032\000\000\000\000\020z\000\000\000\000\000\000\003\n\000\000\000\000\003*\000\000\001=\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\197\000\000\001=\000\000\000\000\020\138\000\000\000\197\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\197\000\197\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\0032\000\000\000\000\001=\000\000\000\000\000\000\003\n\000\000\000\000\000\000\020\162\023\154\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\000\000\000\000\000\000\000\000\000\001=\001=\000\000\001=\001=\001=\000\000\000\000\000\000\020\166\006A\000\000\020\170\000\000\000\000\006A\000\000\000\000\000\000\000\000\006A\000\000\006A\000\000\000\000\020\174\000\000\006A\006A\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\020\206\000\000\006A\000\000\000\000\020\210\020\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015=\006A\006A\015=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004j\000\000\000\000\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\000\000\015=\015=\006A\006A\000\000\000\000\000\000\000\000\005\030\000\000\000\000\000\000\006A\000\000\000\000\015=\006A\000\000\000\000\015=\000\000\015=\015=\000\000\000\000\005&\000\000\006A\006*\000\000\000\000\015=\000\000\000\000\015=\000\000\015=\006A\000\000\000\000\000\000\000\000\006A\000\000\000\000\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\242\000\000\000\190\000\000\000\000\004\170\015=\000\000\004\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\000\000\006A\006A\000\000\002\002\006A\0066\000\000\000\000\000\000\006A\006A\000\000\006\142\006\154\006A\000\000\000\000\006\174\000\000\000\000\000\000\000\000\002&\000\000\002*\015=\015=\000\000\015=\000\000\006:\000\000\015=\006\222\0022\000\000\000\000\000\000\006\234\001\"\002:\006B\000\000\000\000\006\242\006\246\015=\000\000\006\250\000\000\015=\015=\000\000\000\000\000\000\000\000\000\000\015=\000\000\000\000\000\000\015=\015=\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\001\242\000\000\000\190\000\000\000\000\012F\000\000\007\014\012J\000\000\000\000\000\000\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\007*\000\000\012\182\012\162\000\000\000\000\0072\r\254\000\000\000\000\000\000\000\000\002&\000\000\002*\0076\000\000\000\000\000\000\000\000\007>\002~\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\000\000\000\000\012\194\012\198\000\000\020v\012\202\000\000\000\000\000\000\000\000\000\000\000\000\020v\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\006\254\012\206\020z\000\000\000\000\020~\012\210\020\130\000\000\000\n\000\000\020\134\000\000\020~\000\000\020\130\000\000\020\138\012\218\020\134\000\000\000\000\000\000\020\142\000\000\020\138\020\150\000\000\000\000\000\000\020\154\020\142\000\000\000\000\020\150\000\000\020\158\000\000\020\154\000\000\000\000\000\000\012\222\000\000\020\158\000\000\000\000\022\210\012\230\000\000\000\000\000\000\020\162\000\000\000\000\023:\000\000\012\234\000\000\000\000\020\162\000\000\012\242\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\012-\000\000\020\166\000\000\000\000\020\170\000\000\000\000\012-\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\020\174\020\186\020\190\000\000\020\194\020\178\000\n\020\182\000\000\020\186\020\190\020\198\020\194\000\000\020\202\000\000\t\237\000\000\000\000\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\t\237\020\206\000\000\000\000\000\000\000\000\020\210\020\214\012-\020\206\000\000\t\237\000\000\t\237\020\210\020\214\012-\t\237\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\000\000\b\169\000\000\t\237\000\000\000\000\t\237\000\000\000\000\000\000\t\237\021^\000\000\b\169\000\000\000\000\t\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\169\000\000\b\169\000\000\000\000\000\000\b\169\000\000\t\237\000\000\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\b\169\000\000\000\000\b\169\000\000\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\t\237\000\000\000\000\000\000\000\000\b\169\023\154\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\000\000\000\000\t\237\t\237\t\237\000\000\t\237\t\237\000\000\t\237\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\t\237\b\169\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\b\169\000\000\000\000\t\237\t\237\b\169\b\169\b\169\000\000\b\169\b\169\006\225\b\169\000\000\000\000\000\000\000\000\000\000\000\000\b\169\000\000\000\000\b\169\006\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\006\225\b\169\000\000\000\000\006\225\000\000\b\169\b\169\000\000\000\000\006\225\000\000\000\000\000\000\021\230\000\000\006\225\000\000\000\000\006\225\000\000\000\000\000\000\006\225\000\000\000\000\020z\000\000\000\000\006\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\024\162\000\000\000\000\020\134\000\000\006\225\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\000\000\006\225\000\000\000\000\000\000\000\000\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\000\000\000\000\000\000\006\225\006\225\006\225\000\000\006\225\006\225\000\000\006\225\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\000\000\006\225\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\020\174\000\000\000\000\006\225\006\225\020\178\000\n\020\182\000\000\020\186\020\190\021\254\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\020v\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\020\162\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\022\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\000\n\020\182\000\000\020\186\020\190\022\206\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\0236\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\020\162\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\000\n\020\182\000\000\020\186\020\190\020v\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\020v\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\015U\000\000\000\000\015U\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\024n\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\150\015U\015U\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\015U\000\000\020\166\000\000\015U\020\170\015U\015U\000\000\000\000\020\162\000\000\000\000\000\000\004\198\000\000\015U\000\000\020\174\015U\000\000\015U\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\015U\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\024\154\020\182\000\000\020\186\020\190\000\000\020\194\000\229\000\000\000\000\000\229\000\000\000\000\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015U\015U\000\000\015U\000\000\000\000\020\206\015U\000\229\000\229\000\000\020\210\020\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015U\000\000\000\229\000\000\015U\015U\000\229\003\146\000\229\000\229\001\017\015U\000\000\000\000\000\000\015U\015U\000\000\000\229\000\000\000\000\003\002\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\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\002\250\000\000\000\229\000\000\001\017\000\000\001\017\003\154\000\000\003\146\000\000\000\000\001\005\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\000\000\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\242\003\026\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\229\000\000\000\000\003*\003\n\002\250\000\000\000\000\000\000\001\005\000\253\001\005\001\005\000\253\000\000\000\000\000\000\000\000\000\229\000\000\000\000\003\"\000\229\000\229\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\017\000\000\000\000\000\000\003\n\002\250\000\000\003*\000\000\000\253\000\000\000\253\000\253\000\000\000\233\000\000\000\000\000\233\001\017\000\000\000\000\000\253\001\017\001\017\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\003\162\003:\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\005\000\000\000\000\003*\003\n\000\233\000\000\000\000\000\000\000\233\000\245\000\233\000\233\000\245\000\000\000\000\000\000\000\000\001\005\000\000\000\000\000\233\001\005\001\005\003\002\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\001\005\003:\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\253\000\000\000\000\000\253\000\000\000\000\000\000\003\n\002\250\000\000\000\233\000\000\000\245\000\000\000\245\000\245\000\000\000\249\000\000\000\000\000\249\000\253\000\000\000\000\000\245\000\253\000\253\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\253\000\253\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\233\000\000\000\000\000\245\003\n\002\250\000\000\000\000\000\000\000\249\003\146\000\249\000\249\001\r\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\249\000\233\000\233\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000\245\000\000\000\000\000\000\003\n\002\250\000\000\003*\000\000\001\r\000\000\001\r\003\154\000\000\001\001\000\000\000\000\001\001\000\245\000\000\000\000\003\"\000\245\000\245\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\245\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\003*\003\n\002\250\000\000\000\000\000\000\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\003\"\000\249\000\249\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\r\000\000\000\000\000\000\003\n\000\000\000\000\003*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\r\000\000\000\000\000\000\001\r\001\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\r\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\0032\000\000\000\000\001\001\000\000\000\000\000\000\003\n\000\000\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\001\000\000\000\000\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001")) let lhs = - (16, "\000\012\000\011\000\n\000\t\000\b\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\0013\0013\0013\0012\0012\0012\0012\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\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.\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(\001'\001'\001'\001&\001%\001$\001#\001#\001\"\001\"\001!\001!\001 \001 \001\031\001\031\001\030\001\029\001\028\001\027\001\026\001\025\001\024\001\023\001\022\001\021\001\020\001\019\001\018\001\017\001\016\001\015\001\015\001\014\001\014\001\r\001\r\001\012\001\012\001\011\001\011\001\011\001\011\001\n\001\n\001\n\001\n\001\t\001\t\001\t\001\t\001\b\001\b\001\b\001\b\001\007\001\007\001\007\001\007\001\006\001\006\001\006\001\006\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\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\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\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\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\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\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\003\001\002\001\001\001\001\001\001\001\001\001\001\001\000\001\000\000\255\000\254\000\253\000\253\000\253\000\253\000\252\000\252\000\252\000\252\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\251\000\250\000\249\000\249\000\248\000\248\000\248\000\248\000\248\000\248\000\248\000\248\000\247\000\247\000\246\000\246\000\246\000\245\000\244\000\243\000\243\000\242\000\242\000\241\000\240\000\239\000\239\000\238\000\238\000\237\000\237\000\236\000\236\000\235\000\234\000\233\000\233\000\232\000\232\000\231\000\231\000\230\000\230\000\229\000\229\000\228\000\227\000\227\000\226\000\226\000\226\000\226\000\226\000\226\000\225\000\225\000\225\000\224\000\223\000\222\000\222\000\222\000\222\000\221\000\221\000\220\000\219\000\219\000\219\000\218\000\218\000\218\000\218\000\218\000\217\000\217\000\217\000\217\000\216\000\216\000\216\000\216\000\215\000\215\000\215\000\215\000\214\000\213\000\213\000\212\000\212\000\212\000\211\000\210\000\210\000\210\000\209\000\208\000\208\000\207\000\207\000\207\000\206\000\206\000\206\000\205\000\205\000\205\000\205\000\204\000\204\000\203\000\203\000\203\000\203\000\203\000\203\000\202\000\202\000\202\000\201\000\201\000\201\000\201\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\193\000\192\000\192\000\192\000\192\000\192\000\192\000\192\000\192\000\191\000\190\000\189\000\189\000\188\000\188\000\187\000\187\000\186\000\186\000\185\000\185\000\184\000\184\000\183\000\183\000\182\000\182\000\181\000\181\000\180\000\180\000\179\000\179\000\178\000\178\000\177\000\177\000\176\000\176\000\175\000\175\000\174\000\174\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\167\000\167\000\166\000\166\000\165\000\165\000\164\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\156\000\156\000\155\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\154\000\153\000\153\000\153\000\153\000\152\000\151\000\150\000\149\000\148\000\147\000\146\000\145\000\144\000\143\000\142\000\141\000\140\000\140\000\140\000\139\000\139\000\139\000\138\000\138\000\138\000\138\000\137\000\136\000\135\000\134\000\133\000\132\000\131\000\130\000\129\000\128\000\128\000\127\000\127\000\127\000~\000~\000}\000}\000}\000|\000|\000|\000{\000{\000z\000y\000y\000y\000x\000w\000w\000v\000v\000v\000v\000v\000v\000v\000u\000u\000u\000u\000u\000u\000u\000t\000t\000t\000t\000t\000t\000t\000s\000s\000s\000s\000s\000s\000s\000r\000r\000r\000r\000r\000r\000r\000q\000q\000q\000q\000q\000q\000q\000p\000p\000o\000o\000n\000n\000m\000m\000l\000l\000k\000k\000j\000j\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000i\000h\000h\000g\000g\000f\000f\000e\000e\000d\000d\000c\000c\000b\000b\000a\000a\000a\000a\000a\000`\000`\000_\000_\000_\000_\000^\000]\000\\\000\\\000\\\000[\000[\000[\000Z\000Z\000Z\000Z\000Z\000Z\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000X\000X\000X\000X\000X\000X\000X\000X\000W\000W\000W\000W\000W\000W\000W\000W\000V\000V\000V\000V\000V\000V\000V\000V\000U\000U\000T\000T\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000P\000P\000P\000P\000P\000P\000P\000P\000P\000P\000P\000P\000P\000P\000O\000O\000O\000O\000O\000N\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000M\000L\000L\000L\000K\000J\000I\000H\000H\000G\000G\000F\000E\000E\000D\000D\000D\000C\000C\000B\000B\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:\0009\0009\0008\0008\0007\0007\0006\0006\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!\000 \000\031\000\031\000\031\000\031\000\030\000\030\000\030\000\029\000\029\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\025\000\025\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\021\000\021\000\021\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\016\000\016\000\015\000\014\000\014\000\014\000\014\000\014\000\r") + (16, "\000\012\000\011\000\n\000\t\000\b\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\0018\0018\0018\0017\0017\0017\0017\0016\0016\0016\0016\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0010\0010\0010\0010\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 \001\031\001\030\001\029\001\028\001\027\001\026\001\025\001\024\001\023\001\022\001\021\001\020\001\019\001\019\001\018\001\018\001\017\001\017\001\016\001\016\001\015\001\015\001\015\001\015\001\014\001\014\001\014\001\014\001\r\001\r\001\r\001\r\001\012\001\012\001\012\001\012\001\011\001\011\001\011\001\011\001\n\001\n\001\n\001\n\001\t\001\t\001\t\001\b\001\b\001\b\001\b\001\b\001\007\001\006\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\003\001\002\001\001\001\001\001\001\001\001\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\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\254\000\253\000\253\000\252\000\252\000\252\000\252\000\252\000\252\000\252\000\252\000\251\000\251\000\250\000\250\000\250\000\249\000\248\000\247\000\247\000\246\000\246\000\245\000\244\000\243\000\243\000\242\000\242\000\241\000\241\000\240\000\240\000\239\000\238\000\237\000\237\000\236\000\236\000\235\000\235\000\234\000\234\000\233\000\233\000\232\000\231\000\231\000\230\000\230\000\230\000\230\000\230\000\230\000\229\000\229\000\229\000\228\000\227\000\226\000\226\000\226\000\226\000\225\000\225\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\220\000\220\000\220\000\220\000\219\000\219\000\219\000\219\000\218\000\217\000\217\000\216\000\216\000\216\000\215\000\214\000\214\000\214\000\213\000\212\000\212\000\211\000\211\000\211\000\210\000\210\000\210\000\209\000\209\000\209\000\209\000\208\000\208\000\207\000\207\000\207\000\207\000\207\000\207\000\206\000\206\000\206\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\204\000\203\000\202\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\196\000\196\000\196\000\196\000\196\000\196\000\196\000\195\000\194\000\193\000\193\000\192\000\192\000\191\000\191\000\190\000\190\000\189\000\189\000\188\000\188\000\187\000\187\000\186\000\186\000\185\000\185\000\184\000\184\000\183\000\183\000\182\000\182\000\181\000\181\000\180\000\180\000\179\000\179\000\178\000\178\000\177\000\177\000\176\000\176\000\175\000\175\000\174\000\174\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\167\000\167\000\166\000\166\000\165\000\165\000\164\000\164\000\163\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\160\000\159\000\159\000\158\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\156\000\156\000\156\000\156\000\155\000\154\000\153\000\152\000\151\000\150\000\149\000\148\000\147\000\146\000\145\000\144\000\143\000\143\000\143\000\142\000\142\000\142\000\141\000\141\000\141\000\141\000\140\000\140\000\139\000\138\000\137\000\136\000\135\000\134\000\133\000\132\000\131\000\130\000\130\000\129\000\129\000\129\000\128\000\128\000\127\000\127\000\127\000~\000~\000~\000}\000}\000|\000{\000{\000{\000z\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000x\000x\000w\000w\000w\000w\000w\000w\000w\000v\000v\000v\000v\000v\000v\000v\000u\000u\000u\000u\000u\000u\000u\000t\000t\000t\000t\000t\000t\000t\000s\000s\000s\000s\000s\000s\000s\000r\000r\000r\000r\000r\000r\000r\000q\000q\000p\000p\000o\000o\000n\000n\000m\000m\000l\000l\000k\000k\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000i\000i\000h\000h\000g\000g\000f\000f\000e\000e\000d\000d\000c\000c\000b\000b\000b\000b\000b\000a\000a\000`\000`\000`\000`\000_\000^\000]\000]\000]\000\\\000\\\000\\\000[\000[\000[\000[\000[\000[\000Z\000Z\000Z\000Z\000Z\000Z\000Z\000Z\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000X\000X\000X\000X\000X\000X\000X\000X\000W\000W\000W\000W\000W\000W\000W\000W\000V\000V\000U\000U\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000P\000P\000P\000P\000P\000O\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000M\000M\000M\000L\000K\000J\000I\000I\000H\000H\000G\000F\000F\000E\000E\000E\000D\000D\000C\000C\000B\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:\0009\0009\0008\0008\0007\0007\0006\0006\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$\000$\000$\000$\000$\000#\000#\000\"\000\"\000!\000 \000\031\000\031\000\031\000\031\000\030\000\030\000\030\000\029\000\029\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\025\000\025\000\024\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\021\000\021\000\021\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\016\000\016\000\015\000\014\000\014\000\014\000\014\000\014\000\r") let goto = - ((16, "\000\243\000\025\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\181\000\000\001S\002\000\000\000\001\031\001\005\000\000\000\000\000\000\000\139\000\133\000\000\000\000\000-\000\198\000\224\000\000\000\000\000\232\000\000\000\000\001n\000\000\001\162\000\000\000\000\000\000\002\128\000\000\002\252\000\000\000\000\000\000\003\148\000\000\003\184\000\000\000\000\003\242\003\248\000\000\000\000\0042\004h\004x\000\000\000\000\004z\000\000\000\000\004\142\000\000\004\204\000\000\000\000\000\000\005\020\000\000\005\030\000\000\005\232\005\238\000\000\000\000\005\250\000\000\006\"\006d\006\146\000\000\000\000\006\186\000\000\006\204\000\000\000\000\007\020\000\000\0070\000\000\000\005\000\000\003J\005\168\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\007\218\000\000\002|\000\000\000\000\003\\\000\000\000\000\002z\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\011\154\000\000\000\000\000\248\r,\000\000\000\000\0196\000\000\000\000\000\000\000\000\007<\000\000\007\140\007`\000\000\007\214\000\000\000\000\007\220\000\000\000\000\007\250\000\000\b\006\000\000\000\000\000\000\b:\000\000\000\154\bL\000'\000\000\002\222\000\000\000\000\000\000\000\182\000\000\002\184\000\000\000\000\000\000\000\190\000\000\000\000\005\004\001\t\011\130\000\000\000\000\0038\004\b\000\000\r\016\000\000\007\188\000\200\007Z\000\200\017\252\026\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\136\tn\000\000\000\000\012\224\015\216\018\030\000\000\020\016\003,\000\000\000\000\006,\020t\000\000\000\000\000\000\012~\000\000-\234.B(\228\000\000\000\000B0\000\000\n\b\000\000\017j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\218\000\000\000\000\007&\000\000\t:\000\000\012\200\000\000\023\150\000\000\029\030\000\000!Z\000\000#4\000\000$\144\000\000&\188\000\000&\218\000\000#\150\000\000\016\012\000\000\000\000\000\000\000\000\012\030\000\000\000\000\000\000\000\0000\156\000\000:\230\000\000I\192\000\000I\212\000\000J\012\000\000J*\000\000Jr\000\000J\162\000\000K0\000\000KZ\000\000K\134\000\000K\184\000\000K\218\000\000LN\000\000Lh\000\000Lv\000\000\020(\000\000\000\000\023d\000\000\000\000\000\000\000\000\014x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003NBX\000\000\003\132\000\000\000\000\000\017\005P\000\000\0007\b^\000\000\000\000\bt\b\138\000\000\000\000\b\142\b\186\b\192\000\000\000\000\b\198\000\000\000\000\b\232\000\000\t\012\000\000\000\000\000\000\tB\000\000\t`\000\000\tj\000\000\tz\000\000\000\000\t\132\t\136\000\000\000\000\t\142\t\170\t\178\000\000\000\000\t\188\000\000\000\000\t\224\000\000\t\226\000\000\000\000\000\000\t\242\000\000\nf\000\000\nz\n|\000\000\000\000\n\130\000\000\n\138\n\144\n\180\000\000\000\000\n\186\000\000\n\204\000\000\000\000\n\206\000\000\n\208\000\000\004z\b\b\000\000\n\210\000\000\n\220\016\140\000\000\n\226\000\000\000\000\n\228\000\000\011\002\000\000\011$\000\000\000\000\000\000\011,\000\000\011<\018H\000\000\000\000\000\000\011B\000\000\015\148\000\000\000\000\000\003\030\190\000\000\000\017\000\000\bR\000\000\000\000\005\162\000\180\000\000\000\000\000\000\000\000\n\168\001\140\000\000\nZ\000\000\000\000\000\000\017\002\000\000\017\232\000\000\r\140\000\000\000\000\000\000\000\000\000\000\000\000\021\216\000\000\000\000\000\183\000\000\0001\000\000\000\000\000\000\n\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0007\t\028\020\248\000\000\011F\000\000\011L\022\238\000\000\011X\000\000\000\000\000\000\b\194\000\000\000\000\000\000\000\000\003\210\000\000\000\000\015\170\000\000\000\000\000\000\004~\003\182\000\000\030r\018Z\000\000\000\000\000\000\000\000\025\020\028n\000\000\000\000\000\000\000\000\000\000\000\000\031\220\000\000\000\0002\014\000\000\000\0009\206\000\000\004|\000\000\005\228\000\000\000\000\000\000\022D\000\000.\1283\232\000\000\000\000\019L4:\000\000/\134\000\000;\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000L\154\000\000%\224\000\000+\204\000\000L\158\000\000L\202\000\000M(\000\000M8\000\000MX\000\000M\214\000\000N\n\000\000N>\000\000N^\000\000Nl\000\000N\156\000\000O\006\000\000O$\000\000\000\0004\146\000\000\000\000\000\0005\028\000\000\000\000\000\000\000\000\000\000\000\000C \000\000\000\000\000\000\022\186\000\000\000\000\000\000\000\000\000(\000\000\000\000\000\000\000\000\000t\000\000\000\000C4\000\000\000\000\000\000\014|\001*\000\000\000\000(*\000\000\000\0005t\000\000\000\000\000\000\003\026,..\160\000\000\000\000C\230\000\000D\014\000\000\000\000\000\00056\004\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\202\000\000\000\000\000\000\000\0009p6V\022\242\000\000TD\000\000\000\000TX\000\000\005\152\000\000\000\000\015b\000\000\000\000\000\000\023L\000\000.\212\000\000\000\000D0\000\000\000\000\000\000\023\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\006\000\000+x\000\000\001W\000\000\000\000\000\000O&\000\000O>\000\000O\162\000\000O\216\000\000O\236\000\000P\012\000\000P\026\000\000Pj\000\000P\210\000\000QD\000\000Qt\000\000Q\130\000\000Q\166\000\000Q\224\000\000\000\000\000\000\000\000\000\000\026\252\000\000\000\000\031|)\014\000\000\000\0009\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\0007\128\000\0007\020\000\000\000\000\000\000\000\000\000\0007R\000\000\000\000\000\0007\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011b\000\000\011h\024$\000\000\011v\000\000\000\000\004(\001f\000\000\004|\000\000\000\000\000\000\000\000\000\017\000\000\011z\000\000\000\000\001&\005\176\000\000\007\196\000\000\000\000\000\000\002\022\000\000\017\190\007\004\011|\000\000\000\000\011\130\011\134\000\000\000\000\011\136\011\138\011\152\000\000\000\000\011\154\000\000\000\000\011\156\000\000\011\162\000\000\000\000\000\000\011\186\000\000\011\190\000\000\011\198\000\000\011\216\000\000\000\000\011\218\011\228\000\000\000\000\011\230\011\232\011\250\000\000\000\000\012\b\000\000\000\000\012\012\000\000\012\014\000\000\000\000\000\000\012\018\000\000\012\020\000\000\012\024\012\026\000\000\000\000\012\"\000\000\012&\012@\012h\000\000\000\000\012z\000\000\012|\000\000\000\000\012\142\000\000\012\144\000\000\006\130\017\018\000\000\012\150\000\000\012\152\029x\000\000\012\160\000\000\000\000\012\164\000\000\012\168\000\000\012\184\000\000\000\000\000\000\012\188\000\000\0062\000\000\000\000\000\000\005\152\b\020\000\000\000\000\005\204\000\000\000\000\012\192\025\004\000\000\012\194\000\000\000\000\000\000\001\014\000\000\000\000\000\000\002\148\000\000\000\000\000\000\000\000\000\000\r\176\026\012\000\000\012\196\000\000\012\200\029\170\000\000\012\202\000\000\000\000\014\002\012\212\000\000\000\000\012\218\012\222\000\000\000\000\012\226\012\228\012\230\000\000\000\000\012\242\000\000\000\000\012\250\000\000\r\000\000\000\000\000\000\000\r\018\000\000\r<\000\000\r@\000\000\rD\000\000\000\000\rH\rP\000\000\000\000\r^\r`\rd\000\000\000\000\rv\000\000\000\000\rx\000\000\rz\000\000\000\000\000\000\r\128\000\000\r\136\000\000\r\142\r\144\000\000\000\000\r\152\000\000\r\160\r\176\r\190\000\000\000\000\r\196\000\000\r\206\000\000\000\000\r\208\000\000\r\210\000\000\007$ L\000\000\r\216\000\000\r\222!D\000\000\r\226\000\000\000\000\r\242\000\000\r\252\000\000\014\000\000\000\000\000\000\000\014\004\000\000\014\b \130\000\000\014\n\000\000\000\000\016F!\240\000\000\014\012\000\000\014\016\"\156\000\000\014\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\242\000\000/6\000\000\000\000\000\000E\020\000\000\000\000\001\026\000\000\000\000\000\000\002\172\004\152\000\000\000\000:$\000\000\000\000\005\132\000\000\000\000\000\000\000\000\000\186\000\000\012\250\000\000\000\000\026>\000\000\000\000\000\000:p\000\000\000\000\000\000\000\000\000\000\027\210\000\000\000\000\000\000\001\t\000\000;*\000\000\000\000\000\000\000\000\000\230\0152\000\000;L\000\000\000\000\000\000\000\000\028\244\000\000;\192\000\000\000\000\000\000\000\000\000\229\000\000\nn\000\000\000\000T\1848\"\000\000\000\000\000\000E<\000\000\000\000\000\000\000\210\000\000Ed\000\000\000\000\000\000E\166\000\000\000\000\003L\000\000!\252\000\0278B\000\000\000\000\000\000\003p\000\154\000\000\000\000\000\000\000\000\000\000\000\000U(\000\000\000\000UX\000\000\000\000U|\000\000\b\238\000\000\014,\000\000\000\000\000\000\023\164\000\000/\206\000\000\000\000F<\000\000\000\000\000\000\023\238\000\000\000\000\000\000\000\000\000\000\000\000?\222\000\000@\252\000\000\000\000\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000Q\254\000\000<&\000\0006:\000\000Rh\000\000Rj\000\000R\136\000\000R\160\000\000R\184\000\000R\208\000\000Sx\000\000S\160\000\000S\196\000\000S\240\000\000T\020\000\000Th\000\000T\134\000\0009\026\000\000\000\000\000\000\b\012\000\000\b\202\000\000\018\224\002.\n\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\252\000\0000\224\003\194\024D\000\000\000\000\000\000\000\0001\238\000\000\000\000\000\000\019\230\000\000\000\000\tx\000\000\000\000\000\000\"\176\002X\000\000#f\000\000\000\000\000\000\000\000\003\016\000\000\000\000\020\174\000\000$0\000\000\000\0002`\000\000\000\000\000\000:\000\000\000\000\000\000\000\000\005\224\030@\000\000>^\000\000\000\000\000\000\000\000\000\000\000\000\021\180\000\000\000\000\003\204\000\000\022\194\000\000\014t\000\000\000\000\006\194\006\250\000\000\006\202\000\000\000\000\000\000\000\000\0068\000\0003T\000\000$\250\001\218%\176\000\000\002\162\000\000\023\200\000\000\024\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007@&z\003\030'D\000\000\000\000\000\000\003\172\000\000\025\194\000\000\007v\000\000\000\000\022\150\000p'\250\000\000\002\128\000\000\026Z(\196\000\000\000\000\027,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\138\012\130\000\000\007\232\000\000\000\000\000\000\000\000\004\238\000\000\028(\000\000\000\000\000\000\t\192GR\000\000\000\000\000\000\021\250\000\000\000\000\000\000\000\000\000\000\004\240\019$\000\000\000\000>x\000\000\000\000\011\180\000\000\019\136\000\000\000\000$\222\000\000\000\000\000\000>\182\000\000\000\000\000\000\000\000>\244\000\000\000\000\006\184\019\140\000\000\000\000?\136\000\000\000\000\bb\011\212\000\000\020\196\000\000\000\000@\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\164\000\000\000\000\000\000@D\000\000\000\000\b\246\000\000\000\000\0218\000\000\000\000%\162\000\000\000\000\000\000@\226\000\000\000\000\000\000\000\000A \000\000\000\000\011 \022\180\000\000\000\000A:\000\000\000\000\b\210\000\000\000\000\000\000\000\000\b\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000[\000\000\028\222\000\000\000\000\000\000Gt\000\000\r\002\000\000\000\000\000\000\001\156\000\000\005D\000\000\000\000\007\176\029\146\000\000\030H\000\000\000\000\000\000\b\144\000\000G\202\b\184H4\000\000I\012\000\000\000\000\000\000\t\016\000\000IJ\t@\000\000\000\000+\174\000\154\000\000\t\130,b\000\000\000\000-\024\000\000\000\000\000\000\t\204\000\000Ib\n\n\000\000\000\000\0226\n\n\025\168\000\000\031\130\000\000\000\000\000\000\nN\000\000Iv\n^\000\000\000\000\000\000\002\242\000\000\005\b\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\152\000\000\000\000\011r\000\000\014\252\000\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000\011|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\022\000\000\000\000\014\234\000\000\011F\000\000\000\000\rN\000\000\001X\014\132\000/\000\000\000\000\006Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\006(\000\000\000\000\003\162\000\000\000\000\000\000\007T\000\000\000\000\011\162\r\\\000\000\000\000\000\000\000\000\015\234\021\202\t\172\000\000\000\000\000\000\025f\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\000\000\005\234\000\000\000\000\014H\000\000\025\166\000\000\000\000\000\000\005\000\000\000\000\000\000\166\000\000\000)\000\000\000\000\000\000\000\000\000\151\026\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t,\029\160\000\000\000\000\000\000\000\000\030V\031\192\r\012\000\000\031\208\000\000\000\000\000\000\000\000\000\000\000\000\003\024\000\000\015$\000\000\000\000\000\000\b<\000\000\002v\000\000\000\000\000\000\012\168\000\000\000\000!*!8\0174\000\000\"\168\000\000\000\000\000\000\000\000\000\000\000\000\n\176\014P\000\000\014\\\000\000#:\025\134\000\000#\208\000\000\000\000\000\000\000\000\014n\000\000\014\250\000\000\000\000\000\000\005\"\000\000\002`\014\180\005v\000\000\000\000\000\000\003\006\t.\000\000\000\000\000\000\000\000\000\000\000\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007~\000\000\000\000\007\154\000\000\003>\015R\b>\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\020\000\000\000\000\021\030%\132\000\000\000\000\000\000\000\000&\026\000\000\000\000\000d\000\000\002\178\012\188\000\000\000\000\000\000\016`\000\000\000\000\000\000\000\000\000\000\000\029\021\248\000\000\000\000\024N\000\000\000\000\000\000\000\000\007\024\000\000\000\000\002\232\000\000\000\000\000\000\001\005\000\000\000\000\tl\000\000\000\000\000\000\000\000\000\000\000\000\000\000AT\000\000\000\000\000\000\004\248\000\000\000\000\000\000\000\000\000\000\000\026\000\212\007f\015\210\000\000\001\022\002\194\003Z\0048\000\000\000\000\000\000\000\000\000\000\000\000\n\128\030\252\000\000)\142\007\212\000\000\000\000\bv\000\000\031\178\000\0009^\000\000\000\000\n\204 f\000\000*D\000\000\011z*\248\000\000\000\000\000\000\0005\017\222\000\000\000\000\000\000\000\000\005t\000\000\020\236\005$\000\000\000\000\tl\r&\000\000\017\218\000\000\000\000\017\002\000\000\017\232\000\000\000\000\018b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\150\000\000\000\000\000\000\t\164\000\000!\028\000\000\023\228\015\002\000\000\000\000\000\000\000\000\000\000\005 \000\000\000\000\000\000\000\000\000\000B\022\000\000\002\176\000\000\000\000\000\000\000\000\000\000\001\250\000\000\015\022\004.\015J\000\000\0042\017*\000\000\0066\000\000\004\178\000\000\006F\000\000\006\198\000\000\023\228\000\000\000\000\000\000\000\000\000\000\bZ\000\000\006\220\000\000\b\218\000\000\023\228\015v\000\000\0000\000\000\015d\002\216\000\000\014\018\000\000\014\020\000\000\000\000\000\000\000\000\000\000\000\000\014\024\000\000\014\026\000\000\014 \000\000\000\000\000\000\000\000\000\000\014(\000\000\000\000\000\000\000\000\000\000\015\128\014:\000\000\000\000\014x\000\000\000\000\014R\004|\015\204\000\000\015\206\000\000\000\000\000\018\006\150\000\000\014\136\000\000\000\000\014\194\000\000\000\000\000\000\000\000\000\000\000\000\015\188\014t\000\000\000\000\000\000\014\174\014~\tt\006\\\014\172\014\228\000\000\000\000\014\132\t\138\t\214\014\180\014\244\000\000\000\000\011\134\015\246\000\000\015\248\000\000\016 \000\000\000\000\016\000\000\000\000\000\016\004\000\000\000\000\000\000\000\000\016$\000\000\016N\000\000\000\000\000\000\016R\000\000\000\000\000\000\016X\000\000\000\000\000\000"), (16, "\002\175\007\027\006\193\006\194\004\186\000h\004\205\007k\001\238\000\174\007\157\000\129\002\204\006D\007\206\000\129\000\174\001\179\001\180\003@\001\184\003\200\000\174\006\138\007\183\007\184\002\175\004T\005\158\005\134\004\186\006\214\004\205\000\129\000\174\001\179\007z\002!\001\188\007\240\002-\000\004\001\250\004U\000\025\007\241\007\028\007\029\000\174\007p\000\183\001\186\001\186\007\242\003+\005T\004\130\000\024\007\157\001\186\007{\000\r\007~\006\193\006\194\005U\000\005\004\188\000\183\003\200\000i\006M\007m\004\189\007\157\002\203\000\130\001\186\007\030\006\174\000\130\006\195\004\130\000\016\000\017\003\200\000\007\b\139\005=\007\031\000\129\005U\000\018\004\188\004\186\001\223\004\205\005\191\000\130\004\189\007z\002#\b\140\006\175\000h\007\167\000h\002$\006\178\006\193\006\194\000\005\000\174\000\129\005=\000\017\0031\000\231\000\030\005\000\005\001\000\029\000\235\006\177\007{\000\174\007~\006\193\006\194\001\255\000\174\000\181\007\017\006\215\005\205\000\174\004\210\000h\007\165\001H\005?\000\174\006\195\007\170\0023\000l\007\206\006\175\000p\004V\001\238\007\244\006\178\006\193\006\194\000\130\007\015\004\188\003\193\007\018\006\193\006\194\001\225\004\189\000\183\000&\005?\001\224\002\001\000i\006\201\000i\b}\001\186\007\245\005A\000\174\006O\000\130\007\211\003\197\004T\005\201\000\225\004{\001\015\004\202\000r\006\195\000\233\005F\007\175\007\207\001\186\000\240\005V\001\203\004\203\005\207\005\172\007n\005A\000i\001\231\003\196\000\149\006\195\007\160\001\224\000\131\004\130\005\154\004\202\001\186\000\174\0039\005F\001\187\001\206\001\186\000\240\005V\007\246\004\203\000\239\002|\004\210\000\240\000\132\001H\0024\007\247\006\195\000\174\007\243\000\184\005H\b\021\005\135\006\195\005\166\001\190\004z\005^\000l\b\148\000l\005\189\000\183\001\237\003\022\001\235\001H\b\132\003\211\005~\004\214\001\186\006\218\001\190\001\253\006B\005H\007\173\005Y\b\023\002\175\001\237\000\b\005^\004\186\006E\004\205\b\025\004\215\001\224\004\202\000l\005\160\004\216\006\221\005~\004\214\004\217\000\240\b/\000#\004\203\000\174\004\218\0027\000\174\002\175\007\242\b0\005T\004\186\002}\004\205\000\"\004\215\004\212\003\211\000%\001\203\004\216\006\196\000\240\0028\004\217\000\241\001\226\004n\002r\000\174\004\218\002\127\002:\003\211\004T\005\158\005\134\004\130\002;\007\217\004\137\001\206\007\163\003I\005Q\000h\005U\006\222\004\188\001\249\001J\004s\001P\007t\004\189\000\174\005R\000\242\bC\003K\001S\004\214\001\207\004\130\005V\001\208\000\141\004t\003\193\005=\001\190\007\215\005U\001S\004\188\001P\005\191\007\002\001\237\004\215\004\189\007\208\000y\001S\004\216\000(\001\017\000h\004\217\001S\003\195\004x\000\174\005\160\004\218\005=\007\028\007\029\000\174\001\179\001\180\003.\001\184\002}\000\144\000\244\006P\006Q\007\211\001\025\000i\000*\005^\001\019\003\196\007k\005f\000\174\0037\007u\000\246\005?\003\198\001\186\005~\000\129\004U\bD\007<\002\176\007v\007w\000\183\002\177\000\129\001\186\005X\006\172\006\173\007\031\000\129\001\186\005\173\004\210\000\222\003(\001H\005?\005R\000h\b)\000\183\000i\b*\001\190\005\178\005A\bf\000h\0077\001\186\005\194\001\237\003L\007\132\007\179\005\168\004\202\000\129\000p\001\207\005F\004\186\001\208\004\187\000\240\005V\bE\004\203\003K\007m\001S\005A\0078\007\211\000l\007\247\007;\006\193\006\194\000\130\005-\bG\004\202\002\178\006?\007\133\005F\007\134\000\130\002\179\000\240\005V\002\175\004\203\000\130\005\175\002\176\000q\002\175\000\225\002\177\006O\004\186\000i\004\205\000\226\005H\005\154\005Y\bI\b.\000.\000i\005^\003=\005\178\005$\bK\007\135\005\140\003D\006\232\000\130\001H\004\188\005~\004\214\005\146\001S\007\136\004\189\005R\005H\000\129\005\135\006\199\005\166\000\222\003$\005^\000\239\000\145\000h\005\189\004\215\006\230\006\193\006\194\000w\004\216\000\133\005~\004\214\004\217\002\175\005\163\006\195\002\195\004\186\004\218\004\205\002\178\001M\002\195\000y\004\188\007\181\002\179\007\196\007\003\004\215\004\189\006\200\0000\007\214\004\216\000\174\001S\000l\004\217\b2\007\242\b5\005\134\007\211\004\218\005=\000l\001\187\001M\000\129\000\129\000\129\007\006\002\196\005.\002!\007s\000\130\002\"\002\192\001O\002\197\000\225\005%\000h\004`\000i\000\240\000\226\004\130\002\193\001\190\005/\004z\bi\005\180\000\220\002\175\005U\001\237\004\188\004\186\000\240\004\205\006\195\000\241\004\189\001N\005\152\001\255\003?\002\198\002\175\004\210\bA\b@\002\176\005?\001\237\000\174\002\177\005=\004\202\000\239\007\242\b5\005\134\004V\0004\007\213\000\240\000\134\000\146\004\203\000\130\000\130\000\130\000\242\000h\002#\000\134\002\200\000\137\005\216\003:\002$\0006\000y\002\000\000i\000\174\000\137\005A\004\130\007=\005R\000y\002\192\003\007\002\238\006\201\005$\005U\004\202\004\188\000\240\005\183\005F\002\193\003\003\004\189\000\240\007\014\005?\004\203\000;\000\174\002\195\000:\b:\000\004\002\178\0023\003<\005\233\005=\003:\002\179\005\154\002\249\006@\007a\000\174\001\186\000h\002\241\007\015\004T\000\174\007\018\006\193\006\194\000h\000i\002\203\000\005\000\240\000C\005A\000\241\004\254\006B\000\129\005H\002\254\007_\007b\006\193\006\194\004\202\000h\bz\002\197\005F\000l\003;\004\130\000\240\005V\b;\004\203\b!\b\"\004\214\000@\001\186\006\214\005?\007\247\000\174\007\212\000\242\000?\000B\005G\004\\\000\174\002\205\b\000\005(\000\129\004\215\002\198\000E\002!\b\012\004\216\002\"\007\198\000i\004\217\007\199\002\206\001\161\002 \000\240\004\218\000i\0024\005H\001\238\005\135\005A\b=\005+\000\174\005^\000\130\000l\006\195\b?\007\203\002\200\004\202\000G\000i\000\129\005F\005~\004\214\000\231\000\240\005V\b;\004\203\000\232\006\195\007\005\002\192\002\175\002\238\b&\007\247\004\186\005\127\004\205\000\240\004\215\005G\002\193\001\203\000\174\004\216\001\186\000\184\000\130\004\217\001\213\002#\b2\000K\000\174\004\218\006\229\002$\000M\007\242\b5\005\134\000\129\004W\003\180\001\206\005H\000l\005\135\002\241\b=\006\215\007\196\005^\006R\000l\b\133\b?\002\203\003\t\006\230\006\193\006\194\006\217\000\130\005~\004\214\004^\004\130\000\225\003\180\000j\007\196\000l\0023\000\233\002\175\005U\005V\004\188\004\186\000\184\004\205\003\182\004\215\004\189\000\129\b8\005\239\004\216\000\231\001\238\b|\004\217\b<\000\232\006\000\003,\000\174\004\218\005=\002\205\002\175\007\242\b5\005\134\004\186\000\130\004\205\003\181\000\239\b\003\007 \007\249\b\004\b2\002\206\000\005\003\190\002\174\006\142\006Q\001S\000\129\000\129\006\001\005^\001M\000\231\003\200\005f\005\148\004\130\000\232\001\186\003\174\001R\b\020\005~\000Q\006\195\005U\000P\004\188\001S\000\184\001\214\003\176\000S\004\189\000\129\000\130\005?\000h\000\231\007^\000\225\000\240\b>\000\235\0024\004]\000\233\000m\005=\006\215\004\213\002\195\000]\004\188\bH\001\232\000\174\b\144\001\207\004\189\007e\001\208\000\174\007_\007b\006\193\006\194\007\206\003F\001S\006\229\005A\000\130\000\130\005=\005\149\001S\000\240\000\225\005\149\000\241\000\239\004\202\000\129\000\233\000X\005F\000\222\003\030\007z\000\240\005V\b;\004\203\006\230\006\193\006\194\007\003\000h\000\130\005?\007\247\000i\007}\000\225\001S\001\015\005G\000W\000\174\000\233\007\223\000\242\007{\005\151\007~\006\193\006\194\005\150\000\239\003\156\000h\002o\005R\005\000\005\001\005?\007{\000Z\007~\006\193\006\194\005H\003\179\005\135\005A\b=\000\\\b\132\005^\000\145\001S\005\186\b?\006\195\000\239\004\202\006\233\000\130\000\174\005F\005~\004\214\000\225\000\240\005V\b;\004\203\000h\000\226\003\012\005A\002\175\000i\000\240\007\247\004\186\000\241\004\205\005\186\004\215\005G\004\202\000_\006\195\004\216\005F\000l\005\210\004\217\000\240\005\188\007:\004\203\000\174\004\218\000i\000a\000\004\007\242\b5\005\134\007\226\000\148\000\239\006\195\005H\005G\005\135\000\242\b=\004!\000\240\005^\005R\000\241\0078\b?\005\187\006\195\007;\006\193\006\194\000\005\000h\005~\004\214\005\212\004\130\005\000\005\001\000h\005H\000i\000\145\005\210\002\175\005U\000\240\004\188\004\186\000\241\004\205\000\154\004\215\004\189\000\129\000\242\000l\004\216\000h\006Y\004\214\004\217\bF\007\216\003\211\000\248\000\174\004\218\005=\000\134\000\151\007\242\b5\005\134\002\011\006[\000\249\000h\004\215\000l\000\137\000\242\005\211\004\216\007\176\000y\007k\004\217\000\153\001\243\003\178\000\156\000\129\004\218\005\003\000\240\000\231\000i\000\241\003\024\004\130\000\232\0066\000\248\000i\007\208\000\159\001S\006\195\005U\001\017\004\188\000\161\001S\000\251\006\236\000l\004\189\000\129\000\130\005?\007\014\000\231\000i\005\000\005\001\bJ\000\235\007l\000\244\000\242\000\129\005=\001\025\007\137\000\222\003\019\001\019\000\165\000\174\000\174\0068\000i\005,\000\246\007\015\000o\003C\007\018\006\193\006\194\007m\003H\000\134\001\158\005A\001U\000\130\0066\000\129\001S\b\022\000\225\004\186\000\137\004\205\004\202\001Z\000\233\000y\005F\006\\\000l\005R\000\240\005V\b;\004\203\001Y\005$\001b\000\174\001\255\000\130\005?\007\247\005\232\006[\000\225\005\002\001\015\005G\003\179\006c\000\233\000\129\000\130\0067\000l\000\231\001S\000\225\001_\000\239\000\237\001^\000\184\000\226\001a\006e\006<\b\b\006\248\006\193\006\194\006\n\005H\000l\005\135\005A\b=\002\001\001\193\005^\006\016\001d\004\188\b?\006\195\000\239\004\202\000h\004\189\007\129\005F\005~\004\214\006f\000\240\005V\b;\004\203\000\239\001f\007\188\007\189\002\175\006\017\004\185\007\247\004\186\006\019\004\205\006e\004\215\005G\005\000\005\001\000\174\004\216\000\130\006i\000\184\004\217\005s\000\225\007\193\005%\000\174\004\218\001j\000\233\b\143\004T\005\158\005\134\005L\006e\001\251\007n\005H\000\174\005\135\b\150\b=\001l\000\240\005^\004s\000\241\001n\b?\006\195\006t\005\000\005\001\000i\000\174\001p\005~\004\214\006\249\004\130\001u\006*\001t\000\239\001\249\001}\006v\002\175\005U\000\240\004\188\004\186\000\241\004\205\007^\004\215\004\189\b\151\000\242\001z\004\216\007\196\000\240\001y\004\217\000\241\001\203\006w\001|\000\174\004\218\005=\005#\001\205\004T\005\158\005\134\002\011\007_\007b\006\193\006\194\004\202\006v\000\242\007&\001\127\001\129\001\206\001\203\000\240\006\020\007q\004\203\001\238\001\133\001\229\000\242\b\003\006z\006\130\b\004\003\017\004\130\b\011\001\227\000\248\005G\005$\001S\001S\001\206\005U\001\017\004\188\006e\006\132\000\253\005\000\005\001\004\189\000\129\007x\005?\006\207\000\231\000\240\001\206\0060\000\241\000\235\b\133\000\244\000h\006\133\005=\001\025\001\186\b\132\006\021\001\019\006\136\b\133\006\029\006\189\007\219\000h\000\246\006\208\006\192\006\132\006/\004\214\001\135\006\211\006\193\006\194\006e\005A\006\195\006\190\000\242\000\129\001\139\001\138\006\190\004\186\001\141\004\205\004\202\004\215\001\151\b\180\005F\001\146\004\216\006\229\000\240\005V\004\217\004\203\006H\005\172\007\233\000\174\004\218\000\130\005?\b\181\005\232\000\243\000\225\001\145\001\015\005G\001\148\005%\000\233\000i\000\129\006\230\006\193\006\194\000\231\001\150\001\153\001\155\001\160\000\235\000\244\003)\000i\001\166\006\t\001<\001\165\001\168\001\207\006\n\005H\001\208\005\135\005A\005\166\000\246\007y\005^\006\016\001S\004\188\005f\001\170\000\239\004\202\006\195\004\189\000\136\005F\005~\004\214\001\207\000\240\005V\001\208\004\203\005\170\005\172\000h\001\172\002\175\006\017\001S\001\176\004\186\006\019\004\205\001\207\004\215\005G\001\208\001\254\001\230\004\216\001\183\000\130\001\242\004\217\001S\001\248\000\225\007\238\000\174\004\218\000l\001\247\000\233\004T\005\158\005\134\0030\006\195\007\139\0036\005H\000\129\005\135\000l\005\166\000\231\0035\005^\003B\003P\000\232\005f\003U\000\129\003T\003]\003Z\000\222\003\016\005~\004\214\007\014\004\130\003Y\003\\\003_\000h\000\239\003a\000i\002\175\005U\000\240\004\188\004\186\000\241\004\205\000\129\004\215\004\189\003e\002!\003g\004\216\002-\007\015\003i\004\217\007\018\006\193\006\194\000h\000\174\004\218\005=\003k\003p\004T\005\158\005\134\001\024\003o\003x\003u\000\134\004\202\000\130\000\242\006\223\004n\000\174\000\225\003t\000\240\006\020\000\137\004\203\000\233\000\130\003w\000y\003z\003|\000\225\003\128\003\130\004\130\003\134\003\133\000\226\005G\000i\003\136\004s\003\146\005U\001\017\004\188\006\248\006\193\006\194\006\210\000\130\004\189\000l\002#\005?\003\141\002p\005\251\000\240\002$\000\239\000\241\006\229\000\244\000i\000h\005=\001\025\006\242\000\174\006\021\001\019\000\239\006\208\006\029\003\140\006\195\003\205\000\246\006\211\006\193\006\194\006/\004\214\003\143\003\145\006\230\006\193\006\194\005A\b\000\001\022\002s\000\242\003\148\003\150\0023\b\007\003\155\003\161\004\202\004\215\000\140\003\160\005F\003\163\004\216\003\165\000\240\005V\004\217\004\203\005\209\005\172\000l\003\167\004\218\003\171\005?\003\188\003\187\003\204\001\017\003\210\003\209\005G\006\195\000\129\0047\003\213\000i\004\186\003\218\004\187\003\217\007+\003\226\003\223\003\222\000l\001\203\000\244\000\228\000\240\003\225\001\023\000\241\001\213\003\228\001\019\005H\003\230\005\135\005A\005\166\000\240\000\246\005^\000\241\006\195\003\234\005f\001\206\000h\004\202\000h\006\195\000\129\005F\005~\004\214\002!\000\240\005V\002-\004\203\006L\005\172\000\242\000\240\002\175\003\236\0024\003\238\004\186\003\240\004\205\003\245\004\215\005G\000\242\003\244\000\130\004\216\004\188\003\031\007@\004\217\003\253\003\250\004\189\003\249\000\174\004\218\000\184\000l\004V\004T\005\158\005\134\003\252\003\255\004\001\000\134\005H\004\005\005\135\002v\005\166\004\007\004c\005^\004\011\004\n\000\137\005f\000\248\004\r\000i\000y\000i\004\023\000\130\005~\004\214\002#\004\130\000\255\002p\004\018\b\003\002$\0027\b\004\002\175\005U\004\017\004\188\004\186\004\020\004\205\001S\004\215\004\189\004\022\004\025\004\027\004\216\000h\004 \0028\004\217\004&\001\214\004%\002\128\000\174\004\218\005=\002:\002\175\007\242\004(\005T\004\186\002;\004\205\004*\0023\004,\007z\0040\000\129\0046\0045\004;\002\176\004A\001\215\006\240\002\177\001\207\000\174\004@\001\208\001\249\006\182\007\242\006\186\005T\004\130\004V\001S\000l\007{\000l\007~\006\193\006\194\005U\006\227\004\188\006\206\004\202\006\220\007\b\0076\004\189\000\129\007O\005?\000\240\000\231\000i\004\203\007Q\004\130\000\235\bB\000\174\001\179\001\185\005=\001\184\007[\005U\007]\004\188\007g\007\131\000\174\000\129\b\031\004\189\bM\000\222\003\015\000\130\bQ\be\bc\002\178\b]\b_\b3\005A\ba\002\179\005=\bg\000\174\000\240\bm\000\183\0024\007\206\004\202\000\129\bn\005s\005F\000\231\001\186\bs\000\240\005V\000\235\004\203\b\018\005\172\bt\by\bx\000\130\005?\b\128\006\195\b\130\000\225\006\229\001\015\005G\b\136\004s\000\233\001C\000h\b\137\000l\002~\b\141\004\204\b\142\b\145\b\146\b\149\000\130\b\152\004<\005x\005?\000\225\b\153\006\230\006\193\006\194\005H\000\226\005\135\005A\005\166\b\170\b\159\005^\0027\b\168\b\164\005f\b\167\000\239\004\202\000h\000\130\005|\005F\005~\004\214\000\225\000\240\005V\b4\004\203\0028\000\233\b\176\005A\007z\002\128\b\174\007\247\b\178\002:\000\239\b\183\004\215\b7\004\202\002;\000\000\004\216\005F\000i\000\000\004\217\000\240\005V\b4\004\203\002\192\004\218\007{\000\000\007~\006\193\006\194\007\247\000\240\000\000\000\239\002\193\005H\b7\005Y\b9\000\000\000\000\000\000\005^\000\184\000\000\000h\b?\000\000\006\195\000\000\000h\000i\000\000\000h\005~\004\214\000\000\000\000\000\000\004|\000\000\005H\007\142\005Y\b9\002\175\000\000\000\240\005^\004\186\000\241\004\205\b?\004\215\000\000\000\000\000\000\000\000\004\216\000h\005~\004\214\004\217\004\128\000\000\001\187\000\000\000\174\004\218\000\145\000\240\000l\007\242\000\241\005T\002\003\000\000\000\129\007\207\004\215\000\000\000\231\000\242\000\000\004\216\000\000\000\237\006\195\004\217\001\190\000i\000\000\000\000\002\194\004\218\000i\000\240\001\237\000i\000\241\002\005\004\130\000\000\000\000\000\000\000\242\000l\000\000\001S\000\000\005U\001\017\004\188\006\248\006\193\006\194\000\000\000\000\004\189\002\175\007\208\000\000\000\000\004\186\000i\004\205\000\000\000\000\001S\b6\000\244\000\242\000\000\005=\001\025\000h\000\145\000\000\001\019\000\000\000h\000\174\000\130\000\000\000\000\000\246\004T\000\225\005T\000\000\000\129\006\255\000\000\000\233\002!\000\174\000\000\002-\000\000\000\000\001\017\001\249\007\211\005'\000\000\000l\000\000\000\129\000\000\000\000\000l\000\222\003\014\000l\000\000\004\130\000\000\000\000\004V\000\244\000\134\001\163\000\000\001\018\005U\005?\004\188\001\019\000\239\000\000\000\000\000\137\004\189\006\195\000\246\000\000\000y\000\129\000\000\005$\000i\000\231\007E\000\000\000\000\000i\000\235\005=\007\161\000\000\000\174\001\179\001\180\001\181\001\184\000\130\000\000\000\000\002#\000\174\005A\002p\000\000\000\174\002$\000\000\000\000\b\000\006T\000\000\000\000\004\202\000\130\005\204\b\002\005F\000\000\000\225\000\000\000\240\005V\b4\004\203\000\226\000\183\000h\000\000\000\134\003\153\000\000\007\247\000\000\000\000\001\186\000\000\001\222\b7\002s\000\137\005?\000\184\0023\000\130\000y\002\175\000\000\000\000\000\225\004\186\001\015\004\205\000\240\000\000\000\233\000\241\000l\005j\000\000\000\239\000\000\000l\005H\000\000\005Y\b9\000\000\000\174\005%\005^\000\000\000\000\004T\b?\005T\005A\b\000\000\000\000\000\000h\000\000\005~\004\214\b\n\000\000\000\000\004\202\000\242\000h\000\239\005F\000i\000\000\000\000\000\240\005V\000\000\004\203\000\000\000\129\004\215\004\130\000\000\002!\000\000\004\216\002-\000\000\000\000\004\217\005U\005\193\004\188\000\000\000\000\004\218\000\243\000\000\004\189\000\000\007\215\000\174\004n\000\000\000\000\000\240\000\000\000\000\0024\000h\005*\000h\000\000\005=\000\000\000\244\005H\000\000\005Y\005\195\000\245\003\020\000\240\005^\000i\000\241\004s\005f\000\000\000\000\000\246\001\217\000\000\000i\005\202\005~\004\214\000\000\b\003\005\204\000\000\b\004\004t\002v\000\130\000\000\005$\002#\000\000\001S\000\000\000\000\000\240\002$\004\215\000\241\002\175\000\242\000\000\004\216\004\186\000\000\004\205\004\217\000\000\005?\004x\000\000\0027\004\218\005M\000\143\001\187\000\000\000i\000\000\000i\000\129\000\174\000\000\002\011\000\222\003\r\004T\005O\005T\0028\000\242\000\000\000\129\0023\002\128\000\000\000\231\000\000\002:\001\190\000\000\000\237\000l\005A\002;\000\000\000\000\001\237\002\r\b\003\000\000\000l\b\004\000\000\004\202\004\130\001S\000\000\005F\001\017\001S\000\000\000\240\005V\005U\004\203\004\188\000\000\000\000\000\000\000\129\000\000\004\189\000\000\000\222\000\224\000\000\005%\000\244\005\193\000\000\000\000\001\025\000\000\000\000\000\130\001\019\005=\000\000\000\000\000\225\000\000\000l\000\246\000l\000\000\000\226\000\130\000\000\002\175\000\000\000\000\000\225\004\186\005H\004\205\005Y\005\195\000\233\000\000\000h\005^\000\000\000\000\005[\005f\000\240\000\000\000\000\0024\000\000\000\174\000\000\005~\004\214\000\134\004T\005\\\005\134\000\000\000\000\000\239\000\184\000\000\000\000\000\130\000\137\000\000\000\000\005?\000\225\000y\004\215\000\239\000\000\000\000\000\226\004\216\005\234\000\000\000\000\004\217\000\174\000\000\000\000\004\130\000\000\004\218\000\174\001\179\001\180\001\240\001\184\000\000\005U\000\000\004\188\0025\000h\0026\000\000\000\000\004\189\000\000\005A\000i\002_\001S\000\000\0027\000\000\000\239\000\184\000\000\000\184\004\202\000\000\005=\000\000\005F\000\000\007\014\000\183\000\240\005V\000\000\004\203\0028\005\242\000\000\006\002\001\186\0029\000\000\000\000\000\000\002:\000\000\000\000\000\000\005\139\000\000\002;\000\000\000\240\007\015\002`\000\241\007\018\006\193\006\194\000\000\000\000\000\000\b\000\000\000\000\240\000\000\000\000\000\241\002\175\b\r\000\000\000i\004\186\005H\004\205\005Y\005\141\005?\000\000\000\000\005^\000\000\000\000\005\137\005\143\000\000\000\000\000\242\000l\000\000\000\174\000\000\005~\004\214\000\000\004T\005\\\005\134\000\000\000\242\000\000\000\000\000\240\000\129\000\000\000\241\000\000\004\186\000\174\004\205\000\000\004\215\005A\000\000\000\000\000\000\004\216\000\000\006\229\000\000\004\217\000\000\000\000\004\202\004\130\000\174\004\218\005F\000\243\000\000\005\232\000\240\005V\005U\004\203\004\188\006\195\000\242\000\000\007z\000h\004\189\006\230\006\193\006\194\000\000\000l\000\244\005G\000\000\000\000\000\000\001;\000\000\006\007\000\174\005=\000\000\000\000\006\n\004T\000\000\000\246\007{\000\000\007~\006\193\006\194\006\016\000\000\004\188\000\000\000\000\005H\000\000\005\135\004\189\005\136\000\184\001\203\005^\000h\000\000\000\000\005f\b\014\001\213\000\000\000\000\004\130\000\000\006\017\005~\004\214\006\011\006\019\000h\001\187\001\186\000h\000\000\001\206\000\000\002\175\000\000\000i\000\000\004\186\005?\004\205\b\015\004\215\b\003\000\000\000\000\b\004\004\216\000\000\005\142\000\000\004\217\001\190\006\195\001S\004V\000\174\004\218\000h\000\000\001\237\004T\005\\\005\134\000\000\000\000\0069\000\184\000\000\000\000\004\210\000\000\000\000\001H\005A\000\000\006\195\000i\000\174\001\179\001\180\001\245\001\184\006!\000\000\004\202\000\000\007\148\000\000\005F\004\130\000\000\000i\000\240\005V\000i\004\203\000\000\000\000\005U\000\000\004\188\000\000\000h\000\000\000\000\000\000\004\189\000\000\000\000\005G\000l\000\183\000\000\000\000\000\129\000\000\000\000\000\000\000\231\004\202\001\186\005=\000i\000\237\000\000\000\000\000\000\000\240\006\020\000\000\004\203\000\000\001\214\000\000\005H\001\255\005\135\000h\005\136\000\129\000\000\005^\000\000\000\231\005\154\005f\000h\000\000\000\232\000\000\000\000\000l\000\000\005~\004\214\000\000\000\000\001\220\005V\000\000\001\207\000\000\000\000\001\208\002\175\000\000\000l\000i\004\186\000l\004\205\001S\004\215\005?\002\001\006\253\006\021\004\216\000h\000\130\006;\004\217\000\000\000h\000\225\000\000\000\174\004\218\006/\004\214\000\233\004T\005\158\005\134\000\000\002\175\007\168\000l\000\000\002\176\002&\006}\000i\002\177\000\130\007\211\005^\004\215\005A\000\225\005f\000i\004\216\000\000\000\000\000\233\004\217\005s\005~\004\202\004\130\004V\004\218\005F\000\000\000\239\000h\000\240\005V\005U\004\203\004\188\000\174\001\179\001\180\0033\001\184\004\189\000\000\000\000\000\000\004s\000l\000i\005G\000\000\000\000\000\000\000i\000\000\000\239\000\000\005=\000\000\000\000\000\000\000\184\005x\000\000\002m\002\195\000\000\000\000\000\000\002\178\000\000\000\183\000\000\007z\005H\002\179\005\135\0061\005\136\000\000\001\186\005^\000l\001\187\000\000\005f\005|\000\000\000\000\000\000\000\000\000l\002\167\005~\004\214\000\000\000i\007{\000\000\007~\006\193\006\194\002\175\000\000\000\000\000\000\004\186\001\190\004\205\005?\002\197\000\000\004\215\000\240\000\000\001\237\000\241\004\216\000\000\000\000\000\000\004\217\000\000\000l\000\174\000\000\000\000\004\218\000l\004T\005\158\005\134\000\000\000\000\000\000\002\175\000\000\002\181\000\240\002\176\002\198\000\241\000\000\002\177\005A\000\000\000\000\000\000\000\242\000\174\001\179\001\180\003\185\001\184\000\000\004\202\000\000\000\000\004\130\005F\000\000\000\000\000\000\000\240\005V\000\000\004\203\005U\005\165\004\188\002\200\000l\002\190\000\242\000\000\004\189\000\000\000\243\000\000\006\195\005G\004\191\000\000\000\183\000\000\000\000\002\192\007\215\002\235\005s\005=\000\000\001\186\000\000\000\240\000\000\000\244\002\193\000\000\000\000\002\195\001>\000\000\000\000\002\178\005H\000\000\005\135\000\000\005\166\002\179\000\246\005^\004s\000\000\006\229\005f\000\000\004\200\000\000\000\000\000\248\002\175\000\000\005~\004\214\004\186\000\000\004\205\005x\000\000\000\174\001\001\002\203\000\000\000\000\004T\002\196\001\187\006\230\006\193\006\194\005?\004\215\000\174\002\197\000\000\006\229\004\216\004T\005\158\005\134\004\217\005|\000\000\006\248\006\193\006\194\004\218\000\000\000\000\005\019\001\190\000\000\000\000\004\130\000\000\000\000\000\000\000\000\001\237\006\230\006\193\006\194\001\186\002\198\002\205\005A\004\130\000\000\000\000\000\174\001\179\001\180\003\202\001\184\000\000\005U\004\202\004\188\000\000\002\206\005F\000\000\000\000\004\189\000\240\005V\002\175\004\203\007\171\005\167\004\186\000\000\004\205\002\200\000\174\000\000\000\000\000\000\005=\000\000\000\000\005G\000\000\000\183\000\000\000\000\000\000\006\195\000\174\002\192\003\004\002\238\001\186\004T\005\196\005\134\000\000\000\240\000\129\000\000\002\193\000\000\000\231\006\195\000\000\000\000\005H\000\235\005\135\000\000\005\166\000\000\007T\005^\000\000\000\000\000\000\005f\001\187\006\195\000\000\002\249\004\130\000\000\000\000\005~\004\214\002\241\000\000\000\000\005?\005U\000\000\004\188\000\000\000\000\002\203\000\000\000\000\004\189\000\000\000\000\001\190\000\000\004\215\001\203\000\000\002\175\000\000\004\216\001\237\002\176\001\213\004\217\005=\002\177\000\000\000\000\000\000\004\218\000\000\000\000\000\000\000\130\000\000\005A\006\229\001\206\000\225\000\000\001\015\002\175\005V\000\000\000\233\004\186\004\202\004\205\005\198\002\205\005F\000\000\000\000\000\000\000\240\005V\000\000\004\203\000\000\005\185\006\230\006\193\006\194\000\174\002\206\000\000\000\000\000\000\004T\005\196\005\134\005G\000\000\000\000\000\000\000\000\005?\000\000\000\000\000\239\006\251\000\000\002\195\000\000\000\000\006\127\002\178\000\000\000\000\000\000\005^\000\000\002\179\000\000\005f\000\000\005H\004\130\005\135\000\000\005\166\000\000\005~\005^\000\000\001F\005U\005f\004\188\000\000\000\000\005A\007\n\000\000\004\189\005~\004\214\000\000\000\000\002\240\001\187\000\000\004\202\000\000\000\000\000\000\005F\002\197\000\000\005=\000\240\005V\000\000\004\203\004\215\000\000\000\000\000\000\001\214\004\216\006\195\000\000\000\000\004\217\001\190\000\000\000\174\005G\000\000\004\218\000\000\000\000\001\237\005\200\000\000\000\000\000\000\002\198\000\000\000\000\000\000\000\000\000\240\004f\000\000\000\241\001\207\002\175\000\000\001\208\000\000\004\186\005H\004\205\005\135\000\000\005\199\001S\000\000\005^\000\000\005?\005\218\005f\000\000\000\000\000\000\002\200\000\000\000\174\001J\005~\004\214\000\000\004T\005\\\005\134\000\242\000\000\000\000\000\000\000\000\000\129\002\192\000\000\002\238\002!\000\000\000\000\002-\004\215\000\240\000\000\000\000\002\193\004\216\005A\001\203\000\000\004\217\000\000\000\000\000\000\004\130\001\213\004\218\001\017\004\202\000\000\000\000\000\000\005F\005U\000\000\004\188\000\240\005V\000\000\004\203\001\206\004\189\002\241\000\000\000\000\000\000\000\244\000\000\000\000\000\174\001\025\002\203\000\000\005G\001\019\000\000\005=\000\000\000\000\002\175\000\000\000\246\000\000\004\186\007\025\004\205\000\000\000\000\000\130\000\000\000h\002#\000\000\000\000\002p\000\000\000\000\002$\005H\000\000\005\135\000\174\005\199\000\000\000\000\005^\004T\000\000\005T\005f\000\000\000\129\000\000\000\000\002\205\000\231\000\000\005~\004\214\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005?\002\206\002s\000\000\000\000\004V\0023\004\130\004\215\000\000\000\000\000\000\001\203\004\216\000\000\000\000\005U\004\217\004\188\001\213\000\000\000\000\000\000\004\218\004\189\000\000\000\000\000i\000h\000\000\000\000\000\000\000\000\001\214\001\206\005A\000\000\000\000\000\000\005=\000\000\002\175\000\000\000\000\000\000\004\186\004\202\004\205\000\130\000\000\005F\000\000\000\000\000\225\000\240\005V\000\000\004\203\004p\000\233\006F\001\207\000\000\000\174\001\208\005\204\000\000\000\000\004T\000\000\005T\005G\001S\000\000\000\000\000\174\001\179\001\180\003\207\001\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\229\000\000\000\240\000\000\005?\0024\000i\000\239\000\000\005H\004\130\005\135\000\000\005\136\000\000\000l\005^\000\000\002t\005U\005f\004\188\000\183\000\000\006\230\006\193\006\194\004\189\005~\004\214\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005A\002v\000h\005=\000\000\000\145\002\175\000\000\004\215\001\214\004\186\004\202\004\205\004\216\000\000\005F\000\000\004\217\000\000\000\240\005V\000\000\004\203\004\218\006V\000\000\0027\000\129\000\174\005\204\000\000\000\222\003\006\004T\005m\005T\005\193\001\207\000\000\000\000\001\208\000\000\000l\000\000\0028\004V\000\000\000\000\001S\002\128\000\000\000\240\006\229\002:\000\241\005?\000\000\000\000\000\000\002;\000\000\005H\004\130\005Y\005\195\006\195\000\184\000i\005^\000\000\000\000\005U\005f\004\188\000\000\000\000\006\230\006\193\006\194\004\189\005~\004\214\004\131\000\000\000\000\000\000\000\242\000\174\001\179\001\189\005A\001\184\000\130\000\000\005=\000\000\002\175\000\225\000\000\004\215\004\186\004\202\004\205\000\226\004\216\005F\004\135\000\000\004\217\000\240\005V\000\000\004\203\000\000\004\218\006X\000\134\003\158\000\174\000\000\005\204\000\183\000\000\004T\000\000\005T\005\193\000\137\000\000\000\000\001\186\000\000\000y\000\000\000\248\000\000\000\000\000\000\000\239\000\000\000\000\000\000\000l\000\000\000\000\001\003\005?\000\000\000\000\000\000\001\187\005H\004\130\005Y\005\195\000\000\006\195\000\000\005^\000\000\002\175\005U\005f\004\188\002\176\000\000\000\000\000\000\002\177\004\189\005~\004\214\000\000\000\000\001\190\000\000\000\000\000\000\000\000\000\000\000\000\005A\001\237\000\000\005=\000\174\000\000\002\175\007$\004\215\004T\004\186\004\202\004\205\004\216\000\000\005F\000\000\004\217\000\000\000\240\005V\007\228\004\203\004\218\007\220\000\000\000\000\000\129\000\174\005\204\000\000\000\222\002\024\004T\005\\\005\134\005\193\000\000\004\130\000\000\000\240\000\000\000\000\000\241\002\195\000\000\000\000\001\186\002\178\000\000\000\000\000\184\006\229\000\000\002\179\005?\000\000\000\000\000\000\000\000\006\229\005H\004\130\005Y\005\195\000\000\000\000\005\128\005^\000\000\000\000\005U\005f\004\188\000\000\000\242\006\230\006\193\006\194\004\189\005~\004\214\000\000\000h\006\230\006\193\006\194\000\000\000\000\002\197\005A\005\132\000\130\000\000\005=\000\000\002\175\000\225\0071\004\215\004\186\004\202\004\205\000\226\004\216\005F\000\000\001\187\004\217\000\240\005V\000\000\004\203\000\000\004\218\000\000\000\000\000\000\000\174\002\198\000\000\000\000\000\000\004T\000\000\005T\005\193\000\000\000\000\000\000\000\000\001\190\000\174\001\179\001\180\0043\001\184\000\000\000\239\001\237\000\000\000\000\000\000\000\000\000\000\000\000\005?\000\000\000i\002\200\000\000\005H\004\130\005Y\005\195\000\000\006\195\000\000\005^\000\000\000\000\005U\005f\004\188\006\195\002\192\000\183\002\245\000\000\004\189\005~\004\214\000\000\000\240\000\000\001\186\002\193\005V\000\000\000\000\000\000\005A\000\000\000\000\005=\000\000\000\145\002\175\000\000\004\215\000\000\004\186\004\202\004\205\004\216\000\000\005F\000\000\004\217\000\000\000\240\005V\b\024\004\203\004\218\007\234\000\000\000h\000\000\000\174\005\204\000\000\002\203\000\000\004T\005\\\005\134\005G\000\129\000\000\006\129\000\240\000\231\000l\000\241\005^\000\000\000\232\000\000\005f\002\248\000\000\000\000\006\229\000\000\000\000\005?\005~\000\000\000\000\006\229\000\000\005H\004\130\005\135\000\000\005\136\000\000\000\000\005^\000\000\000\000\005U\005f\004\188\002\205\000\242\006\230\006\193\006\194\004\189\005~\004\214\000\000\006\230\006\193\006\194\000\000\000\000\000\000\002\206\005A\000i\000\000\000\000\005=\000\000\000\000\000\000\007/\004\215\000\000\004\202\000\130\000\000\004\216\005F\007-\000\225\004\217\000\240\005V\000\000\004\203\000\233\004\218\000\000\000\134\004\030\002\175\000\000\000\000\005\213\004\186\000\000\004\205\000\000\005\193\000\137\000\000\000\145\000\000\000\000\000y\000\000\000\174\001\179\001\180\0049\001\184\000\000\000\174\000\000\000\000\000\000\000\000\004T\005?\005\134\000\239\000\000\000\000\005H\001\187\005Y\005\195\000\000\006\195\000\000\005^\000\000\000\000\000\000\005f\006\195\000\000\000\000\000l\000\000\000\183\000\000\005~\004\214\000\000\000\000\004\130\000\000\001\190\001\186\000\000\000\000\000\000\005A\000\000\005U\001\237\004\188\000\000\000\000\000\000\004\215\000\000\004\189\004\202\000\000\004\216\000\000\005F\000\000\004\217\000\000\000\240\005V\000\000\004\203\004\218\000\000\005=\000\000\002\175\000\000\000\000\000\000\004\186\000\000\004\205\000\000\000\174\005G\000\000\000\000\000\174\001\179\001\180\004>\001\184\000\000\005\138\000\000\000\000\000\000\000\174\000\240\000\000\000\000\000\241\004T\000\000\005T\000\000\000\000\000\134\004#\005H\006\229\005\135\000\000\005\136\000\000\000\000\005^\000\000\000\137\000\000\005f\000\183\000\000\000y\000\000\005?\000\000\000\000\005~\004\214\001\186\004\130\000\000\000\242\006\230\006\193\006\194\000\000\000\000\000\000\005U\000\129\004\188\000\000\000\000\000\231\007K\004\215\004\189\000\000\000\232\000\000\004\216\007I\001\203\000\000\004\217\000\000\000\000\000\000\005A\001\213\004\218\005=\000\000\000\000\002\175\000\000\000\000\000\000\004\186\004\202\004\205\000\000\000\000\005F\001\206\000\000\000\000\000\240\005V\000\248\004\203\006\229\005S\000\000\000\000\000\000\000\174\000\000\000\129\000\000\001\005\004T\000\231\005T\005\215\000\000\000\000\000\235\000\000\000\000\001\187\000\000\000\000\000\000\000\130\006\230\006\193\006\194\000\000\000\225\000\000\000\000\006\195\005?\000\000\000\233\000\000\000\000\000\000\005H\004\130\005\135\000\000\005\217\001\190\000\000\005^\000\000\000\000\005U\005f\004\188\001\237\000\000\000\000\000\000\000\000\004\189\005~\004\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005A\000\000\000\239\000\000\005=\000\130\000\000\000\000\006\229\004\215\000\225\004\202\001\015\000\000\004\216\005F\000\233\002\175\004\217\000\240\005V\004\186\004\203\004\205\004\218\000\000\000\000\001\214\000\000\001\020\000\000\000\000\006\230\006\193\006\194\005]\005W\006\195\001\187\000\174\000\000\000\000\000\000\000\000\004T\000\000\005T\000\000\000\000\000\000\000\000\000\239\005u\000\000\000\000\001\207\005?\000\000\001\208\000\000\000\000\005H\001\190\005Y\005Z\000\129\001S\000\000\005^\000\231\001\237\000\000\005f\004\130\000\232\000\000\000\000\000\000\000\000\000\000\005~\004\214\005U\000\000\004\188\000\240\000\000\007G\000\241\000\000\004\189\005A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\215\000\000\000\000\004\202\000\000\004\216\005=\005F\000\000\004\217\000\000\000\240\005V\006\195\004\203\004\218\000\000\000\000\000\000\002\175\000\000\000\242\000\000\004\186\000\000\004\205\000\000\000\174\005W\000\000\000\000\000\130\000\000\000\000\000\000\000\240\000\225\000\000\000\241\000\000\000\000\000\174\000\233\000\000\000\000\000\000\004T\000\000\005T\000\000\000\000\000\000\000\000\005H\000\000\005Y\005Z\000\000\005?\000\000\005^\007X\000\000\001\024\005f\000\000\000\000\000\000\000\000\000\248\000\242\000\000\005~\004\214\000\000\004\130\000\000\000\239\000\000\000\000\001\007\000\000\000\000\000\000\005U\000\000\004\188\000\000\000\000\000\000\000\000\004\215\004\189\005A\000\000\000\000\004\216\000\000\001\203\001\017\004\217\000\000\000\000\000\000\004\202\001\213\004\218\005=\005F\000\000\002\175\000\000\000\240\005V\004\186\004\203\004\205\000\000\000\244\000\000\001\206\000\000\001\025\000\000\000\000\000\174\001\019\006\229\000\000\005W\000\000\000\000\000\174\000\246\000\129\000\000\007V\004T\000\231\005T\000\000\000\000\000\000\000\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\230\006\193\006\194\005H\000\000\005Y\005Z\000\000\005?\000\240\005^\000\000\000\241\000\000\005f\004\130\000\000\000\000\000\000\000\000\000\000\000\000\005~\004\214\005U\000\000\004\188\000\000\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\004\215\000\000\005A\000\242\001\203\004\216\005=\000\130\000\000\004\217\006\229\001\213\000\225\004\202\001\015\004\218\000\000\005F\000\233\002\175\000\000\000\240\005V\004\186\004\203\004\205\001\206\000\000\000\000\001\214\005\169\002?\000\000\000\000\006\230\006\193\006\194\000\000\005\162\006\195\000\000\000\174\000\000\000\000\000\000\000\000\004T\000\000\005T\000\000\000\000\000\248\000\129\000\239\005\245\000\000\000\231\001\207\005?\000\000\001\208\000\232\001\t\005H\000\000\005Y\005\164\000\129\001S\000\000\005^\000\231\000\000\000\000\005f\004\130\000\232\000\000\000\000\000\000\000\000\000\000\005~\004\214\005U\000\000\004\188\000\000\000\000\000\000\000\000\000\000\004\189\005A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\215\000\000\000\000\004\202\000\000\004\216\005=\005F\000\000\004\217\000\000\000\240\005V\006\195\004\203\004\218\000\130\000\000\000\000\002\175\005\161\000\225\000\000\004\186\000\000\004\205\001\214\000\233\005\162\000\000\000\000\000\130\000\000\000\000\000\000\000\240\000\225\000\000\000\241\000\000\000\000\000\174\000\233\000\000\000\000\000\000\004T\000\000\005T\000\000\000\000\006$\000\000\005H\001\207\005Y\005\164\001\208\005?\000\000\005^\007\146\000\239\001\024\005f\001S\000\000\000\000\000\000\000\000\000\242\000\000\005~\004\214\000\000\004\130\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\000\005U\000\000\004\188\000\000\000\000\000\000\000\000\004\215\004\189\005A\000\000\000\000\004\216\000\000\000\000\001\017\004\217\000\000\000\000\000\000\004\202\000\000\004\218\005=\005F\000\000\002\175\000\000\000\240\005V\004\186\004\203\004\205\000\000\000\244\000\000\005\181\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\000\005\182\000\000\000\000\000\174\000\246\000\129\000\000\007\151\004T\000\231\005T\000\000\000\000\000\000\000\235\000\000\000\240\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\005H\000\000\005Y\005\184\000\000\005?\000\240\005^\000\000\000\241\000\000\005f\004\130\000\000\000\000\000\000\000\000\000\000\000\000\005~\004\214\005U\000\000\004\188\000\000\000\000\000\242\000\000\000\000\004\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\215\000\000\005A\000\242\000\000\004\216\005=\000\130\000\000\004\217\000\000\000\000\000\225\004\202\001\015\004\218\000\000\005F\000\233\002\175\000\000\000\240\005V\004\186\004\203\004\205\000\000\000\000\000\000\000\000\005\179\000\000\005\192\000\000\000\000\000\129\000\248\000\000\005\162\000\231\000\000\000\174\000\000\000\000\000\232\000\000\004T\001\011\005T\000\000\000\000\000\248\000\000\000\239\000\000\000\000\002\175\000\000\005?\000\000\002\176\000\000\001\r\005H\002\177\005Y\005\164\000\000\000\000\000\000\005^\000\000\000\000\000\000\005f\004\130\000\000\000\000\000\000\002\130\000\000\000\000\005~\004\214\005U\000\000\004\188\000\000\000\000\000\000\000\000\000\000\004\189\005A\000\000\000\000\000\000\000\000\000\000\000\000\000\130\004\215\000\000\000\000\004\202\000\225\004\216\005=\005F\000\000\004\217\000\233\000\240\005V\000\000\004\203\004\218\000\000\000\000\000\000\002\175\002\195\000\000\000\000\004\186\002\178\004\205\000\000\000\000\005\193\000\000\002\179\000\000\005\197\000\000\000\000\000\240\007\224\000\000\000\241\000\000\000\000\000\174\000\000\000\000\000\000\000\239\004T\000\000\005T\000\000\000\000\000\000\000\000\005H\000\000\005Y\005\195\002\244\005?\000\000\005^\000\000\000\000\001J\005f\002\197\000\000\000\000\000\000\000\000\000\242\000\000\005~\004\214\000\000\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005U\000\000\004\188\000\000\000\000\000\000\000\000\004\215\004\189\005A\000\000\002\198\004\216\000\000\000\000\001\017\004\217\000\000\000\000\000\000\004\202\000\000\004\218\005=\005F\000\000\002\175\000\000\000\240\005V\004\186\004\203\004\205\000\000\000\244\000\000\000\000\000\000\001\025\000\000\000\000\002\200\001\019\007\236\000\240\005\193\000\000\000\241\000\174\000\246\000\000\000\000\000\000\004T\000\000\005T\000\000\002\192\000\000\002\238\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\002\193\000\000\005H\000\000\005Y\005\195\000\000\005?\000\000\005^\000\000\000\242\000\000\005f\004\130\000\000\000\000\000\000\000\000\000\000\000\000\005~\004\214\005U\000\000\004\188\000\000\002\241\000\000\000\000\000\000\004\189\000\000\000\000\000\000\000\000\002\203\000\000\000\000\000\000\004\215\000\000\005A\000\000\000\000\004\216\005=\000\000\002\175\004\217\000\000\000\000\004\186\004\202\004\205\004\218\000\000\005F\000\000\001E\000\000\000\240\005V\000\000\004\203\007\239\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\004T\000\000\005T\007\225\002\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\002\206\000\000\000\000\000\000\005?\000\000\000\000\000\000\000\000\005H\004\130\005Y\007\227\000\000\000\000\000\000\005^\000\000\002\175\005U\005f\004\188\002\176\000\000\000\000\000\000\002\177\004\189\005~\004\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005A\000\000\000\000\005=\000\000\000\000\002\175\000\000\004\215\000\000\004\186\004\202\004\205\004\216\000\000\005F\000\000\004\217\000\000\000\240\005V\000\129\004\203\004\218\000\000\000\231\000\000\000\000\000\174\000\000\000\235\000\000\000\000\004T\000\000\006m\007\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\002\179\005?\000\000\000\000\000\000\000\000\000\000\005H\004\130\005Y\007\227\000\000\000\000\000\000\005^\000\000\002\175\005U\005f\004\188\002\176\000\000\000\000\000\000\002\177\004\189\005~\004\214\000\000\000\000\000\000\000\000\000\130\000\000\000\000\002\197\005A\000\225\000\000\000\000\005=\000\000\002\175\000\233\000\000\004\215\004\186\004\202\004\205\000\000\004\216\005F\000\000\000\000\004\217\000\240\005V\000\000\004\203\000\000\004\218\000\000\000\000\000\000\000\174\002\198\000\000\000\000\000\000\004T\000\000\006m\007\225\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\000\002\195\000\000\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\002\179\005?\000\000\000\000\002\200\000\000\005H\004\130\005Y\007\227\000\000\000\000\000\000\005^\000\000\000\000\005U\005f\004\188\000\000\002\192\000\000\002\202\000\000\004\189\005~\004\214\002\196\000\240\000\000\000\000\002\193\000\000\000\000\000\000\002\197\005A\006n\000\000\005=\000\000\000\000\002\175\000\000\004\215\000\000\004\186\004\202\004\205\004\216\000\000\005F\000\000\004\217\000\000\000\240\005V\000\000\004\203\004\218\000\000\000\000\000\000\000\000\000\174\002\198\000\000\002\203\000\000\004T\000\240\006m\005G\000\241\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\002\200\000\000\005H\004\130\006q\000\000\000\000\000\000\002A\005^\000\242\000\000\005U\005f\004\188\002\205\002\192\003\001\002\238\000\000\004\189\005~\004\214\000\000\000\240\000\000\000\000\002\193\000\000\000\000\002\206\005A\006p\000\000\000\000\005=\000\000\000\000\000\000\001\017\004\215\000\000\004\202\000\000\000\000\004\216\005F\000\000\002\249\004\217\000\240\005V\000\129\004\203\002\241\004\218\002!\000\000\000\244\002-\000\000\000\000\001\023\002\203\000\000\000\000\001\019\005G\000\000\000\000\000\000\000\000\000\000\000\246\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005?\000\000\000\000\000\000\000\000\005H\000\000\006q\000\000\000\129\000\000\000\000\005^\000\231\000\000\000\000\005f\000\000\000\235\002\205\000\000\000\000\000\000\000\000\005~\004\214\000\000\000\000\000\000\000\000\000\130\000\174\000\000\002#\002\206\005A\006s\000\000\000\000\002$\000\129\000\000\000\000\004\215\002!\000\000\004\202\002-\004\216\000\000\005F\000\000\004\217\000\000\000\240\005V\000\129\004\203\004\218\000\000\002!\000\000\000\174\002-\000\000\000\000\000\000\000\000\000\000\000\000\002d\005G\000\000\000\000\000\130\000\000\0023\000\000\000\000\000\225\000\000\001\015\000\129\000\000\000\000\000\233\002!\000\000\000\000\002-\000\000\000\000\000\000\000\000\000\000\000\000\005H\000\000\006q\000\000\000\000\000\000\000\000\005^\000\174\000\130\000\000\005f\002#\000\000\000\000\000\000\000\000\000\000\002$\005~\004\214\000\000\000\000\000\000\000\239\000\130\000\000\000\000\002#\000\000\000\000\002p\000\000\000\000\002$\002\175\000\000\000\000\004\215\004\186\000\000\004\205\000\000\004\216\000\000\000\000\000\000\004\217\000\000\002d\001F\000\130\001H\004\218\002#\0023\000\000\000\000\000\000\000\000\002$\000\000\000\000\000\240\0056\006S\0024\002s\000\000\000\000\000\000\0023\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\000\000\000\002e\003\n\002d\000\000\000\000\000\000\000\000\000\000\0023\000\000\000\000\002\195\000\000\004\188\000\000\000\000\000\000\000\000\000\240\004\189\000\000\000\241\000\129\000\000\000\000\0025\002!\0026\000\000\002-\000\000\000\000\000\000\000\000\005=\001S\000\000\0027\000\000\000\000\000\000\000\000\000\000\000\000\000\174\000\000\001J\000\000\000\000\000\240\000\000\000\130\0024\000\242\000\000\0028\000\225\000\000\000\000\000\000\0029\000\000\000\233\000\000\002:\000\240\000\000\000\000\0024\000\000\002;\001P\000\000\000\000\002\\\002e\002f\000\000\000\000\001S\000\000\002\139\001\017\000\000\000\000\000\000\005?\000\130\000\000\000\000\002#\000\240\000\000\000\000\0024\000\000\002$\000\239\000\000\000\000\0025\000\244\0026\002v\000\000\001\025\000\000\000\000\000\000\001\019\001S\000\000\0027\000\000\000\000\000\000\000\246\002e\002\183\000\000\000\000\005A\000\000\000\000\000\000\000\129\000\000\002d\0027\000\231\0028\000\000\004\202\0023\000\232\0029\005F\000\000\000\000\002:\000\240\000\000\0025\004\203\0026\002;\0028\000\000\000\000\002\\\000\000\002\128\001S\000\000\0027\002:\000\000\005G\000\000\002\175\000\000\002;\000\000\004\186\000\000\004\205\000\000\000\000\000\000\000\000\000\000\000\000\0028\000\000\000\000\000\000\000\000\0029\000\000\000\000\000\240\002:\005H\000\241\000\000\000\000\000\000\002;\0056\005\155\000\130\002\\\000\000\002\175\000\000\000\225\000\000\004\186\000\000\004\205\000\000\000\233\004\214\000\000\000\000\000\000\000\129\000\000\000\000\000\000\002!\000\000\000\000\002-\000\000\000\242\000\240\000\000\000\000\0024\004\215\000\000\0056\005\145\002\195\004\216\004\188\000\000\000\174\004\217\000\000\000\000\004\189\000\000\000\000\004\218\000\239\000\000\000\000\000\000\000\000\000\000\002e\004\193\000\243\000\000\000\000\005=\000\000\000\000\000\000\000\000\000\000\002\175\000\000\000\000\000\000\004\186\002\195\004\205\004\188\000\000\000\000\000\244\000\000\000\000\004\189\0025\002/\0026\000\000\000\130\000\000\000\000\002#\000\000\000\000\001S\000\246\0027\002$\005=\0056\0057\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\175\000\000\000\000\0028\004\186\005?\004\205\000\000\0029\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\129\002d\002;\000\000\000\222\002\027\002\\\0023\002\195\000\240\004\188\000\000\000\241\0056\005E\000\000\004\189\000\000\000\000\000\000\000\000\000\000\000\000\005?\005A\000\000\000\000\000\000\000\000\000\000\000\000\005=\000\000\000\000\000\000\004\202\000\000\000\000\000\000\005F\000\000\000\129\000\000\000\240\000\242\002!\004\203\000\000\002-\002\195\000\000\004\188\000\000\000\000\000\000\000\000\000\000\004\189\005A\000\000\005G\000\000\000\000\000\174\000\000\000\130\000\000\000\000\000\000\004\202\000\225\000\000\005=\005F\000\000\000\000\000\226\000\240\000\000\000\000\004\203\000\000\000\000\005?\000\000\005H\000\000\000\000\000\000\000\000\000\240\000\000\000\248\0024\005G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\027\000\000\004\214\000\130\000\000\000\000\002#\000\000\000\239\000\000\000\000\000\000\002$\002e\005C\005A\005H\000\000\000\000\000\000\004\215\005?\000\000\000\000\000\000\004\216\004\202\000\000\000\000\004\217\005F\000\000\000\000\000\000\000\240\004\218\004\214\004\203\0025\000\000\0026\000\000\000\000\002d\000\000\000\000\000\000\000\000\001S\0023\0027\005G\000\000\000\000\004\215\000\000\005A\000\000\000\000\004\216\002\175\000\000\000\000\004\217\004\186\000\000\004\205\004\202\0028\004\218\000\000\005F\000\000\0029\000\000\000\240\005H\002:\004\203\000\000\000\000\000\000\000\000\002;\000\000\000\000\000\000\002\\\000\000\0056\005\157\000\240\005G\000\000\000\241\000\000\004\214\000\000\000\000\000\000\000\129\000\000\000\000\000\000\002!\000\000\000\000\002-\000\000\000\000\000\000\000\000\000\000\000\000\004\215\000\000\000\000\005H\000\000\004\216\000\000\000\000\000\174\004\217\000\000\002\195\000\242\004\188\000\000\004\218\000\000\000\000\000\240\004\189\000\129\0024\000\000\004\214\002!\000\000\000\000\002-\000\000\000\000\000\000\000\000\000\000\000\000\005=\000\000\000\000\000\000\000\000\000\000\000\000\004\215\000\174\000\000\002e\005`\004\216\000\000\000\000\000\000\004\217\000\130\000\000\000\000\002#\000\000\004\218\000\000\000\000\000\000\002$\000\129\000\000\000\000\000\000\002!\000\000\000\000\002-\0025\000\000\0026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001S\000\000\0027\000\000\000\174\000\000\000\130\005?\000\000\002#\000\000\000\000\002d\000\000\000\000\002$\000\000\000\000\0023\000\000\0028\000\000\000\000\000\000\000\000\0029\000\129\000\000\000\000\002:\002!\000\000\000\000\002-\000\000\002;\000\000\000\000\000\000\002\\\000\000\000\000\005A\000\000\000\000\000\000\002c\000\130\000\174\000\000\002#\000\000\0023\004\202\000\000\000\000\002$\005F\000\000\000\000\000\000\000\240\000\000\000\000\004\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0022\000\000\000\000\000\000\000\130\000\000\0023\002#\000\129\000\000\000\000\000\000\002!\002$\000\240\002-\005H\0024\000\000\000\000\000\000\002\175\000\000\000\000\000\000\002\176\000\000\000\000\000\000\002\177\000\174\000\000\000\000\000\000\000\000\000\000\004\214\000\000\000\000\000\000\002e\006\023\000\000\000\000\002^\000\000\000\000\000\000\000\240\000\000\0023\0024\000\129\000\000\004\215\000\000\000\231\000\000\000\000\004\216\000\000\000\235\000\000\004\217\000\000\0025\000\000\0026\000\000\004\218\000\000\000\000\000\000\000\130\000\174\001S\002#\0027\000\000\000\000\000\000\000\000\002$\000\000\000\000\000\000\002\195\000\000\000\000\000\240\002\178\000\000\0024\000\000\000\000\0028\002\179\000\000\000\000\0025\0029\0026\000\000\000\000\002:\000\000\000\000\000\000\000\000\001S\002;\0027\000\000\002b\002\\\000\000\000\000\000\130\000\000\0023\000\000\000\000\000\225\002\196\001\015\000\000\000\000\000\000\000\233\0028\000\000\002\197\000\000\000\240\0029\000\000\0024\000\000\002:\000\000\0025\000\000\0026\000\000\002;\000\000\000\000\000\000\002\\\000\000\001S\000\129\0027\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\235\002\198\000\000\000\239\000\000\002\175\000\000\000\000\000\000\002\176\0028\000\000\000\000\002\177\000\000\0029\000\000\000\000\000\000\002:\000\000\000\000\000\000\000\000\0025\002;\0026\000\000\000\000\002\\\000\000\002\200\000\000\000\000\001S\000\000\0027\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\0024\000\000\002\192\002\255\002\238\000\000\000\000\000\000\000\000\0028\000\240\000\130\000\000\002\193\0029\000\000\000\225\000\000\002:\000\000\000\000\000\000\000\233\000\000\002;\002\195\000\000\000\000\002\\\002\178\000\000\000\000\000\000\000\000\002\249\002\179\000\000\000\000\000\000\000\000\002\241\000\240\000\000\000\000\000\241\000\000\000\000\000\000\0025\002\203\0026\000\000\000\000\000\000\000\000\000\129\000\000\000\239\001S\000\231\0027\000\000\002\196\000\000\000\235\000\000\000\000\000\000\000\000\002\133\002\197\000\000\000\000\000\000\000\000\000\000\000\242\000\174\0028\000\000\000\000\000\000\000\000\0029\000\000\000\000\000\129\002:\000\000\000\000\000\231\000\000\002\205\002;\002\135\000\235\000\000\002\\\000\000\000\000\002\198\000\000\001S\000\000\000\000\001\017\000\000\002\206\000\174\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\232\000\000\000\130\000\000\000\000\000\000\000\244\000\225\000\000\001\015\001\025\000\000\002\200\000\233\001\019\000\129\000\000\000\000\000\000\000\231\000\000\000\246\000\240\000\000\000\235\000\241\000\000\000\000\002\192\002\236\002\238\000\000\000\000\000\130\000\000\000\000\000\240\000\174\000\225\002\193\001\015\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\000\004\224\000\130\000\242\000\000\000\000\002\249\000\225\000\000\000\000\000\000\000\000\002\241\000\233\000\000\000\000\000\000\000\000\000\129\000\000\000\000\002\203\000\231\000\000\000\000\000\239\000\130\000\235\000\000\000\000\000\000\000\225\001\017\001\015\000\129\000\000\000\000\000\233\000\231\000\000\000\174\000\000\000\000\000\235\000\000\000\000\000\000\000\000\000\239\000\000\000\000\000\244\000\000\000\000\000\000\001\023\000\174\000\000\000\000\001\019\000\000\000\000\000\000\000\000\002\205\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\000\000\000\000\000\000\240\000\000\002\206\000\241\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\000\000\001\015\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\002\011\001\015\000\000\000\240\000\000\000\233\000\241\000\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\000\000\000\000\000\000\000\000\000\239\003\028\000\240\000\000\000\000\000\241\000\000\002\011\000\000\001S\000\000\000\000\001\017\002\175\000\242\000\000\000\239\002\176\000\000\000\000\000\000\002\177\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\244\003\"\000\000\000\000\001\025\000\000\000\242\000\000\001\019\001S\000\000\000\000\001\017\000\000\000\000\000\246\002\175\000\000\000\000\000\000\002\176\000\000\000\000\002\011\002\177\000\129\000\000\000\000\000\000\000\231\000\242\000\244\000\000\000\000\000\235\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\000\000\000\000\000\000\000\000\246\002\195\003&\000\000\000\000\002\178\000\240\000\000\003\026\000\241\001S\002\179\000\000\001\017\000\000\000\000\000\000\000\000\000\000\002\175\000\000\000\000\000\240\002\176\000\000\000\241\000\129\002\177\000\000\000\000\000\222\002\030\000\244\000\000\002\011\002\195\001\025\000\000\002\196\002\178\001\019\000\242\000\000\000\000\000\130\002\179\002\197\000\246\000\000\000\225\004\165\001\015\000\000\000\000\000\000\000\233\000\000\000\242\000\000\004\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001S\000\000\000\129\001\017\000\000\002\196\000\231\000\000\004\167\002\198\000\000\000\235\000\000\002\197\000\000\000\000\001S\002\195\000\000\001\017\000\000\002\178\000\244\000\239\000\130\000\000\001\025\002\179\000\000\000\225\001\019\000\000\000\000\000\000\000\000\000\226\000\000\000\246\000\244\002\200\000\129\000\000\001\025\002\198\000\231\000\000\001\019\000\000\000\000\000\235\000\000\000\000\000\000\000\246\002\247\002\192\004\252\002\238\000\000\000\000\000\000\000\000\002\197\000\240\000\000\000\000\002\193\000\130\000\000\000\000\000\239\000\000\000\225\002\200\001\015\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\249\000\000\002\192\007\230\002\238\002\198\002\241\000\000\000\000\000\000\000\240\000\000\000\129\002\193\002\251\002\203\000\231\000\000\000\130\000\240\000\000\000\232\000\241\000\225\000\000\001\015\000\239\000\000\000\000\000\233\000\000\000\000\000\000\000\000\002\249\002\200\000\000\000\000\000\000\000\000\002\241\000\000\000\000\000\000\000\000\000\000\000\129\002\253\000\000\002\203\000\231\002\192\000\000\002\238\000\242\000\235\000\000\000\000\002\205\000\240\000\000\000\000\002\193\000\129\000\239\000\000\000\240\000\231\000\000\000\241\000\000\000\000\000\235\002\206\000\000\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\001\017\000\000\000\000\000\000\000\000\000\233\002\241\000\000\000\000\002\205\000\000\000\000\000\000\000\000\000\000\002\203\000\000\000\000\000\242\000\244\000\000\004Y\000\000\001\025\002\206\000\000\000\240\001\019\000\130\000\241\000\000\000\000\000\000\000\225\000\246\001\015\000\000\000\000\000\129\000\233\000\239\000\000\000\231\000\000\000\000\000\130\000\000\000\235\000\000\000\000\000\225\000\000\001\015\000\000\002\253\000\000\000\233\000\000\002\205\004j\000\000\000\242\000\129\000\000\000\240\000\000\000\231\000\241\000\000\000\000\000\000\000\237\000\000\002\206\000\239\000\000\000\000\000\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\001\017\000\239\002\253\000\231\000\000\000\000\000\000\000\000\000\235\000\242\000\000\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\000\244\001\015\000\129\000\000\001\025\000\233\000\231\000\000\001\019\000\000\000\000\000\235\000\000\000\000\000\240\000\246\000\000\000\241\000\130\001\017\000\000\000\000\000\129\000\225\000\000\000\000\000\231\000\000\000\000\000\233\000\000\000\235\000\000\000\000\000\000\000\000\000\000\000\000\000\244\000\000\000\239\000\000\001\025\004v\000\000\000\130\001\019\000\000\000\240\000\242\000\225\000\241\001\015\000\246\000\000\000\000\000\233\000\000\000\000\000\000\004~\000\000\000\000\000\000\000\239\000\240\000\000\000\130\000\241\004\222\000\000\000\000\000\225\000\129\001\015\000\000\002\253\000\231\000\233\000\000\000\000\000\000\000\235\000\242\000\000\000\000\000\000\000\130\000\000\000\000\000\000\000\239\000\225\002\253\001\015\000\000\000\000\000\248\000\233\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\029\000\000\000\000\005\023\001\017\000\239\000\000\000\000\000\129\000\000\004\133\000\000\000\231\000\000\000\000\000\240\000\000\000\235\000\241\000\000\000\000\001\017\000\000\000\244\000\000\000\239\000\000\001\025\000\000\000\000\000\130\001\019\000\000\000\000\000\000\000\225\000\000\001\015\000\246\000\240\000\244\000\233\000\241\002\253\001\025\000\000\000\000\000\000\001\019\000\000\000\242\000\000\000\000\000\000\005\025\000\246\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\240\000\000\000\235\000\241\000\000\000\000\000\000\000\130\000\242\000\000\000\239\000\000\000\225\001\017\001\015\000\000\000\000\005d\000\233\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\000\001\024\000\000\000\000\005\027\000\244\000\000\000\000\000\242\001\025\000\243\000\000\000\000\001\019\000\000\000\240\000\000\000\000\000\241\000\000\000\246\000\000\000\000\002\253\000\000\000\000\000\239\000\000\000\000\000\244\000\242\000\130\000\000\000\000\0021\000\000\000\225\001\017\001\015\000\000\000\000\000\000\000\233\001\024\000\246\000\129\000\000\000\000\000\000\000\231\000\242\000\000\000\000\000\000\000\235\000\000\000\244\000\000\000\000\001\017\001\025\000\000\000\000\000\129\001\019\000\000\000\240\000\231\000\000\000\241\000\000\000\246\000\235\000\000\000\000\000\000\000\129\000\239\000\244\001\017\000\231\000\000\001\025\000\000\000\000\000\235\001\019\000\000\000\000\000\000\000\000\000\000\000\000\000\246\001\024\000\000\000\000\000\000\000\244\000\000\000\000\000\242\001\025\000\000\000\000\000\000\001\019\000\129\000\000\000\240\000\130\000\231\000\241\000\246\000\000\000\225\000\235\001\015\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\000\001\017\000\000\000\000\000\225\000\000\001\015\000\000\001\024\000\129\000\233\000\000\000\130\000\231\000\000\000\242\000\000\000\225\000\235\001\015\000\244\000\000\000\000\000\233\001\025\000\000\005q\000\239\001\019\000\000\000\000\000\240\000\000\000\000\000\241\000\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\001\017\000\239\000\000\000\000\000\225\000\000\001\015\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\239\002\253\000\000\000\000\000\000\000\244\000\000\000\000\000\242\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\130\000\000\000\000\000\000\000\246\000\225\000\000\001\015\000\000\000\129\000\000\000\233\000\000\000\231\000\000\000\239\000\000\000\000\000\235\000\000\000\000\001\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\244\000\000\000\000\000\000\001\025\000\000\000\239\000\000\001\019\005\130\000\000\000\000\000\129\000\000\000\240\000\246\000\231\000\241\000\000\000\000\000\000\000\237\005\237\000\000\002\253\000\000\000\000\000\240\000\000\000\000\000\241\000\242\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\000\000\001\015\002\253\000\129\000\000\000\233\000\000\000\231\000\000\000\242\000\000\000\000\000\235\005\249\000\000\002\253\000\000\000\000\000\240\000\000\001\017\000\241\000\242\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\235\000\000\000\000\000\000\000\000\000\130\001\017\000\244\000\239\000\000\000\225\001\025\005\254\000\000\002\253\001\019\000\233\000\240\000\000\001\017\000\241\000\242\000\246\000\000\000\000\000\244\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\130\000\000\000\244\000\000\000\246\000\225\001\025\001\015\000\000\002\253\001\019\000\233\000\000\000\000\001\017\000\239\000\242\000\246\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\000\000\001\015\000\000\000\000\000\000\000\233\000\000\000\244\000\129\000\000\000\000\001\025\000\231\000\000\000\000\001\019\000\000\000\235\000\000\001\017\000\239\000\129\000\246\000\000\006\005\000\231\000\000\000\000\000\000\000\240\000\237\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\244\000\129\000\239\000\000\001\025\000\231\000\000\000\000\001\019\000\000\000\235\000\000\000\000\000\000\000\129\000\246\000\000\000\000\000\231\002\253\000\000\000\000\000\000\000\235\000\000\000\000\000\242\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\240\000\130\000\235\000\241\000\000\000\000\000\225\000\000\001\015\000\000\000\000\000\000\000\233\007\194\000\130\000\000\000\000\000\000\000\000\000\225\000\000\001\017\000\000\000\000\000\000\000\233\006\014\000\000\000\000\000\000\000\000\000\240\000\130\000\000\000\241\000\242\000\000\000\225\000\000\001\015\000\244\000\000\000\000\000\233\001\025\000\130\006\027\000\239\001\019\000\000\000\225\000\240\001\015\000\000\000\241\000\246\000\233\000\000\000\130\002\253\000\239\000\000\000\000\000\225\000\243\001\015\000\242\000\000\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\239\002\253\000\000\000\000\000\000\000\244\000\000\000\000\000\242\000\000\004\207\000\000\000\129\000\239\000\000\000\000\000\231\001\017\000\000\000\000\000\246\000\235\000\000\000\000\000\000\000\129\000\239\000\000\000\000\000\231\000\000\000\000\b'\000\000\000\235\000\000\000\244\001\017\000\000\000\000\001\025\000\000\000\000\000\000\001\019\000\129\000\000\006(\000\000\000\231\000\000\000\246\000\240\000\000\000\235\000\241\000\244\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\019\000\240\000\000\000\000\000\241\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\130\006-\000\000\002\253\000\000\000\225\000\240\001\015\000\000\000\241\000\242\000\233\000\000\000\130\0064\000\000\000\000\000\000\000\225\000\240\001\015\000\000\000\241\000\242\000\233\000\129\000\000\000\000\000\000\000\222\002\160\000\000\000\240\000\130\002\253\000\241\000\000\000\000\000\225\001\017\001\015\000\242\000\000\000\000\000\233\000\000\000\239\002\253\000\000\000\000\000\000\000\000\000\243\000\000\000\242\000\000\000\000\000\000\000\244\000\239\007\195\000\000\001\025\000\000\000\000\000\000\001\019\000\242\000\129\000\000\001\017\000\244\000\231\000\246\000\000\000\000\004\209\000\235\000\129\000\239\000\000\000\000\000\231\001\017\000\000\000\000\000\246\000\235\000\000\000\244\000\130\000\000\000\000\001\025\000\000\000\225\001\017\001\019\000\000\000\000\000\000\000\226\000\244\000\000\000\246\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\000\000\000\000\244\000\000\000\246\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\000\000\000\000\000\000\240\000\246\000\000\000\241\000\130\000\000\000\000\000\239\000\000\000\225\000\000\001\015\000\000\000\240\000\130\000\233\000\241\000\000\000\000\000\225\000\000\001\015\000\000\000\000\000\000\000\233\000\000\000\000\007\195\000\000\000\000\000\000\000\000\000\240\000\000\000\242\000\241\000\000\000\129\000\000\000\000\001?\000\231\000\000\000\000\000\000\000\000\000\235\000\242\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\239\001L\000\231\000\000\001\017\000\000\000\000\000\235\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\001\017\000\000\000\231\000\000\000\000\000\000\000\244\000\235\000\000\000\000\001\025\000\000\000\000\000\240\001\019\000\000\000\241\000\000\000\000\000\244\001\017\000\246\000\000\001\025\000\000\000\000\000\130\001\019\000\000\000\000\000\000\000\225\000\000\001\015\000\246\000\000\000\000\000\233\000\000\000\244\000\000\000\000\000\000\001\025\000\000\000\000\000\130\001\019\000\242\000\000\000\000\000\225\000\000\001\015\000\246\000\000\000\240\000\233\000\000\000\241\000\000\000\000\000\000\000\130\000\000\000\000\000\240\000\000\000\225\000\241\001\015\000\000\000\239\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002i\000\000\000\000\000\000\000\000\000\000\000\000\000\242\000\239\000\000\002z\000\129\000\000\000\000\000\000\000\231\000\000\000\242\000\000\000\000\000\235\000\000\000\000\000\000\000\000\000\239\000\000\000\000\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\000\001\017\000\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\244\000\000\000\235\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\244\000\000\000\000\000\129\001\025\000\246\000\240\000\231\001\019\000\241\000\000\000\130\000\235\000\000\000\000\000\246\000\225\000\000\001\015\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\240\000\000\000\130\000\241\000\000\000\000\000\000\000\225\002\142\001\015\000\129\000\000\000\000\000\233\000\231\000\242\000\000\000\240\000\000\000\235\000\241\000\000\000\130\000\000\000\000\000\000\000\000\000\225\002\144\001\015\000\000\000\239\000\000\000\233\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\000\001\017\002\186\000\000\000\225\000\239\001\015\000\000\000\000\000\242\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\244\001\017\000\000\000\000\001\025\000\239\000\000\000\000\001\019\000\000\000\000\000\000\000\130\000\000\000\000\000\246\000\000\000\225\001\017\001\015\000\244\000\000\000\129\000\233\001\025\000\239\000\231\000\000\001\019\000\000\000\000\000\235\000\000\000\000\000\000\000\246\000\000\000\244\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\000\000\000\000\000\000\240\000\246\000\000\000\241\000\000\000\000\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004H\000\000\000\000\000\000\000\000\000\000\000\000\000\242\000\130\000\240\000\000\000\000\000\241\000\225\000\000\001\015\000\000\004N\000\000\000\233\000\000\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\000\000\000\001\017\004\149\000\000\000\129\000\000\000\000\000\000\000\231\000\242\000\000\000\000\000\000\000\235\000\000\000\000\000\000\000\129\001\017\000\239\000\244\000\231\004\154\000\000\001\025\000\000\000\235\000\240\001\019\000\242\000\241\000\000\000\000\000\000\000\000\000\246\000\000\000\244\001\017\000\000\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\129\000\000\000\000\000\000\000\231\000\246\000\000\000\000\004\158\000\235\000\244\001\017\000\000\000\000\001\025\000\242\000\000\000\129\001\019\000\000\000\000\000\231\000\130\000\000\000\000\000\246\000\235\000\225\000\000\001\015\000\244\000\000\000\000\000\233\001\025\000\130\000\000\000\000\001\019\000\000\000\225\000\000\001\015\000\000\001\017\000\246\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\129\000\000\000\000\000\244\000\231\000\130\000\000\001\025\000\239\000\235\000\225\001\019\001\015\000\000\000\000\000\000\000\233\000\000\000\246\000\000\000\000\000\239\000\130\004\196\000\000\000\000\000\000\000\225\000\000\001\015\000\242\000\000\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\129\000\000\000\000\000\000\000\231\000\000\001\017\000\000\000\000\000\235\000\000\000\000\000\130\000\000\000\000\000\239\000\000\000\225\000\000\001\015\000\000\000\000\000\000\000\233\000\000\000\244\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\000\000\000\000\240\000\000\000\246\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\000\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\000\000\130\005\015\000\000\000\000\000\000\000\225\000\000\001\015\000\242\000\000\000\000\000\233\000\000\000\000\005:\000\000\000\240\000\000\000\000\000\241\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\001\017\000\000\000\000\000\000\000\000\000\000\000\129\005\224\000\000\000\239\000\231\000\000\000\000\001\017\000\242\000\235\000\000\000\000\000\000\000\244\000\000\000\000\000\000\001\025\006J\000\000\000\000\001\019\000\000\000\000\000\000\000\242\000\244\000\000\000\246\000\000\001\025\000\129\000\000\000\240\001\019\000\231\000\241\001\017\000\000\000\000\000\235\000\246\000\000\000\129\000\000\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\235\000\129\001\017\000\000\000\244\000\231\000\000\000\000\001\025\006^\000\235\000\000\001\019\000\130\000\000\000\000\000\242\000\000\000\225\000\246\001\015\000\244\000\000\000\000\000\233\001\025\000\000\000\000\000\000\001\019\000\000\000\000\000\000\000\000\000\240\000\000\000\246\000\241\000\129\000\000\000\000\000\000\000\231\000\000\000\130\001\017\000\000\000\232\000\129\000\225\000\000\001\015\000\231\000\000\000\000\000\233\000\130\000\232\000\000\000\239\000\000\000\225\006`\001\015\000\244\000\000\000\130\000\233\001\025\000\242\000\000\000\225\001\019\001\015\000\000\000\000\000\129\000\233\000\000\000\246\000\231\000\000\000\000\000\000\000\000\000\232\000\000\000\000\000\000\000\000\000\239\000\129\000\000\000\000\000\000\000\231\000\000\000\000\001\017\000\000\000\232\000\000\000\239\000\130\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\000\000\239\000\130\000\233\000\000\000\000\000\244\000\225\000\000\000\000\001\025\000\000\000\000\000\233\001\019\000\000\000\129\000\000\000\000\000\000\000\231\000\246\000\000\000\000\000\000\000\232\000\000\000\000\000\000\000\000\000\130\000\240\000\000\000\000\000\241\000\225\000\000\000\000\000\239\000\000\000\129\000\233\000\000\000\000\000\231\000\130\000\000\000\000\000\239\000\232\000\225\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\006b\000\000\000\000\000\240\000\000\000\000\000\241\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\239\000\241\000\000\000\000\000\000\000\130\000\000\000\000\000\240\000\000\000\225\000\241\000\000\000\000\006h\000\239\000\233\000\000\000\000\001\017\000\000\000\242\000\000\000\000\000\000\000\000\006y\000\000\000\000\000\130\000\000\000\000\000\000\000\242\000\225\000\129\006\135\000\000\000\244\000\231\000\233\000\000\001\025\000\242\000\232\000\240\001\019\000\000\000\241\000\000\001\017\000\239\000\000\000\246\000\000\000\240\000\129\000\000\000\241\000\000\000\231\000\000\001\017\000\000\000\000\000\232\000\000\000\000\000\000\000\244\000\000\000\000\001\017\001\025\000\000\000\239\000\000\001\019\000\129\000\000\000\242\000\244\000\231\000\240\000\246\001\025\000\241\000\232\000\000\001\019\000\242\000\244\000\000\000\000\000\000\001\025\000\246\000\000\000\240\001\019\000\130\000\241\000\000\000\129\000\000\000\225\000\246\000\231\000\000\000\000\000\000\000\233\000\232\000\000\000\000\000\000\000\000\000\000\000\242\000\000\000\129\000\130\000\000\000\000\000\231\000\000\000\225\000\000\000\248\000\232\000\000\000\000\000\233\000\242\000\240\000\000\000\000\000\241\000\248\001\031\000\000\000\000\000\000\000\130\000\000\000\000\000\239\000\000\000\225\001!\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\248\000\239\000\130\000\242\000\000\000\000\000\000\000\225\000\000\000\000\000\000\001#\000\129\000\233\000\000\000\248\000\231\000\000\000\000\000\130\000\000\000\232\000\000\000\239\000\225\000\129\001%\000\242\000\000\000\231\000\233\000\000\000\129\000\000\000\232\000\000\000\231\000\000\000\000\000\000\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\129\000\248\000\129\000\000\000\231\000\000\000\231\000\000\000\000\000\232\000\000\000\232\001'\000\240\000\000\000\239\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\248\000\000\000\130\000\231\000\000\000\000\000\000\000\225\000\232\000\240\000\000\001)\000\241\000\233\000\000\000\130\000\000\000\000\000\000\000\000\000\225\000\000\000\130\000\242\000\000\000\000\000\233\000\225\000\000\000\000\000\000\000\240\000\000\000\233\000\241\000\000\000\000\000\000\000\000\000\000\000\130\000\000\000\130\000\000\000\242\000\225\000\129\000\225\000\239\000\000\000\231\000\233\000\000\000\233\000\129\000\232\000\240\000\000\000\231\000\241\000\000\000\239\000\000\000\232\000\130\000\000\000\242\000\000\000\239\000\225\000\129\000\248\000\000\000\240\000\231\000\233\000\241\000\000\000\000\000\232\000\000\000\000\001+\000\000\000\000\000\000\000\239\000\000\000\239\000\000\000\000\000\242\000\248\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\242\000\000\000\239\000\130\000\000\000\000\000\248\000\000\000\225\000\000\000\000\000\130\000\000\000\000\000\233\000\000\000\225\001/\000\000\000\000\000\000\000\000\000\233\000\240\000\000\000\129\000\241\000\130\000\000\000\231\000\000\000\248\000\225\000\000\000\232\000\000\000\240\000\000\000\233\000\241\000\000\000\000\0011\000\240\000\000\000\000\000\241\000\000\000\248\000\239\000\000\000\129\000\000\000\000\000\000\000\231\000\000\000\239\000\242\0013\000\232\000\240\000\000\000\240\000\241\000\000\000\241\000\000\000\000\000\000\000\000\000\242\000\000\000\239\000\000\000\000\000\000\000\129\000\242\000\000\000\000\000\231\000\000\000\000\000\000\000\240\000\232\000\000\000\241\000\000\000\130\000\000\000\000\000\129\000\000\000\225\000\242\000\231\000\242\000\000\000\129\000\233\000\232\000\000\000\231\000\000\000\248\000\000\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\130\0015\000\000\000\248\000\242\000\225\000\000\000\000\000\129\000\000\000\248\000\233\000\231\000\000\0017\000\000\000\240\000\232\000\000\000\241\000\239\0019\000\000\000\000\000\240\000\000\000\130\000\241\000\248\000\000\000\248\000\225\000\000\000\000\000\000\000\000\000\000\000\233\000\000\002=\000\240\002C\000\130\000\241\000\000\000\000\000\239\000\225\000\000\000\130\000\000\000\242\000\248\000\233\000\225\000\000\000\000\000\000\000\000\000\242\000\233\000\129\000\000\002E\000\000\000\231\000\000\000\000\000\000\000\000\000\232\000\000\000\239\000\130\000\000\000\242\000\129\000\129\000\225\000\000\000\231\000\231\000\000\000\000\000\233\000\232\000\232\000\000\000\239\000\129\000\000\000\000\000\000\000\231\000\000\000\239\000\000\000\000\000\232\000\248\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\248\000\000\000\000\002G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002I\000\239\000\000\000\000\000\000\000\248\000\000\000\000\000\130\000\000\000\000\000\240\000\000\000\225\000\241\000\000\002K\000\000\000\000\000\233\000\242\000\129\000\000\000\130\000\130\000\231\000\000\000\000\000\225\000\225\000\232\000\000\000\000\000\000\000\233\000\233\000\130\000\240\000\000\000\000\000\241\000\225\000\000\000\000\000\000\000\000\000\242\000\233\000\129\000\000\000\000\000\000\000\231\000\240\000\239\000\000\000\241\000\232\000\129\000\000\000\240\000\000\000\231\000\241\000\000\000\000\000\000\000\232\000\248\000\239\000\239\000\000\000\242\000\000\000\129\000\000\000\000\000\000\000\231\002M\000\000\000\129\000\239\000\232\000\240\000\231\000\130\000\241\000\242\000\000\000\232\000\225\000\000\000\000\000\248\000\242\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\000\242\000\248\000\129\000\000\000\130\000\233\000\231\000\000\000\000\000\225\000\000\000\232\002Q\000\239\000\000\000\233\000\000\000\248\000\240\000\000\000\130\000\241\000\000\000\000\000\248\000\225\000\000\000\130\002S\000\000\000\000\000\233\000\225\000\240\000\240\002U\000\241\000\241\000\233\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\248\000\241\000\239\000\000\000\000\000\242\000\129\000\000\000\000\000\000\000\231\002W\000\000\000\000\000\000\000\232\000\000\000\000\000\239\000\130\000\242\000\242\000\000\000\000\000\225\000\239\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\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\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\002Y\000\239\000\000\000\231\000\248\000\248\000\000\000\130\000\232\000\000\000\000\000\240\000\225\000\000\000\241\002[\002\208\000\248\000\233\000\242\000\000\000\240\000\000\000\129\000\241\000\000\000\000\000\231\002\210\000\000\000\129\000\000\000\232\000\000\000\231\000\000\000\000\000\240\000\000\000\232\000\241\000\000\000\000\000\000\000\240\000\000\000\242\000\241\000\129\000\000\000\000\000\000\000\231\000\239\000\000\000\000\000\242\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\000\000\000\000\248\000\000\000\225\000\000\000\000\000\242\000\000\000\000\000\233\000\000\000\129\002\212\000\242\000\000\000\231\000\000\000\000\000\240\000\000\000\232\000\241\000\130\000\000\000\000\000\000\000\129\000\225\000\248\000\130\000\231\000\000\000\000\000\233\000\225\000\232\000\000\000\000\000\248\002\214\000\233\000\000\000\000\000\000\000\239\000\000\000\000\000\130\000\000\002\216\000\000\000\000\000\225\000\242\000\248\000\000\000\000\000\000\000\233\000\000\000\000\000\248\000\000\000\000\000\000\002\218\000\000\000\000\000\239\000\000\000\240\000\000\002\220\000\241\000\000\000\239\000\130\000\000\000\000\000\129\000\129\000\225\000\000\000\231\000\231\000\000\000\000\000\233\000\232\000\232\000\000\000\130\000\000\000\239\000\000\000\129\000\225\000\000\000\000\000\231\000\000\000\248\000\233\000\000\000\232\000\242\000\000\000\129\000\000\000\000\000\000\000\231\002\222\000\000\000\000\000\000\000\232\000\000\000\000\000\129\000\000\000\000\000\239\000\231\000\000\000\000\000\000\000\240\000\232\000\000\000\241\000\129\000\000\000\000\000\000\000\231\000\000\000\239\000\000\000\000\000\232\000\000\000\000\000\000\000\130\000\130\000\000\000\000\000\000\000\225\000\225\000\240\000\000\000\248\000\241\000\233\000\233\000\000\000\240\000\000\000\130\000\241\000\242\000\000\002\224\000\225\000\000\000\000\000\000\000\000\000\000\000\233\000\130\000\000\000\000\000\000\000\240\000\225\000\000\000\241\000\000\000\000\000\000\000\233\000\130\000\000\000\242\000\000\000\000\000\225\000\239\000\239\000\000\000\242\000\000\000\233\000\130\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\000\000\240\000\239\000\233\000\241\000\000\000\248\000\242\000\000\000\000\000\000\000\129\000\000\000\000\000\239\000\231\000\240\002\226\000\000\000\241\000\232\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\000\000\000\000\248\000\129\000\000\000\000\000\000\000\231\000\242\000\248\000\239\000\000\000\232\002\228\000\000\000\000\000\000\000\000\000\000\000\000\002\230\000\129\000\000\000\242\000\000\000\231\000\000\000\248\000\000\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\232\000\000\000\000\000\240\000\240\000\129\000\241\000\241\000\000\000\231\000\130\000\000\000\000\000\000\000\232\000\225\000\000\000\000\000\248\000\240\000\000\000\233\000\241\000\129\000\000\000\000\000\000\000\231\000\000\002\234\000\130\000\240\000\232\000\248\000\241\000\225\000\000\000\000\000\242\000\242\000\000\000\233\000\000\000\240\004\220\000\000\000\241\000\129\000\130\000\000\000\000\000\222\002\169\000\225\000\242\000\240\000\239\000\129\000\241\000\233\000\000\000\222\002\172\000\000\000\000\000\129\000\242\000\000\000\000\000\231\000\130\000\000\000\000\000\000\000\232\000\225\000\239\000\000\000\242\000\000\000\129\000\233\000\000\000\000\000\231\000\000\000\248\000\248\000\130\000\232\000\242\000\000\000\000\000\225\000\239\000\000\000\000\004\226\004\228\000\233\000\000\000\000\000\248\000\000\000\000\000\129\000\000\000\000\000\000\000\222\004\146\000\000\000\130\004\230\000\248\000\000\000\239\000\225\000\000\000\000\000\000\000\000\000\130\000\226\000\000\004\232\000\248\000\225\000\000\000\000\000\130\000\000\000\000\000\226\000\239\000\225\000\000\004\234\000\248\000\240\000\000\000\233\000\241\000\000\000\000\000\130\000\000\000\000\000\000\004\236\000\225\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\239\000\240\000\000\000\129\000\241\000\000\000\000\000\222\004\177\000\000\000\239\000\000\000\130\000\000\000\000\000\000\000\242\000\225\000\239\000\240\000\000\000\000\000\241\000\226\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\222\004\180\000\239\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\129\000\000\000\000\000\000\000\222\004\183\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\239\000\240\000\000\000\000\000\241\000\000\000\248\000\000\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\225\000\000\004\238\000\242\000\000\000\000\000\226\000\000\000\000\000\000\000\240\000\248\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\130\000\240\000\242\004\240\000\241\000\225\000\000\000\000\000\000\000\240\000\248\000\226\000\241\000\000\000\000\000\000\000\000\000\000\000\130\000\000\000\000\004\242\000\239\000\225\000\240\000\000\000\242\000\241\000\000\000\226\000\000\000\000\000\248\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\004\244\000\242\000\000\000\239\000\000\000\000\000\240\000\248\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\242\000\000\004\246\000\000\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\248\000\000\000\240\000\000\000\248\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\242")) + ((16, "\002\128\0020\000\000\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\001q\000\000\001G\006H\000\000\000\000\000\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\003v\000\000\005\172\003\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000l\000\000\000\255\000\000\000\000\003\\\000\000\000\000\005*\000\000\000\000\000\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003x\000\000\000\000\001\246\019X\000\000\000\000\020\178\000\000\000\000\000\000\000\000\000\000\000\000\014\212\000\000\000\000\000\000\000\000\000\000\005\202\000\000\000\018\000\000\000\142\000\000\000\000\000\000\005\206\000\000\b\228\000\000\000\000\000\000\b\172\000\000\000\000\000\000\016\212\001O,\152\000\000\000\000\027\246\028\"\000\000\000N\000\000\030t1H6J1H\016\"1\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\1607 \000\000\000\000!\030)\0180\134\000\0002R\003~\000\000\000\000*\0185\228\000\000\000\000\000\000\001\022\000\000\000\1302\004+\b\000\000\000\000Ml\000\000\004>\000\000\006:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\170\000\000\000\000\006\160\000\000\018*\000\000\023\160\000\000\024\172\000\000!\028\000\000\"\164\000\000#\154\000\000%\"\000\000&\012\000\000&\170\000\0004z\000\000\017\196\000\000\000\000\000\000\000\000\t\130\000\000\000\000\000\000\000\000'\160\000\000(\138\000\000.\186\000\0004\168\000\0007x\000\0008:\000\000;F\000\000DJ\000\000H\224\000\000J\152\000\000L\234\000\000S\022\000\000U\168\000\000V&\000\000VV\000\000V\144\000\000\0070\000\000\000\000\b&\000\000\000\000\000\000\000\000\002\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000gM\210\000\000\000+\000\000\000\000\000d\t\176\000\000\000b\000\r\000 \000\166\001{\000\000\001$\000\000\000\000\001\146\000\000\001\156\000\000\000\00074\000\000\000\000\000\000\000,\nz\000\000;&7\236\000\000\000\000\000\000\000\000\011p\018\014\000\000\000\000\000\000\000\000\000\000\000\000;\128\000\000\000\000<\n\000\000\000\000=\178\000\000\004\026\000\000\b(\000\000\000\000\000\000\003@\000\0002\2428&\000\000\000\0008j9\018\000\000\t\028\000\000\n\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000V\168\000\0004\188\000\000Uz\000\000V\188\000\000V\234\000\000W\156\000\000W\198\000\000W\254\000\000X\002\000\000X\030\000\000X\146\000\000X\192\000\000X\226\000\000Y\018\000\000Y0\000\000Y>\000\000\000\000:\006\000\000\000\000\000\000:J\000\000\000\000\000\000\000\000\000\000\000\000N$\000\000\000\000\000\000\b\236\000\000\000\000\000\000\000\000#\232\000\000\000\000\000\000\000\000\001G\000\000\000\000N>\000\000\000\000\000\000\020,\000\197\000\000\000\000A\238\000\000\000\000:\234\000\000\000\000\000\000\000\026\012f+\022\000\000\000\000On\000\000O\152\000\000\000\000\000\000\r\\B<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\216\000\000\000\000\000\000\000\000BZ\014R\016\182\000\000?\244\000\000\000\000I\018\000\000\006V\000\000\000\000\024|\000\000\000\000\000\000\018\248\000\0003x\000\000\000\000O\154\000\000\000\000\000\000\021\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028 \000\000\030\158\000\000\000}\000\000\000\000\000\000Yz\000\000Y\174\000\000Y\242\000\000ZZ\000\000Z|\000\000Z\148\000\000Z\198\000\000[ \000\000[0\000\000[j\000\000[\136\000\000[\210\000\000[\234\000\000\\v\000\000\000\000\000\000\000\000\000\000C2\000\000\000\000\003\146D\012\000\000\000\000D4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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;\156\000\000\000\000\000\000\000\000\000\000<2\000\000\000\000\000\000<\200\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\014H\000\000\021@\000\000\000\000\0022\005\238\000\000\000\000\000\000\000\000\020N\014\252\000\000\016\232\000\000\000\000\000\000\021\174\000\000\023\"\000\000&B\000\000\000\000\000\000\000\000\000\000\000\000(\192\000\000\000\000\000\183\000\000\000\000\000\000\0226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000b\022&\000\000\000\000\000\000\000\000\000\000\000\000\000\254\000\000\016\018\r\140\000\000\000\000\000\000\017:\000\000\000\000\000\000\002v\rT\000\000\002\184\000\000\000\000\000\000\000\000\014H\000\000\000\000\000D\nr\000\000\n\166\000\000\000\000\000\000\000\246\000\000\017\228\000\158\0007\000\000\000\000\000\000\002\208\000\222\000\000\000\000\003`\000\000\000\000\000\000\005H\000\000\000\000\000\000\000\252\000\000\000\000\000\000\000\000\000\000\003 \000\203\000w\000\000\000\000\000k\000\000\000\000\000\000\000\000\000\000\000\000O\186\000\000>\158\000\000\000\000\000\000P.\000\000\000\000\003b\000\000\000\000\000\000\003j\020*\000\000\000\000Db\000\000\000\000\004L\000\000\000\000\000\000\000\000\016p\000\000\023\204\000\000\000\000->\000\000\000\000\000\000D\180\000\000\000\000\000\000\000\000\000\0009\248\000\000\000\000\000\000\001O\000\000E\014\000\000\000\000\000\000\000\000\002\178\020\218\000\000E(\000\000\000\000\000\000\000\000\022\214\000\000E\218\000\000\000\000\000\000\000\000\003\168\000\000\n4\000\000\000\000J\190<\242\000\000\000\000\000\000PR\000\000\000\000\000\000\000\012\000\000P\226\000\000\000\000\000\000Q\004\000\000\000\000\000\230\000\000!\206\000\027=\136\000\000\000\000\000\000\021(\021~\000\000\000\000\000\000\000\000\000\000\000\000Kv\000\000\000\000O$\000\000\000\000O\220\000\000\006\130\000\000\0224\000\000\000\000\000\000\024\164\000\0003\146\000\000\000\000Q\154\000\000\000\000\000\000\025D\000\000\000\000\000\000\000\000\000\000\000\000\011\b\000\000\025\162\000\000\000\000\000\000\004\128\000\000\000\000\000\000\000\000\000\000\000\000\\\146\000\000E\242\000\000U\142\000\000]\000\000\000]\030\000\000]>\000\000]\192\000\000]\230\000\000]\234\000\000^(\000\000^T\000\000^~\000\000^\212\000\000^\246\000\000_\018\000\000_\022\000\000,\196\000\000\000\000\000\000\001F\000\000\004\252\000\000\018\218\003N\011*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R*\000\000>\228\0044\027N\000\000\000\000\000\00000\000\000\003\128\024\134\000\000\000\000F\198\000\000\000\000\000h\000\000\025T\000\000\000\000EF\000\000\000\000\000\000G\002\000\000\000\000\000\000\000\000Gh\000\000\000\000\012\b\026\174\000\000\000\000G\204\000\000\000\000\027@\000\000\000\000G\224\000\000\000\000\000\000\000\000H.\000\000IB\000\000?f?\214\001N\0062\000\000\006\158\007\210\000\000\000\000\000\000\014\202\000\000\000\000\0200\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0004\024\000\000@\020\000\000\000\000\000\000\019l\000\000\000\000\007\020\000\000\000\000\000\000\"`\002\152\000\000#V\000\000\000\000\000\000\000\000\004h\000\000\000\000\020b\000\000$L\000\000\000\0004\158\000\000\000\000\000\000Iv\000\000\000\000\0180\000\000\000\000\029\230\000\000\000\000Z\238\000\000\000\000\000\000I\196\000\000\000\000\000\000]N\000\000\000\000\000\000\000\000J*\000\000\000\000\000\000\000\000\r\178\022\222\000\000JT\000\000\000\000\000\000\000\000\000\000\000\000\021X\000\000\000\000\004\150\000\000\021\234\000\000\0180\000\000\000\000J|\000\000K\016\000\000@\250\000\000\000\000\000\0005\146\000\000\000\000\000\000KZ\000\000\000\000\012\222\000\000\000\000\030\030\000\000\000\000]\228\000\000\000\000\000\000K\240\000\000\000\000\000\000\000\000LV\000\000\000\000\015\234\030@\000\000\000\000M\018\000\000\000\000\004\166A\208\000\000\004\186\000\000\000\000\000\000\000\000\004\128\000\000A8\000\000$\222\000I%\212\000\000\001L\000\000\022\224\000\000\023\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\020&\202\002\006'\\\000\000\000\000\000\000\003.\000\000\024h\000\000\005&\000\000\000\000\018\208\001$(R\000\000\002\226\000\000\025^)H\000\000\000\000\026T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\140\012 \000\000\005\164\000\000\000\000\000\000\000\000\005\238\000\000\026\230\000\000\000\000\000\000/\166RZ\000\000\000\000\000\000/:\000\000\000\000\000\000\000\000\005\1881\014\000\000\000\000\000\000\000\000\005\192\000\000\000\000\000\000\000\000\016R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\027\220\000\000\000\000\000\000R\240\000\000\r\022\000\000\000\000\000\000\0050\000\000\005\178\000\000\000\000\002\212\028\210\000\000\029d\000\000\000\000\000\000\003\156\000\000Sr\004\250S\134\000\000S\162\000\000\000\000\000\000\005h\000\000T2\005\190\000\000\000\000,X=z\000\000\005\204-\232\000\000\000\000.z\000\000\000\000\000\000\006\006\000\000TF\006\018\000\000\000\000\b\208\006\030\014p\000\000\0272\000\000\000\000\000\000\0068\000\000T\200\006\156\000\000\000\000\000\000\002H\000\000\002\192\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\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\t\022\000\000\000\000\007\186\000\000\000\160\000\000\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\007\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\026\000\000\000\000\001\150\000\000\t\196\000\000\000\000\000D\000\000\002\188\001R\002x\000\000\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0034\004\254\000\000\000\000\b\166\000\000\000\000\000\000\012\002\000\000\000\000\012\248\rR\000\000\000\000\000\000\000\000\r\238\015>\002\186\000\000\000\000\000\000\018\156\000\000\000\000\000\000\000\000\000\000\000\000\000E\000\000\000\000\007\202\000\000\000\000\001\194\000\000\019\002\000\000\000\000\000\000\b\020\000\000\000\000\019\200\000\000\000c\000\000\000\000\000\000\000\000\000\129\019`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\200\021V\000\000\000\000\000\000\000\000\024\162\024\250\b\206\000\000\026\022\000\000\000\000\000\000\000\000\000\000\000\000\018\178\000\000\002\176\000\000\000\000\000\000\n\012\000\000\000<\000\000\000\000\000\000\023\212\000\000\000\000\0266\027\002\n\186\000\000\027x\000\000\000\000\000\000\000\000\000\000\000\000\002\170\002b\000\000\002\128\000\000\028r\011\002\000\000\028\202\000\000\000\000\000\000\000\000\002\202\000\000\003\170\000\000\000\000\000\000\001f\000\000\001f\003`\003\246\000\000\000\000\000\000\001l\014\176\000\000\000\000\000\000\000\000\000\000\002\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\005\000\000\014\248\004:\004\164\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\142\000\000\000\000\024\244\029$\000\000\000\000\000\000\000\000\029\128\000\000\000\0006\132\000\000\005\130\000\000\000\000\000\000\000\000\014\250\000\000\000\000\000\000\000\000\000\000\001|\024\204\000\000\000\000\026~\000\000\000\000\000\000\000\000\r\012\000\000\000\000\003\144\000\000\000\000\000\000\000\191\000\000\000\000\000\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000M.\000\000\000\000\000\000\001\011\000\000\000\000\000\000\000\000\000\000\001\026\012\152\017\b\017\132\000\000\006\184\007\014\007\022\007d\000\000\000\000\000\000\000\000\000\000\000\000\007$\030Z\000\000)\218\007~\000\000\000\000\007\224\000\000\031P\000\000B\022\000\000\000\000\007(\031\226\000\000*\208\000\000\007f+\198\000\000\000\000\000\000\002\148\025\130\000\000\000\000\000\000\000\000\016\222\000\000\021\206!$\000\000\000\000\027\200\"\026\000\000\"L\000\000\000\000\021\174\000\000\023\"\000\000\000\000$\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\012\000\000\000\000\000\000\b\002\000\000 \216\000\000\026t\004\\\000\000\000\000\000\000\000\000\000\000\0044\000\000\000\000\000\000\000\000\000\000M\134\000\000\004\014\000\000\000\000\000\000\000\000\000\000\002*\000\000\015\002\0022\015\248\000\000\004p\016\238\000\000\004\178\000\000\005f\000\000\006\\\000\000\007R\000\000\026t\000\000\000\000\000\000\000\000\000\000\bH\000\000\004\186\000\000\t>\000\000\026t\005\018\000\000\001\194\000\000\005\018\006\236\000\000\003\230\000\000\004\020\000\000\000\000\000\000\000\000\000\000\000\000\004L\000\000\004h\000\000\004\132\000\000\000\000\000\000\000\000\000\000\004\228\000\000\000\000\000\000\000\000\000\000\006v\005.\000\000\000\000\005d\000\000\000\000\005l\005\128\007:\000\000\007H\000\000\000\000\003\136\006R\000\000\005\252\000\000\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\007J\006D\000\000\000\000\000\000\006\178\006\138\005\158\006@\006\184\006\240\000\000\000\000\006\160\006P\006\162\006\212\007\018\000\000\000\000\007\176\b\012\000\000\b$\000\000\bb\000\000\000\000\bB\000\000\000\000\bF\000\000\000\000\000\000\000\000\bP\000\000\b\132\000\000\000\000\000\000\b\144\000\000\000\000\000\000\b\150\000\000\000\000\000\000"), (16, "\001\210\000p\000\018\000=\003?\004t\003R\001\159\000p\006Q\000y\000=\006R\005\166\005L\005M\000\007\000y\005\167\005\168\003\133\003\134\000p\002N\005\141\000\017\000N\002\217\004r\0042\001\211\000y\006V\005\021\001\212\000N\006G\006H\000$\001D\0059\000\005\001E\000?\000p\002\133\002\134\002\157\002\137\006\b\005\169\000>\000N\000y\000N\002P\001D\003\007\006L\001P\000*\005\170\006B\006C\005:\0005\004\001\0005\003A\005=\005L\005M\001\162\006\006\003B\006\t\005L\005M\000N\000z\001\160\005]\001D\001\028\000p\001P\001\017\001\t\002S\003\233\002\196\006O\000O\000y\001\t\005N\001\213\005\167\005\168\002u\000p\000O\001\214\002\182\001F\005[\000p\002\148\001\t\000y\001G\005^\005L\005M\000p\000y\001\017\006O\000O\002\130\000O\001F\002\172\000y\001\147\001\239\001\019\001G\002S\005\199\001\t\0006\002\195\0006\002\174\005d\002O\004\161\002\198\003W\005\170\000z\001\012\003\235\000O\001\160\000p\001F\001V\002\185\002S\005N\0005\001G\001\210\000y\001\018\005N\003?\005A\003R\001\150\000p\002\133\002\138\001V\002\137\006{\002O\005E\001\t\000y\002\187\006|\004\202\004\208\000p\003\133\003\134\003\237\0005\006}\004|\004\000\001\135\000y\001\t\004\147\001\238\001\"\003O\001V\001\t\005N\003\242\005\246\002\188\000z\000\179\004\002\001\t\003P\004\163\004\128\004\207\002S\002S\004t\0009\005T\0009\003\007\002O\005\255\006(\004n\001\227\002\154\0006\002\164\004\001\005n\003A\001\029\000\179\000p\001\012\001\228\003B\001$\005\142\005\236\001\t\000\179\000y\002\166\001W\002\177\001\023\005b\003\244\006\005\0043\003\233\004z\001\023\0006\004\n\001\t\002\139\000\179\004\145\000P\001W\005\145\005\234\005\237\005L\005M\004*\003[\005\248\001\t\001\031\0005\006\006\002B\006\t\005L\005M\005O\000Q\002\176\002T\004\157\002\243\000\179\001 \003\\\001W\006\000\002\129\006\127\003]\001 \003\217\001\029\003^\001\153\007\022\001\210\006\001\006\002\003_\003?\0009\003R\003\235\001 \002\248\004\134\000<\001\136\002-\007\023\006\128\002&\005Y\002\167\006\186\0062\001\t\000p\001Z\002,\003\176\000p\006}\006\187\004\000\001 \000y\006\189\003\208\002\166\000y\001\030\001X\005g\001Y\0006\001[\003\136\003\237\000\004\002\156\001\163\001\023\005N\001Z\001]\001\029\0005\002\129\003O\001\"\001^\003\007\003\242\005N\0065\002\192\000\179\004\002\006\129\003P\004\001\001[\003A\000\005\001\026\003\253\001\\\006\130\003B\000p\001]\002\139\006\206\006\160\006Y\005a\001^\003\254\000y\002\177\001 \001\127\006\204\003\233\000p\001!\001 \001\023\004w\001#\000\167\005\246\002a\000y\002\197\002T\005\254\005\233\003\244\002k\004\005\006\162\001\t\002\129\002\218\004\n\001\t\003\218\004\203\006\164\000\004\0009\0006\002S\004\147\002d\003\209\004*\003[\003\000\005\147\005\234\005\237\005L\005M\003\219\001 \005\193\002S\004\205\005\131\005L\005M\0005\005\251\000\005\003\\\003\235\006(\000p\001\210\003]\001 \006\207\003?\003^\003R\0005\000y\000p\002\151\003_\004\134\005R\007\031\001\t\001 \005\248\000y\004\205\000N\0005\000p\005h\000N\006\003\002\192\002\217\004r\0042\001\t\000y\000p\003\237\001\210\0068\000p\002\217\001\211\005b\004\136\000y\001\212\002\151\003O\000y\000Z\000p\003\242\0009\002\153\005S\000\179\004\002\006\208\003P\000y\003\007\002\178\0006\005\218\004\150\000F\006\130\005N\002\197\004\001\003\007\003A\006\210\000\r\002\218\005N\0006\003B\005\220\002S\005i\002l\0060\002S\005\132\003\158\002\152\000]\001\t\000O\0006\0005\003\233\000O\002S\000\016\000\017\003\244\001\t\004\005\006\212\002\180\006>\001\230\004\n\000N\002|\001\213\006\214\002e\004\228\001\t\002f\001\214\000R\005\230\004*\003[\001\210\006Z\001\023\001\t\003?\000N\003R\001\t\004\230\000\170\000U\005a\0005\000\b\000\176\002\178\006\004\003\\\001\t\006:\006\005\0009\003]\004\129\003W\001\006\003^\001\012\003\235\004f\001\210\001\232\003_\005\249\003?\0009\003R\001 \005\232\0006\005\242\001 \004\004\006~\006\006\005T\006\t\005L\005M\0009\005e\002\255\000p\000O\003\254\002\179\002\225\006}\006\192\0042\006\180\000y\001\233\006\181\003\237\0048\001\230\007\b\003A\006\014\003\014\000O\006\022\004\139\003B\003O\000\164\003\254\0006\003\242\006\172\006\173\000\172\000\179\004\002\005\025\003P\003\007\004\131\003\233\001 \006\189\004\231\001\235\004\002\006\189\004\001\000\004\003A\006@\004n\003\133\003\134\000a\003B\001\026\004\216\000\159\004\230\001\227\000S\002\024\001I\006\203\0007\005b\0009\000\179\000\178\003\233\001\228\000V\000\005\0005\000S\003\244\000F\0043\005N\004z\006\170\002\192\004\n\006\185\004l\000V\004\145\004\220\001\t\003W\000F\005p\004\n\003\235\004*\003[\004\018\006\195\002\185\007\015\002\229\006\211\006\177\001\210\004*\0009\001\238\003?\002\255\003R\002\193\003\164\001\017\003\\\006\216\005q\005L\005M\003]\003\181\002\197\002\189\003^\003\235\002\027\000p\004i\006\220\003_\003\237\006}\006\192\0042\001 \000y\001C\004i\000N\0005\0006\003O\000\170\006O\001 \003\242\002\188\000\171\001 \000\179\001\240\006\240\003P\003Z\000\179\002S\0005\000\180\000:\001 \003\237\003\007\006O\004\218\000p\001\241\004n\004k\002\143\002\217\004\001\003O\003A\000y\006\238\003\242\000p\004j\003B\000\179\004\002\006\198\003P\0057\0058\000y\004\142\006\197\004\172\000\181\006\130\003\244\005\240\003\233\000p\004\142\003\243\000{\005N\003\007\003\254\006\020\006\232\000y\000O\0006\0005\003\135\002S\000\164\000N\003[\001\t\002\226\000\170\000\172\006\234\0009\000\182\000\176\004\238\003\244\0006\0043\000N\006\200\004\144\001\210\004\n\003\\\006\236\003?\006\202\003R\003]\004\143\004\240\000\183\003^\000p\004*\003[\000\255\000^\003_\004\166\000N\003\235\000y\000p\001\t\000\178\000\185\004\219\006}\006\192\0042\004\166\000y\003\\\0005\000N\001\t\007\007\003]\000\170\002a\004\193\003^\004\193\000\171\007\005\0006\002{\003_\004\241\000O\006\242\006\012\001 \001\t\000\164\0009\003\237\003\007\004\168\007\026\000\172\000\005\002d\000O\004\240\000D\004\001\003O\003A\001\012\004\167\003\242\0009\006^\003B\000\179\004\002\006\198\003P\006\248\004\195\000F\004\194\006\199\003\216\000O\006\130\006\249\006\254\003\233\004\221\004\244\003\243\003\133\003\134\005t\000\178\004\255\001\t\0006\000O\003\133\003\134\003\133\003\134\000\164\000N\004\240\001\t\000\179\000\170\000\172\000\180\005\001\004\002\000\176\006^\003\244\006\255\0043\006^\006\200\003\208\001\210\004\n\002\190\005\002\003?\006\202\003R\000S\000_\004\218\005\005\003\133\003\134\004*\003[\006\241\007\027\005\r\000V\005\001\003\235\000\181\000p\000F\000\178\007!\004\240\006}\006\192\0042\005\016\000y\003\\\005\015\004\220\007\004\006^\003]\006j\004\n\002\147\003^\007\003\004\018\007\016\007\011\005\015\003_\007\r\000O\003\254\004*\001 \003\208\000\164\001\020\003\237\003\007\000\179\007\016\000\172\000\180\007\019\001\023\0005\007\"\004\001\003O\003A\000\187\002e\003\242\001\209\002f\003B\000\179\004\002\006\198\003P\005\019\000\188\001\023\000p\006\201\005H\005K\006\130\006m\003\209\003\233\001 \000y\003\243\000\181\003>\004\240\000\178\007?\007\015\003\254\005I\005I\001 \007\020\006\161\005\144\000N\000N\001\t\000\179\000\170\001D\000\180\007@\001E\000\176\003\254\003\244\002\159\0043\001 \006\200\000\182\001\210\004\n\003\248\001\023\003?\006\202\003R\0006\006b\007\024\006f\005\153\006t\004*\003[\007\025\007\028\007\029\000\183\003\212\003\235\000\181\000p\000\184\007\015\007\016\007 \006}\006\192\0042\007#\000y\003\\\000\185\007$\005\154\0075\003]\005\157\005L\005M\003^\001 \006y\003\215\001\t\003\207\003_\007*\000O\000O\006a\001 \001F\000\164\006`\003\237\003\007\000\179\001G\000\172\000\180\0073\007/\006\244\0072\004\001\003O\003A\000\187\007;\003\242\000p\000w\003B\000\179\004\002\006\198\003P\0079\000\190\000y\0005\006\209\003\208\007=\006\130\005s\007B\003\233\000p\000\000\003\243\000\181\006_\002\217\000\178\001V\000\000\000y\000p\002\133\002\134\002\135\002\137\000\000\000N\000z\001\t\000y\000\170\005q\005L\005M\000\000\000\176\002S\003\244\000\000\0043\005N\006\200\000\182\001\210\004\n\003\007\000\000\003?\006\202\003R\000\000\005\131\005L\005M\002S\000z\004*\003[\005<\000\000\000\000\000\183\000\000\003\235\002S\000p\000\254\000\000\0006\000\000\006}\006\192\0042\000\000\000y\003\\\000\185\000N\001\t\000\000\003]\000\170\005:\000\000\003^\000\000\000\174\005=\005L\005M\003_\000\000\000O\003\209\000\000\001 \001\t\000\164\000\000\003\237\003\007\000\179\000\179\000\172\000\180\001W\001\t\000\000\005\142\004\001\003O\003A\000\000\005N\003\242\000\000\001\023\003B\000\179\004\002\006\198\003P\000p\000\000\000\000\000\000\006\213\000\000\000\000\006\130\000\000\000y\003\233\005N\000\000\003\243\000\181\000\000\000\000\000\178\000\000\000\000\005\182\000O\005Z\0009\000\000\000\000\000\164\000N\000\000\001\t\000\000\000\170\000\172\001 \000\000\000\000\000\176\000\000\003\244\005\171\0043\000\000\006\200\000\182\001\210\004\n\005[\005N\003?\006\202\003R\000\000\005^\005L\005M\000\000\000\000\004*\003[\000\000\005\197\001\146\000\183\000\000\003\235\004\002\000p\001\001\000\178\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\000\000\003]\000\000\001\211\005\195\003^\001\t\001\212\005\198\005L\005M\003_\000\000\000O\000\000\000\000\001 \000p\000\164\002T\003\237\003\007\000\179\002\139\000\172\000\180\000y\002\129\005\b\000\000\004\001\003O\003A\004\n\001\144\003\242\000\000\004\018\003B\000\179\004\002\006\198\003P\000p\000\000\004*\000\000\002T\000\000\000\000\006\130\000\000\000y\003\233\005N\002\129\003\243\000\181\000\000\000\000\000\178\000\000\000\000\000\000\000\000\001\230\001 \000\000\000\000\001\213\000N\000\000\001\t\000\179\000\170\001\214\000\180\000\000\000\000\000\176\000\000\003\244\000\000\0043\001 \006\200\000\182\001\210\004\n\000\000\005N\003?\006\202\003R\001 \005\131\005L\005M\000\000\000\000\004*\003[\001\231\001\t\000\000\000\183\000\217\003\235\000\181\000p\001R\001\232\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\000\000\003]\000\000\001\211\000\000\003^\001\t\001\212\005\131\005L\005M\003_\000\000\000O\000\212\000\000\001 \000\000\000\164\001\233\003\237\003\007\000\179\000\000\000\172\000\180\001\022\000\000\000\000\000\000\004\001\003O\003A\000\183\001\023\003\242\000\000\000\218\003B\000\179\004\002\000\214\003P\004\211\004\128\000\000\000\000\000\000\000\185\005j\001\235\000\000\006\005\003\233\005N\000\000\003\243\000\181\000\000\000\000\000\178\000\000\000\000\005\208\000\000\001\230\001\227\002*\002\017\001\213\000\000\000\000\001\t\001 \000\179\001\214\006\006\001\228\006\t\005L\005M\003\244\000\000\0043\000\000\004z\000\182\001\210\004\n\000\000\005N\003?\004\018\003R\000\000\000\000\000\000\000p\002\028\005\223\004*\003[\001\231\000\000\002\020\000\183\000y\003\235\000\000\000p\001T\001\232\005p\001\238\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\002\161\003]\000\000\001\211\000\000\003^\000\000\001\212\001\023\003\182\000\000\003_\000\000\005q\005L\005M\001 \000\000\002S\001\233\003\237\003\007\000\179\000\000\000\000\000\180\002\163\000\000\000\000\000\000\004\001\003O\003A\001\240\001\023\003\242\000\000\005N\003B\000\179\004\002\000\000\003P\004~\004\128\000\000\000p\001 \001\241\000\000\001\235\006Y\000\000\003\233\000\000\000y\003\243\000\181\000\000\0005\001\t\000\000\000\000\000\000\000\000\001\230\001\227\002'\002\017\001\213\000\000\000\000\001\t\001 \000\179\001\214\000\000\001\228\000\000\000\000\000\000\003\244\000\000\0043\000\000\004z\000\182\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\005N\000\000\000\000\002\028\000\000\004*\003[\001\231\000\000\002\020\000\183\000\000\003\235\000\000\000p\003T\001\232\005p\001\238\002\217\004r\0042\000\000\000y\003\\\000\185\005\233\001\210\000\000\003]\0006\001\211\000\000\003^\000\000\001\212\000\000\001\t\000\000\003_\000\000\005q\005L\005M\001 \000p\002\150\001\233\003\237\003\007\005\234\005\237\005L\005M\000y\000\000\000\000\000\000\004\001\003O\003A\001\240\005p\003\242\006\025\000\000\003B\000\179\004\002\000\000\003P\004\165\004\128\000p\002\133\002\141\001\241\002\137\001\235\000\000\000z\003\233\000y\000\000\003\243\000\000\005q\005L\005M\002S\000\000\000\000\000p\001\230\001\227\002$\002\017\001\213\000\000\000\000\001\t\000y\000\179\001\214\000\000\001\228\000\000\0009\000z\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\002S\000\000\003?\004\018\003R\000\000\005N\005w\000\000\002\028\004+\004*\003[\001\231\001\t\002\020\005N\000\000\003\235\002S\000p\006d\001\232\005p\001\238\002\217\004r\0042\0005\000y\003\\\000\000\000\000\001\210\000\000\003]\000\000\001\211\001\026\003^\000\000\001\212\001\t\000\000\000\000\003_\000\000\005q\005L\005M\001 \005N\000\000\001\233\003\237\003\007\000\000\004\031\000\000\000\000\000\000\001\t\000\000\006[\004\001\003O\003A\001\240\000\000\003\242\000p\001\023\003B\000\179\004\002\002\217\003P\004\215\004\128\000y\005\246\002\248\001\241\000\000\001\235\000\000\000\000\003\233\000\000\000\000\003\243\000\000\000\000\0005\0006\000\000\000\000\004Z\0005\001\230\001\227\002\"\002\017\001\213\000\000\003\007\001\t\000\000\000\179\001\214\001 \001\228\000\000\000\000\002S\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\005\247\000\000\003?\004\018\003R\000\000\005N\005}\000\000\002\028\000\000\004*\003[\001\231\006\015\002\020\006;\000p\003\235\000\000\000p\000\000\001\232\005\248\001\238\006}\000y\004\000\000\000\000y\003\\\001\"\006\005\001\t\002T\003]\0006\000\000\002\139\003^\000\000\0006\002\129\000\000\000\000\003_\000\000\006\016\0009\006\017\001 \000\000\005{\001\233\003\237\003\007\006\006\000\000\006\t\005L\005M\000\000\002T\000\000\004\001\003O\003A\001\240\005p\003\242\002\129\001$\003B\000\179\004\002\003\211\003P\006\157\004\128\000^\006\018\001 \001\241\006\205\001\235\000\000\000\000\003\233\000\000\002a\003\243\006\019\005q\005L\005M\000\000\002v\000\000\000\000\000\000\001\227\002\015\002\017\001\t\000\000\000\000\001\t\000\000\000\179\001 \000\000\001\228\002d\003\208\000\000\003\244\000\000\0043\0009\004z\000\000\001\210\004\n\000\000\004\002\003?\004\018\003R\001\026\000\000\005\138\000\000\002\028\000\000\004*\003[\000p\000\000\002\020\000{\005N\003\235\000N\000p\000\000\000y\001D\001\238\006}\001P\004\000\000\000\000y\003\\\005\249\002\127\000p\002\133\003]\000\000\002\140\000\000\003^\000\000\000\000\000y\0005\005\n\003_\000\000\000\000\004`\004\n\001 \005N\000\000\004\018\003\237\003\007\000\000\002S\0005\000\000\000\000\004*\000\000\000\000\004\001\003O\003A\001\240\000z\003\242\000S\000c\003B\000\179\004\002\006\191\003P\002S\000\000\003\209\000\000\000V\001\241\006\190\006\130\000O\000F\003\233\001F\000\000\006\194\001\147\000\000\0005\001G\000\000\000\000\000\000\000\000\001\t\001 \000\000\002\219\000\000\000\000\000\000\001\t\005\252\0005\0006\000\000\000\000\000\000\0005\000\000\003\244\000\000\004\005\006\196\001\t\002e\001\210\004\n\002f\0006\003?\006\202\003R\001\150\000\000\000\000\001\023\001V\000\000\004*\003[\000\000\000\000\000\000\006,\000p\003\235\000\000\000p\000\000\000\000\000\000\000\000\006}\000y\004\000\000\000\000y\003\\\000\000\000\000\000p\000\000\003]\0006\000\000\006Y\003^\000\000\000\000\000y\000\000\000\000\003_\001\"\001 \000\000\000\000\001 \0006\005\136\000\000\003\237\003\007\0006\000\000\000p\002\133\002\134\002\145\002\137\0009\004\001\003O\003A\000y\000\000\003\242\000\000\000\000\003B\000\179\004\002\006\191\003P\000\000\0009\000\000\000\000\000\000\000\000\006\193\006\130\000\000\001$\003\233\000\000\002a\006\194\000\000\000\000\000z\000\179\000p\002c\001W\000\000\000\000\006Y\000\000\002S\001\t\000y\000N\001\t\000\000\000\000\000\170\0027\000\000\002d\0009\000\174\003\244\000\000\004\005\006\196\001\t\000\000\001\210\004\n\000\000\000\000\003?\006\202\003R\0009\000\000\004\031\000\000\001\153\0009\004*\003[\000\000\000\000\000\000\002T\002\142\003\235\000N\000p\001\t\002\243\001D\002\129\002\217\001P\004\000\000\000\000y\003\\\002\248\000\000\000N\001Z\003]\0005\000\170\000\000\003^\000\000\000\000\000\171\001\026\000\000\003_\002\248\004Z\000O\000\000\001 \000\000\001[\000\164\003\237\003\007\000\000\001\163\001\t\000\172\000\000\001]\002\249\001 \004\001\003O\003A\001^\000\000\003\242\000\000\000\000\003B\000\179\004\002\006\191\003P\006\132\000\000\000\000\002\219\001\202\000\000\000\000\006\130\000O\002\253\003\233\001F\000\000\006\194\001\147\000\000\000\000\001G\000\178\000{\006c\000\000\000O\000\000\006\159\0006\000\000\000\164\000\000\001\t\000\000\000\000\004\223\000\172\000\000\002Q\000\000\004\160\003\244\0005\004\005\006\196\000\000\002e\001\210\004\n\002f\000\000\003?\006\202\003R\001\150\000\000\005p\001\023\001V\000\000\004*\003[\0005\005\194\000\000\006[\002\139\003\235\000\000\000p\000\000\000\000\000\178\001\023\002\217\000\000\004\000\000\000\000y\003\\\005q\005L\005M\000\000\003]\006Z\002\219\005\195\003^\000\000\002T\005\198\005L\005M\003_\000\000\001 \000\000\002\129\001 \000\000\000\000\000\000\003\237\003\007\0009\000\179\005p\0006\000\180\0005\000\000\001 \004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\006[\0006\000\000\000\000\005q\005L\005M\003\249\001\023\003\233\001 \000\000\004\149\000\000\000\181\000p\000\179\000\000\000\000\001W\002\217\003\251\004\000\000\000\000y\000\000\000\000\005p\001\t\000\000\000\179\004\158\001\151\000\180\000\000\005N\004\160\003\244\000\000\004\005\004\151\001\"\000\000\000\212\004\n\004\031\005N\001 \004\018\0006\003\007\005q\005L\005M\001\153\000\000\004*\003[\0009\004\001\000\000\003A\000\183\003\235\000\000\000\181\000\213\003B\000\000\002\248\000\214\000\000\000\000\000\000\000\000\003\\\005\156\000\185\0009\001Z\003]\001$\003\233\000\000\003^\004$\005N\000Y\0005\000N\003_\0005\000\000\001D\000\000\001 \001P\001[\000\000\003\237\005\154\001\t\001\163\005\157\005L\005M\001]\000\000\000\000\004(\003O\000\000\001^\000\187\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\000\192\004\031\0009\000\000\000p\000\000\000\000\004\007\002\219\005N\000\000\004\149\003\235\000y\000p\000\000\000\000\000\000\000\000\002\217\004\b\0042\000\000\000y\000\000\002\248\000\000\000\000\000\000\000\000\0006\000O\0005\0006\001F\005\134\003\244\001\147\004\005\004\151\001G\004$\005\200\004\n\000\000\001\216\000\000\004\018\003\237\003\007\000\000\000\000\0005\000\000\000\000\004*\003[\000\000\004\001\003O\003A\005N\000\000\003\242\000\000\004(\003B\000\179\004\002\000\000\003P\000\000\003\214\000\000\003\\\000\000\002w\000S\001V\003]\000\000\003\233\000\000\003^\0047\0005\005\149\000\000\000V\003_\001\t\000N\000\000\000F\001 \003?\002\219\003@\0006\002d\001\t\000\000\000\000\0005\000\000\000\000\000\000\0009\000\000\003\244\003\208\004\005\0049\000\000\000\000\001\210\004\n\000\000\0006\003?\004;\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\0045\000\000\000\000\005\164\000N\003\235\000\\\000p\003?\000\000\003R\000\000\002\217\004\b\0042\000\000\000y\003\\\000\000\000\000\000\000\0006\003]\000\000\005p\000\000\003^\000O\0005\003A\000\000\000\000\003_\000\179\000\000\003B\001W\001 \000\000\0006\000\000\003\237\003\007\000\000\000\000\0009\000\000\000\000\005q\005L\005M\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\0009\000p\000\000\000{\003\209\000O\001\161\003A\004:\003\233\000y\000\000\003\243\003B\000\000\000p\000\000\000\000\000\000\002\220\002\217\004\b\0042\0005\000y\000\000\000\000\000\000\001\t\0006\000N\001Z\000\000\0009\003?\002e\003@\003\244\002f\0043\002z\0044\000\000\002\227\004\n\000\000\001\023\000\000\004\018\001[\003\007\0009\000\000\000p\001\163\000S\004*\003[\001]\004\001\000\000\003A\000y\003\235\001^\005N\000V\003B\000\000\000\000\000\000\000F\000\000\000\000\006\139\003\\\000\000\000\000\003W\000\000\003]\006\152\003\233\000\000\003^\001 \003O\001\t\000\000\0006\003_\000{\000\000\000\000\000\179\001 \000O\003P\003A\003\237\000\000\001\t\000\000\000\000\003B\000\000\0009\003\001\000\000\000\000\003O\0005\000\000\000\000\003\242\0005\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\001\225\002a\000\000\000\000\000\000\003O\000\000\003\005\002y\000\000\000\000\003\243\003\235\000\179\000p\001\t\003P\005\153\000{\002\217\004r\0042\000\000\000y\002d\0005\000\000\000\000\000\000\000\000\003Y\002\219\000\000\000\000\002W\002\219\003\244\000\000\0043\000\000\0044\005\154\0009\004\n\005\157\005L\005M\004\018\003\237\003\007\003\131\000\000\000\000\0006\000\000\004*\003[\0006\004\001\003O\003A\000\000\000\000\003\242\000\000\005\175\003B\000\179\004\002\000\000\003P\000\000\000\000\002t\003\\\003[\006\153\000\000\000\000\003]\000\000\003\233\000\000\003^\003\243\000\000\000\000\000\000\000N\003_\000\000\0006\000\170\003\\\001 \000\000\003O\000\171\003]\000\000\001\t\006\154\003^\006\142\000\179\000\000\006\143\003P\003_\003\244\0005\0043\000\000\0044\001\023\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\005N\000\000\004*\003[\0009\000\000\000\000\000{\0009\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\000\002\131\000\000\005\153\003]\001 \000O\002e\003^\000\000\002f\000\164\000\000\000\000\003_\000\000\000\000\000\172\001\023\001 \0009\000\000\000\000\003\237\003\007\000\000\000\000\005\154\0006\000\000\005\157\005L\005M\004\001\003O\003A\003Q\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\004y\000\000\000\000\000N\000\000\000\000\000\178\001\211\0005\003\233\001 \001\212\003\243\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\004r\0042\0005\000y\000\000\000{\000N\001\t\000\000\000{\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\0043\000\000\004z\003\b\000\000\004\n\000\000\004,\000\000\004\018\000\000\003\007\000\000\005\177\000\000\000\000\000\000\004*\003[\0009\004\001\000\000\003A\005p\003\235\002o\005N\003\012\003B\000\000\000O\0040\000\000\000\000\001\213\0006\003\\\000\000\000\000\000\000\001\214\003]\006\005\003\233\000\000\003^\000\000\005q\005L\005M\0006\003_\000\179\000\000\000O\000\180\001 \000\000\000\000\000\164\003\237\005\153\001\t\000\000\0005\000\172\006\006\005p\006\t\005L\005M\003O\0005\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\004{\005\154\000\000\000\181\005\157\005L\005M\005q\005L\005M\000\000\0005\003\243\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\004\152\0042\000\000\000y\000\000\000{\000N\0009\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\176\003\244\006^\0043\000\000\004z\002\232\0009\004\n\005N\0006\000\000\004\018\003\237\003\007\000\187\000\000\000\000\0006\002\219\004*\003[\000\000\004\001\003O\003A\000\194\005\203\003\242\000\000\005N\003B\000\179\004\002\001\227\003P\000\000\004\141\000\000\003\\\000\000\0006\000\179\000\000\003]\001\228\003\233\000\000\003^\003\243\005N\000\000\000\000\005N\003_\000\000\000\000\000O\000\000\001 \000\000\000\000\000\164\000\000\000\000\001\t\000\179\000\000\000\172\000\180\000\000\004\154\000\000\000\000\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\000\000\000{\003?\004\018\003R\0009\000\000\005p\000\000\000\000\000\000\004*\003[\0009\0005\000\000\003D\003\159\003\235\000\181\000p\000\000\000\178\005p\000\000\002\217\004\152\0042\000\000\000y\003\\\005q\005L\005M\000\000\003]\0009\000\000\000\000\003^\000\000\006^\001\229\0005\000\000\003_\000\000\005q\005L\005M\001 \005\188\000\000\000\000\003\237\003\007\000\000\006\005\002\219\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\0063\001\210\003B\000\179\004\002\003?\003P\003R\000\196\000\000\0006\006\006\000\000\006\t\005L\005M\004\174\003\233\000\000\006\031\003\243\000\000\000\000\000p\000\000\005\186\003M\000\000\002\217\004\b\0042\006b\000y\002\243\000{\000\000\001\t\000\179\000\000\0006\000\180\000\000\004\156\005N\000\000\003\244\0005\0043\000\000\004\155\003\167\000\000\004\n\0005\000\000\005p\004\018\002\248\003\007\005N\000\000\000p\000\000\000\000\004*\003[\002\217\004\001\000\000\003A\000y\003\235\000\181\002\249\000\000\003B\000\000\000\000\000\000\005q\005L\005M\000\000\003\\\000\000\000\000\000\000\0009\003]\000\000\003\233\000\000\003^\000\000\000\000\005N\003\007\002\253\003_\000\000\000\000\000\182\000\000\001 \000\000\002S\000\000\003\237\000\000\001\t\000\000\000\000\0006\000\000\005p\000\000\0009\000\000\003O\0006\000\183\000\000\003\242\000\000\001\210\003V\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\185\000p\000N\005q\005L\005M\000\161\002K\003\243\003\235\000y\000p\001\t\000\000\000\000\000\000\002\217\006b\004\000\004\031\000y\000\000\000\000\001\210\000N\000\000\005N\001\211\000\161\002G\000\000\001\212\005\184\003\244\000\000\0043\000\000\004\155\000\000\000\000\004\n\000\000\000\000\002\248\004\018\003\237\003\007\000\000\005\214\000\000\000\000\000\000\004*\003[\0009\004\001\003O\003A\000\000\004$\003\242\0009\000\000\003B\000\179\004\002\000\000\003P\000O\000\000\000\000\003\\\000{\000\164\006\147\000\000\003]\000\000\003\233\000\165\003^\003\243\0066\004(\000\000\005N\003_\001\t\003\183\001\230\000O\001 \000\000\001\213\000\000\000\164\000\000\001\t\000\000\001\214\004\209\000\165\000\000\004\002\005p\004\160\003\244\000\000\0043\000\000\0044\000\000\001\210\004\n\000\000\000\178\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\005q\005L\005M\000\000\003\235\000\000\000p\001\232\000\000\000\178\000\000\002\217\000\000\004\000\000\000\000y\003\\\000{\005\012\000\000\005p\003]\005\212\004\n\003\152\003^\000\000\004\018\000\000\000\000\000\000\003_\000\000\003\189\000\000\004*\001 \000\000\001\233\000\000\003\237\003\007\000\000\000\000\005q\005L\005M\000\000\000\000\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\005p\000\000\000\000\000\000\001\235\000\000\000\000\000\179\003\233\001 \000\180\004\149\000\000\000\000\000p\000\000\005\210\005N\000\000\002\217\001\227\004\000\002\014\000y\005q\005L\005M\001\t\000\179\000\179\004\225\001\228\000\180\000\000\006\142\004\160\003\244\006\143\004\005\004\151\006\150\000\000\000\181\004\n\000\000\001\023\005p\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\0005\004\001\000\000\003A\005N\003\235\000\000\000\181\000\000\003B\001\238\000\000\000\000\005q\005L\005M\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\001 \0005\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\000\000\001\t\000\000\0005\004\227\000\000\000\000\005N\000\000\004\160\003O\001\240\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\0006\000\000\001\241\000\000\000\000\000N\000\000\000\000\000\000\000\161\002A\004\149\003\235\000\000\000p\000\000\000\000\000\000\005\227\002\217\000\000\004\000\000\000\000y\000\000\000\000\001\210\000N\0006\005N\001\211\000\161\0026\000\000\001\212\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\0006\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\005\225\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000O\000\000\000\000\003\\\000\000\000\164\0009\000\000\003]\000\000\003\233\000\165\003^\004\149\000\000\000\000\000\000\000\000\003_\000\000\000\000\001\230\000O\001 \000\000\001\213\000\000\000\164\000\000\001\t\000\000\001\214\006g\000\165\0009\000\000\006\029\004\160\003\244\000\000\004\005\004\151\000\000\000\000\001\210\004\n\000\000\000\178\003?\004\018\003R\0009\000\000\000\000\000\000\000\000\000\000\004*\003[\006o\000\000\000\000\000\000\000\000\003\235\000\000\000p\001\232\000\000\000\178\000\000\002\217\004\b\0042\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\006\"\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000{\001\233\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\004\022\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000{\000\000\000\000\000\000\001\235\000\000\000\000\000\179\003\233\000\000\000\180\004\149\000\000\000\000\000p\000\000\004Q\000{\000\000\002\217\001\227\004\000\001\237\000y\000\000\000\000\000\000\001\t\000\179\000\179\000\000\001\228\000\180\004a\000\000\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\181\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\000\000\003A\000\000\003\235\000\000\000\181\000\000\003B\001\238\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\000\000\001\t\000\000\000\000\006u\000\000\000\000\000\000\000\000\004\160\003O\001\240\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\001\241\000\000\000\000\000\000\000\000\006\163\000\000\000\000\000\000\003\243\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\004\b\0042\000\000\000y\000\000\000\000\000N\000N\000\000\000\000\000\170\000\161\0023\000\000\000\000\000\171\003\244\000\000\0043\000\000\0044\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000p\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000y\000\000\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\004\149\000\000\000\000\000\000\000\000\003_\000\000\000\000\000O\000O\001 \000\000\000\000\000\164\000\164\000\000\001\t\000\000\000\000\000\172\000\165\000\000\000\000\000\000\000\000\003\244\000\000\004\005\004\151\000\000\000\000\001\210\004\n\000\000\004\169\003?\004\018\003R\000\000\000\000\000\000\006\139\000\000\000\000\004*\003[\000\000\000\000\006\151\000\000\000\000\003\235\000\000\000p\001\t\000\178\000\178\000\000\002\217\000\000\0042\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000y\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\003\233\000\000\0046\003\243\000\000\000y\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\001\t\000\179\000\179\000\170\000\180\000\180\000\000\000\000\000\171\003\244\000\000\0043\000\000\0044\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\006\139\000\000\000\000\004*\003[\000\000\004\001\006\146\003A\000\000\003\235\000\181\000\181\001\t\003B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\006\139\000\000\003]\000\000\003\233\006\142\003^\006\141\006\143\000\000\000\000\000\000\003_\001\t\000\000\000O\001\023\001 \000\000\000\000\000\164\003\237\000\000\001\t\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\187\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \003\255\004\171\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\0043\000\000\004\173\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000N\003B\000\179\004\002\001D\003P\000\000\001P\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\006\142\003^\004\003\006\143\000\000\000\000\000\000\003_\000\000\000\000\000O\001\023\001 \000\000\000\000\000\164\000\000\000\000\001\t\000\179\000\000\000\172\000\180\000\000\000\000\006\142\000\000\003\244\006\143\004\005\004\006\000\000\000\000\001\210\004\n\000\000\001\023\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000O\001 \004\t\001F\003\235\000\181\000p\000\000\000\178\001G\000\000\002\217\000\000\004\000\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\001 \000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\200\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\003\233\000\000\000\000\004\003\000\000\000y\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\001\t\000\179\000\000\000\170\000\180\000\000\000\000\000\000\000\171\003\244\000\000\004\005\004\006\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\000\000\003A\000\000\003\235\000\181\000\000\000\000\003B\000\179\000\000\000\000\001W\000\000\000\000\000\000\003\\\000\000\000\000\006\139\000\000\003]\000\000\003\233\000\000\003^\006\149\000\000\000\000\000\000\000\000\003_\001\t\000\000\000O\000\000\001 \000\000\000\000\000\164\003\237\000\000\001\t\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\187\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\000\000\004\003\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\001[\000\000\000\000\000\000\000\171\001\149\000\000\000\000\000\000\001]\000\000\003\244\000\000\004\005\004\006\001^\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000\000\003B\000\179\004\002\000p\003P\000\000\000\000\000\000\003\\\000\000\004}\000\000\000y\003]\000\000\003\233\000\000\003^\004v\000\000\000O\000\000\000\000\003_\000\000\000\164\000\000\000\000\001 \000\000\000\000\000\172\000\000\000N\001\t\000\179\000\000\000\170\000\180\000\000\000\000\006\142\000\171\003\244\006\143\004\005\004x\000\000\000\000\001\210\004\n\000\000\001\023\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\000\000\000\178\000\000\003\235\000\181\000p\000\000\000\000\000\000\002a\002\217\000\000\004\000\000\000\000y\003\\\002k\000\000\000\000\000\000\003]\000\000\000\000\001\t\003^\001 \000\000\000\000\000\000\000\000\003_\000\000\002d\000O\000\000\001 \000\000\000\000\000\164\003\237\003\007\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\204\000\000\000\000\000\000\004u\000\000\000\000\000\000\000\000\003\233\000\000\000\000\004v\000\000\000\000\000p\000\000\000\178\000\000\000\000\002\217\000\000\004\000\000\179\000y\000\000\000\180\000N\001\t\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\004\005\004x\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\002l\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000O\000\000\001 \000\000\002m\000\164\003\237\002e\001\t\000\179\002f\000\172\000\180\000\187\000\000\000\000\000\000\003O\001\023\000\000\000\000\003\242\000\000\001\210\000\206\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\003\235\000\181\000p\000\000\000\178\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\000\000\001 \000\000\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\005\004\140\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\000\000\003B\000\179\004\002\000p\003P\000\000\000\208\000\000\003\\\000\000\004\135\000\000\000y\003]\000\000\003\233\000\000\003^\004v\000\000\000O\000\000\000N\003_\000\000\000\164\000\161\0022\001 \000\000\000\000\000\172\000\000\000\000\001\t\000\179\000\000\000\000\000\180\000\000\000\000\000\000\004\148\003\244\000\000\004\005\004x\000\000\000\000\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\000\000\000\178\000\000\003\235\000\181\000p\000\000\000\000\000\000\002a\002\217\000\000\004\000\000\000\000y\003\\\002k\000\000\000\000\000\000\003]\000\000\000O\001\t\003^\000\000\000\000\000\164\000\000\000\000\003_\000\000\002d\000\165\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\222\000\000\000\000\000\000\000\000\000\000\000\178\000\000\000\000\003\233\006k\000\000\004\149\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\000N\004\000\000\179\000y\000\170\000\180\000\000\001\t\000\000\000\171\000\000\000\000\000\000\000\000\000\000\004\153\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\002l\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000O\000\000\000\000\003_\000\179\000\164\000\000\000\180\001 \000\000\002r\000\172\003\237\002e\001\t\000\000\002f\000\000\000\000\000\187\000\000\000\000\000\000\003O\001\023\000\000\000\000\003\242\000\000\001\210\000\224\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\006w\000\178\004\149\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\000\000\001 \000N\000\000\000\171\000\000\001D\000\000\000\000\001P\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\006l\000\000\000O\000\000\000\000\003_\000\000\000\164\000\000\000O\001 \000\179\001F\000\172\000\180\001\147\001\t\000\000\001G\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\005\006n\000\000\000\000\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\000\000\006z\000\178\000\000\003\235\001\150\000p\000\000\000\000\001V\000\000\002\217\000\000\004\000\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\002/\000\000\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\233\000\000\000\000\006l\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\248\000\179\000y\000N\000\180\000\000\001\t\000\170\000\179\000\000\000\000\001W\000\174\000\000\000\000\003\244\000\000\004\005\006n\000\000\000\000\000\000\004\n\000\000\001\174\001\210\004\018\000\000\003\007\001\211\000\000\000\000\000\000\001\212\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\001\153\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000O\000\000\001Z\000\000\001 \000\164\000\000\000\210\003\237\000\000\001\t\000\172\000\000\000\000\000\000\001\b\000\000\000\000\000\000\003O\001[\000\000\001\230\003\242\002L\001\163\001\213\000\179\004\002\001]\003P\000\000\001\214\000\000\000\000\001^\000\000\000\000\000\000\000p\000\000\000\000\000\000\000\000\006l\003\235\000\000\000\178\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\232\003\244\000\000\004\005\006n\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\004\249\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\001\233\000\179\004\002\001\210\003P\000\000\000\000\003?\003\\\003R\000\000\000\000\002a\003]\000\000\000\000\000\000\003^\003\243\002k\000\000\000\000\000\000\003_\000\000\000p\001\t\000\000\001 \000\000\002\217\001\235\004\248\000\179\000y\002d\000\180\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\252\000\000\001\227\003\129\002\017\004\n\000\000\000\000\000\000\004\018\000\179\000\000\000\000\001\228\000\000\003\007\000\219\004*\003[\000\000\000\000\000\000\000\000\000\181\004\001\000\000\003A\000\000\000\000\000\000\000\000\001\210\003B\000\000\002\028\003?\003\\\003R\000\000\000\000\002\020\003]\000\000\000\000\000\000\003^\000\000\003\233\000\000\001\238\000\000\003_\000\212\000p\000\000\000\000\001 \000\000\002\217\000\000\004\248\000\000\000y\000N\000\000\000\000\001\t\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\003\007\000\000\000\000\000\000\001\240\002l\000\000\000\000\000\000\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\235\000\000\003\233\002e\000\000\000\000\002f\000\000\000\000\000N\000\000\000O\000\000\003?\001\023\003R\000\164\000\000\000\000\003\237\004\251\001\t\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003O\000p\000\000\000\000\003\242\000\000\003\157\000\000\000\179\004\002\000y\003P\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\003\243\003\235\000\000\000\178\000\000\000\000\004\187\000\000\000N\000\000\000\000\003\188\003?\000\000\003R\000\000\000\000\000\000\000\000\000\000\003\194\000\000\003A\000\000\000\000\003\244\000\000\004\252\003B\000\000\000p\000\000\004\n\000\000\000\000\003\157\004\018\003\237\004\254\000y\000\000\000\000\000\000\004\190\004*\003[\000\000\004\192\003O\000\000\000\000\000\000\003\242\000\000\000\000\000\000\000\179\004\002\000\000\003P\004\199\000\000\001\t\003\\\000\000\003\188\000\000\000\000\003]\000\000\000\000\000\000\003^\003\243\003\194\000\000\003A\000N\003_\000\000\000\000\000\170\003B\001 \000\000\000\000\000\174\000\000\000\179\004\196\000\000\000\180\000\000\003W\000\000\000\000\001\012\004\190\003\244\000p\004\252\004\192\000\000\000\000\003\157\004\n\000\000\000\000\000y\004\018\000\000\000\000\000\000\000\000\000\000\000\000\001\t\004*\003[\000\000\000N\000\000\000\000\000\181\000\161\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\188\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\194\003O\003^\000\000\000\000\000\164\000\000\000\210\003_\000\179\004D\000\172\003P\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\195\000\000\004n\004>\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\t\000O\000\000\000N\000\000\000\178\000\164\003?\000\000\003R\000\000\000\000\000\165\003O\000\000\000\000\004E\000\000\000\000\000\000\004\198\000\179\004D\000\000\003P\000p\000\000\000\000\004_\003[\003\157\000\000\000N\000\000\000y\000\000\000\170\000\000\003\243\000\000\000\000\000\174\000N\000\000\000\000\000\000\000\170\003\\\000\178\000\000\000\000\000\171\003]\000\000\000p\004\189\003^\000\000\000\000\000\000\003\188\000\000\003_\000y\000\000\000\000\000\000\001 \000\000\003\194\004E\003A\000\000\000\000\004M\000\000\000N\003B\000\000\000\000\000\170\000\000\004_\003[\000\000\000\174\000\000\000\000\000\000\000\000\000\179\004D\004\190\000\180\000\000\000\000\004\192\000\000\000O\000\000\000\000\003\\\000\000\000\164\000\000\000\210\003]\000\000\000O\000\172\003^\001\t\000\000\000\164\000\000\000\000\003_\000\000\000\219\000\172\000\000\001 \000\000\000\000\000\000\000\181\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\179\000\000\000\174\000\180\000\000\000\000\004E\001\t\000\000\000O\004M\000\000\000\178\000\000\000\164\000p\000\210\000\000\004_\000\000\000\172\000\212\000\178\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\181\000\161\0020\000\000\0029\000\183\001\012\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\178\001 \000\000\000O\003O\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\179\004D\000\172\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\000\003\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\001\t\000\000\000\164\000\000\000\000\000\178\000\179\000\000\000\165\000\180\000\000\000N\000\000\000\000\000\000\001D\004E\000\000\001P\000\000\004M\000\000\000\000\000\000\001\014\000\000\000\000\000\000\004_\003[\000\000\000\181\001\n\000p\001\012\000\000\000\000\000\000\000\000\000\000\000\179\000\181\000y\000\180\000\178\000\000\000\000\003\\\000\000\001\020\000\000\000\000\003]\000\000\000\000\000\000\003^\001\023\000\000\000\000\000\212\000\000\003_\000\000\000\000\000\000\000\000\001 \001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000O\000N\000\183\001F\000\000\001D\000\220\000\000\001P\001G\000\214\000\000\002=\000\179\000N\000\000\000\180\000\185\001D\001 \000\000\001P\000\000\000p\000\000\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000p\000\000\000\000\000\000\001\135\001\014\001\t\000\000\000\000\000y\000\183\001V\000\181\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\001\020\000O\000\000\000\000\001F\000\000\000\000\000\000\001\023\000\000\001G\000\212\000\000\000\000\000O\000N\000\000\001F\000\000\001D\000\000\000\181\001P\001G\000\000\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000p\000\214\000\000\000\000\001\135\000\000\001\t\000\000\000\185\000y\001 \001V\000\000\000\000\000\000\000\000\000\000\001\135\000\000\001\t\000\000\000\000\000\000\000\000\001V\000\000\000\000\000N\000\000\000\179\000\000\000\170\001W\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000O\000N\000\000\001F\000\000\001D\000N\000\000\001P\001G\000\170\001\136\001\137\000\000\000\000\000\171\000N\000\000\000\000\000\000\000\170\000\000\000\000\000p\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\001X\000\000\001Y\000\000\001\135\000\000\001\t\000\000\000\000\000\000\001\023\001V\001Z\000O\000\000\000\000\000\179\000\000\000\164\001W\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\179\001[\000O\001W\000\000\001F\001\\\000O\000\215\000\000\001]\001G\000\164\001\136\001\218\000\000\001^\000O\000\172\000\000\001 \001\127\000\164\000\000\000\210\000\000\001\136\003F\000\172\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\001X\000\000\001Y\001b\001\135\000\000\001\t\000\000\000\000\000\000\001\023\001V\001Z\001X\000\000\001Y\000\178\000\000\000\000\000\000\000N\000\000\000\000\001\023\001D\001Z\000\178\001P\000\000\000\179\001[\000\000\001W\000\000\000\000\001\\\000\000\000\000\000\000\001]\000\000\000\000\000p\001[\000\000\001^\000\000\000\000\001\\\001 \001\127\000y\001]\000\000\000\000\001\136\003\239\000\000\001^\000\000\000\000\000N\001 \001\127\000\000\000\161\000\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\000\001X\000\180\001Y\000\000\000\000\000\000\000O\000\000\000\000\001F\001\023\000\000\001Z\000\000\000\000\001G\000\179\000\000\000\000\001W\000\000\000\179\000\000\000\000\000\180\000\000\000\219\000\000\000\000\000\000\001[\000\179\000N\000\181\000\180\001\\\000\170\000\000\000\000\001]\000\000\000\174\001\136\004\012\000\000\001^\001\135\000O\001\t\001 \001\127\000\000\000\164\001V\000p\000\000\000\181\000\000\000\165\000\219\000\000\000\000\000\212\000y\000\000\000\000\000\181\001X\000\000\001Y\000\000\000\000\006(\000\000\000\000\000\000\000\000\001\023\000\000\001Z\000\000\000\183\000\000\000p\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000y\000\000\000\178\000\212\000\185\001[\000O\006\005\000\000\000\000\001\\\000\164\000\187\000\210\001]\000\000\000\000\000\172\000\000\000\000\001^\000\000\000\183\000\228\001 \001\127\000\220\000\000\000\000\000\000\000\214\006\006\000\000\006\t\005L\005M\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000N\001\t\001W\000\000\000\170\000\000\000\178\000\000\000\000\000\174\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000p\000\000\000\000\001\136\004G\000\000\000\000\000\000\001\t\000y\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000y\000\000\000\180\000N\000\000\000\000\000\000\000\170\000\000\001X\000\000\001Y\000\171\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\001Z\000\000\000\000\000\000\000O\000\000\005N\006+\000\000\000\164\000\000\000\210\000\000\000\181\000O\000\172\000\000\000\000\001[\000\164\000\000\000\210\000\000\001\\\000\000\000\172\000\000\001]\000\000\000\179\000\000\000\000\000\180\001^\000\000\000\000\000\000\001 \001\127\000\000\000N\000\000\000\000\000\000\000\170\000\000\001\t\000\000\000O\000\174\000\000\000\178\000\000\000\164\000\000\000\000\001\t\001.\000\000\000\172\000\000\000\178\000p\000\000\000\181\000\000\000\000\000\000\000\000\000N\000\000\000y\000\000\001D\000\000\000\000\001P\000\000\000\000\000N\000\000\000\000\002;\000\170\000\000\000\000\000\000\000\000\000\171\000\000\001\023\000p\000\000\000\212\000\000\000\178\000\000\000\000\000\000\000\000\000y\000\000\000\000\000N\000\000\000\000\000O\001D\000\000\000\000\001P\000\164\000\183\000\210\000\000\000\000\000\220\000\172\000\000\002\192\000\214\000\000\000\000\000\000\000\000\000p\000\000\000\185\006.\001 \000\000\000\000\000\000\000\000\000y\000O\000\179\000\000\001F\000\180\000\000\000\000\000\000\000\000\001G\000O\000\179\000\000\001\t\000\180\000\164\000\000\000\000\000\178\000\000\000\000\000\172\000\000\002\197\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\000O\000\000\000\181\001F\000\000\001&\001\134\000\000\001\t\001G\000\000\000\179\000\181\001V\000\180\000\000\000\000\000\000\000N\000\000\0024\000\000\001D\000\178\000\000\001P\000\000\000\000\001\023\000\000\001(\000\212\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\000p\000\212\001\t\000\000\000\000\000\000\000\181\001V\000\000\000y\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\000\001 \000\214\000\179\000\000\000\000\000\180\000\000\000\000\000\185\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\001G\000\187\000\000\000\000\001.\000\179\000\000\000\000\001W\000\000\000\000\000\181\000\230\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0010\000\000\001U\000\000\001\t\000\000\000\000\000\000\001\023\001V\000\179\000\212\000\000\001W\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\181\001D\000\000\000\000\001P\000\000\001X\000\000\001Y\000\183\000\000\000\000\000p\000\220\000\000\000\000\001\023\000\214\001Z\000p\000\000\000y\000\000\000\000\000\185\000\000\001 \000\000\000y\000\000\000\000\000N\000\000\000\000\000\000\001D\001[\000\000\001P\000\000\001X\001\\\001Y\000\000\000\000\001]\000\000\000\000\000\187\001\130\001\023\001^\001Z\000p\000\000\001 \001\127\000\000\000\000\000\232\000\000\000\000\000y\000O\000\000\000\000\001F\000\000\000\000\000\000\001[\000\000\001G\000\179\000\000\001\\\001W\000\000\000\000\001]\000\000\000\000\000\000\000\000\002a\001^\000\000\000\000\000\000\001 \001\131\002k\000\000\000\000\000\000\000\000\000\000\000O\001\t\000\000\001F\000\000\000\000\001\129\000\000\001\t\001G\002d\000\000\000\000\001V\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\001X\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000p\001\023\000\000\001Z\001\133\000\000\001\t\000\000\000N\000y\000\000\001V\000\161\002)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001[\000\000\000\000\000N\000\000\001\\\000\000\000\170\000\000\001]\000\000\000\000\000\171\000\000\000\000\001^\000\000\000\000\000\000\001 \001\127\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\000\000\161\001;\000\000\000\000\000\000\000\179\000\000\000\000\001W\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000O\000\000\000\174\002l\000\000\000\164\000\000\000\000\000\000\000\000\000\000\000\165\001\t\000\000\000\000\000p\000O\000\178\000\000\000\000\000\000\000\164\000\179\000\000\000y\001W\000\000\000\172\002\245\000\000\000\000\002e\000\000\000\000\002f\000\000\000\000\000\000\000\000\001X\000\000\001Y\001\023\000\000\000\000\000O\000\000\000\178\000N\001\023\000\164\001Z\000\161\001>\000\000\000\000\000\165\000\000\000\000\000O\000\000\000\000\000\000\000\178\000\164\000\000\000\210\000\000\000N\001[\000\172\000\000\000\170\001X\001\\\001Y\000\000\000\174\001]\000\000\000\000\001 \000\000\001\023\001^\001Z\000\000\000\000\001 \001\127\000p\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\001\t\000\179\001[\000\000\000\180\000\178\000\000\001\\\000\000\000\000\000\000\001]\000\000\000O\000\000\000\000\000\000\001^\000\164\000\000\000\000\001 \001\127\000\000\000\165\000\000\000\000\000\000\000\000\001\168\000\000\000\179\000\000\000O\000\180\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\000\000\170\000\179\000\000\000\000\000\180\000\174\000\000\000\000\001\170\000\000\000\000\000\000\000\000\000\000\000\178\000\000\001\023\000N\000p\000\212\000\181\000\170\000\000\000\000\000\000\000\000\000\174\000y\000\000\001\t\000\179\000\000\000\000\000\180\000\178\000\000\000\181\000\000\000\183\000p\000\000\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000y\000\000\000\000\000\000\000\000\000\185\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\001.\000\172\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000O\000\187\000N\000\000\000\000\000\164\003?\000\210\003R\000N\000\000\000\172\000\234\000\170\002?\000\000\000\179\000\000\000\174\000\180\000\000\001\t\001\023\000\000\000p\000\212\000\178\000\000\000\000\000\000\000N\000p\000\000\000y\000\161\001A\000\179\000\000\000\000\000\180\000y\000\000\001\t\000\000\000\183\000\000\000\000\000\178\000\220\000N\000\000\000\181\000\214\000\161\001\195\000\000\000\000\000\000\000\000\000\185\000\000\001 \000\000\000\000\001.\000\000\000\000\000\000\000O\000\000\003A\000\181\000\000\000\000\000\000\000O\003B\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\000\000\000\172\000\000\000\000\002E\000\000\000\000\000\000\000\000\000\000\000\000\000O\001\023\000\000\000\000\000\212\000\164\000\000\000\000\000\000\000\000\000\000\000\165\000\000\000\000\001\t\000\179\000\000\000\000\000\180\000O\000\000\001\t\000\000\000\183\000\164\000\000\000\178\000\220\000\000\000\000\000\165\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \000\000\000\000\001.\000\000\003W\000\000\000\178\001\012\000\000\000\181\000\000\001\210\000\000\000\000\000\000\003?\000\000\003R\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\178\000\000\002I\000\000\000\000\000\181\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\212\000\000\003\226\004\222\000\000\000\000\000\000\000\000\001\210\000\000\003\021\000\000\003?\000\000\003R\000\000\000\000\003O\001\023\000\183\000\000\000\212\000\000\000\220\000\000\000\179\000\000\000\214\003P\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \003\226\004o\001\230\000\183\003A\003Y\000\000\000\220\000\000\000\000\003B\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \000\000\000\000\003*\000\000\003\233\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\179\001\210\001\230\000\180\003A\003?\001\020\003R\000\000\000\000\003B\000\000\000\000\003,\001\023\003[\000\181\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\212\003\233\000\000\000\000\000\000\000\000\003\226\004=\000\000\003\\\000\000\000\181\000\000\000\000\003]\000\000\000\000\000\000\003^\000\183\003\235\000\000\000\000\000\220\003_\000\000\000\000\000\214\000\000\001 \000\000\000\000\000\000\001\210\000\185\000\000\001 \003?\000\000\003R\000\000\000\000\000\000\001\230\000\000\003A\000\000\000\000\000N\000\000\000\000\003B\000\161\001\204\000\000\003\235\003\237\000\000\000\000\000\000\000\000\000\000\003\226\003\227\001\210\000\000\003\233\003O\003?\000\000\003R\003\242\000\000\000\000\000\000\000\179\000\000\000\000\003P\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\237\003\243\003\226\003\241\000\000\000\000\000\000\000\000\001\230\000\000\003A\003O\000\000\000\000\000\000\003\242\003B\000\000\000\000\000\179\000\000\000\000\003P\000O\000\000\000\000\003\244\000\000\000\164\003\235\000\000\003\233\000\000\000\000\000\165\000\000\003\243\000\000\000\000\001\230\000\000\003A\000\000\000\000\000\000\000\000\003[\003B\000\000\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\244\003\233\000\000\003\\\003\237\000\000\000\000\000\000\003]\000\178\000\000\000\000\003^\000\000\000\000\003O\000\000\000\000\003_\003\242\003[\000\000\000\000\000\179\003\235\000\000\003P\001\210\000\000\000\000\000\000\003?\000\000\003R\000\000\000\000\000\000\000\000\003\\\000\000\003\243\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\003\235\003\226\004C\001\210\000\000\003\237\000\000\003?\000\000\003R\003\244\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\000\000\000\179\000\000\000\000\003P\000\000\000\000\003[\000\000\003\226\004q\000\000\000\000\003\237\000\000\001\230\000\179\003A\003\243\000\180\000\000\000\000\000\000\003B\003O\003\\\000\000\000\000\003\242\000\000\003]\000\000\000\179\000\000\003^\003P\000\000\000\000\003\233\000\000\003_\000\000\000\000\003\244\000\000\000\000\001\230\000\000\003A\003\243\000\000\000\181\000\000\000\000\003B\000\000\001\210\000\000\000\000\000\000\003?\000\000\003R\003[\000\000\000\000\000\000\000\000\000\000\003\233\000\000\000N\000\000\000\000\003\244\000\170\000\000\000\000\000\000\000\000\000\174\003\\\000\000\000\000\000\000\004h\003]\000\000\000\000\000\000\003^\001\210\003\235\000\000\003[\001\211\003_\000\000\000\000\001\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\003\\\000\000\001\211\000\000\000\000\003]\001\212\000\000\000\000\003^\001\230\003\235\003A\000N\000\000\003_\003\237\000\170\003B\000\000\000\000\000\000\000\174\000\000\000\000\000O\000\000\003O\000\000\000\000\000\164\003\242\000\210\003\233\000\000\000\179\000\172\000\000\003P\000\000\000\000\000\000\000\000\000\000\000\000\001\230\000\000\003\237\000\000\001\213\000\000\000\000\003\243\000\000\000\000\001\214\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\001\230\000\000\000\179\000\000\001\213\003P\000\000\000\000\000\178\000\000\001\214\000\000\000\000\003\244\000\000\000O\000\000\000\000\001\231\003\243\000\164\000\000\000\210\003\235\000\000\000\000\000\172\001\232\000\000\000\000\000\000\000\000\000\000\003[\000\000\001\165\000\000\002!\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\001\232\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\001\210\001\233\003\237\003^\001\211\000\178\000\000\003[\001\212\003_\000\000\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\001\233\000\179\000\000\000\000\003P\003\\\000\000\000\000\000\000\000\000\003]\000\000\001\235\000\000\003^\000\000\000\179\000\000\003\243\000\180\003_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\227\006q\002\017\001\235\000\000\000\000\000\000\000\000\000\179\000\000\000\000\001\228\000\000\000\000\000\000\003\244\001\014\000\000\001\230\001\227\000\000\002\017\001\213\000\181\000\000\000\000\000\000\000\179\001\214\000\000\001\228\000\000\002\028\000\000\000\000\003[\000\000\002\030\002\020\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\001\238\000\000\000\000\000\000\000\000\000\212\003\\\000\000\002\019\000\000\002\020\003]\000\000\000\000\001\210\003^\000\000\001\232\001\211\001\238\000\000\003_\001\212\002 \000\183\000\000\000\000\000\000\000\220\000\000\000\181\000\000\000\214\000\000\001\210\000\000\000\000\000\000\001\211\000\185\000\000\000\000\001\212\001\240\000\000\000N\000\000\000\000\001\233\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000N\001\241\000\212\000\000\000\170\001\240\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\183\001\235\001\230\000\000\000\220\000\000\001\213\000\000\000\214\000\000\000\000\000\000\001\214\000\000\000\000\000\185\000\000\001\227\000\000\002\017\000N\000\000\001\230\000\000\000\170\000\179\001\213\000\000\001\228\000\174\000\000\000\000\001\214\000O\000\000\000\000\000\000\000\000\000\164\002\023\000\000\000\000\000\000\000\000\000\172\000O\000\000\000\000\001\232\000\000\000\164\000\000\000\210\000\000\000\000\002\020\000\172\000\000\000\000\002\026\000\000\000\000\000\000\000\000\001\238\000N\000\000\000\000\001\232\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000N\001\233\000\178\000\000\000\170\000\000\000\000\000\000\000O\000\174\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\000\000\172\000\000\001\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\240\000\000\000\000\001\235\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000y\000\000\001\227\000\000\002\017\000\000\001\235\000O\000\000\000\178\000\179\000\000\000\164\001\228\000\210\000\000\000\000\000\000\000\172\000\000\000O\000\000\001\227\000\000\002\017\000\164\000\000\000\210\000\000\000\000\000\179\000\172\000\000\001\228\000\000\000\000\000\000\000\000\000\000\000\000\002\020\000\179\000\000\000N\000\180\000\000\000\000\000\170\002\222\001\238\000\000\000\000\000\174\000\179\000\178\000N\000\180\000\000\000\000\000\170\002\020\000\000\000\000\002a\000\174\000\000\000\000\000\178\000\000\001\238\002k\000\000\000\000\000\000\000\000\000\000\000\181\001\t\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\002d\000\000\000\181\002\239\000\000\000\000\001\240\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000O\000\000\000\000\001\240\000\000\000\164\000\000\000\210\000\212\000\000\000\000\000\172\000O\002 \000\000\000\187\000\000\000\164\001\241\000\210\000\181\000\000\000\000\000\172\000\000\002\251\000\236\000\183\000\000\000\000\000\179\000\220\000\000\000\180\000\000\000\214\003c\000\000\003\003\000\000\000\000\000\000\000\185\000\179\000\000\000\000\000\180\000\178\000\000\000\212\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\002 \000\178\000\000\000\174\000\000\000\000\000\000\000\181\000\000\000\000\000\183\000\000\000\000\002 \000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\002l\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\170\000\000\000\212\002e\000\000\000\000\002f\000\000\000\183\000\000\000\000\000\000\000\220\000O\001\023\000\000\000\214\000\000\000\164\000\000\000\210\000\183\003\n\000\185\000\172\000\220\000\000\000\179\000N\000\214\000\180\000\000\000\170\000\000\000\000\000\000\000\185\000\174\000\000\000\179\000\000\000\000\000\180\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\001 \000\172\002 \000\000\000\000\000\000\000\000\000\178\000\000\000\181\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000N\000\000\000\178\000\212\000\170\000\000\000O\000\000\000\000\000\174\000\000\000\164\000\000\000\210\000\000\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\183\000\000\000\000\000\185\000\220\000N\000\000\000\000\000\214\000\170\000\000\000\000\000\000\000\000\000\174\000\185\000\000\000\000\003\162\000\178\000\000\000\000\000O\000\179\000\000\000\000\000\180\000\164\000\000\000\210\000\000\000\000\000O\000\172\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\003\174\000\000\000\000\002 \000\000\000\179\000\000\000\000\000\180\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\178\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\178\000\000\002 \000\172\000\000\000\000\000\000\000\000\000\212\000\181\000\000\000\000\000\000\000\000\000\000\000N\003\197\000\000\000\000\000\170\003\179\000\000\000\000\000\000\000\171\000\179\000\000\000\183\000\180\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\212\000\178\000N\000\000\000\185\000\000\000\161\001\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\183\000\000\000\000\000\181\000\220\000\000\000\000\000N\000\214\000\000\000\000\000\170\000\000\003\186\000\000\000\185\000\174\000\000\000\179\000\000\000\000\000\180\000\000\003\192\000O\000\000\000\000\000\000\000\179\000\164\000\000\000\180\000\212\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\002 \000\000\000\000\000O\000\000\000\183\000\000\000\181\000\164\000\220\002 \000\000\000\000\000\214\000\165\000\000\000\000\000\181\000\000\000\000\000\185\000\179\000\000\000\000\000\180\000\178\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\000\000\219\000\178\003\199\000\000\000O\000\000\000\183\000\181\000\000\000\164\000\220\000\210\000\000\000\000\000\214\000\172\000\183\000\000\000\000\000\000\000\220\000\185\000\000\000\000\000\214\000\178\000\000\000\000\000N\000\000\000\000\000\185\000\170\000\000\000\000\000\000\000\212\000\174\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000N\000\210\000\178\000\000\000\170\000\172\000\183\000\000\000\000\000\174\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\179\000\170\000\000\000\180\000\178\000\000\000\171\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\000N\000\000\000\000\000\172\000\161\003\023\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\000\000O\000\179\000\000\000\219\000\180\000\164\000\178\000\210\000N\000\187\000\181\000\172\000\170\000\000\000O\000\000\000\000\000\174\000\000\000\164\000\238\000\000\000\000\000\000\004?\000\172\000\000\000\178\000\000\002 \000\000\000\000\000\000\000O\000\000\004\029\000\181\000\000\000\164\000\212\000\179\000\000\000\000\000\180\000\165\000N\000\000\000\178\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\183\000N\000\000\000\178\000\220\000\161\0036\000\212\000\214\000\000\002 \000\000\000\000\000\000\000\000\000\185\000O\000\181\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\183\000\172\004&\000\000\000\220\000\000\000\000\000\179\000\214\000\000\000\180\000\000\000\000\000\000\004A\000\185\000\000\000\000\000\000\000\000\000\212\000\000\000\000\004.\000\000\000\000\000\000\000O\000\179\000\000\000\000\000\180\000\164\000\000\000\210\002 \000N\000\178\000\172\000\183\000\170\000O\000\181\000\220\000\000\000\174\000\164\000\214\000\179\000\000\000\000\000\180\000\165\000\000\000\185\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\179\000\181\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\000\000\178\000\000\000\219\000\000\000\000\000\000\000\000\000\179\000\000\000\181\000\180\000\000\000\000\000N\000\178\000\000\000\183\000\170\000\212\000\000\000\220\000\000\000\174\000\181\000\214\000\000\000\000\000\000\000O\000\000\000\000\000\185\000\000\000\164\000\000\000\210\000\000\000\183\000\212\000\172\000\000\000\220\000\181\000\000\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\187\000\185\000\000\000\000\000\178\000\219\000\000\000\000\000O\004K\000\000\000\240\000\181\000\164\000\179\000\210\000N\000\180\000\000\000\172\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\212\002 \000\000\000\000\000\174\000\000\000\000\000\000\000\181\000N\000\000\000\000\000\000\000\170\000\178\000\000\000\000\000\000\000\174\000\183\000\000\000\000\000\181\000\220\000\000\000\000\000\000\000\214\000\000\006M\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\212\000\000\000\000\000N\000O\000\000\004X\000\170\000\000\000\164\000\000\000\179\000\174\000\000\000\180\000\172\000N\000\000\000\000\000\183\000\170\000\000\000\000\000\220\000O\000\174\000\000\000\214\000\000\000\164\000\000\000\210\000\000\000\000\000\185\000\172\006\178\000\000\000O\002 \000\000\000\000\000\000\000\164\000\000\000\210\000\181\000\000\000\000\000\172\000\000\000\178\000\000\000\000\000N\000\000\000\000\004]\000\170\000\000\000\000\000\000\000\179\000\174\000\000\000\180\000\000\000\000\000\000\000O\000\000\000\178\000\000\000\000\000\164\000\212\000\210\000\000\000\000\000\000\000\172\000\000\000O\000\000\000\000\000\178\000\000\000\164\000\000\000\210\002 \000\000\000\000\000\172\000\183\000N\000\000\000\181\000\220\000\170\000\000\000\000\000\214\000\000\000\174\000\000\000\000\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\178\000\174\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\212\000\210\000\000\000\178\000\000\000\172\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\004d\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000O\000\000\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\179\000\181\000\172\000\180\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\002 \000\172\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\006N\000\000\000\000\000\179\000\000\000\000\000\180\000\181\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\187\000\212\000\178\000\000\000N\000\000\000\000\000\000\000\161\0039\001\002\000\242\000\000\000\000\000\000\000\212\000\000\000\181\000\000\000\000\000\183\000\000\000\000\006N\000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\000\000\000\179\000\183\000\185\000\180\000\000\000\220\000\000\000\000\000N\000\214\000\000\000\000\000\170\000\212\000\000\000\000\000\185\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\000\001\016\000N\000N\000\000\000\183\000\170\000\170\000\181\000\220\000O\000\174\000\174\000\214\000\179\000\164\000\000\000\180\000\183\000N\000\185\000\165\000\220\000\170\000\000\000\000\000\214\000\179\000\174\000\000\000\180\000\000\000\000\000\185\000\000\000\000\000N\000\212\000\000\000\000\000\161\003<\001\140\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\001\157\000\183\000\178\000\172\000\000\000\220\000\000\000\181\000\000\000\214\000\000\000\000\000\000\000O\000O\000\000\000\185\000\000\000\164\000\164\000\210\000\210\000N\000\212\000\172\000\172\000\170\000\000\000\000\000\000\000O\000\174\000\000\000\000\000\000\000\164\000\212\000\210\000\000\000\178\000N\000\172\000\183\000\000\000\170\000\000\000\220\000O\000\000\000\174\000\214\000\000\000\164\000\000\000\000\000\183\000\000\000\185\000\165\000\220\000\178\000\178\000\000\000\214\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\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000N\000\210\000\000\000\000\000\170\000\172\000\000\000\000\000\000\000\174\000\181\000\000\000\179\000\000\000\000\000\180\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\178\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\179\000\000\000\180\000\180\000\000\000\000\001\177\000\178\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\179\001\221\000\000\000\000\000\000\000O\000\179\000\181\000\181\000\180\000\164\000\000\000\210\000\000\000\000\000\212\000\172\002\205\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\183\000\170\000\212\000\212\000\220\000\000\000\174\000\181\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\000\000\000\178\000\212\000\000\000\183\000\183\000\000\000\000\000\220\000\220\000\000\000\000\000\214\000\214\000\179\000\000\000\000\000\180\000\178\000\185\000\185\000\183\000\000\000\000\002\211\000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000N\000\210\000\000\000\000\000\170\000\172\000\000\000\000\000\212\000\174\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000N\000\000\000\212\000\183\000\170\000\000\000\000\000\220\000\000\000\174\000\179\000\214\000\000\000\180\000\000\000\000\000\000\000\178\000\185\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000\000\000\185\000\000\003\031\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\000O\000\172\000\000\003#\000\000\000\164\000\000\000\210\000\000\000\000\000\181\000\172\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\212\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\178\000\000\000\212\000\000\000\183\000N\000\000\000\000\000\220\000\170\000\178\000\000\000\214\000\179\000\171\000\000\000\180\000\000\000\000\000\185\000\000\000\183\000\000\000\000\000\178\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000O\000\000\000\000\000\000\000N\000\164\000\212\000\000\000\170\000\000\000\000\000\172\000\000\000\174\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\183\000\000\000\180\000\178\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\003\148\000\000\000\000\000\000\000O\000\178\000\000\000\181\000\000\000\164\003\230\000\210\000\000\000\000\000O\000\172\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\004\180\000\172\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000N\000\210\000\212\000\000\000\170\000\172\000\000\000\000\000\000\000\174\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\178\000\000\000\174\000\000\000\183\000\000\000\000\000\000\000\220\000\212\000\178\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\179\000\000\000\214\000\180\000\178\000\000\000\000\000\000\000\183\000\185\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000\000\000\000\000\000\000\000\004\213\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000N\000O\000\172\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000\000\000\000\000\172\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\212\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\178\000\000\000\180\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\178\000\220\000\000\000\179\000\000\000\214\000\180\004\233\000\000\000\000\000\000\000\000\000\185\000\000\000\181\000\000\000\187\004\235\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000\244\000\000\000\172\000\000\004\237\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\183\000\000\000N\000\178\000\220\000\212\000\170\000\000\000\214\000\000\000\183\000\171\000\000\000\179\000\220\000\185\000\180\000\000\000\214\000\000\000\000\000\000\000\000\000\179\000\183\000\185\000\180\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\004\243\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\005\004\000\000\000\000\000\000\000O\000\172\000\000\000\181\000\000\000\164\000\000\000\000\000\000\000\000\000N\000\172\000\000\000O\000\170\000\000\000\000\000\000\000\164\000\171\000\000\000\000\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\179\000N\000\000\000\180\000\178\000\170\000\000\000\000\000\183\000\000\000\171\000\000\000\220\000\000\000\178\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\000\000\000\000\214\000\178\005\018\000\000\000N\000\000\000\000\000\185\000\170\000\181\000\000\000\000\000\000\000\171\000\000\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\000\000\171\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\212\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\000\000N\000\000\000\000\000\172\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\000\000\220\000\000\000\179\000\178\000\214\000\180\000\000\000\000\000\000\000O\000\000\000\185\000\179\000\000\000\164\000\180\000\000\000\000\000\000\000\000\000\172\000O\000\000\000\000\000\000\000\179\000\164\000\178\000\180\000\000\000\000\000O\000\172\000\000\000\000\001d\000\164\000\181\000\000\000\000\000\000\000\000\000\172\000\000\000\000\003e\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\178\000\000\000\000\000\164\000\181\000\000\000\000\000\000\000\000\000\172\000\212\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000N\000\178\000\000\000\000\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\179\000\218\000\000\000\180\000\000\000\214\000\000\000\183\000\000\000\000\000N\000\218\000\185\000\178\000\170\000\214\000\000\000\000\000\000\000\171\000\187\000\000\000\185\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\246\000\000\000\000\000\000\000\181\000\000\000\000\000N\000\000\000N\000\000\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\000\000\000\000\179\000N\000O\000\180\000\000\000\170\000\181\000\164\000\000\000\000\000\171\000\000\000\179\000\172\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\000\000\000\000\000\164\000\000\000\187\000\000\000\000\000\000\000\172\000\181\000\000\000\000\000\000\000\000\000\000\000\248\000\000\000\000\000\000\000\179\000\000\000\181\000\180\000\178\000\000\000O\000\000\000O\000\187\000\000\000\164\000\181\000\164\000N\000\000\000\000\000\172\000\170\000\172\000\250\000\000\000O\000\171\000\000\000\178\000\000\000\164\000\000\000\000\000\000\000\000\000\000\000\172\000\000\000\181\000\000\000N\000\187\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\252\000\187\000\000\000\000\000\178\000N\000\178\000\000\000\000\000\170\000\000\000\187\001`\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\178\000\000\001f\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000O\000\000\000\170\000\187\000\000\000\164\000\000\000\171\000\000\000\179\000\000\000\172\000\180\000N\001h\000\000\000\000\000\170\000\000\000\000\000N\000\000\000\171\000O\000\170\000\000\000\000\000\000\000\164\000\171\000\179\000\000\000\000\000\180\000\172\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\181\000\164\000\000\000\178\000\000\000\000\000N\000\172\000\000\000\000\000\170\000\000\000\000\000\000\000\179\000\171\000\179\000\180\000\000\000\180\000O\000\181\000\000\000\000\000\000\000\164\000\178\000\000\000\000\000\000\000\179\000\172\000N\000\180\000\000\000O\000\170\000\000\000\000\000\000\000\164\000\171\000O\000\178\000\000\000\000\000\172\000\164\000\187\000\181\000\000\000\181\000\000\000\172\000\000\000\000\000\000\000\000\000\000\001j\000\000\000\000\000\000\000\000\000\000\000\181\000N\000\178\000\000\000\187\000\170\000\000\000O\000\000\000\000\000\171\000\000\000\164\000\000\000\000\001l\000\000\000\178\000\172\000\000\000\000\000\000\000\000\000\179\000\178\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\187\000O\000\187\000\000\000\000\000\000\000\164\000\000\000\000\000\000\000\000\001n\000\172\001p\000\179\000\000\000\187\000\180\000\000\000\000\000\000\000N\000\178\000\000\000\000\000\170\000\181\001r\000\000\000\000\000\171\000\179\000\000\000\000\000\180\000O\000\000\000\000\000N\000\000\000\164\000\000\000\170\000\000\000\000\000\000\000\172\000\171\000\178\000\181\000N\000\000\000\000\000\000\000\170\000\179\000\000\000\000\000\180\000\171\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\187\000N\000\000\000\179\000\000\000\170\000\180\000\000\000\178\000\000\000\171\001t\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\000\000\000\000\000\000\187\000\172\000\000\000\000\000\000\000\000\000\000\000O\000\181\000\000\000\179\001v\000\164\000\180\000\000\000\181\000\000\000\187\000\172\000O\000p\000\000\000\000\000N\000\164\000\000\000\000\000\170\001x\000y\000\172\000N\000\171\000\000\000\000\000\170\000\179\000\178\000\000\000\180\000\171\000\187\000\000\000\000\000O\000\181\000\000\000\000\000\000\000\164\000\000\000\000\001z\000\000\000\178\000\172\000\187\000\000\000\000\000\000\000N\000\000\000\000\000\187\000\170\000\000\000\178\001|\000\000\000\171\000\179\000\181\000\000\000\180\001~\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\000\000\000\000O\000\000\000\178\002a\000\187\000\164\000\000\000\000\000O\000\000\002k\000\172\000\000\000\164\000\000\001\243\000\181\001\t\000\000\000\172\000\000\000\000\000\000\000N\000\000\000\000\002d\000\170\000\000\000\000\000\187\000\000\000\171\000\179\000\000\000N\000\180\000O\000\000\000\170\000\000\001\245\000\164\000\000\000\171\000\000\000\000\000\178\000\172\000\000\000\179\000\000\000O\000\180\000\000\000\178\000\000\000\164\000\000\000\000\000\000\000\000\000\179\000\172\000\187\000\180\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\001\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\178\000\181\000\000\000\179\000\000\000O\000\180\000\000\000\000\000\000\000\164\000\000\000\000\000\181\000\000\000\178\000\172\000O\000\000\000\000\000\000\000N\000\164\000\000\000\000\000\170\000\000\000\000\000\172\000\000\000\171\000\000\000\187\000\000\000\000\000N\000\000\000\000\000\181\000\170\000\000\000\000\000\000\001\249\000\171\002l\000\000\000\000\000\179\000\187\000\000\000\180\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\180\001\251\000\187\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\004\025\000\000\001\253\002e\000\000\000\000\002f\000\000\000\000\000\000\000\000\000\000\000\000\000\181\001\023\000\179\000\187\000O\000\180\000\000\000N\000\181\000\164\000\000\000\170\000\000\000\000\001\255\000\172\000\171\000\179\000O\000\000\000\180\000\000\000N\000\164\000\000\000\000\000\170\000\000\000\000\000\172\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\181\000N\000\000\001 \000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\187\000\000\000\000\000\178\000\181\000\000\000\179\000\000\000\187\000\180\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\178\000\179\002\003\000p\000\180\000\000\000\000\000\000\000O\000\000\000\000\000\000\000y\000\164\000\000\000\000\000\000\000\000\000\000\000\172\000\187\000\000\000\000\000O\000\181\000\000\000\000\000\000\000\164\000\000\000\000\002\005\000\000\000\000\000\172\000\187\000\181\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\002\007\000\171\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\178\000\000\000N\000\000\000N\000\000\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\178\000\179\000\187\000\000\000\180\002a\000\000\000\000\000p\000\000\000\000\000\000\002k\002\t\000\187\000\179\000\178\000y\000\180\001\t\000N\000\000\000\000\000\000\000\170\002\011\000\000\000\000\002d\000\171\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\000\000N\000\000\000\000\000\172\000\170\000\000\000\000\000\000\000\181\000\171\000\000\000O\000\000\000O\000\000\000\000\000\164\000\000\000\164\000\000\000\000\000N\000\172\000\000\000\172\000\170\000\000\000\000\000\179\000\000\000\171\000\180\000\000\000\000\000\000\000\000\000\000\000\000\002a\000\178\000\000\000\000\000\187\000\179\000O\002k\000\180\000\000\000\000\000\164\000\000\000\000\001\t\002\r\000\000\000\172\000\187\000\000\000\178\000\179\000\178\002d\000\180\000\181\000N\000\000\000O\003a\000\170\000\000\000\000\000\164\000\000\000\171\000\000\000\000\000\000\000\172\000\181\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000O\000\000\002l\000\171\000\178\000\164\000\000\000\181\000N\000\000\000N\000\172\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\000\000\000\000\000\000\187\000\000\000\178\004!\000\000\000\000\002e\000\000\000\000\002f\000\000\003g\000\000\000\179\000\000\000\187\000\180\001\023\000\000\000O\000\000\000\000\000\000\000\178\000\164\000\000\003i\000\000\000\000\000\000\000\172\000\187\000\179\000\000\000\179\000\180\000O\000\180\000\000\000\000\000\000\000\164\003k\000\000\000\000\000\000\000\000\000\172\000\181\000\000\000O\000\000\000O\002l\000\000\000\164\001 \000\164\000\000\000\000\000\000\000\172\000\000\000\172\000\000\000\179\000\178\000\181\000\180\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004T\000\000\000\000\002e\000\000\000\178\002f\000\000\000\000\000\179\000\000\000\000\000\180\000\000\001\023\000\000\000\000\000\000\000\187\000\178\000\000\000\178\000\181\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\187\000\000\000\187\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\003o\000\000\003q\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\181\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\000\000\187\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\179\000\000\000\179\000\180\000\181\000\180\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\181\000\000\000\000\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\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\000\000\000\187\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\187\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\000\000\003\127")) let semantic_action = [| @@ -1757,7 +1757,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 2331 "parser_cocci_menhir.mly" +# 2338 "parser_cocci_menhir.mly" ( Ast0.set_arg_exp _1 ) # 1763 "parser_cocci_menhir.ml" in @@ -1785,7 +1785,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 2333 "parser_cocci_menhir.mly" +# 2340 "parser_cocci_menhir.mly" ( let (nm,lenname,pure,clt) = _1 in let nm = P.clt2mcode nm clt in let lenname = @@ -1816,7 +1816,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 2342 "parser_cocci_menhir.mly" +# 2349 "parser_cocci_menhir.mly" ( Ast0.set_arg_exp(Ast0.wrap(Ast0.TypeExp(_1))) ) # 1822 "parser_cocci_menhir.ml" in @@ -1827,6 +1827,122 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let ty : 'tv_signable_types = Obj.magic ty in + let r : ( +# 119 "parser_cocci_menhir.mly" + (Data.clt) +# 1849 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_all_basic_types = +# 718 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 1856 "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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + 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; + }; + } = _menhir_stack in + let ty : 'tv_signable_types = Obj.magic ty in + let r : ( +# 119 "parser_cocci_menhir.mly" + (Data.clt) +# 1883 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_all_basic_types = +# 720 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 1890 "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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ty : 'tv_signable_types = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_all_basic_types = +# 721 "parser_cocci_menhir.mly" + ( ty ) +# 1914 "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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ty : 'tv_non_signable_types = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_all_basic_types = +# 722 "parser_cocci_menhir.mly" + ( ty ) +# 1938 "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 { @@ -1838,9 +1954,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 2378 "parser_cocci_menhir.mly" +# 2385 "parser_cocci_menhir.mly" ( Ast.WhenAny ) -# 1844 "parser_cocci_menhir.ml" +# 1960 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1860,9 +1976,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 2379 "parser_cocci_menhir.mly" +# 2386 "parser_cocci_menhir.mly" ( Ast.WhenStrict ) -# 1866 "parser_cocci_menhir.ml" +# 1982 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1882,9 +1998,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 2380 "parser_cocci_menhir.mly" +# 2387 "parser_cocci_menhir.mly" ( Ast.WhenForall ) -# 1888 "parser_cocci_menhir.ml" +# 2004 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1904,9 +2020,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 2381 "parser_cocci_menhir.mly" +# 2388 "parser_cocci_menhir.mly" ( Ast.WhenExists ) -# 1910 "parser_cocci_menhir.ml" +# 2026 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1928,9 +2044,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1552 "parser_cocci_menhir.mly" +# 1559 "parser_cocci_menhir.mly" ( _1 ) -# 1934 "parser_cocci_menhir.ml" +# 2050 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -1962,15 +2078,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 171 "parser_cocci_menhir.mly" (Data.clt) -# 1966 "parser_cocci_menhir.ml" +# 2082 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1554 "parser_cocci_menhir.mly" +# 1561 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 1974 "parser_cocci_menhir.ml" +# 2090 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2002,15 +2118,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 169 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2006 "parser_cocci_menhir.ml" +# 2122 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1556 "parser_cocci_menhir.mly" +# 1563 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2014 "parser_cocci_menhir.ml" +# 2130 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2042,15 +2158,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 2046 "parser_cocci_menhir.ml" +# 2162 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1558 "parser_cocci_menhir.mly" +# 1565 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 2054 "parser_cocci_menhir.ml" +# 2170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2082,15 +2198,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 2086 "parser_cocci_menhir.ml" +# 2202 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1560 "parser_cocci_menhir.mly" +# 1567 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 2094 "parser_cocci_menhir.ml" +# 2210 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2122,15 +2238,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2126 "parser_cocci_menhir.ml" +# 2242 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1562 "parser_cocci_menhir.mly" +# 1569 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2134 "parser_cocci_menhir.ml" +# 2250 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2162,15 +2278,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2166 "parser_cocci_menhir.ml" +# 2282 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1564 "parser_cocci_menhir.mly" +# 1571 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2174 "parser_cocci_menhir.ml" +# 2290 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2202,15 +2318,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 167 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 2206 "parser_cocci_menhir.ml" +# 2322 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1566 "parser_cocci_menhir.mly" +# 1573 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 2214 "parser_cocci_menhir.ml" +# 2330 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2242,15 +2358,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 2246 "parser_cocci_menhir.ml" +# 2362 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1568 "parser_cocci_menhir.mly" +# 1575 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 2254 "parser_cocci_menhir.ml" +# 2370 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2282,15 +2398,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 2286 "parser_cocci_menhir.ml" +# 2402 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1570 "parser_cocci_menhir.mly" +# 1577 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 2294 "parser_cocci_menhir.ml" +# 2410 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2322,15 +2438,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 165 "parser_cocci_menhir.mly" (Data.clt) -# 2326 "parser_cocci_menhir.ml" +# 2442 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1572 "parser_cocci_menhir.mly" +# 1579 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 2334 "parser_cocci_menhir.ml" +# 2450 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2362,15 +2478,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 163 "parser_cocci_menhir.mly" (Data.clt) -# 2366 "parser_cocci_menhir.ml" +# 2482 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1574 "parser_cocci_menhir.mly" +# 1581 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 2374 "parser_cocci_menhir.ml" +# 2490 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2402,15 +2518,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 164 "parser_cocci_menhir.mly" (Data.clt) -# 2406 "parser_cocci_menhir.ml" +# 2522 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1576 "parser_cocci_menhir.mly" +# 1583 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 2414 "parser_cocci_menhir.ml" +# 2530 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2442,15 +2558,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 162 "parser_cocci_menhir.mly" (Data.clt) -# 2446 "parser_cocci_menhir.ml" +# 2562 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1578 "parser_cocci_menhir.mly" +# 1585 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 2454 "parser_cocci_menhir.ml" +# 2570 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2482,15 +2598,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 161 "parser_cocci_menhir.mly" (Data.clt) -# 2486 "parser_cocci_menhir.ml" +# 2602 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1580 "parser_cocci_menhir.mly" +# 1587 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 2494 "parser_cocci_menhir.ml" +# 2610 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2512,9 +2628,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1552 "parser_cocci_menhir.mly" +# 1559 "parser_cocci_menhir.mly" ( _1 ) -# 2518 "parser_cocci_menhir.ml" +# 2634 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2546,15 +2662,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 171 "parser_cocci_menhir.mly" (Data.clt) -# 2550 "parser_cocci_menhir.ml" +# 2666 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1554 "parser_cocci_menhir.mly" +# 1561 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 2558 "parser_cocci_menhir.ml" +# 2674 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2586,15 +2702,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 169 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2590 "parser_cocci_menhir.ml" +# 2706 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1556 "parser_cocci_menhir.mly" +# 1563 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2598 "parser_cocci_menhir.ml" +# 2714 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2626,15 +2742,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 2630 "parser_cocci_menhir.ml" +# 2746 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1558 "parser_cocci_menhir.mly" +# 1565 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 2638 "parser_cocci_menhir.ml" +# 2754 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2666,15 +2782,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 2670 "parser_cocci_menhir.ml" +# 2786 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1560 "parser_cocci_menhir.mly" +# 1567 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 2678 "parser_cocci_menhir.ml" +# 2794 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2706,15 +2822,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2710 "parser_cocci_menhir.ml" +# 2826 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1562 "parser_cocci_menhir.mly" +# 1569 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2718 "parser_cocci_menhir.ml" +# 2834 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2746,15 +2862,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 2750 "parser_cocci_menhir.ml" +# 2866 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1564 "parser_cocci_menhir.mly" +# 1571 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 2758 "parser_cocci_menhir.ml" +# 2874 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2786,15 +2902,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 167 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 2790 "parser_cocci_menhir.ml" +# 2906 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1566 "parser_cocci_menhir.mly" +# 1573 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 2798 "parser_cocci_menhir.ml" +# 2914 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2826,15 +2942,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 2830 "parser_cocci_menhir.ml" +# 2946 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1568 "parser_cocci_menhir.mly" +# 1575 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 2838 "parser_cocci_menhir.ml" +# 2954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2866,15 +2982,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 2870 "parser_cocci_menhir.ml" +# 2986 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1570 "parser_cocci_menhir.mly" +# 1577 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 2878 "parser_cocci_menhir.ml" +# 2994 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2906,15 +3022,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 165 "parser_cocci_menhir.mly" (Data.clt) -# 2910 "parser_cocci_menhir.ml" +# 3026 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1572 "parser_cocci_menhir.mly" +# 1579 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 2918 "parser_cocci_menhir.ml" +# 3034 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2946,15 +3062,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 163 "parser_cocci_menhir.mly" (Data.clt) -# 2950 "parser_cocci_menhir.ml" +# 3066 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1574 "parser_cocci_menhir.mly" +# 1581 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 2958 "parser_cocci_menhir.ml" +# 3074 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -2986,15 +3102,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 164 "parser_cocci_menhir.mly" (Data.clt) -# 2990 "parser_cocci_menhir.ml" +# 3106 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1576 "parser_cocci_menhir.mly" +# 1583 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 2998 "parser_cocci_menhir.ml" +# 3114 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3026,15 +3142,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 162 "parser_cocci_menhir.mly" (Data.clt) -# 3030 "parser_cocci_menhir.ml" +# 3146 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1578 "parser_cocci_menhir.mly" +# 1585 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 3038 "parser_cocci_menhir.ml" +# 3154 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3066,15 +3182,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 161 "parser_cocci_menhir.mly" (Data.clt) -# 3070 "parser_cocci_menhir.ml" +# 3186 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1580 "parser_cocci_menhir.mly" +# 1587 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 3078 "parser_cocci_menhir.ml" +# 3194 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3096,9 +3212,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1552 "parser_cocci_menhir.mly" +# 1559 "parser_cocci_menhir.mly" ( _1 ) -# 3102 "parser_cocci_menhir.ml" +# 3218 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3130,15 +3246,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 171 "parser_cocci_menhir.mly" (Data.clt) -# 3134 "parser_cocci_menhir.ml" +# 3250 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1554 "parser_cocci_menhir.mly" +# 1561 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 3142 "parser_cocci_menhir.ml" +# 3258 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3170,15 +3286,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 169 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3174 "parser_cocci_menhir.ml" +# 3290 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1556 "parser_cocci_menhir.mly" +# 1563 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3182 "parser_cocci_menhir.ml" +# 3298 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3210,15 +3326,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 3214 "parser_cocci_menhir.ml" +# 3330 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1558 "parser_cocci_menhir.mly" +# 1565 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 3222 "parser_cocci_menhir.ml" +# 3338 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3250,15 +3366,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 3254 "parser_cocci_menhir.ml" +# 3370 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1560 "parser_cocci_menhir.mly" +# 1567 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 3262 "parser_cocci_menhir.ml" +# 3378 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3290,15 +3406,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3294 "parser_cocci_menhir.ml" +# 3410 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1562 "parser_cocci_menhir.mly" +# 1569 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3302 "parser_cocci_menhir.ml" +# 3418 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3330,15 +3446,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3334 "parser_cocci_menhir.ml" +# 3450 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1564 "parser_cocci_menhir.mly" +# 1571 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3342 "parser_cocci_menhir.ml" +# 3458 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3370,15 +3486,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 167 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 3374 "parser_cocci_menhir.ml" +# 3490 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1566 "parser_cocci_menhir.mly" +# 1573 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 3382 "parser_cocci_menhir.ml" +# 3498 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3410,15 +3526,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 3414 "parser_cocci_menhir.ml" +# 3530 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1568 "parser_cocci_menhir.mly" +# 1575 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 3422 "parser_cocci_menhir.ml" +# 3538 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3450,15 +3566,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 3454 "parser_cocci_menhir.ml" +# 3570 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1570 "parser_cocci_menhir.mly" +# 1577 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 3462 "parser_cocci_menhir.ml" +# 3578 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3490,15 +3606,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 165 "parser_cocci_menhir.mly" (Data.clt) -# 3494 "parser_cocci_menhir.ml" +# 3610 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1572 "parser_cocci_menhir.mly" +# 1579 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 3502 "parser_cocci_menhir.ml" +# 3618 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3530,15 +3646,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 163 "parser_cocci_menhir.mly" (Data.clt) -# 3534 "parser_cocci_menhir.ml" +# 3650 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1574 "parser_cocci_menhir.mly" +# 1581 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 3542 "parser_cocci_menhir.ml" +# 3658 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3570,15 +3686,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 164 "parser_cocci_menhir.mly" (Data.clt) -# 3574 "parser_cocci_menhir.ml" +# 3690 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1576 "parser_cocci_menhir.mly" +# 1583 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 3582 "parser_cocci_menhir.ml" +# 3698 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3610,15 +3726,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 162 "parser_cocci_menhir.mly" (Data.clt) -# 3614 "parser_cocci_menhir.ml" +# 3730 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1578 "parser_cocci_menhir.mly" +# 1585 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 3622 "parser_cocci_menhir.ml" +# 3738 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3650,15 +3766,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 161 "parser_cocci_menhir.mly" (Data.clt) -# 3654 "parser_cocci_menhir.ml" +# 3770 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1580 "parser_cocci_menhir.mly" +# 1587 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 3662 "parser_cocci_menhir.ml" +# 3778 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3680,9 +3796,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1552 "parser_cocci_menhir.mly" +# 1559 "parser_cocci_menhir.mly" ( _1 ) -# 3686 "parser_cocci_menhir.ml" +# 3802 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3714,15 +3830,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 171 "parser_cocci_menhir.mly" (Data.clt) -# 3718 "parser_cocci_menhir.ml" +# 3834 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1554 "parser_cocci_menhir.mly" +# 1561 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 3726 "parser_cocci_menhir.ml" +# 3842 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3754,15 +3870,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 169 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3758 "parser_cocci_menhir.ml" +# 3874 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1556 "parser_cocci_menhir.mly" +# 1563 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3766 "parser_cocci_menhir.ml" +# 3882 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3794,15 +3910,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 3798 "parser_cocci_menhir.ml" +# 3914 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1558 "parser_cocci_menhir.mly" +# 1565 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 3806 "parser_cocci_menhir.ml" +# 3922 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3834,15 +3950,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 3838 "parser_cocci_menhir.ml" +# 3954 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1560 "parser_cocci_menhir.mly" +# 1567 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 3846 "parser_cocci_menhir.ml" +# 3962 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3874,15 +3990,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3878 "parser_cocci_menhir.ml" +# 3994 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1562 "parser_cocci_menhir.mly" +# 1569 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3886 "parser_cocci_menhir.ml" +# 4002 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3914,15 +4030,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 3918 "parser_cocci_menhir.ml" +# 4034 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1564 "parser_cocci_menhir.mly" +# 1571 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 3926 "parser_cocci_menhir.ml" +# 4042 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3954,15 +4070,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 167 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 3958 "parser_cocci_menhir.ml" +# 4074 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1566 "parser_cocci_menhir.mly" +# 1573 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 3966 "parser_cocci_menhir.ml" +# 4082 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -3994,15 +4110,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 3998 "parser_cocci_menhir.ml" +# 4114 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1568 "parser_cocci_menhir.mly" +# 1575 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 4006 "parser_cocci_menhir.ml" +# 4122 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4034,15 +4150,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 4038 "parser_cocci_menhir.ml" +# 4154 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1570 "parser_cocci_menhir.mly" +# 1577 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 4046 "parser_cocci_menhir.ml" +# 4162 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4074,15 +4190,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 165 "parser_cocci_menhir.mly" (Data.clt) -# 4078 "parser_cocci_menhir.ml" +# 4194 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1572 "parser_cocci_menhir.mly" +# 1579 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 4086 "parser_cocci_menhir.ml" +# 4202 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4114,15 +4230,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 163 "parser_cocci_menhir.mly" (Data.clt) -# 4118 "parser_cocci_menhir.ml" +# 4234 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1574 "parser_cocci_menhir.mly" +# 1581 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 4126 "parser_cocci_menhir.ml" +# 4242 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4154,15 +4270,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 164 "parser_cocci_menhir.mly" (Data.clt) -# 4158 "parser_cocci_menhir.ml" +# 4274 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1576 "parser_cocci_menhir.mly" +# 1583 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 4166 "parser_cocci_menhir.ml" +# 4282 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4194,15 +4310,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 162 "parser_cocci_menhir.mly" (Data.clt) -# 4198 "parser_cocci_menhir.ml" +# 4314 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1578 "parser_cocci_menhir.mly" +# 1585 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 4206 "parser_cocci_menhir.ml" +# 4322 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4234,15 +4350,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 161 "parser_cocci_menhir.mly" (Data.clt) -# 4238 "parser_cocci_menhir.ml" +# 4354 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1580 "parser_cocci_menhir.mly" +# 1587 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) -# 4246 "parser_cocci_menhir.ml" +# 4362 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4264,9 +4380,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_bis = -# 1585 "parser_cocci_menhir.mly" +# 1592 "parser_cocci_menhir.mly" ( _1 ) -# 4270 "parser_cocci_menhir.ml" +# 4386 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4298,15 +4414,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 171 "parser_cocci_menhir.mly" (Data.clt) -# 4302 "parser_cocci_menhir.ml" +# 4418 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1587 "parser_cocci_menhir.mly" +# 1594 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) -# 4310 "parser_cocci_menhir.ml" +# 4426 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4338,15 +4454,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 169 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 4342 "parser_cocci_menhir.ml" +# 4458 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1589 "parser_cocci_menhir.mly" +# 1596 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 4350 "parser_cocci_menhir.ml" +# 4466 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4378,15 +4494,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 4382 "parser_cocci_menhir.ml" +# 4498 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1591 "parser_cocci_menhir.mly" +# 1598 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) -# 4390 "parser_cocci_menhir.ml" +# 4506 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4418,15 +4534,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 4422 "parser_cocci_menhir.ml" +# 4538 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1593 "parser_cocci_menhir.mly" +# 1600 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) -# 4430 "parser_cocci_menhir.ml" +# 4546 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4458,15 +4574,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 4462 "parser_cocci_menhir.ml" +# 4578 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1595 "parser_cocci_menhir.mly" +# 1602 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 4470 "parser_cocci_menhir.ml" +# 4586 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4498,15 +4614,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 168 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 4502 "parser_cocci_menhir.ml" +# 4618 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1597 "parser_cocci_menhir.mly" +# 1604 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) -# 4510 "parser_cocci_menhir.ml" +# 4626 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4538,15 +4654,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 167 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 4542 "parser_cocci_menhir.ml" +# 4658 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1599 "parser_cocci_menhir.mly" +# 1606 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) -# 4550 "parser_cocci_menhir.ml" +# 4666 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4578,15 +4694,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 4582 "parser_cocci_menhir.ml" +# 4698 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1601 "parser_cocci_menhir.mly" +# 1608 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) -# 4590 "parser_cocci_menhir.ml" +# 4706 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4618,15 +4734,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 166 "parser_cocci_menhir.mly" (Data.clt) -# 4622 "parser_cocci_menhir.ml" +# 4738 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1603 "parser_cocci_menhir.mly" +# 1610 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) -# 4630 "parser_cocci_menhir.ml" +# 4746 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4658,15 +4774,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 165 "parser_cocci_menhir.mly" (Data.clt) -# 4662 "parser_cocci_menhir.ml" +# 4778 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1605 "parser_cocci_menhir.mly" +# 1612 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) -# 4670 "parser_cocci_menhir.ml" +# 4786 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4698,15 +4814,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 163 "parser_cocci_menhir.mly" (Data.clt) -# 4702 "parser_cocci_menhir.ml" +# 4818 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1607 "parser_cocci_menhir.mly" +# 1614 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) -# 4710 "parser_cocci_menhir.ml" +# 4826 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4738,15 +4854,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 164 "parser_cocci_menhir.mly" (Data.clt) -# 4742 "parser_cocci_menhir.ml" +# 4858 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1609 "parser_cocci_menhir.mly" +# 1616 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) -# 4750 "parser_cocci_menhir.ml" +# 4866 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4778,15 +4894,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 162 "parser_cocci_menhir.mly" (Data.clt) -# 4782 "parser_cocci_menhir.ml" +# 4898 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_arith_expr_bis = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_bis = -# 1611 "parser_cocci_menhir.mly" +# 1618 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) -# 4790 "parser_cocci_menhir.ml" +# 4906 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4806,9 +4922,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arity = -# 628 "parser_cocci_menhir.mly" +# 629 "parser_cocci_menhir.mly" ( Ast.UNIQUE ) -# 4812 "parser_cocci_menhir.ml" +# 4928 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4828,9 +4944,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arity = -# 629 "parser_cocci_menhir.mly" +# 630 "parser_cocci_menhir.mly" ( Ast.OPT ) -# 4834 "parser_cocci_menhir.ml" +# 4950 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4850,9 +4966,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arity = -# 630 "parser_cocci_menhir.mly" +# 631 "parser_cocci_menhir.mly" ( Ast.MULTI ) -# 4856 "parser_cocci_menhir.ml" +# 4972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4867,9 +4983,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_arity = -# 631 "parser_cocci_menhir.mly" +# 632 "parser_cocci_menhir.mly" ( Ast.NONE ) -# 4873 "parser_cocci_menhir.ml" +# 4989 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4900,20 +5016,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r : ( # 174 "parser_cocci_menhir.mly" (Data.clt) -# 4904 "parser_cocci_menhir.ml" +# 5020 "parser_cocci_menhir.ml" ) = Obj.magic r in let i : 'tv_option_eexpr_ = Obj.magic i in let l : ( # 174 "parser_cocci_menhir.mly" (Data.clt) -# 4910 "parser_cocci_menhir.ml" +# 5026 "parser_cocci_menhir.ml" ) = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_array_dec = -# 1341 "parser_cocci_menhir.mly" +# 1348 "parser_cocci_menhir.mly" ( (l,i,r) ) -# 4917 "parser_cocci_menhir.ml" +# 5033 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4935,9 +5051,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1523 "parser_cocci_menhir.mly" +# 1530 "parser_cocci_menhir.mly" ( _1 ) -# 4941 "parser_cocci_menhir.ml" +# 5057 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -4969,17 +5085,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 180 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 4973 "parser_cocci_menhir.ml" +# 5089 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1525 "parser_cocci_menhir.mly" +# 1532 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 4983 "parser_cocci_menhir.ml" +# 5099 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5011,17 +5127,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 5015 "parser_cocci_menhir.ml" +# 5131 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1529 "parser_cocci_menhir.mly" +# 1536 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 5025 "parser_cocci_menhir.ml" +# 5141 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5043,9 +5159,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1523 "parser_cocci_menhir.mly" +# 1530 "parser_cocci_menhir.mly" ( _1 ) -# 5049 "parser_cocci_menhir.ml" +# 5165 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5077,17 +5193,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 180 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 5081 "parser_cocci_menhir.ml" +# 5197 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1525 "parser_cocci_menhir.mly" +# 1532 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 5091 "parser_cocci_menhir.ml" +# 5207 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5119,17 +5235,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 5123 "parser_cocci_menhir.ml" +# 5239 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1529 "parser_cocci_menhir.mly" +# 1536 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 5133 "parser_cocci_menhir.ml" +# 5249 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5151,9 +5267,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1523 "parser_cocci_menhir.mly" +# 1530 "parser_cocci_menhir.mly" ( _1 ) -# 5157 "parser_cocci_menhir.ml" +# 5273 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5185,17 +5301,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 180 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 5189 "parser_cocci_menhir.ml" +# 5305 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1525 "parser_cocci_menhir.mly" +# 1532 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 5199 "parser_cocci_menhir.ml" +# 5315 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5227,17 +5343,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 5231 "parser_cocci_menhir.ml" +# 5347 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1529 "parser_cocci_menhir.mly" +# 1536 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 5241 "parser_cocci_menhir.ml" +# 5357 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5259,9 +5375,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_bis = -# 1534 "parser_cocci_menhir.mly" +# 1541 "parser_cocci_menhir.mly" ( _1 ) -# 5265 "parser_cocci_menhir.ml" +# 5381 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5293,17 +5409,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 180 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 5297 "parser_cocci_menhir.ml" +# 5413 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_bis = -# 1536 "parser_cocci_menhir.mly" +# 1543 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) -# 5307 "parser_cocci_menhir.ml" +# 5423 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5335,17 +5451,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 5339 "parser_cocci_menhir.ml" +# 5455 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_unary_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_bis = -# 1540 "parser_cocci_menhir.mly" +# 1547 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) -# 5349 "parser_cocci_menhir.ml" +# 5465 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5367,9 +5483,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_eexpr_dot_expressions_ = -# 1520 "parser_cocci_menhir.mly" +# 1527 "parser_cocci_menhir.mly" ( _1 ) -# 5373 "parser_cocci_menhir.ml" +# 5489 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5391,9 +5507,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_eexpr_nest_expressions_ = -# 1520 "parser_cocci_menhir.mly" +# 1527 "parser_cocci_menhir.mly" ( _1 ) -# 5397 "parser_cocci_menhir.ml" +# 5513 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5415,9 +5531,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_expr_invalid_ = -# 1520 "parser_cocci_menhir.mly" +# 1527 "parser_cocci_menhir.mly" ( _1 ) -# 5421 "parser_cocci_menhir.ml" +# 5537 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5449,20 +5565,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 5453 "parser_cocci_menhir.ml" +# 5569 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 125 "parser_cocci_menhir.mly" (Data.clt) -# 5458 "parser_cocci_menhir.ml" +# 5574 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_case_line = -# 1198 "parser_cocci_menhir.mly" +# 1205 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Default(P.clt2mcode "default" _1,P.clt2mcode ":" _2,_3)) ) -# 5466 "parser_cocci_menhir.ml" +# 5582 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5499,20 +5615,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 5503 "parser_cocci_menhir.ml" +# 5619 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 125 "parser_cocci_menhir.mly" (Data.clt) -# 5509 "parser_cocci_menhir.ml" +# 5625 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_case_line = -# 1201 "parser_cocci_menhir.mly" +# 1208 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Case(P.clt2mcode "case" _1,_2,P.clt2mcode ":" _3,_4)) ) -# 5516 "parser_cocci_menhir.ml" +# 5632 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5534,9 +5650,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_dot_expressions_ = -# 1616 "parser_cocci_menhir.mly" +# 1623 "parser_cocci_menhir.mly" ( _1 ) -# 5540 "parser_cocci_menhir.ml" +# 5656 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5573,21 +5689,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 5577 "parser_cocci_menhir.ml" +# 5693 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 5583 "parser_cocci_menhir.ml" +# 5699 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_dot_expressions_ = -# 1618 "parser_cocci_menhir.mly" +# 1625 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 5591 "parser_cocci_menhir.ml" +# 5707 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5609,9 +5725,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_invalid_ = -# 1616 "parser_cocci_menhir.mly" +# 1623 "parser_cocci_menhir.mly" ( _1 ) -# 5615 "parser_cocci_menhir.ml" +# 5731 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5648,21 +5764,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 5652 "parser_cocci_menhir.ml" +# 5768 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 5658 "parser_cocci_menhir.ml" +# 5774 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_invalid_ = -# 1618 "parser_cocci_menhir.mly" +# 1625 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 5666 "parser_cocci_menhir.ml" +# 5782 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5684,9 +5800,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_nest_expressions_ = -# 1616 "parser_cocci_menhir.mly" +# 1623 "parser_cocci_menhir.mly" ( _1 ) -# 5690 "parser_cocci_menhir.ml" +# 5806 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5723,21 +5839,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 5727 "parser_cocci_menhir.ml" +# 5843 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 5733 "parser_cocci_menhir.ml" +# 5849 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_nest_expressions_ = -# 1618 "parser_cocci_menhir.mly" +# 1625 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 5741 "parser_cocci_menhir.ml" +# 5857 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5759,9 +5875,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_expr_invalid_ = -# 1616 "parser_cocci_menhir.mly" +# 1623 "parser_cocci_menhir.mly" ( _1 ) -# 5765 "parser_cocci_menhir.ml" +# 5881 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5798,21 +5914,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 5802 "parser_cocci_menhir.ml" +# 5918 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 5808 "parser_cocci_menhir.ml" +# 5924 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_expr_invalid_ = -# 1618 "parser_cocci_menhir.mly" +# 1625 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) -# 5816 "parser_cocci_menhir.ml" +# 5932 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5840,7 +5956,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_choose_iso = # 310 "parser_cocci_menhir.mly" ( List.map P.id2name _2 ) -# 5844 "parser_cocci_menhir.ml" +# 5960 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5862,9 +5978,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_any_strict_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 5868 "parser_cocci_menhir.ml" +# 5984 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5886,9 +6002,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_ctype_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 5892 "parser_cocci_menhir.ml" +# 6008 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5910,9 +6026,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_d_ident_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 5916 "parser_cocci_menhir.ml" +# 6032 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5934,9 +6050,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_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 5940 "parser_cocci_menhir.ml" +# 6056 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5958,9 +6074,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_meta_ident_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 5964 "parser_cocci_menhir.ml" +# 6080 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5982,9 +6098,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 5988 "parser_cocci_menhir.ml" +# 6104 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6006,9 +6122,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_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6012 "parser_cocci_menhir.ml" +# 6128 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6030,9 +6146,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_econstraint_not_ceq_or_sub__ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6036 "parser_cocci_menhir.ml" +# 6152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6054,9 +6170,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_econstraint_re_or_not_eqe_or_sub__ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6060 "parser_cocci_menhir.ml" +# 6176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6078,9 +6194,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_idconstraint_re_or_not_eqid__ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6084 "parser_cocci_menhir.ml" +# 6200 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6102,9 +6218,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_idconstraint_virt_re_or_not_eqid__ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6108 "parser_cocci_menhir.ml" +# 6224 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6126,9 +6242,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_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6132 "parser_cocci_menhir.ml" +# 6248 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6150,9 +6266,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_x_eq_not_pos__ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6156 "parser_cocci_menhir.ml" +# 6272 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6174,9 +6290,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_typedef_ident_ = -# 2356 "parser_cocci_menhir.mly" +# 2363 "parser_cocci_menhir.mly" ( _1 ) -# 6180 "parser_cocci_menhir.ml" +# 6296 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6198,9 +6314,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_ = -# 1545 "parser_cocci_menhir.mly" +# 1552 "parser_cocci_menhir.mly" ( _1 ) -# 6204 "parser_cocci_menhir.ml" +# 6320 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6242,22 +6358,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 6246 "parser_cocci_menhir.ml" +# 6362 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 6252 "parser_cocci_menhir.ml" +# 6368 "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_ = -# 1548 "parser_cocci_menhir.mly" +# 1555 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 6261 "parser_cocci_menhir.ml" +# 6377 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6279,9 +6395,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_ = -# 1545 "parser_cocci_menhir.mly" +# 1552 "parser_cocci_menhir.mly" ( _1 ) -# 6285 "parser_cocci_menhir.ml" +# 6401 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6323,22 +6439,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 6327 "parser_cocci_menhir.ml" +# 6443 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 6333 "parser_cocci_menhir.ml" +# 6449 "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_ = -# 1548 "parser_cocci_menhir.mly" +# 1555 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 6342 "parser_cocci_menhir.ml" +# 6458 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6360,9 +6476,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cond_expr_expr_invalid_ = -# 1545 "parser_cocci_menhir.mly" +# 1552 "parser_cocci_menhir.mly" ( _1 ) -# 6366 "parser_cocci_menhir.ml" +# 6482 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6404,22 +6520,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 6408 "parser_cocci_menhir.ml" +# 6524 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 6414 "parser_cocci_menhir.ml" +# 6530 "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_ = -# 1548 "parser_cocci_menhir.mly" +# 1555 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 6423 "parser_cocci_menhir.ml" +# 6539 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6440,14 +6556,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 122 "parser_cocci_menhir.mly" (Data.clt) -# 6444 "parser_cocci_menhir.ml" +# 6560 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_const_vol = -# 1097 "parser_cocci_menhir.mly" +# 1101 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Const _1 ) -# 6451 "parser_cocci_menhir.ml" +# 6567 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6468,14 +6584,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 122 "parser_cocci_menhir.mly" (Data.clt) -# 6472 "parser_cocci_menhir.ml" +# 6588 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_const_vol = -# 1098 "parser_cocci_menhir.mly" +# 1102 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Volatile _1 ) -# 6479 "parser_cocci_menhir.ml" +# 6595 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6497,9 +6613,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_list_aexpr_TEllipsis_ = -# 2132 "parser_cocci_menhir.mly" +# 2139 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> [_1] ) -# 6503 "parser_cocci_menhir.ml" +# 6619 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6525,16 +6641,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6529 "parser_cocci_menhir.ml" +# 6645 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_aexpr = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_aexpr_TEllipsis_ = -# 2134 "parser_cocci_menhir.mly" +# 2141 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 6538 "parser_cocci_menhir.ml" +# 6654 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6566,17 +6682,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6570 "parser_cocci_menhir.ml" +# 6686 "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_continue_list_aexpr_TEllipsis_ = -# 2137 "parser_cocci_menhir.mly" +# 2144 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: (_3 build_dots build_comma) ) -# 6580 "parser_cocci_menhir.ml" +# 6696 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6602,9 +6718,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_aexpr_TEllipsis_ = -# 2140 "parser_cocci_menhir.mly" +# 2147 "parser_cocci_menhir.mly" ( _2 ) -# 6608 "parser_cocci_menhir.ml" +# 6724 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6626,9 +6742,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_list_dparam_TEllipsis_ = -# 2132 "parser_cocci_menhir.mly" +# 2139 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> [_1] ) -# 6632 "parser_cocci_menhir.ml" +# 6748 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6654,16 +6770,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6658 "parser_cocci_menhir.ml" +# 6774 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_dparam = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_dparam_TEllipsis_ = -# 2134 "parser_cocci_menhir.mly" +# 2141 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 6667 "parser_cocci_menhir.ml" +# 6783 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6695,17 +6811,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6699 "parser_cocci_menhir.ml" +# 6815 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_dparam = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_continue_list_dparam_TEllipsis_ = -# 2137 "parser_cocci_menhir.mly" +# 2144 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: (_3 build_dots build_comma) ) -# 6709 "parser_cocci_menhir.ml" +# 6825 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6731,9 +6847,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_dparam_TEllipsis_ = -# 2140 "parser_cocci_menhir.mly" +# 2147 "parser_cocci_menhir.mly" ( _2 ) -# 6737 "parser_cocci_menhir.ml" +# 6853 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6755,9 +6871,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2132 "parser_cocci_menhir.mly" +# 2139 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> [_1] ) -# 6761 "parser_cocci_menhir.ml" +# 6877 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6783,16 +6899,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6787 "parser_cocci_menhir.ml" +# 6903 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_enum_decl_one = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2134 "parser_cocci_menhir.mly" +# 2141 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 6796 "parser_cocci_menhir.ml" +# 6912 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6824,17 +6940,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6828 "parser_cocci_menhir.ml" +# 6944 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_enum_decl_one = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2137 "parser_cocci_menhir.mly" +# 2144 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: (_3 build_dots build_comma) ) -# 6838 "parser_cocci_menhir.ml" +# 6954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6860,9 +6976,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2140 "parser_cocci_menhir.mly" +# 2147 "parser_cocci_menhir.mly" ( _2 ) -# 6866 "parser_cocci_menhir.ml" +# 6982 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6884,9 +7000,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = -# 2132 "parser_cocci_menhir.mly" +# 2139 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> [_1] ) -# 6890 "parser_cocci_menhir.ml" +# 7006 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6912,16 +7028,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6916 "parser_cocci_menhir.ml" +# 7032 "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_continue_list_initialize2_edots_when_TEllipsis_initialize__ = -# 2134 "parser_cocci_menhir.mly" +# 2141 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 6925 "parser_cocci_menhir.ml" +# 7041 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6953,17 +7069,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 6957 "parser_cocci_menhir.ml" +# 7073 "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_continue_list_initialize2_edots_when_TEllipsis_initialize__ = -# 2137 "parser_cocci_menhir.mly" +# 2144 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: (_3 build_dots build_comma) ) -# 6967 "parser_cocci_menhir.ml" +# 7083 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6989,9 +7105,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = -# 2140 "parser_cocci_menhir.mly" +# 2147 "parser_cocci_menhir.mly" ( _2 ) -# 6995 "parser_cocci_menhir.ml" +# 7111 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7013,9 +7129,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_list_one_dec_decl__TEllipsis_ = -# 2132 "parser_cocci_menhir.mly" +# 2139 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> [_1] ) -# 7019 "parser_cocci_menhir.ml" +# 7135 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7041,16 +7157,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 7045 "parser_cocci_menhir.ml" +# 7161 "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__2_ in let _v : 'tv_continue_list_one_dec_decl__TEllipsis_ = -# 2134 "parser_cocci_menhir.mly" +# 2141 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 7054 "parser_cocci_menhir.ml" +# 7170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7082,17 +7198,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 7086 "parser_cocci_menhir.ml" +# 7202 "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_continue_list_one_dec_decl__TEllipsis_ = -# 2137 "parser_cocci_menhir.mly" +# 2144 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: (_3 build_dots build_comma) ) -# 7096 "parser_cocci_menhir.ml" +# 7212 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7118,9 +7234,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_one_dec_decl__TEllipsis_ = -# 2140 "parser_cocci_menhir.mly" +# 2147 "parser_cocci_menhir.mly" ( _2 ) -# 7124 "parser_cocci_menhir.ml" +# 7240 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7142,9 +7258,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = -# 2132 "parser_cocci_menhir.mly" +# 2139 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> [_1] ) -# 7148 "parser_cocci_menhir.ml" +# 7264 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7170,16 +7286,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 7174 "parser_cocci_menhir.ml" +# 7290 "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__2_ in let _v : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = -# 2134 "parser_cocci_menhir.mly" +# 2141 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 7183 "parser_cocci_menhir.ml" +# 7299 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7211,17 +7327,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 7215 "parser_cocci_menhir.ml" +# 7331 "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_continue_list_one_dec_name_opt_decl__TEllipsis_ = -# 2137 "parser_cocci_menhir.mly" +# 2144 "parser_cocci_menhir.mly" ( fun build_dots build_comma -> _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: (_3 build_dots build_comma) ) -# 7225 "parser_cocci_menhir.ml" +# 7341 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7247,9 +7363,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = -# 2140 "parser_cocci_menhir.mly" +# 2147 "parser_cocci_menhir.mly" ( _2 ) -# 7253 "parser_cocci_menhir.ml" +# 7369 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7264,9 +7380,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 = -# 797 "parser_cocci_menhir.mly" +# 801 "parser_cocci_menhir.mly" ( [] ) -# 7270 "parser_cocci_menhir.ml" +# 7386 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7294,9 +7410,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_struct_decl_list = -# 798 "parser_cocci_menhir.mly" +# 802 "parser_cocci_menhir.mly" ( _1@_2 ) -# 7300 "parser_cocci_menhir.ml" +# 7416 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7318,9 +7434,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_struct_decl_list = -# 799 "parser_cocci_menhir.mly" +# 803 "parser_cocci_menhir.mly" ( _1 ) -# 7324 "parser_cocci_menhir.ml" +# 7440 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7336,59 +7452,32 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7356 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 7361 "parser_cocci_menhir.ml" - ) = Obj.magic r0 in - let _startpos = _startpos_r0_ in + let m : 'tv_list_mul_ = Obj.magic m in + let ty : 'tv_all_basic_types = Obj.magic ty in + let _startpos = _startpos_ty_ 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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 7373 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7379 "parser_cocci_menhir.ml" - - in - let cv = + let _v : 'tv_ctype = let cv = # 39 "standard.mly" ( None ) -# 7386 "parser_cocci_menhir.ml" +# 7471 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7392 "parser_cocci_menhir.ml" +# 726 "parser_cocci_menhir.mly" + ( List.fold_left + (function prev -> + function (star,cv) -> + P.make_cv cv (P.pointerify prev [star])) + (P.make_cv cv ty) m ) +# 7481 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7404,59 +7493,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7424 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 7429 "parser_cocci_menhir.ml" - ) = Obj.magic r0 in - let _startpos = _startpos_r0_ in + let m : 'tv_list_mul_ = Obj.magic m in + let ty : 'tv_all_basic_types = Obj.magic ty 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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 7441 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7447 "parser_cocci_menhir.ml" - - in - let cv = + let _v : 'tv_ctype = let cv = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 7454 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 7519 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7460 "parser_cocci_menhir.ml" +# 726 "parser_cocci_menhir.mly" + ( List.fold_left + (function prev -> + function (star,cv) -> + P.make_cv cv (P.pointerify prev [star])) + (P.make_cv cv ty) m ) +# 7529 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7468,77 +7537,23 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7497 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7502 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( + let r : ( # 119 "parser_cocci_menhir.mly" (Data.clt) -# 7507 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 7523 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7529 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 7536 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7542 "parser_cocci_menhir.ml" +# 7550 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_r_ in + let _v : 'tv_ctype = +# 732 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) ) +# 7557 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7550,63 +7565,23 @@ 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.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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7574 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( + let r : ( # 119 "parser_cocci_menhir.mly" (Data.clt) -# 7579 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 7591 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7597 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 7604 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7610 "parser_cocci_menhir.ml" +# 7578 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_r_ in + let _v : 'tv_ctype = +# 734 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) ) +# 7585 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7618,64 +7593,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 = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + 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 = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 7642 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 7647 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 7660 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7666 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 7673 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7679 "parser_cocci_menhir.ml" + let rp : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 7616 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in + let lp : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 7622 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let _startpos = _startpos_lp_ in + let _endpos = _endpos_rp_ in + let _v : 'tv_ctype = +# 736 "parser_cocci_menhir.mly" + ( let (mids,code) = t in + Ast0.wrap + (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) +# 7631 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7687,84 +7639,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; + 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 p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 7720 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 7725 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 7730 "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 - -# 651 "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*))) ) -# 7749 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7755 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 7762 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7768 "parser_cocci_menhir.ml" + let _2 : 'tv_list_array_dec_ = Obj.magic _2 in + let _1 : 'tv_disj_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_d_ident = +# 1346 "parser_cocci_menhir.mly" + ( (_1, function t -> P.arrayify t _2) ) +# 7661 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7776,63 +7669,55 @@ 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.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_dargexpr = +# 1484 "parser_cocci_menhir.mly" + ( _1 ) +# 7685 "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 = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + 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 = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + 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 ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7800 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 7805 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 7817 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7823 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 7830 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7836 "parser_cocci_menhir.ml" + let a : 'tv_list_array_dec_ = Obj.magic a in + let i : 'tv_disj_ident = Obj.magic i in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_a_ in + let _v : 'tv_decl = +# 1074 "parser_cocci_menhir.mly" + ( let t = P.arrayify t a in Ast0.wrap(Ast0.Param(t, Some i)) ) +# 7721 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7844,77 +7729,19 @@ 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.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; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7873 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7878 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 7883 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 7899 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7905 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 7912 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 7918 "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 = +# 1075 "parser_cocci_menhir.mly" + ( (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) ) +# 7745 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7926,78 +7753,86 @@ 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 = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7955 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 7960 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 7965 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 7982 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 7988 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 7995 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8001 "parser_cocci_menhir.ml" + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 7801 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 7807 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let rp : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 7812 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let i : 'tv_disj_ident = Obj.magic i in + let s : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 7818 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let lp : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 7823 "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 = +# 1078 "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)) ) +# 7836 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8009,91 +7844,24 @@ 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.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; - 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; - }; - }; - }; - }; + 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 ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8043 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8048 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8053 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8058 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 8078 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 8084 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8091 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8097 "parser_cocci_menhir.ml" + let _1 : ( +# 134 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 7857 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl = +# 1085 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) ) +# 7865 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8105,63 +7873,23 @@ 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.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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8129 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8134 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 8146 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8152 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8159 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8165 "parser_cocci_menhir.ml" + let _1 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 7886 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl = +# 1087 "parser_cocci_menhir.mly" + ( tmeta_to_param _1 ) +# 7893 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8173,63 +7901,23 @@ 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.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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8197 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8202 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 8214 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8220 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8227 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8233 "parser_cocci_menhir.ml" + let _1 : ( +# 127 "parser_cocci_menhir.mly" + (string * Data.clt) +# 7914 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_ident = +# 2063 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 7921 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8241,77 +7929,24 @@ 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.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; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8270 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8275 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8280 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 8296 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8302 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8309 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8315 "parser_cocci_menhir.ml" + let _1 : ( +# 132 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 7942 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_ident = +# 2065 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,Ast.NoVal,pure)) ) +# 7950 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8323,63 +7958,23 @@ 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.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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8347 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8352 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 8364 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8370 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8377 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8383 "parser_cocci_menhir.ml" + let _1 : 'tv_empty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_list_decl_ = +# 2087 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.DOTS + (_1 + (fun _ d -> Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." d))) + (fun c -> Ast0.PComma c))) ) +# 7978 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8391,64 +7986,23 @@ 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.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; - }; - }; + 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 p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 8415 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8420 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 8433 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8439 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8446 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8452 "parser_cocci_menhir.ml" + let _1 : 'tv_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_list_name_opt_decl_ = +# 2087 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.DOTS + (_1 + (fun _ d -> Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." d))) + (fun c -> Ast0.PComma c))) ) +# 8006 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8460,84 +8014,24 @@ 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.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; - }; - }; - }; - }; + 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 p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 8493 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 8498 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8503 "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 - -# 651 "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*))) ) -# 8522 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8528 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8535 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8541 "parser_cocci_menhir.ml" + let _1 : ( +# 134 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 8027 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_statement = +# 1410 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = _1 in + [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) +# 8035 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8549,63 +8043,23 @@ 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.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; - }; - }; + 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 ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8573 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8578 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 8590 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8596 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8603 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8609 "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 = +# 1413 "parser_cocci_menhir.mly" + ( List.map + (function x -> + Ast0.wrap + (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) + _1 ) +# 8063 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8617,77 +8071,19 @@ 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.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; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8646 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8651 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8656 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 8672 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8678 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8685 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8691 "parser_cocci_menhir.ml" + let _1 : 'tv_statement = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_statement = +# 1418 "parser_cocci_menhir.mly" + ( [_1] ) +# 8087 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8699,78 +8095,47 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8728 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8733 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8738 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 8755 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8761 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8768 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8774 "parser_cocci_menhir.ml" + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 8118 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 8124 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_decl_statement = +# 1427 "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))] ) +# 8139 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8782,91 +8147,24 @@ 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.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; - 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; - }; - }; - }; - }; + 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 ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8816 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8821 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8826 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 8831 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 8851 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 8857 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8864 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8870 "parser_cocci_menhir.ml" + let _1 : ( +# 134 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 8160 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_statement_expr = +# 1440 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = _1 in + [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) +# 8168 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8878,52 +8176,23 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8897 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 8908 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 8914 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8921 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8927 "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 = +# 1443 "parser_cocci_menhir.mly" + ( List.map + (function x -> + Ast0.wrap + (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) + _1 ) +# 8196 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8935,52 +8204,19 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 8954 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 8965 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 8971 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 8978 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 8984 "parser_cocci_menhir.ml" + let _1 : 'tv_statement = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_statement_expr = +# 1448 "parser_cocci_menhir.mly" + ( [_1] ) +# 8220 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8992,66 +8228,46 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9016 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9021 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 9036 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9042 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 9049 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9055 "parser_cocci_menhir.ml" + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 8251 "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 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 8257 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_decl_statement_expr = +# 1457 "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))] ) +# 8271 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9063,52 +8279,29 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9082 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 9093 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9099 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 9106 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9112 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8297 "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 = +# 1220 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] ) +# 8305 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9120,53 +8313,73 @@ 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.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 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 8326 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_var = +# 1221 "parser_cocci_menhir.mly" + ( [P.meta_decl _1] ) +# 8333 "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 = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; - 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 p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 9139 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 9151 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9157 "parser_cocci_menhir.ml" - - in - let cv = + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8364 "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 ) -# 9164 "parser_cocci_menhir.ml" +# 8374 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9170 "parser_cocci_menhir.ml" +# 1223 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) + d ) +# 8383 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9178,73 +8391,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.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + 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.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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 = 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 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 9206 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 9211 "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 - -# 651 "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*))) ) -# 9229 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9235 "parser_cocci_menhir.ml" - - in - let cv = + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8419 "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 -# 39 "standard.mly" - ( None ) -# 9242 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8431 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9248 "parser_cocci_menhir.ml" +# 1223 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) + d ) +# 8440 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9256,52 +8448,83 @@ 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9275 "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 ty10 = ty100 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 9286 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9292 "parser_cocci_menhir.ml" - - in - let cv = + let f : 'tv_funproto = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_f_ in + let _v : 'tv_decl_var = +# 1227 "parser_cocci_menhir.mly" + ( [f] ) +# 8464 "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 = 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 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8505 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8511 "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 = # 39 "standard.mly" ( None ) -# 9299 "parser_cocci_menhir.ml" +# 8521 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9305 "parser_cocci_menhir.ml" +# 1229 "parser_cocci_menhir.mly" + (let (id,fn) = d in + [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) +# 8528 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9313,66 +8536,66 @@ 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.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9337 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9342 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 9357 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9363 "parser_cocci_menhir.ml" - - in - let cv = + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8574 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8580 "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 -# 39 "standard.mly" - ( None ) -# 9370 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8592 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9376 "parser_cocci_menhir.ml" +# 1229 "parser_cocci_menhir.mly" + (let (id,fn) = d in + [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) +# 8599 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9384,67 +8607,54 @@ 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.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9408 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9413 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 9429 "parser_cocci_menhir.ml" - - in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8630 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9435 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 8640 "parser_cocci_menhir.ml" in - let cv = + let s = # 39 "standard.mly" ( None ) -# 9442 "parser_cocci_menhir.ml" +# 8647 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9448 "parser_cocci_menhir.ml" +# 1234 "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 ) +# 8658 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9456,80 +8666,61 @@ 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.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + 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 ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9485 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9490 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9495 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 9514 "parser_cocci_menhir.ml" - - in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8694 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 9520 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8706 "parser_cocci_menhir.ml" in - let cv = + let s = # 39 "standard.mly" ( None ) -# 9527 "parser_cocci_menhir.ml" +# 8713 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9533 "parser_cocci_menhir.ml" +# 1234 "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 ) +# 8724 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9541,52 +8732,61 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 9560 "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 - -# 678 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 9571 "parser_cocci_menhir.ml" - - in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8760 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 = -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9577 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 8771 "parser_cocci_menhir.ml" in - let cv = + let s = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 9584 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8779 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9590 "parser_cocci_menhir.ml" +# 1234 "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 ) +# 8790 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9598,67 +8798,68 @@ 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.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9622 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9627 "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 - -# 680 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongDoubleType, - [P.clt2mcode "long" ty1;P.clt2mcode "double" ty2])) ) -# 9643 "parser_cocci_menhir.ml" - - in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8831 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9649 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8844 "parser_cocci_menhir.ml" in - let cv = + let s = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 9656 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8852 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9662 "parser_cocci_menhir.ml" +# 1234 "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 ) +# 8863 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9670,52 +8871,69 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9689 "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 - -# 685 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 9700 "parser_cocci_menhir.ml" - - in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8904 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8910 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9706 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 8920 "parser_cocci_menhir.ml" in - let cv = + let s = # 39 "standard.mly" ( None ) -# 9713 "parser_cocci_menhir.ml" +# 8927 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9719 "parser_cocci_menhir.ml" +# 1242 "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))] ) +# 8937 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9727,52 +8945,76 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 9746 "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 - -# 687 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 9757 "parser_cocci_menhir.ml" - - in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8983 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 8989 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9763 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 9001 "parser_cocci_menhir.ml" in - let cv = + let s = # 39 "standard.mly" ( None ) -# 9770 "parser_cocci_menhir.ml" +# 9008 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9776 "parser_cocci_menhir.ml" +# 1242 "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))] ) +# 9018 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9784,52 +9026,76 @@ 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 = 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 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 9803 "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 - -# 689 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SizeType,[P.clt2mcode "size_t" ty])) ) -# 9814 "parser_cocci_menhir.ml" - - in + 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 pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 9064 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 9070 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 = -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9820 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 9081 "parser_cocci_menhir.ml" in - let cv = + let s = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 9827 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 9089 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9833 "parser_cocci_menhir.ml" +# 1242 "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))] ) +# 9099 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9841,52 +9107,83 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 9860 "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 - -# 691 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SSizeType,[P.clt2mcode "ssize_t" ty])) ) -# 9871 "parser_cocci_menhir.ml" - - in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 9150 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 9156 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9877 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 9169 "parser_cocci_menhir.ml" in - let cv = + let s = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 9884 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 9177 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9890 "parser_cocci_menhir.ml" +# 1242 "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))] ) +# 9187 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9898,52 +9195,104 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 9917 "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 - -# 693 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.PtrDiffType,[P.clt2mcode "ptrdiff_t" ty])) ) -# 9928 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9934 "parser_cocci_menhir.ml" - - in - let cv = + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 9248 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9253 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9259 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9264 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 9270 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9275 "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 ) -# 9941 "parser_cocci_menhir.ml" +# 9284 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 9947 "parser_cocci_menhir.ml" +# 1252 "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))] ) +# 9296 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9955,60 +9304,111 @@ 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.semv = i00; - MenhirLib.EngineTypes.startp = _startpos_i00_; - MenhirLib.EngineTypes.endp = _endpos_i00_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let i00 : 'tv_ident = Obj.magic i00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 9980 "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 - -# 695 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, Some i)) ) -# 9993 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 9999 "parser_cocci_menhir.ml" - - in - let cv = + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 9362 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9367 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9373 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9378 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 9384 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9389 "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 -# 39 "standard.mly" - ( None ) -# 10006 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 9400 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10012 "parser_cocci_menhir.ml" +# 1252 "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))] ) +# 9412 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10020,94 +9420,56 @@ 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l00; - MenhirLib.EngineTypes.startp = _startpos_l00_; - MenhirLib.EngineTypes.endp = _endpos_l00_; + 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 = s00; - MenhirLib.EngineTypes.startp = _startpos_s00_; - MenhirLib.EngineTypes.endp = _endpos_s00_; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" + let _5 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10054 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 9453 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" (Data.clt) -# 10060 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 10065 "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 ids0 = ids00 in - let l0 = l00 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let s = s0 in - let i = - -# 39 "standard.mly" - ( None ) -# 10083 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 10092 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 10098 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 10105 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10111 "parser_cocci_menhir.ml" +# 9458 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9464 "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 = +# 1260 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, + P.clt2mcode ")" _4,P.clt2mcode ";" _5))] ) +# 9473 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10119,103 +9481,75 @@ 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 = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l00; - MenhirLib.EngineTypes.startp = _startpos_l00_; - MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + 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 = s00; - MenhirLib.EngineTypes.startp = _startpos_s00_; - MenhirLib.EngineTypes.endp = _endpos_s00_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" + let _7 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10158 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 9524 "parser_cocci_menhir.ml" + ) = Obj.magic _7 in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10164 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_ident = Obj.magic x000 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 10170 "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 ids0 = ids00 in - let l0 = l00 in - let x00 = x000 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let x0 = x00 in - let s = s0 in - let i = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 10191 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 10200 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 10206 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 10213 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10219 "parser_cocci_menhir.ml" +# 9530 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9535 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9541 "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__7_ in + let _v : 'tv_decl_var = +# 1263 "parser_cocci_menhir.mly" + ( [Ast0.wrap + (Ast0.MacroDeclInit + (_1,P.clt2mcode "(" _2,_3, + P.clt2mcode ")" _4,P.clt2mcode "=" q,e, + P.clt2mcode ";" _7))] ) +# 9553 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10227,152 +9561,120 @@ 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.semv = i00; - MenhirLib.EngineTypes.startp = _startpos_i00_; - MenhirLib.EngineTypes.endp = _endpos_i00_; + 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 = 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 i00 : 'tv_type_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 - -# 702 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 10261 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 10267 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 10274 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10280 "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.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.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l00; - MenhirLib.EngineTypes.startp = _startpos_l00_; - MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10322 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 9624 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10328 "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 ) -# 10347 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 10357 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 10363 "parser_cocci_menhir.ml" - - in - let cv = +# 9630 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9635 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9641 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9646 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 9652 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9657 "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 ) -# 10370 "parser_cocci_menhir.ml" +# 9666 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10376 "parser_cocci_menhir.ml" +# 1272 "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))]) +# 9678 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10384,100 +9686,127 @@ 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.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d00; - MenhirLib.EngineTypes.startp = _startpos_d00_; - MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l00; - MenhirLib.EngineTypes.startp = _startpos_l00_; - MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x000; - MenhirLib.EngineTypes.startp = _startpos_x000_; - MenhirLib.EngineTypes.endp = _endpos_x000_; + 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 = s00; - MenhirLib.EngineTypes.startp = _startpos_s00_; - MenhirLib.EngineTypes.endp = _endpos_s00_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10423 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 9754 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10429 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_type_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 - +# 9760 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9765 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9771 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9776 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 9782 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 9787 "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 ) -# 10452 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 10462 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 10468 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 10475 "parser_cocci_menhir.ml" +# 9798 "parser_cocci_menhir.ml" in -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10481 "parser_cocci_menhir.ml" +# 1272 "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))]) +# 9810 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10489,86 +9818,49 @@ 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.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d00; - MenhirLib.EngineTypes.startp = _startpos_d00_; - MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 10523 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 10529 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 10534 "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 - -# 711 "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)) ) -# 10553 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 10559 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 10566 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10572 "parser_cocci_menhir.ml" +# 9846 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let id : 'tv_comma_list_typedef_ident_ = Obj.magic id in + let t : 'tv_typedef_ctype = Obj.magic t in + let s : ( +# 121 "parser_cocci_menhir.mly" + (Data.clt) +# 9853 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = +# 1280 "parser_cocci_menhir.mly" + ( let s = P.clt2mcode "typedef" s in + List.map + (function id -> + Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))) + id ) +# 9864 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10580,127 +9872,23 @@ 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 = 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 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 10599 "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 - -# 715 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 10610 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 10616 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 10623 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10629 "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 = 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 10666 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 10671 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 10684 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 10690 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 10698 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10704 "parser_cocci_menhir.ml" + let _1 : 'tv_empty_list_start_dparam_TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_define_param_list_option = +# 997 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.DOTS + (_1 + (fun _ d -> Ast0.wrap(Ast0.DPdots(P.clt2mcode "," d))) + (fun c -> Ast0.DPComma c))) ) +# 9892 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10712,70 +9900,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.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; - }; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 10741 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 10746 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 10759 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 10765 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 10773 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10779 "parser_cocci_menhir.ml" + let _1 : ( +# 153 "parser_cocci_menhir.mly" + (Data.clt * token) +# 9913 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_defineop = +# 941 "parser_cocci_menhir.mly" + ( let (clt,ident) = _1 in + let aft = P.get_aft clt in (* move stuff after the define to the ident *) + function body -> + Ast0.wrap + (Ast0.Define + (P.clt2mcode "#define" (P.drop_aft clt), + (match ident with + TMetaId((nm,constraints,seed,pure,clt)) -> + let clt = P.set_aft aft clt in + Ast0.wrap + (Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) + | TIdent((nm,clt)) -> + let clt = P.set_aft aft clt in + Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) + | TSymId(nm,clt) -> + let clt = P.set_aft aft clt in + Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) + | _ -> + raise + (Semantic_cocci.Semantic + "unexpected name for a #define")), + Ast0.wrap Ast0.NoParams, + body)) ) +# 9942 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10787,84 +9950,63 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 10821 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 10826 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 10831 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 10848 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 10854 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 10862 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10868 "parser_cocci_menhir.ml" + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 9973 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_define_param_list_option = Obj.magic _2 in + let _1 : ( +# 154 "parser_cocci_menhir.mly" + (Data.clt * token * int * int) +# 9979 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_defineop = +# 965 "parser_cocci_menhir.mly" + ( let (clt,ident,parenoff,parencol) = _1 in + let aft = P.get_aft clt in (* move stuff after the define to the ( *) + (* 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,[],[],[]) in + function body -> + Ast0.wrap + (Ast0.Define + (P.clt2mcode "#define" (P.drop_aft clt), + (match ident with + TMetaId((nm,constraints,seed,pure,clt)) -> + Ast0.wrap + (Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) + | TIdent((nm,clt)) -> + Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) + | TSymId(nm,clt) -> + Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) + | _ -> + raise + (Semantic_cocci.Semantic + "unexpected name for a #define")), + (let clt = P.set_aft aft _3 in + Ast0.wrap (Ast0.DParams (lp,_2,P.clt2mcode ")" clt))),body)) ) +# 10010 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10876,70 +10018,55 @@ 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.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 : ( +# 114 "parser_cocci_menhir.mly" + (string) +# 10031 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dep = +# 299 "parser_cocci_menhir.mly" + ( Ast0.Dep _1 ) +# 10038 "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 = 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; - }; - }; + 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_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 10905 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 10910 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 10923 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 10929 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 10937 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 10943 "parser_cocci_menhir.ml" + let _2 : ( +# 114 "parser_cocci_menhir.mly" + (string) +# 10063 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_dep = +# 300 "parser_cocci_menhir.mly" + ( Ast0.AntiDep (Ast0.Dep _2) ) +# 10070 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10951,71 +10078,31 @@ 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.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + 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.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 p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 10980 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 10985 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 10999 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 11005 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11013 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11019 "parser_cocci_menhir.ml" + let _3 : 'tv_dep = Obj.magic _3 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_dep = +# 302 "parser_cocci_menhir.mly" + ( Ast0.AntiDep _3 ) +# 10106 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11027,91 +10114,27 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; - MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; - }; + 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_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 11065 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( + let _2 : ( # 114 "parser_cocci_menhir.mly" (string) -# 11070 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11075 "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 - -# 651 "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*))) ) -# 11095 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 11101 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11109 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11115 "parser_cocci_menhir.ml" +# 10131 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_dep = +# 303 "parser_cocci_menhir.mly" + ( Ast0.EverDep _2 ) +# 10138 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11123,70 +10146,27 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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_list_TMul_ = Obj.magic m in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11152 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11157 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 11170 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 11176 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11184 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11190 "parser_cocci_menhir.ml" + let _2 : ( +# 114 "parser_cocci_menhir.mly" + (string) +# 10163 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_dep = +# 304 "parser_cocci_menhir.mly" + ( Ast0.NeverDep _2 ) +# 10170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11198,84 +10178,29 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11232 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11237 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11242 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 11259 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 11265 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11273 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11279 "parser_cocci_menhir.ml" + 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 = +# 305 "parser_cocci_menhir.mly" + ( Ast0.AndDep(_1, _3) ) +# 10204 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11287,85 +10212,29 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11321 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11326 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11331 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 11349 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 11355 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11363 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11369 "parser_cocci_menhir.ml" + 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 = +# 306 "parser_cocci_menhir.mly" + ( Ast0.OrDep (_1, _3) ) +# 10238 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11377,98 +10246,27 @@ 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.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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.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; - }; - }; - }; + 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_list_TMul_ = Obj.magic m in - let ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11416 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11421 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11426 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11431 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 11452 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 11458 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11466 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11472 "parser_cocci_menhir.ml" + let _2 : 'tv_dep = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_dep = +# 307 "parser_cocci_menhir.mly" + ( _2 ) +# 10270 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11479,71 +10277,13 @@ 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.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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11509 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11514 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 11527 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 11533 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11541 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11547 "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_depends = +# 295 "parser_cocci_menhir.mly" + ( Ast0.NoDep ) +# 10287 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11555,70 +10295,27 @@ 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 = parents; + MenhirLib.EngineTypes.startp = _startpos_parents_; + MenhirLib.EngineTypes.endp = _endpos_parents_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11584 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11589 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 11602 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 11608 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11616 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11622 "parser_cocci_menhir.ml" + let parents : 'tv_dep = Obj.magic parents in + let _startpos = _startpos__1_ in + let _endpos = _endpos_parents_ in + let _v : 'tv_depends = +# 296 "parser_cocci_menhir.mly" + ( parents ) +# 10319 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11630,84 +10327,29 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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.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; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11664 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11669 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11674 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 11691 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 11697 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11705 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11711 "parser_cocci_menhir.ml" + let _2 : 'tv_disj_ident = Obj.magic _2 in + let _1 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 10346 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_designator = +# 1396 "parser_cocci_menhir.mly" + ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) ) +# 10353 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11719,70 +10361,39 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11748 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11753 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 11766 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 11772 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11780 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11786 "parser_cocci_menhir.ml" + let _3 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 10384 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 10390 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_designator = +# 1398 "parser_cocci_menhir.mly" + ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) ) +# 10397 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11794,71 +10405,56 @@ 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + 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 = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 11823 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11828 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 11842 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 11848 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11856 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11862 "parser_cocci_menhir.ml" + let _5 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 10438 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : 'tv_eexpr = Obj.magic _4 in + let _3 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10444 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 10450 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_designator = +# 1400 "parser_cocci_menhir.mly" + ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3, + _4,P.clt2mcode "]" _5) ) +# 10458 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11870,91 +10466,19 @@ 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.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; - MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; - }; - }; + 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 p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 11908 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 11913 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 11918 "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 - -# 651 "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*))) ) -# 11938 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 11944 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11952 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 11958 "parser_cocci_menhir.ml" + let _1 : 'tv_pre_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dexpr = +# 1483 "parser_cocci_menhir.mly" + ( _1 ) +# 10482 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11966,70 +10490,23 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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_list_TMul_ = Obj.magic m in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 11995 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 12000 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 12013 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 12019 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12027 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12033 "parser_cocci_menhir.ml" + 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 = +# 313 "parser_cocci_menhir.mly" + ( List.map P.id2name _2 ) +# 10510 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12041,84 +10518,19 @@ 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.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; - }; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12075 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12080 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 12085 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 12102 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 12108 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12116 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12122 "parser_cocci_menhir.ml" + let _1 : 'tv_mident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_disj_ident = +# 2051 "parser_cocci_menhir.mly" + ( _1 ) +# 10534 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12130,85 +10542,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 = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12164 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12169 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 12174 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 12192 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 12198 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12206 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12212 "parser_cocci_menhir.ml" + let rp : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 10565 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let t : 'tv_midzero_list_disj_ident_disj_ident_ = Obj.magic t in + let lp : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 10571 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let _startpos = _startpos_lp_ in + let _endpos = _endpos_rp_ in + let _v : 'tv_disj_ident = +# 2053 "parser_cocci_menhir.mly" + ( let (mids,code) = t in + Ast0.wrap + (Ast0.DisjId(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) +# 10580 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12220,98 +10588,23 @@ 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.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; - 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.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; - }; - }; - }; - }; - }; + 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 ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12259 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12264 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12269 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 12274 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 12295 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 12301 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12309 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12315 "parser_cocci_menhir.ml" + let _1 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10601 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dot_expressions = +# 1493 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) ) +# 10608 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12323,59 +10616,19 @@ 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.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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12347 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 12359 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12365 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12373 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12379 "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_dot_expressions = +# 1494 "parser_cocci_menhir.mly" + ( _1 ) +# 10632 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12387,59 +10640,19 @@ 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.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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12411 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 12423 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12429 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12437 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12443 "parser_cocci_menhir.ml" + let _1 : 'tv_mident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dparam = +# 993 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DParam _1) ) +# 10656 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12451,73 +10664,19 @@ 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.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; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12480 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12485 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 12501 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12507 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12515 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12521 "parser_cocci_menhir.ml" + 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_eargexpr = +# 1481 "parser_cocci_menhir.mly" + ( _1 ) +# 10680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12529,59 +10688,23 @@ 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.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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12553 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 12565 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12571 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12579 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12585 "parser_cocci_menhir.ml" + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10701 "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_ = +# 2373 "parser_cocci_menhir.mly" + ( (d,None) ) +# 10708 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12593,60 +10716,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.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + 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 = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 12617 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 12630 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12636 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12644 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12650 "parser_cocci_menhir.ml" + let w : 'tv_eexpr = Obj.magic w in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10747 "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_ = +# 2374 "parser_cocci_menhir.mly" + ( (d,Some w) ) +# 10754 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12658,80 +10762,69 @@ 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.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 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10775 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_edots_when_TEllipsis_enum_decl_one_ = +# 2373 "parser_cocci_menhir.mly" + ( (d,None) ) +# 10782 "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 = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + 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.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 12691 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 12696 "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_ctype = let ty = - let p0 = p00 in - let r0 = r00 in - let ty = - let p = p0 in - let r = r0 in - -# 651 "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*))) ) -# 12715 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12721 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12729 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12735 "parser_cocci_menhir.ml" + let w : 'tv_enum_decl_one = Obj.magic w in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10821 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__5_ in + let _v : 'tv_edots_when_TEllipsis_enum_decl_one_ = +# 2374 "parser_cocci_menhir.mly" + ( (d,Some w) ) +# 10828 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12743,59 +10836,23 @@ 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.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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12767 "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 ty10 = ty100 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 12779 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12785 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12793 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12799 "parser_cocci_menhir.ml" + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10849 "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_ = +# 2373 "parser_cocci_menhir.mly" + ( (d,None) ) +# 10856 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12807,73 +10864,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.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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.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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12836 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12841 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 12857 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12863 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12871 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12877 "parser_cocci_menhir.ml" + let w : 'tv_initialize = Obj.magic w in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10895 "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_ = +# 2374 "parser_cocci_menhir.mly" + ( (d,Some w) ) +# 10902 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12885,74 +10910,23 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12914 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12919 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 12936 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 12942 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12950 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 12956 "parser_cocci_menhir.ml" + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10923 "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_one_ = +# 2373 "parser_cocci_menhir.mly" + ( (d,None) ) +# 10930 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12964,87 +10938,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.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 12998 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 13003 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 13008 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 13028 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 13034 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13042 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13048 "parser_cocci_menhir.ml" + let w : 'tv_struct_decl_one = Obj.magic w in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 10969 "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_one_ = +# 2374 "parser_cocci_menhir.mly" + ( (d,Some w) ) +# 10976 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13056,59 +10984,19 @@ 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.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; - }; - }; + 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 ty00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 13080 "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 - -# 678 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 13092 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13098 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13106 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13112 "parser_cocci_menhir.ml" + let _1 : 'tv_pre_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_eexpr = +# 1480 "parser_cocci_menhir.mly" + ( _1 ) +# 11000 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13120,74 +11008,23 @@ 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.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; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 13149 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 13154 "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 - -# 680 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongDoubleType, - [P.clt2mcode "long" ty1;P.clt2mcode "double" ty2])) ) -# 13171 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13177 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13185 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13191 "parser_cocci_menhir.ml" + let _1 : 'tv_empty_list_start_aexpr_TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_eexpr_list_option = +# 2353 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.DOTS + (_1 + (fun _ d -> Ast0.wrap(Ast0.Edots(P.clt2mcode "..." d,None))) + (fun c -> Ast0.EComma c))) ) +# 11028 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13198,60 +11035,13 @@ 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.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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 13223 "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 - -# 685 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 13235 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13241 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13249 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13255 "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_empty_list_start_aexpr_TEllipsis_ = +# 2115 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [] ) +# 11045 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13263,59 +11053,19 @@ 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.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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 13287 "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 - -# 687 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 13299 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13305 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13313 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13319 "parser_cocci_menhir.ml" + let _1 : 'tv_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_empty_list_start_aexpr_TEllipsis_ = +# 2116 "parser_cocci_menhir.mly" + ( _1 ) +# 11069 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13326,60 +11076,13 @@ 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.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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 13351 "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 - -# 689 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SizeType,[P.clt2mcode "size_t" ty])) ) -# 13363 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13369 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13377 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13383 "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_empty_list_start_dparam_TEllipsis_ = +# 2115 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [] ) +# 11086 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13391,59 +11094,36 @@ 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.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; - }; - }; + 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 ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 13415 "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 - -# 691 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SSizeType,[P.clt2mcode "ssize_t" ty])) ) -# 13427 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13433 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13441 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13447 "parser_cocci_menhir.ml" + let _1 : 'tv_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_empty_list_start_dparam_TEllipsis_ = +# 2116 "parser_cocci_menhir.mly" + ( _1 ) +# 11110 "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_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2115 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [] ) +# 11127 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13455,59 +11135,36 @@ 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.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; - }; - }; + 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 ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 13479 "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 - -# 693 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.PtrDiffType,[P.clt2mcode "ptrdiff_t" ty])) ) -# 13491 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13497 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13505 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13511 "parser_cocci_menhir.ml" + let _1 : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2116 "parser_cocci_menhir.mly" + ( _1 ) +# 11151 "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_empty_list_start_one_dec_decl__TEllipsis_ = +# 2115 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [] ) +# 11168 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13519,67 +11176,19 @@ 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.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; - }; - }; - }; + 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 i00 : 'tv_ident = Obj.magic i00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 13549 "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 - -# 695 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, Some i)) ) -# 13563 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13569 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13577 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13583 "parser_cocci_menhir.ml" + let _1 : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_empty_list_start_one_dec_decl__TEllipsis_ = +# 2116 "parser_cocci_menhir.mly" + ( _1 ) +# 11192 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13590,102 +11199,13 @@ 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.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 13630 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 13636 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 13641 "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 ids0 = ids00 in - let l0 = l00 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let s = s0 in - let i = - -# 39 "standard.mly" - ( None ) -# 13660 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 13669 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13675 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13683 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13689 "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_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2115 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [] ) +# 11209 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13697,110 +11217,19 @@ 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.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; - 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; - }; - }; - }; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 13741 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 13747 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_ident = Obj.magic x000 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 13753 "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 ids0 = ids00 in - let l0 = l00 in - let x00 = x000 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let x0 = x00 in - let s = s0 in - let i = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13775 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 13784 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13790 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13798 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13804 "parser_cocci_menhir.ml" + let _1 : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2116 "parser_cocci_menhir.mly" + ( _1 ) +# 11233 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13812,63 +11241,19 @@ 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.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; - }; - }; - }; + 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 i00 : 'tv_type_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 - -# 702 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 13852 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13858 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13866 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13872 "parser_cocci_menhir.ml" + let _1 : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_enum_decl_list = +# 839 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1 P.mkedots (fun c -> Ast0.EComma c))) ) +# 11257 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13880,98 +11265,19 @@ 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.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; - }; - }; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 13919 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 13925 "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 ) -# 13945 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 13955 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 13961 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 13969 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 13975 "parser_cocci_menhir.ml" + let _1 : 'tv_disj_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_enum_decl_one = +# 810 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 11281 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13983,107 +11289,39 @@ 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 = _3; + 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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 14027 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" + let _3 : 'tv_enum_val = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 14033 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_type_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 ) -# 14057 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 14067 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 14073 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 14081 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 14087 "parser_cocci_menhir.ml" +# 11313 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_disj_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_enum_decl_one = +# 812 "parser_cocci_menhir.mly" + ( let id = Ast0.wrap(Ast0.Ident(_1)) in + Ast0.wrap + (Ast0.Assignment + (id,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3, + false)) ) +# 11325 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14095,93 +11333,19 @@ 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.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; - }; - }; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 14134 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 14140 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 14145 "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 - -# 711 "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)) ) -# 14165 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 14171 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 14179 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 14185 "parser_cocci_menhir.ml" + let _1 : 'tv_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_enum_val = +# 819 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 11349 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14193,59 +11357,24 @@ 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.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; - }; - }; + 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 p00 : ( -# 127 "parser_cocci_menhir.mly" + let _1 : ( +# 159 "parser_cocci_menhir.mly" (string * Data.clt) -# 14217 "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 - -# 715 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 14229 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 14235 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 14243 "parser_cocci_menhir.ml" - - in - -# 728 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 14249 "parser_cocci_menhir.ml" +# 11370 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_enum_val = +# 821 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 11378 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14258,22 +11387,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 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 14270 "parser_cocci_menhir.ml" - ) = Obj.magic r in - let _startpos = _startpos_r_ in - let _endpos = _endpos_r_ in - let _v : 'tv_ctype = -# 730 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) ) -# 14277 "parser_cocci_menhir.ml" + let _1 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 11399 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_enum_val = +# 823 "parser_cocci_menhir.mly" + ( tmeta_to_exp _1 ) +# 11406 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14286,22 +11415,24 @@ 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 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 14298 "parser_cocci_menhir.ml" - ) = Obj.magic r in - let _startpos = _startpos_r_ in - let _endpos = _endpos_r_ in - let _v : 'tv_ctype = -# 732 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) ) -# 14305 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 11427 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_enum_val = +# 825 "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)) ) +# 11436 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14313,71 +11444,25 @@ 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.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 = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let rp : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 14336 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in - let lp : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 14342 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let _startpos = _startpos_lp_ in - let _endpos = _endpos_rp_ in - let _v : 'tv_ctype = -# 734 "parser_cocci_menhir.mly" - ( let (mids,code) = t in - Ast0.wrap - (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 14351 "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 = _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_array_dec_ = Obj.magic _2 in - let _1 : 'tv_disj_ident = Obj.magic _1 in + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 11457 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_d_ident = -# 1339 "parser_cocci_menhir.mly" - ( (_1, function t -> P.arrayify t _2) ) -# 14381 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_enum_val = +# 829 "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)) ) +# 11466 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14395,13 +11480,19 @@ 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_nest_expressions_ = Obj.magic _1 in + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 11487 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_dargexpr = -# 1477 "parser_cocci_menhir.mly" - ( _1 ) -# 14405 "parser_cocci_menhir.ml" + let _v : 'tv_enum_val = +# 833 "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)) ) +# 11496 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14413,31 +11504,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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.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 a : 'tv_list_array_dec_ = Obj.magic a in - let i : 'tv_disj_ident = Obj.magic i in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_a_ in - let _v : 'tv_decl = -# 1070 "parser_cocci_menhir.mly" - ( let t = P.arrayify t a in Ast0.wrap(Ast0.Param(t, Some i)) ) -# 14441 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_exists = +# 316 "parser_cocci_menhir.mly" + ( Ast.Exists ) +# 11518 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14450,18 +11527,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 = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + 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_decl = -# 1071 "parser_cocci_menhir.mly" - ( (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) ) -# 14465 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_exists = +# 317 "parser_cocci_menhir.mly" + ( Ast.Forall ) +# 11540 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14472,87 +11547,13 @@ 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.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 = 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 rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 14521 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 14527 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let rp : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 14532 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let i : 'tv_disj_ident = Obj.magic i in - let s : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 14538 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let lp : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 14543 "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 = -# 1074 "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)) ) -# 14556 "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_exists = +# 318 "parser_cocci_menhir.mly" + ( Ast.Undetermined ) +# 11557 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14570,18 +11571,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 14577 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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_decl = -# 1081 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) ) -# 14585 "parser_cocci_menhir.ml" + let _v : 'tv_expr = +# 1478 "parser_cocci_menhir.mly" + ( _1 ) +# 11581 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14594,22 +11590,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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 14606 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl = -# 1083 "parser_cocci_menhir.mly" - ( tmeta_to_param _1 ) -# 14613 "parser_cocci_menhir.ml" + 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_ = +# 1751 "parser_cocci_menhir.mly" + ( r ) +# 11605 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14622,22 +11614,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 = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 14634 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_ident = -# 2056 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 14641 "parser_cocci_menhir.ml" + let m : 'tv_nonempty_list_TMul_ = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos_m_ in + let _v : 'tv_expression_type = +# 577 "parser_cocci_menhir.mly" + ( P.ty_pointerify Type_cocci.Unknown m ) +# 11629 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14649,24 +11637,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 = 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; + }; } = _menhir_stack in - let _1 : ( -# 132 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 14662 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let m : 'tv_list_TMul_ = Obj.magic m in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_ident = -# 2058 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,Ast.NoVal,pure)) ) -# 14670 "parser_cocci_menhir.ml" + let _endpos = _endpos_m_ in + let _v : 'tv_expression_type = +# 579 "parser_cocci_menhir.mly" + ( P.ty_pointerify (Type_cocci.EnumName Type_cocci.NoName) m ) +# 11657 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14678,23 +11665,24 @@ 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_empty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _1 in + let m : 'tv_list_TMul_ = Obj.magic m in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_list_decl_ = -# 2080 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.DOTS - (_1 - (fun _ d -> Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." d))) - (fun c -> Ast0.PComma c))) ) -# 14698 "parser_cocci_menhir.ml" + let _endpos = _endpos_m_ in + let _v : 'tv_expression_type = +# 581 "parser_cocci_menhir.mly" + ( P.ty_pointerify + (Type_cocci.StructUnionName (Type_cocci.Struct,Type_cocci.NoName)) m ) +# 11686 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14706,23 +11694,24 @@ 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _1 in + let m : 'tv_list_TMul_ = Obj.magic m in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_list_name_opt_decl_ = -# 2080 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.DOTS - (_1 - (fun _ d -> Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." d))) - (fun c -> Ast0.PComma c))) ) -# 14726 "parser_cocci_menhir.ml" + let _endpos = _endpos_m_ in + let _v : 'tv_expression_type = +# 584 "parser_cocci_menhir.mly" + ( P.ty_pointerify + (Type_cocci.StructUnionName (Type_cocci.Union,Type_cocci.NoName)) m ) +# 11715 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14733,25 +11722,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 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 14747 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement = -# 1403 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = _1 in - [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) -# 14755 "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_extends = +# 290 "parser_cocci_menhir.mly" + ( () ) +# 11732 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14763,23 +11740,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.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 _1 : 'tv_decl_var = Obj.magic _1 in + let parent : ( +# 114 "parser_cocci_menhir.mly" + (string) +# 11757 "parser_cocci_menhir.ml" + ) = Obj.magic parent in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement = -# 1406 "parser_cocci_menhir.mly" - ( List.map - (function x -> - Ast0.wrap - (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) - _1 ) -# 14783 "parser_cocci_menhir.ml" + let _endpos = _endpos_parent_ in + let _v : 'tv_extends = +# 292 "parser_cocci_menhir.mly" + ( !Data.install_bindings (parent) ) +# 11764 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14791,19 +11772,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 = _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_statement = Obj.magic _1 in + let _2 : ( +# 155 "parser_cocci_menhir.mly" + (string * Data.clt) +# 11790 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 155 "parser_cocci_menhir.mly" + (string * Data.clt) +# 11795 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement = -# 1411 "parser_cocci_menhir.mly" - ( [_1] ) -# 14807 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_filespec = +# 876 "parser_cocci_menhir.mly" + ( [Ast0.wrap + (Ast0.FILEINFO(P.id2mcode _1, + P.id2mcode _2))] ) +# 11804 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14815,47 +11812,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 = 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; - }; - }; + 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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 14838 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 14844 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_disj_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_decl_statement = -# 1420 "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))] ) -# 14859 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_fn_ident = +# 2026 "parser_cocci_menhir.mly" + ( _1 ) +# 11828 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14874,17 +11843,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 14880 "parser_cocci_menhir.ml" +# 131 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 11849 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement_expr = -# 1433 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = _1 in - [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) -# 14888 "parser_cocci_menhir.ml" + let _v : 'tv_fn_ident = +# 2028 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) ) +# 11857 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14902,17 +11871,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_decl_var = Obj.magic _1 in + let _1 : ( +# 131 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 11878 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement_expr = -# 1436 "parser_cocci_menhir.mly" - ( List.map - (function x -> - Ast0.wrap - (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) - _1 ) -# 14916 "parser_cocci_menhir.ml" + let _v : 'tv_fn_ident = +# 2031 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap + (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) ) +# 11887 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14923,20 +11894,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_statement = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement_expr = -# 1441 "parser_cocci_menhir.mly" - ( [_1] ) -# 14940 "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_fninfo = +# 1029 "parser_cocci_menhir.mly" + ( [] ) +# 11904 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14948,46 +11912,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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 14971 "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 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 14977 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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__3_ in - let _v : 'tv_decl_statement_expr = -# 1450 "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))] ) -# 14991 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo = +# 1031 "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 ) +# 11938 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14999,9 +11946,9 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = t; @@ -15010,18 +11957,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let pv : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15017 "parser_cocci_menhir.ml" - ) = Obj.magic pv 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_pv_ in - let _v : 'tv_decl_var = -# 1213 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] ) -# 15025 "parser_cocci_menhir.ml" + let _endpos = _endpos_r_ in + let _v : 'tv_fninfo = +# 1036 "parser_cocci_menhir.mly" + ( (Ast0.FType(t))::r ) +# 11968 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15033,23 +11976,32 @@ 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 : 'tv_fninfo = Obj.magic _2 in let _1 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 15046 "parser_cocci_menhir.ml" +# 121 "parser_cocci_menhir.mly" + (Data.clt) +# 11995 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_var = -# 1214 "parser_cocci_menhir.mly" - ( [P.meta_decl _1] ) -# 15053 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo = +# 1038 "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 ) +# 12005 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15061,45 +12013,49 @@ 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15084 "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 ) -# 15094 "parser_cocci_menhir.ml" - - in - -# 1216 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) - d ) -# 15103 "parser_cocci_menhir.ml" + let _2 : 'tv_fninfo = Obj.magic _2 in + let _1 : ( +# 123 "parser_cocci_menhir.mly" + (string * Data.clt) +# 12032 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo = +# 1043 "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 ) +# 12042 "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 = +# 1049 "parser_cocci_menhir.mly" + ( [] ) +# 12059 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15111,52 +12067,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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15139 "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 ) -# 15151 "parser_cocci_menhir.ml" - - in - -# 1216 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) - d ) -# 15160 "parser_cocci_menhir.ml" + 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 = +# 1051 "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 ) +# 12093 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15168,19 +12101,32 @@ 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; + 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 f : 'tv_funproto = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_f_ in - let _v : 'tv_decl_var = -# 1220 "parser_cocci_menhir.mly" - ( [f] ) -# 15184 "parser_cocci_menhir.ml" + let _2 : 'tv_fninfo_nt = Obj.magic _2 in + let _1 : ( +# 121 "parser_cocci_menhir.mly" + (Data.clt) +# 12120 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo_nt = +# 1057 "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 ) +# 12130 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15192,59 +12138,49 @@ 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 = 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; - }; - }; - }; + 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15225 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15231 "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 = - -# 39 "standard.mly" - ( None ) -# 15241 "parser_cocci_menhir.ml" - - in - -# 1222 "parser_cocci_menhir.mly" - (let (id,fn) = d in - [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 15248 "parser_cocci_menhir.ml" + let _2 : 'tv_fninfo_nt = Obj.magic _2 in + let _1 : ( +# 123 "parser_cocci_menhir.mly" + (string * Data.clt) +# 12157 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo_nt = +# 1062 "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 ) +# 12167 "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 = +# 2286 "parser_cocci_menhir.mly" + ([]) +# 12184 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15256,66 +12192,23 @@ 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 = 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; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let pv : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15294 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15300 "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 ) -# 15312 "parser_cocci_menhir.ml" - - in - -# 1222 "parser_cocci_menhir.mly" - (let (id,fn) = d in - [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 15319 "parser_cocci_menhir.ml" + 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 = +# 2287 "parser_cocci_menhir.mly" + (_2) +# 12212 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15327,54 +12220,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.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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15350 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15360 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 15367 "parser_cocci_menhir.ml" - - in - -# 1227 "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 ) -# 15378 "parser_cocci_menhir.ml" + 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 = +# 2288 "parser_cocci_menhir.mly" + (Ast0.wrap(Ast0.Exp(_1))::_2) +# 12242 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15386,61 +12250,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.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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15414 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15426 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 15433 "parser_cocci_menhir.ml" - - in - -# 1227 "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 ) -# 15444 "parser_cocci_menhir.ml" + 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 = +# 2289 "parser_cocci_menhir.mly" + (_1@_2) +# 12272 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15451,62 +12279,41 @@ 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_; + 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 = +# 2296 "parser_cocci_menhir.mly" + ([]) +# 12289 "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 = 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let pv : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15480 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15491 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 15499 "parser_cocci_menhir.ml" - - in - -# 1227 "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 ) -# 15510 "parser_cocci_menhir.ml" + 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 = +# 2297 "parser_cocci_menhir.mly" + (_2) +# 12317 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15518,68 +12325,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.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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15551 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15564 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 15572 "parser_cocci_menhir.ml" - - in - -# 1227 "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 ) -# 15583 "parser_cocci_menhir.ml" + 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 = +# 2298 "parser_cocci_menhir.mly" + (Ast0.wrap(Ast0.Exp(_1))::_2) +# 12347 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15591,69 +12355,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.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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15624 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15630 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15640 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 15647 "parser_cocci_menhir.ml" - - in - -# 1235 "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))] ) -# 15657 "parser_cocci_menhir.ml" + 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 = +# 2299 "parser_cocci_menhir.mly" + (_1@_2) +# 12377 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15665,76 +12385,42 @@ 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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15703 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15709 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15721 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 15728 "parser_cocci_menhir.ml" - - in - -# 1235 "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))] ) -# 15738 "parser_cocci_menhir.ml" + 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 = +# 2292 "parser_cocci_menhir.mly" + (_1::_2) +# 12407 "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 = +# 2302 "parser_cocci_menhir.mly" + ([]) +# 12424 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15746,76 +12432,42 @@ 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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15784 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15790 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15801 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 15809 "parser_cocci_menhir.ml" - - in - -# 1235 "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))] ) -# 15819 "parser_cocci_menhir.ml" + 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 = +# 2303 "parser_cocci_menhir.mly" + (_1::_2) +# 12454 "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 = +# 2281 "parser_cocci_menhir.mly" + ([]) +# 12471 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15827,83 +12479,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.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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15870 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15876 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 15889 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 15897 "parser_cocci_menhir.ml" - - in - -# 1235 "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))] ) -# 15907 "parser_cocci_menhir.ml" + 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 = +# 2282 "parser_cocci_menhir.mly" + (_1::_2) +# 12501 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15915,104 +12509,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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 pv : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 15968 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 15973 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 15979 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 15984 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 15990 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 15995 "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 ) -# 16004 "parser_cocci_menhir.ml" - - in - -# 1245 "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))] ) -# 16016 "parser_cocci_menhir.ml" + 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 = +# 2283 "parser_cocci_menhir.mly" + (_1@_2) +# 12531 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16024,111 +12539,19 @@ 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 16082 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 16087 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 16093 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 16098 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 16104 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 16109 "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 ) -# 16120 "parser_cocci_menhir.ml" - - in - -# 1245 "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))] ) -# 16132 "parser_cocci_menhir.ml" + 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 = +# 2278 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1)) ) +# 12555 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16140,56 +12563,19 @@ 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 16173 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 16178 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 16184 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_decl_ident = Obj.magic _1 in + let _1 : 'tv_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_decl_var = -# 1253 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, - P.clt2mcode ")" _4,P.clt2mcode ";" _5))] ) -# 16193 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_func_ident = +# 2017 "parser_cocci_menhir.mly" + ( _1 ) +# 12579 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16201,35 +12587,103 @@ 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.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 : ( +# 131 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 12600 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_func_ident = +# 2019 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) ) +# 12608 "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 : ( +# 131 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 12629 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_func_ident = +# 2022 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap + (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) ) +# 12638 "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 = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.semv = lb; + MenhirLib.EngineTypes.startp = _startpos_lb_; + MenhirLib.EngineTypes.endp = _endpos_lb_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - 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 = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + 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 = _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.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; + }; + }; }; }; }; @@ -16237,39 +12691,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _7 : ( -# 179 "parser_cocci_menhir.mly" + let rb : ( +# 173 "parser_cocci_menhir.mly" (Data.clt) -# 16244 "parser_cocci_menhir.ml" - ) = Obj.magic _7 in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" +# 12698 "parser_cocci_menhir.ml" + ) = Obj.magic rb in + let b : 'tv_fun_start = Obj.magic b in + let lb : ( +# 173 "parser_cocci_menhir.mly" (Data.clt) -# 16250 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let _4 : ( +# 12704 "parser_cocci_menhir.ml" + ) = Obj.magic lb in + let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 16255 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( +# 12709 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let d : 'tv_decl_list_decl_ = Obj.magic d in + let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 16261 "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__7_ in - let _v : 'tv_decl_var = -# 1256 "parser_cocci_menhir.mly" - ( [Ast0.wrap - (Ast0.MacroDeclInit - (_1,P.clt2mcode "(" _2,_3, - P.clt2mcode ")" _4,P.clt2mcode "=" q,e, - P.clt2mcode ";" _7))] ) -# 16273 "parser_cocci_menhir.ml" +# 12715 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let i : 'tv_fn_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 = +# 1020 "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)) ) +# 12730 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16281,120 +12738,74 @@ 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 = pt; + MenhirLib.EngineTypes.startp = _startpos_pt_; + MenhirLib.EngineTypes.endp = _endpos_pt_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; 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 = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let pv : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 16344 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( + let pt : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 16350 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 16355 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 16361 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( +# 12776 "parser_cocci_menhir.ml" + ) = Obj.magic pt in + let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 16366 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 16372 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( +# 12781 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 16377 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in +# 12787 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let id : 'tv_fn_ident = Obj.magic id 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 _endpos = _endpos_pt_ in + let _v : 'tv_funproto = let s = # 39 "standard.mly" ( None ) -# 16386 "parser_cocci_menhir.ml" +# 12797 "parser_cocci_menhir.ml" in -# 1265 "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))]) -# 16398 "parser_cocci_menhir.ml" +# 1008 "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)) ) +# 12809 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16406,60 +12817,35 @@ 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 = pt; + MenhirLib.EngineTypes.startp = _startpos_pt_; + MenhirLib.EngineTypes.endp = _endpos_pt_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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; }; }; }; @@ -16467,66 +12853,45 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let pv : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 16474 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( + let pt : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 16480 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 16485 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 16491 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( +# 12860 "parser_cocci_menhir.ml" + ) = Obj.magic pt in + let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 16496 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 16502 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( +# 12865 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 16507 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in +# 12871 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let id : 'tv_fn_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_pv_ in - let _v : 'tv_decl_var = let s = + let _endpos = _endpos_pt_ in + let _v : 'tv_funproto = let s = let x = x0 in # 41 "standard.mly" ( Some x ) -# 16518 "parser_cocci_menhir.ml" +# 12883 "parser_cocci_menhir.ml" in -# 1265 "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))]) -# 16530 "parser_cocci_menhir.ml" +# 1008 "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)) ) +# 12895 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16538,49 +12903,19 @@ 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 = 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; - }; - }; - }; + 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 16566 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let id : 'tv_comma_list_typedef_ident_ = Obj.magic id in - let t : 'tv_typedef_ctype = Obj.magic t in - let s : ( -# 121 "parser_cocci_menhir.mly" - (Data.clt) -# 16573 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = -# 1273 "parser_cocci_menhir.mly" - ( let s = P.clt2mcode "typedef" s in - List.map - (function id -> - Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))) - id ) -# 16584 "parser_cocci_menhir.ml" + let _1 : 'tv_pure_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_ident = +# 2036 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 12919 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16598,17 +12933,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_empty_list_start_dparam_TEllipsis_ = Obj.magic _1 in + let _1 : 'tv_wrapped_sym_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_define_param_list_option = -# 993 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.DOTS - (_1 - (fun _ d -> Ast0.wrap(Ast0.DPdots(P.clt2mcode "," d))) - (fun c -> Ast0.DPComma c))) ) -# 16612 "parser_cocci_menhir.ml" + let _v : 'tv_ident = +# 2037 "parser_cocci_menhir.mly" + ( _1 ) +# 12943 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16627,38 +12958,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 153 "parser_cocci_menhir.mly" - (Data.clt * token) -# 16633 "parser_cocci_menhir.ml" +# 130 "parser_cocci_menhir.mly" + (Parse_aux.midinfo) +# 12964 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_defineop = -# 937 "parser_cocci_menhir.mly" - ( let (clt,ident) = _1 in - let aft = P.get_aft clt in (* move stuff after the define to the ident *) - function body -> - Ast0.wrap - (Ast0.Define - (P.clt2mcode "#define" (P.drop_aft clt), - (match ident with - TMetaId((nm,constraints,seed,pure,clt)) -> - let clt = P.set_aft aft clt in - Ast0.wrap - (Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) - | TIdent((nm,clt)) -> - let clt = P.set_aft aft clt in - Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) - | TSymId(nm,clt) -> - let clt = P.set_aft aft clt in - Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) - | _ -> - raise - (Semantic_cocci.Semantic - "unexpected name for a #define")), - Ast0.wrap Ast0.NoParams, - body)) ) -# 16662 "parser_cocci_menhir.ml" + let _v : 'tv_ident = +# 2039 "parser_cocci_menhir.mly" + ( let (nm,constraints,seed,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) ) +# 12972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16670,63 +12980,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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 16693 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_define_param_list_option = Obj.magic _2 in - let _1 : ( -# 154 "parser_cocci_menhir.mly" - (Data.clt * token * int * int) -# 16699 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_defineop = -# 961 "parser_cocci_menhir.mly" - ( let (clt,ident,parenoff,parencol) = _1 in - let aft = P.get_aft clt in (* move stuff after the define to the ( *) - (* 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,[],[],[]) in - function body -> - Ast0.wrap - (Ast0.Define - (P.clt2mcode "#define" (P.drop_aft clt), - (match ident with - TMetaId((nm,constraints,seed,pure,clt)) -> - Ast0.wrap - (Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) - | TIdent((nm,clt)) -> - Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) - | TSymId(nm,clt) -> - Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) - | _ -> - raise - (Semantic_cocci.Semantic - "unexpected name for a #define")), - (let clt = P.set_aft aft _3 in - Ast0.wrap (Ast0.DParams (lp,_2,P.clt2mcode ")" clt))),body)) ) -# 16730 "parser_cocci_menhir.ml" + 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 = +# 1989 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) ) +# 12996 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16744,17 +13010,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 16751 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_wrapped_sym_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_dep = -# 299 "parser_cocci_menhir.mly" - ( Ast0.Dep _1 ) -# 16758 "parser_cocci_menhir.ml" + let _v : 'tv_ident_or_const = +# 1990 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 13020 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16766,27 +13028,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 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 16783 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 13041 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_dep = -# 300 "parser_cocci_menhir.mly" - ( Ast0.AntiDep (Ast0.Dep _2) ) -# 16790 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_ident_or_const = +# 1992 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 13049 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16798,31 +13057,23 @@ 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.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.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_dep = Obj.magic _3 in + let _1 : ( +# 152 "parser_cocci_menhir.mly" + (string * Data.clt) +# 13070 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_dep = -# 302 "parser_cocci_menhir.mly" - ( Ast0.AntiDep _3 ) -# 16826 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_incl = +# 329 "parser_cocci_menhir.mly" + ( let (x,_) = _1 in Data.Include(x) ) +# 13077 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16845,16 +13096,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; } = _menhir_stack in let _2 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 16851 "parser_cocci_menhir.ml" +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 13102 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_dep = -# 303 "parser_cocci_menhir.mly" - ( Ast0.EverDep _2 ) -# 16858 "parser_cocci_menhir.ml" + let _v : 'tv_incl = +# 330 "parser_cocci_menhir.mly" + ( Data.Iso(Common.Left(P.id2name _2)) ) +# 13109 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16877,16 +13128,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; } = _menhir_stack in let _2 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 16883 "parser_cocci_menhir.ml" +# 151 "parser_cocci_menhir.mly" + (string) +# 13134 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_dep = -# 304 "parser_cocci_menhir.mly" - ( Ast0.NeverDep _2 ) -# 16890 "parser_cocci_menhir.ml" + let _v : 'tv_incl = +# 331 "parser_cocci_menhir.mly" + ( Data.Iso(Common.Right _2) ) +# 13141 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16898,29 +13149,30 @@ 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.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_dep = Obj.magic _3 in - let _1 : 'tv_dep = Obj.magic _1 in + let _2 : 'tv_comma_list_pure_ident_ = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_dep = -# 305 "parser_cocci_menhir.mly" - ( Ast0.AndDep(_1, _3) ) -# 16924 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_incl = +# 333 "parser_cocci_menhir.mly" + ( let names = List.map P.id2name _2 in + Iteration.parsed_virtual_rules := + Common.union_set names !Iteration.parsed_virtual_rules; + (* ensure that the names of virtual and real rules don't overlap *) + List.iter + (function name -> Hashtbl.add Data.all_metadecls name []) + names; + Data.Virt(names) ) +# 13176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16932,29 +13184,27 @@ 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.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 = _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_dep = Obj.magic _3 in - let _1 : 'tv_dep = Obj.magic _1 in + let _1 : 'tv_list_incl_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_dep = -# 306 "parser_cocci_menhir.mly" - ( Ast0.OrDep (_1, _3) ) -# 16958 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : ( +# 220 "parser_cocci_menhir.mly" + (Data.incl_iso list) +# 13204 "parser_cocci_menhir.ml" + ) = +# 325 "parser_cocci_menhir.mly" + ( _1 ) +# 13208 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16966,27 +13216,27 @@ 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.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.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_dep = Obj.magic _2 in + let _1 : 'tv_list_incl_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_dep = -# 307 "parser_cocci_menhir.mly" - ( _2 ) -# 16990 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : ( +# 220 "parser_cocci_menhir.mly" + (Data.incl_iso list) +# 13236 "parser_cocci_menhir.ml" + ) = +# 326 "parser_cocci_menhir.mly" + ( _1 ) +# 13240 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16997,13 +13247,33 @@ 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_depends = -# 295 "parser_cocci_menhir.mly" - ( Ast0.NoDep ) -# 17007 "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 : ( +# 152 "parser_cocci_menhir.mly" + (string * Data.clt) +# 13261 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_includes = +# 882 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.Include(P.clt2mcode "#include" + (P.drop_pos (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))) ) +# 13277 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17015,27 +13285,32 @@ 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.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 parents : 'tv_dep = Obj.magic parents in - let _startpos = _startpos__1_ in - let _endpos = _endpos_parents_ in - let _v : 'tv_depends = -# 296 "parser_cocci_menhir.mly" - ( parents ) -# 17039 "parser_cocci_menhir.ml" + let _1 : ( +# 152 "parser_cocci_menhir.mly" + (string * Data.clt) +# 13298 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_includes = +# 893 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.Include(P.clt2mcode "#include" + (P.drop_pos (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))) ) +# 13314 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17047,7 +13322,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 = { @@ -17058,18 +13332,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_disj_ident = Obj.magic _2 in let _1 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 17066 "parser_cocci_menhir.ml" +# 153 "parser_cocci_menhir.mly" + (Data.clt * token) +# 13339 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_designator = -# 1389 "parser_cocci_menhir.mly" - ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) ) -# 17073 "parser_cocci_menhir.ml" + let _v : 'tv_includes = +# 904 "parser_cocci_menhir.mly" + ( let (clt,ident) = _1 in + let aft = P.get_aft clt in (* move stuff after the define to the ident *) + Ast0.wrap + (Ast0.Undef + (P.clt2mcode "#undef" (P.drop_aft clt), + (match ident with + TMetaId((nm,constraints,seed,pure,clt)) -> + let clt = P.set_aft aft clt in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) + | TIdent((nm,clt)) -> + let clt = P.set_aft aft clt in + Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) + | TSymId(nm,clt) -> + let clt = P.set_aft aft clt in + Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) + | _ -> + raise + (Semantic_cocci.Semantic + "unexpected name for a #define")))) ) +# 13364 "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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let d : 'tv_defineop = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__2_ in + let _v : 'tv_includes = +# 924 "parser_cocci_menhir.mly" + ( d (Ast0.wrap(Ast0.DOTS([]))) ) +# 13392 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17081,13 +13400,47 @@ 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.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 = +# 926 "parser_cocci_menhir.mly" + ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in + d (Ast0.wrap(Ast0.DOTS([ty]))) ) +# 13427 "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; @@ -17097,23 +13450,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 17104 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 17110 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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_designator = -# 1391 "parser_cocci_menhir.mly" - ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) ) -# 17117 "parser_cocci_menhir.ml" + let _v : 'tv_includes = +# 929 "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))) ) +# 13469 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17125,56 +13477,68 @@ 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.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 = +# 1352 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitExpr(_1)) ) +# 13493 "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 = _4; - 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 = _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 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 17158 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : 'tv_eexpr = Obj.magic _4 in let _3 : ( -# 145 "parser_cocci_menhir.mly" +# 173 "parser_cocci_menhir.mly" (Data.clt) -# 17164 "parser_cocci_menhir.ml" +# 13524 "parser_cocci_menhir.ml" ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in + let _2 : 'tv_initialize_list = Obj.magic _2 in let _1 : ( -# 174 "parser_cocci_menhir.mly" +# 173 "parser_cocci_menhir.mly" (Data.clt) -# 17170 "parser_cocci_menhir.ml" +# 13530 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_designator = -# 1393 "parser_cocci_menhir.mly" - ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3, - _4,P.clt2mcode "]" _5) ) -# 17178 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_initialize = +# 1354 "parser_cocci_menhir.mly" + ( if P.struct_initializer _2 + then + let il = P.drop_dot_commas _2 in + Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,il,P.clt2mcode "}" _3,false)) + else + Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3,true)) ) +# 13542 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17192,13 +13556,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_pre_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in + let _1 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 13563 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_dexpr = -# 1476 "parser_cocci_menhir.mly" - ( _1 ) -# 17202 "parser_cocci_menhir.ml" + let _v : 'tv_initialize = +# 1361 "parser_cocci_menhir.mly" + (let (nm,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) ) +# 13571 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17210,23 +13579,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.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_separated_nonempty_list_TComma_pure_ident_ = Obj.magic _2 in + let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_disable = -# 313 "parser_cocci_menhir.mly" - ( List.map P.id2name _2 ) -# 17230 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_initialize2 = +# 1367 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitExpr(_1)) ) +# 13595 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17244,13 +13609,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_mident = Obj.magic _1 in + let _1 : 'tv_nest_expressions_only = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_disj_ident = -# 2044 "parser_cocci_menhir.mly" - ( _1 ) -# 17254 "parser_cocci_menhir.ml" + let _v : 'tv_initialize2 = +# 1368 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitExpr(_1)) ) +# 13619 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17262,41 +13627,44 @@ 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 = _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 = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let rp : ( -# 149 "parser_cocci_menhir.mly" + let _3 : ( +# 173 "parser_cocci_menhir.mly" (Data.clt) -# 17285 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let t : 'tv_midzero_list_disj_ident_disj_ident_ = Obj.magic t in - let lp : ( -# 148 "parser_cocci_menhir.mly" +# 13650 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_initialize_list = Obj.magic _2 in + let _1 : ( +# 173 "parser_cocci_menhir.mly" (Data.clt) -# 17291 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let _startpos = _startpos_lp_ in - let _endpos = _endpos_rp_ in - let _v : 'tv_disj_ident = -# 2046 "parser_cocci_menhir.mly" - ( let (mids,code) = t in - Ast0.wrap - (Ast0.DisjId(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 17300 "parser_cocci_menhir.ml" +# 13656 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_initialize2 = +# 1370 "parser_cocci_menhir.mly" + ( if P.struct_initializer _2 + then + let il = P.drop_dot_commas _2 in + Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,il,P.clt2mcode "}" _3,false)) + else + Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3,true)) ) +# 13668 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17308,23 +13676,75 @@ 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 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 13700 "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 = +# 1378 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) ) +# 13708 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 _1 : ( -# 145 "parser_cocci_menhir.mly" + let _3 : 'tv_initialize2 = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" (Data.clt) -# 17321 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in +# 13740 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_mident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_dot_expressions = -# 1486 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) ) -# 17328 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_initialize2 = +# 1380 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) ) +# 13748 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17342,13 +13762,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_nest_expressions = Obj.magic _1 in + let _1 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 13769 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_dot_expressions = -# 1487 "parser_cocci_menhir.mly" - ( _1 ) -# 17352 "parser_cocci_menhir.ml" + let _v : 'tv_initialize2 = +# 1382 "parser_cocci_menhir.mly" + (let (nm,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) ) +# 13777 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17366,13 +13791,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_mident = Obj.magic _1 in + let _1 : ( +# 136 "parser_cocci_menhir.mly" + (Parse_aux.list_info) +# 13798 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_dparam = -# 989 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DParam _1) ) -# 17376 "parser_cocci_menhir.ml" + let _v : 'tv_initialize2 = +# 1385 "parser_cocci_menhir.mly" + (let (nm,lenname,pure,clt) = _1 in + let nm = P.clt2mcode nm clt in + let lenname = + match lenname with + Ast.AnyLen -> Ast0.AnyListLen + | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt) + | Ast.CstLen n -> Ast0.CstListLen n in + Ast0.wrap(Ast0.MetaInitList(nm,lenname,pure)) ) +# 13812 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17390,13 +13826,13 @@ 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_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_eargexpr = -# 1474 "parser_cocci_menhir.mly" - ( _1 ) -# 17400 "parser_cocci_menhir.ml" + let _v : 'tv_initialize_list = +# 1405 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1 P.mkidots (fun c -> Ast0.IComma c))) ) +# 13836 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17409,22 +13845,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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17421 "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_ = -# 2366 "parser_cocci_menhir.mly" - ( (d,None) ) -# 17428 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_invalid = +# 1490 "parser_cocci_menhir.mly" + ( raise (Semantic_cocci.Semantic "not matchable") ) +# 13858 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17435,42 +13865,13 @@ 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; - }; - }; - }; - }; - } = _menhir_stack in - let w : 'tv_eexpr = Obj.magic w in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17467 "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_ = -# 2367 "parser_cocci_menhir.mly" - ( (d,Some w) ) -# 17474 "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_is_expression = +# 321 "parser_cocci_menhir.mly" + ( false ) +# 13875 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17483,22 +13884,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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17495 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_edots_when_TEllipsis_enum_decl_one_ = -# 2366 "parser_cocci_menhir.mly" - ( (d,None) ) -# 17502 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_is_expression = +# 322 "parser_cocci_menhir.mly" + ( true ) +# 13897 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17510,41 +13905,23 @@ 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 = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let w : 'tv_enum_decl_one = Obj.magic w in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17541 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__5_ in - let _v : 'tv_edots_when_TEllipsis_enum_decl_one_ = -# 2367 "parser_cocci_menhir.mly" - ( (d,Some w) ) -# 17548 "parser_cocci_menhir.ml" + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos__1_ in + let _endpos = _endpos_t_ in + let _v : 'tv_iso_ctype_ = +# 2429 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 13925 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17556,23 +13933,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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17569 "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_ = -# 2366 "parser_cocci_menhir.mly" - ( (d,None) ) -# 17576 "parser_cocci_menhir.ml" + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos__1_ in + let _endpos = _endpos_t_ in + let _v : 'tv_iso_ctype_ = +# 2430 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 13953 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17584,41 +13961,23 @@ 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 = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let w : 'tv_initialize = Obj.magic w in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17615 "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_ = -# 2367 "parser_cocci_menhir.mly" - ( (d,Some w) ) -# 17622 "parser_cocci_menhir.ml" + 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_ = +# 2429 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 13981 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17630,23 +13989,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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17643 "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_one_ = -# 2366 "parser_cocci_menhir.mly" - ( (d,None) ) -# 17650 "parser_cocci_menhir.ml" + 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_ = +# 2430 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 14009 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17658,41 +14017,23 @@ 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 = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let w : 'tv_struct_decl_one = Obj.magic w in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 17689 "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_one_ = -# 2367 "parser_cocci_menhir.mly" - ( (d,Some w) ) -# 17696 "parser_cocci_menhir.ml" + let t : 'tv_eexpr = Obj.magic t in + let _startpos = _startpos__1_ in + let _endpos = _endpos_t_ in + let _v : 'tv_iso_eexpr_ = +# 2429 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 14037 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17704,19 +14045,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_pre_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let t : 'tv_eexpr = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_eexpr = -# 1473 "parser_cocci_menhir.mly" - ( _1 ) -# 17720 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_eexpr_ = +# 2430 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 14065 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17728,40 +14073,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_empty_list_start_aexpr_TEllipsis_ = Obj.magic _1 in + let t : 'tv_iso_statement = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_eexpr_list_option = -# 2346 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.DOTS - (_1 - (fun _ d -> Ast0.wrap(Ast0.Edots(P.clt2mcode "..." d,None))) - (fun c -> Ast0.EComma c))) ) -# 17748 "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_empty_list_start_aexpr_TEllipsis_ = -# 2108 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [] ) -# 17765 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_iso_statement_ = +# 2429 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 14093 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17773,36 +14101,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_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _1 in + let t : 'tv_iso_statement = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_empty_list_start_aexpr_TEllipsis_ = -# 2109 "parser_cocci_menhir.mly" - ( _1 ) -# 17789 "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_empty_list_start_dparam_TEllipsis_ = -# 2108 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [] ) -# 17806 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_iso_statement_ = +# 2430 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 14121 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17814,19 +14129,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_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _1 in + let t : 'tv_nest_start = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_empty_list_start_dparam_TEllipsis_ = -# 2109 "parser_cocci_menhir.mly" - ( _1 ) -# 17830 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_nest_start_ = +# 2429 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 14149 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17837,13 +14156,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_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2108 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [] ) -# 17847 "parser_cocci_menhir.ml" + 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_ = +# 2430 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 14177 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17855,19 +14185,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 = 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 _1 : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _1 in + let el : 'tv_list_iso_eexpr__ = Obj.magic el in + let e1 : 'tv_eexpr = Obj.magic e1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2109 "parser_cocci_menhir.mly" - ( _1 ) -# 17871 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14215 "parser_cocci_menhir.ml" + ) = +# 2397 "parser_cocci_menhir.mly" + ( let fn x = Ast0.ExprTag x in P.iso_adjust fn fn e1 el ) +# 14219 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17878,13 +14226,38 @@ 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_empty_list_start_one_dec_decl__TEllipsis_ = -# 2108 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [] ) -# 17888 "parser_cocci_menhir.ml" + let { + 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 el : 'tv_list_iso_eexpr__ = Obj.magic el in + let e1 : 'tv_eexpr = Obj.magic e1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14257 "parser_cocci_menhir.ml" + ) = +# 2399 "parser_cocci_menhir.mly" + ( let fn x = Ast0.ArgExprTag x in P.iso_adjust fn fn e1 el ) +# 14261 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17896,19 +14269,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 = 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 _1 : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _1 in + let el : 'tv_list_iso_eexpr__ = Obj.magic el in + let e1 : 'tv_eexpr = Obj.magic e1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_empty_list_start_one_dec_decl__TEllipsis_ = -# 2109 "parser_cocci_menhir.mly" - ( _1 ) -# 17912 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14299 "parser_cocci_menhir.ml" + ) = +# 2401 "parser_cocci_menhir.mly" + ( let fn x = Ast0.TestExprTag x in P.iso_adjust fn fn e1 el ) +# 14303 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17919,13 +14310,40 @@ 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_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2108 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [] ) -# 17929 "parser_cocci_menhir.ml" + let { + 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 el : 'tv_list_iso_eexpr__ = Obj.magic el in + let e1 : 'tv_eexpr = Obj.magic e1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14341 "parser_cocci_menhir.ml" + ) = +# 2403 "parser_cocci_menhir.mly" + ( let ffn x = Ast0.ExprTag x in + let fn x = Ast0.TestExprTag x in + P.iso_adjust ffn fn e1 el ) +# 14347 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17937,19 +14355,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 = 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 _1 : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _1 in + let sl : 'tv_list_iso_iso_statement__ = Obj.magic sl in + let s1 : 'tv_iso_statement = Obj.magic s1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2109 "parser_cocci_menhir.mly" - ( _1 ) -# 17953 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14385 "parser_cocci_menhir.ml" + ) = +# 2407 "parser_cocci_menhir.mly" + ( let fn x = Ast0.StmtTag x in P.iso_adjust fn fn s1 sl ) +# 14389 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17961,19 +14397,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_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 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_enum_decl_list = -# 835 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1 P.mkedots (fun c -> Ast0.EComma c))) ) -# 17977 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14427 "parser_cocci_menhir.ml" + ) = +# 2409 "parser_cocci_menhir.mly" + ( let fn x = Ast0.TypeCTag x in P.iso_adjust fn fn t1 tl ) +# 14431 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17985,19 +14439,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 = 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 _1 : 'tv_disj_ident = Obj.magic _1 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__1_ in - let _v : 'tv_enum_decl_one = -# 806 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 18001 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14469 "parser_cocci_menhir.ml" + ) = +# 2411 "parser_cocci_menhir.mly" + ( let fn x = Ast0.DotsStmtTag x in P.iso_adjust fn fn e1 el ) +# 14473 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18009,39 +14481,50 @@ 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.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = dl; + MenhirLib.EngineTypes.startp = _startpos_dl_; + MenhirLib.EngineTypes.endp = _endpos_dl_; 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 = 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 _3 : 'tv_enum_val = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 18033 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_disj_ident = Obj.magic _1 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__3_ in - let _v : 'tv_enum_decl_one = -# 808 "parser_cocci_menhir.mly" - ( let id = Ast0.wrap(Ast0.Ident(_1)) in - Ast0.wrap - (Ast0.Assignment - (id,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3, - false)) ) -# 18045 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 236 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 14511 "parser_cocci_menhir.ml" + ) = +# 2413 "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 + let fn x = Ast0.DeclTag x in P.iso_adjust fn fn d1 dl ) +# 14528 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18054,18 +14537,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.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; 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_enum_val = -# 815 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 18069 "parser_cocci_menhir.ml" + let m : 'tv_metadec = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos_m_ in + let _v : ( +# 239 "parser_cocci_menhir.mly" + ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) +# 14552 "parser_cocci_menhir.ml" + ) = +# 256 "parser_cocci_menhir.mly" + ( m "" ) +# 14556 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18077,24 +14564,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 = nm; + MenhirLib.EngineTypes.startp = _startpos_nm_; + MenhirLib.EngineTypes.endp = _endpos_nm_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 18090 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_enum_val = -# 817 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 18098 "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 : ( +# 223 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 14584 "parser_cocci_menhir.ml" + ) = +# 271 "parser_cocci_menhir.mly" + ( P.make_iso_rule_name_result (P.id2name nm) ) +# 14588 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18112,17 +14602,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 18119 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_statement = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_enum_val = -# 819 "parser_cocci_menhir.mly" - ( tmeta_to_exp _1 ) -# 18126 "parser_cocci_menhir.ml" + let _v : 'tv_iso_statement = +# 1195 "parser_cocci_menhir.mly" + ( _1 ) +# 14612 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18140,19 +14626,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 18147 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_decl_var = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_enum_val = -# 821 "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)) ) -# 18156 "parser_cocci_menhir.ml" + let _v : 'tv_iso_statement = +# 1197 "parser_cocci_menhir.mly" + ( match _1 with + [decl] -> + Ast0.wrap + (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),decl)) + | _ -> failwith "exactly one decl allowed in statement iso" ) +# 14640 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18171,18 +14655,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 18177 "parser_cocci_menhir.ml" +# 127 "parser_cocci_menhir.mly" + (string * Data.clt) +# 14661 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_enum_val = -# 825 "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)) ) -# 18186 "parser_cocci_menhir.ml" + let _v : 'tv_iter_ident = +# 2070 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 14668 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18201,18 +14683,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 18207 "parser_cocci_menhir.ml" +# 132 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 14689 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_enum_val = -# 829 "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)) ) -# 18216 "parser_cocci_menhir.ml" + let _v : 'tv_iter_ident = +# 2072 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,Ast.NoVal,pure)) ) +# 14697 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18223,18 +14704,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.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 = -# 316 "parser_cocci_menhir.mly" - ( Ast.Exists ) -# 18238 "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_TMul_ = +# 114 "standard.mly" + ( [] ) +# 14714 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18246,17 +14722,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.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 _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_exists = -# 317 "parser_cocci_menhir.mly" - ( Ast.Forall ) -# 18260 "parser_cocci_menhir.ml" + let xs : 'tv_list_TMul_ = Obj.magic xs in + let x : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 14741 "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 ) +# 14748 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18270,10 +14758,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_exists = -# 318 "parser_cocci_menhir.mly" - ( Ast.Undetermined ) -# 18277 "parser_cocci_menhir.ml" + let _v : 'tv_list_array_dec_ = +# 114 "standard.mly" + ( [] ) +# 14765 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18285,19 +14773,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 : 'tv_basic_expr_expr_invalid_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_expr = -# 1471 "parser_cocci_menhir.mly" - ( _1 ) -# 18301 "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 ) +# 14795 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18308,20 +14802,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 = 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_ = -# 1744 "parser_cocci_menhir.mly" - ( r ) -# 18325 "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" + ( [] ) +# 14812 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18333,19 +14820,42 @@ 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.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 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 ) +# 14842 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let m : 'tv_nonempty_list_TMul_ = Obj.magic m in - let _startpos = _startpos_m_ in - let _endpos = _endpos_m_ in - let _v : 'tv_expression_type = -# 577 "parser_cocci_menhir.mly" - ( P.ty_pointerify Type_cocci.Unknown m ) -# 18349 "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_decl_var_ = +# 114 "standard.mly" + ( [] ) +# 14859 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18357,23 +14867,25 @@ 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 = 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 m : 'tv_list_TMul_ = Obj.magic m in - let _startpos = _startpos__1_ in - let _endpos = _endpos_m_ in - let _v : 'tv_expression_type = -# 579 "parser_cocci_menhir.mly" - ( P.ty_pointerify (Type_cocci.EnumName Type_cocci.NoName) m ) -# 18377 "parser_cocci_menhir.ml" + let xs : 'tv_list_decl_var_ = Obj.magic xs in + let x : 'tv_decl_var = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_decl_var_ = +# 116 "standard.mly" + ( x :: xs ) +# 14889 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18384,25 +14896,13 @@ 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.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 _startpos = _startpos__1_ in - let _endpos = _endpos_m_ in - let _v : 'tv_expression_type = -# 581 "parser_cocci_menhir.mly" - ( P.ty_pointerify - (Type_cocci.StructUnionName (Type_cocci.Struct,Type_cocci.NoName)) m ) -# 18406 "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" + ( [] ) +# 14906 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18414,24 +14914,25 @@ 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 = 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 m : 'tv_list_TMul_ = Obj.magic m in - let _startpos = _startpos__1_ in - let _endpos = _endpos_m_ in - let _v : 'tv_expression_type = -# 584 "parser_cocci_menhir.mly" - ( P.ty_pointerify - (Type_cocci.StructUnionName (Type_cocci.Union,Type_cocci.NoName)) m ) -# 18435 "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 ) +# 14936 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18445,10 +14946,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_extends = -# 290 "parser_cocci_menhir.mly" - ( () ) -# 18452 "parser_cocci_menhir.ml" + let _v : 'tv_list_incl_ = +# 114 "standard.mly" + ( [] ) +# 14953 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18460,27 +14961,25 @@ 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 = 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 parent : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 18477 "parser_cocci_menhir.ml" - ) = Obj.magic parent in - let _startpos = _startpos__1_ in - let _endpos = _endpos_parent_ in - let _v : 'tv_extends = -# 292 "parser_cocci_menhir.mly" - ( !Data.install_bindings (parent) ) -# 18484 "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 ) +# 14983 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18491,36 +14990,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 : ( -# 155 "parser_cocci_menhir.mly" - (string * Data.clt) -# 18510 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 155 "parser_cocci_menhir.mly" - (string * Data.clt) -# 18515 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_filespec = -# 872 "parser_cocci_menhir.mly" - ( [Ast0.wrap - (Ast0.FILEINFO(P.id2mcode _1, - P.id2mcode _2))] ) -# 18524 "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" + ( [] ) +# 15000 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18532,19 +15008,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 : 'tv_disj_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_fn_ident = -# 2019 "parser_cocci_menhir.mly" - ( _1 ) -# 18548 "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 ) +# 15030 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18555,25 +15037,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 : ( -# 131 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 18569 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_fn_ident = -# 2021 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 18577 "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" + ( [] ) +# 15047 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18585,25 +15055,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 : ( -# 131 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 18598 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_fn_ident = -# 2024 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap - (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 18607 "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 ) +# 15077 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18617,10 +15087,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_fninfo = -# 1025 "parser_cocci_menhir.mly" - ( [] ) -# 18624 "parser_cocci_menhir.ml" + let _v : 'tv_list_iso_eexpr__ = +# 114 "standard.mly" + ( [] ) +# 15094 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18632,29 +15102,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 : '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 = -# 1027 "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 ) -# 18658 "parser_cocci_menhir.ml" + let xs : 'tv_list_iso_eexpr__ = Obj.magic xs in + let x : 'tv_iso_eexpr_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_iso_eexpr__ = +# 116 "standard.mly" + ( x :: xs ) +# 15124 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18665,26 +15131,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 = 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 = -# 1032 "parser_cocci_menhir.mly" - ( (Ast0.FType(t))::r ) -# 18688 "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_iso_statement__ = +# 114 "standard.mly" + ( [] ) +# 15141 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18696,32 +15149,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 = 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 : 'tv_fninfo = Obj.magic _2 in - let _1 : ( -# 121 "parser_cocci_menhir.mly" - (Data.clt) -# 18715 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo = -# 1034 "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 ) -# 18725 "parser_cocci_menhir.ml" + let xs : 'tv_list_iso_iso_statement__ = Obj.magic xs in + let x : 'tv_iso_iso_statement_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_iso_iso_statement__ = +# 116 "standard.mly" + ( x :: xs ) +# 15171 "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_nest_start__ = +# 114 "standard.mly" + ( [] ) +# 15188 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18733,32 +15196,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 : 'tv_fninfo = Obj.magic _2 in - let _1 : ( -# 123 "parser_cocci_menhir.mly" - (string * Data.clt) -# 18752 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo = -# 1039 "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 ) -# 18762 "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 ) +# 15218 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18772,10 +15228,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_fninfo_nt = -# 1045 "parser_cocci_menhir.mly" - ( [] ) -# 18779 "parser_cocci_menhir.ml" + let _v : 'tv_list_mul_ = +# 114 "standard.mly" + ( [] ) +# 15235 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18787,29 +15243,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 : '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 = -# 1047 "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 ) -# 18813 "parser_cocci_menhir.ml" + let xs : 'tv_list_mul_ = Obj.magic xs in + let x : 'tv_mul = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mul_ = +# 116 "standard.mly" + ( x :: xs ) +# 15265 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18820,33 +15272,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 : 'tv_fninfo_nt = Obj.magic _2 in - let _1 : ( -# 121 "parser_cocci_menhir.mly" - (Data.clt) -# 18840 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo_nt = -# 1053 "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 ) -# 18850 "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" + ( [] ) +# 15282 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18858,32 +15290,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 : 'tv_fninfo_nt = Obj.magic _2 in - let _1 : ( -# 123 "parser_cocci_menhir.mly" - (string * Data.clt) -# 18877 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo_nt = -# 1058 "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 ) -# 18887 "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 ) +# 15312 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18897,10 +15322,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_dots = -# 2279 "parser_cocci_menhir.mly" - ([]) -# 18904 "parser_cocci_menhir.ml" + let _v : 'tv_list_mzl_disj_ident__ = +# 114 "standard.mly" + ( [] ) +# 15329 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18912,23 +15337,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 : 'tv_fun_after_exp = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_dots = -# 2280 "parser_cocci_menhir.mly" - (_2) -# 18932 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_disj_ident__ = Obj.magic xs in + let x : 'tv_mzl_disj_ident_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_disj_ident__ = +# 116 "standard.mly" + ( x :: xs ) +# 15359 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18939,26 +15366,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 : '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 = -# 2281 "parser_cocci_menhir.mly" - (Ast0.wrap(Ast0.Exp(_1))::_2) -# 18962 "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" + ( [] ) +# 15376 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18970,25 +15384,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 : '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 = -# 2282 "parser_cocci_menhir.mly" - (_1@_2) -# 18992 "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 ) +# 15406 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19002,10 +15416,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_dots_or = -# 2289 "parser_cocci_menhir.mly" - ([]) -# 19009 "parser_cocci_menhir.ml" + let _v : 'tv_list_mzl_fun_after_dots_or__ = +# 114 "standard.mly" + ( [] ) +# 15423 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19017,23 +15431,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 : '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 = -# 2290 "parser_cocci_menhir.mly" - (_2) -# 19037 "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 ) +# 15453 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19044,26 +15460,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 : '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 = -# 2291 "parser_cocci_menhir.mly" - (Ast0.wrap(Ast0.Exp(_1))::_2) -# 19067 "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" + ( [] ) +# 15470 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19075,25 +15478,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 = 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 : '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 = -# 2292 "parser_cocci_menhir.mly" - (_1@_2) -# 19097 "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 ) +# 15500 "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_mctype__ = +# 114 "standard.mly" + ( [] ) +# 15517 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19105,25 +15525,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 : '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 = -# 2285 "parser_cocci_menhir.mly" - (_1::_2) -# 19127 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_mctype__ = Obj.magic xs in + let x : 'tv_mzl_mctype_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_mctype__ = +# 116 "standard.mly" + ( x :: xs ) +# 15547 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19137,10 +15557,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_exp_or = -# 2295 "parser_cocci_menhir.mly" - ([]) -# 19144 "parser_cocci_menhir.ml" + let _v : 'tv_list_mzl_rule_elem_statement__ = +# 114 "standard.mly" + ( [] ) +# 15564 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19152,25 +15572,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 : '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 = -# 2296 "parser_cocci_menhir.mly" - (_1::_2) -# 19174 "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 ) +# 15594 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19184,11 +15604,11 @@ 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 = -# 2274 "parser_cocci_menhir.mly" - ([]) -# 19191 "parser_cocci_menhir.ml" - in + let _v : 'tv_list_mzl_statement__ = +# 114 "standard.mly" + ( [] ) +# 15611 "parser_cocci_menhir.ml" + in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = Obj.repr _v; @@ -19199,25 +15619,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 = 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 : '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 = -# 2275 "parser_cocci_menhir.mly" - (_1::_2) -# 19221 "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 ) +# 15641 "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_struct_decl_one__ = +# 114 "standard.mly" + ( [] ) +# 15658 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19229,25 +15666,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 : '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 = -# 2276 "parser_cocci_menhir.mly" - (_1@_2) -# 19251 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_struct_decl_one__ = Obj.magic xs in + let x : 'tv_mzl_struct_decl_one_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_struct_decl_one__ = +# 116 "standard.mly" + ( x :: xs ) +# 15688 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19258,20 +15695,58 @@ 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_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = +# 114 "standard.mly" + ( [] ) +# 15705 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = 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_fun_after_stm = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_fun_start = -# 2271 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 19275 "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) ) +# 15744 "parser_cocci_menhir.ml" + + in + +# 116 "standard.mly" + ( x :: xs ) +# 15750 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19282,20 +15757,43 @@ 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_list_whenppdecs_ = +# 114 "standard.mly" + ( [] ) +# 15767 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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.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_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_func_ident = -# 2010 "parser_cocci_menhir.mly" - ( _1 ) -# 19299 "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 ) +# 15797 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19313,18 +15811,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 131 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 19320 "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_func_ident = -# 2012 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 19328 "parser_cocci_menhir.ml" + let _v : 'tv_list_len = +# 425 "parser_cocci_menhir.mly" + ( Common.Left _1 ) +# 15821 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19343,18 +15836,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 131 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 19349 "parser_cocci_menhir.ml" +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 15842 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_func_ident = -# 2015 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap - (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 19358 "parser_cocci_menhir.ml" + let _v : 'tv_list_len = +# 426 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in Common.Right (int_of_string x) ) +# 15849 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19365,88 +15856,13 @@ 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.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 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 19418 "parser_cocci_menhir.ml" - ) = Obj.magic rb in - let b : 'tv_fun_start = Obj.magic b in - let lb : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 19424 "parser_cocci_menhir.ml" - ) = Obj.magic lb in - let rp : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 19429 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_decl_ = Obj.magic d in - let lp : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 19435 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let i : 'tv_fn_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 = -# 1016 "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)) ) -# 19450 "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" + ( [] ) +# 15866 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19458,74 +15874,19 @@ 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.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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pt : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 19496 "parser_cocci_menhir.ml" - ) = Obj.magic pt in - let rp : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 19501 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 19507 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let id : 'tv_fn_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 ) -# 19517 "parser_cocci_menhir.ml" - - in - -# 1004 "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)) ) -# 19529 "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 ) +# 15890 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19536,82 +15897,13 @@ 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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 19580 "parser_cocci_menhir.ml" - ) = Obj.magic pt in - let rp : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 19585 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 19591 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let id : 'tv_fn_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 ) -# 19603 "parser_cocci_menhir.ml" - - in - -# 1004 "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)) ) -# 19615 "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_disable_ = +# 57 "standard.mly" + ( [] ) +# 15907 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19624,18 +15916,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_pure_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident = -# 2029 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 19639 "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 ) +# 15931 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19646,20 +15938,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_wrapped_sym_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident = -# 2030 "parser_cocci_menhir.mly" - ( _1 ) -# 19663 "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" + ( [] ) +# 15948 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19672,23 +15957,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 : ( -# 130 "parser_cocci_menhir.mly" - (Parse_aux.midinfo) -# 19684 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident = -# 2032 "parser_cocci_menhir.mly" - ( let (nm,constraints,seed,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) ) -# 19692 "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 ) +# 15972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19699,20 +15979,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 = -# 1982 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) ) -# 19716 "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" + ( [] ) +# 15989 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19725,18 +15998,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_wrapped_sym_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident_or_const = -# 1983 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 19740 "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 ) +# 16013 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19747,53 +16020,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 19761 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident_or_const = -# 1985 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 19769 "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 : ( -# 152 "parser_cocci_menhir.mly" - (string * Data.clt) -# 19790 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_incl = -# 329 "parser_cocci_menhir.mly" - ( let (x,_) = _1 in Data.Include(x) ) -# 19797 "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" + ( [] ) +# 16030 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19805,59 +16038,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.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 19822 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_incl = -# 330 "parser_cocci_menhir.mly" - ( Data.Iso(Common.Left(P.id2name _2)) ) -# 19829 "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 = _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 : ( -# 151 "parser_cocci_menhir.mly" - (string) -# 19854 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_incl = -# 331 "parser_cocci_menhir.mly" - ( Data.Iso(Common.Right _2) ) -# 19861 "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 ) +# 16054 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19868,31 +16061,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 : 'tv_comma_list_pure_ident_ = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_incl = -# 333 "parser_cocci_menhir.mly" - ( let names = List.map P.id2name _2 in - Iteration.parsed_virtual_rules := - Common.union_set names !Iteration.parsed_virtual_rules; - (* ensure that the names of virtual and real rules don't overlap *) - List.iter - (function name -> Hashtbl.add Data.all_metadecls name []) - names; - Data.Virt(names) ) -# 19896 "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" + ( [] ) +# 16071 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19904,59 +16079,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.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 : ( -# 220 "parser_cocci_menhir.mly" - (Data.incl_iso list) -# 19924 "parser_cocci_menhir.ml" - ) = -# 325 "parser_cocci_menhir.mly" - ( _1 ) -# 19928 "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.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 : ( -# 220 "parser_cocci_menhir.mly" - (Data.incl_iso list) -# 19956 "parser_cocci_menhir.ml" - ) = -# 326 "parser_cocci_menhir.mly" - ( _1 ) -# 19960 "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 ) +# 16095 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19975,25 +16110,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 152 "parser_cocci_menhir.mly" - (string * Data.clt) -# 19981 "parser_cocci_menhir.ml" +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 16116 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_includes = -# 878 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.Include(P.clt2mcode "#include" - (P.drop_pos (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))) ) -# 19997 "parser_cocci_menhir.ml" + let _v : 'tv_mctype = +# 743 "parser_cocci_menhir.mly" + ( tmeta_to_type _1 ) +# 16123 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20011,26 +16137,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 152 "parser_cocci_menhir.mly" - (string * Data.clt) -# 20018 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_ctype = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_includes = -# 889 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.Include(P.clt2mcode "#include" - (P.drop_pos (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))) ) -# 20034 "parser_cocci_menhir.ml" + let _v : 'tv_mctype = +# 744 "parser_cocci_menhir.mly" + (_1) +# 16147 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20042,73 +16155,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.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _1 : ( -# 153 "parser_cocci_menhir.mly" - (Data.clt * token) -# 20059 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_includes = -# 900 "parser_cocci_menhir.mly" - ( let (clt,ident) = _1 in - let aft = P.get_aft clt in (* move stuff after the define to the ident *) - Ast0.wrap - (Ast0.Undef - (P.clt2mcode "#undef" (P.drop_aft clt), - (match ident with - TMetaId((nm,constraints,seed,pure,clt)) -> - let clt = P.set_aft aft clt in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) - | TIdent((nm,clt)) -> - let clt = P.set_aft aft clt in - Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) - | TSymId(nm,clt) -> - let clt = P.set_aft aft clt in - Ast0.wrap(Ast0.Id(P.clt2mcode nm clt)) - | _ -> - raise - (Semantic_cocci.Semantic - "unexpected name for a #define")))) ) -# 20084 "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 = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; } = _menhir_stack in - let d : 'tv_defineop = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__2_ in - let _v : 'tv_includes = -# 920 "parser_cocci_menhir.mly" - ( d (Ast0.wrap(Ast0.DOTS([]))) ) -# 20112 "parser_cocci_menhir.ml" + let t : 'tv_typedef_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_t_ in + let _v : 'tv_meta_exp_type = +# 621 "parser_cocci_menhir.mly" + ( [Ast0_cocci.ast0_type_to_type t] ) +# 16171 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20123,27 +16182,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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.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.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; 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 t : 'tv_typedef_ctype = Obj.magic t in + let _startpos = _startpos_t_ in let _endpos = _endpos__3_ in - let _v : 'tv_includes = -# 922 "parser_cocci_menhir.mly" - ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in - d (Ast0.wrap(Ast0.DOTS([ty]))) ) -# 20147 "parser_cocci_menhir.ml" + let _v : 'tv_meta_exp_type = +# 623 "parser_cocci_menhir.mly" + ( [Type_cocci.Array (Ast0_cocci.ast0_type_to_type t)] ) +# 16203 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20155,61 +16211,35 @@ 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 = 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.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 = 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 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 = -# 925 "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))) ) -# 20189 "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 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__1_ in - let _v : 'tv_initialize = -# 1345 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitExpr(_1)) ) -# 20213 "parser_cocci_menhir.ml" + let _endpos = _endpos_m_ in + let _v : 'tv_meta_exp_type = +# 625 "parser_cocci_menhir.mly" + ( List.map + (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m) + t ) +# 16243 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20225,7 +16255,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 = { @@ -20237,28 +16266,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 20244 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_initialize_list = Obj.magic _2 in + let _3 : 'tv_pure_ident = Obj.magic _3 in let _1 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 20250 "parser_cocci_menhir.ml" +# 114 "parser_cocci_menhir.mly" + (string) +# 16274 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_initialize = -# 1347 "parser_cocci_menhir.mly" - ( if P.struct_initializer _2 - then - let il = P.drop_dot_commas _2 in - Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,il,P.clt2mcode "}" _3,false)) - else - Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3,true)) ) -# 20262 "parser_cocci_menhir.ml" + let _v : 'tv_meta_ident = +# 1794 "parser_cocci_menhir.mly" + ( (Some _1,P.id2name _3) ) +# 16281 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20270,24 +16289,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 = _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_pure_ident_kwd = Obj.magic _3 in let _1 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 20283 "parser_cocci_menhir.ml" +# 114 "parser_cocci_menhir.mly" + (string) +# 16312 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize = -# 1354 "parser_cocci_menhir.mly" - (let (nm,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) ) -# 20291 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_meta_ident = +# 1795 "parser_cocci_menhir.mly" + ( (Some _1,_3) ) +# 16319 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20300,18 +16328,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.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; 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 = -# 1360 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitExpr(_1)) ) -# 20315 "parser_cocci_menhir.ml" + let m : 'tv_metadec = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos_m_ in + let _v : ( +# 231 "parser_cocci_menhir.mly" + ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) +# 16343 "parser_cocci_menhir.ml" + ) = +# 255 "parser_cocci_menhir.mly" + ( m (!Ast0.rule_name) ) +# 16347 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20323,19 +16355,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 = _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 : 'tv_nest_expressions_only = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize2 = -# 1361 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitExpr(_1)) ) -# 20339 "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 = + +# 437 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaMetaDecl(arity,name)) in + !Data.add_meta_meta name pure; tok) ) +# 16394 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16400 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20347,44 +16408,48 @@ 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.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; 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__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 _3 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 20370 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_initialize_list = Obj.magic _2 in - let _1 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 20376 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_initialize2 = -# 1363 "parser_cocci_menhir.mly" - ( if P.struct_initializer _2 - then - let il = P.drop_dot_commas _2 in - Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,il,P.clt2mcode "}" _3,false)) - else - Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3,true)) ) -# 20388 "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 = + +# 441 "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) ) +# 16447 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16453 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20396,35 +16461,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.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; 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.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 _3 : 'tv_initialize2 = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 20420 "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 = -# 1371 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) ) -# 20428 "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 = + +# 445 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let len = Ast.AnyLen in + let tok = check_meta(Ast.MetaParamListDecl(arity,name,len)) in + !Data.add_paramlist_meta name len pure; tok) ) +# 16505 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16511 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20436,35 +16519,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.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; 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.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 _3 : 'tv_initialize2 = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 20460 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_mident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_initialize2 = -# 1373 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) ) -# 20468 "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 = + +# 450 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let len = Ast.AnyLen in + let tok = check_meta(Ast.MetaExpListDecl(arity,name,len)) in + !Data.add_explist_meta name len pure; tok) ) +# 16563 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16569 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20476,24 +16577,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 = _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 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 20489 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize2 = -# 1375 "parser_cocci_menhir.mly" - (let (nm,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) ) -# 20497 "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 = + +# 455 "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) ) +# 16616 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16622 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20505,30 +16630,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 = _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 : ( -# 136 "parser_cocci_menhir.mly" - (Parse_aux.list_info) -# 20518 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize2 = -# 1378 "parser_cocci_menhir.mly" - (let (nm,lenname,pure,clt) = _1 in - let nm = P.clt2mcode nm clt in - let lenname = - match lenname with - Ast.AnyLen -> Ast0.AnyListLen - | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt) - | Ast.CstLen n -> Ast0.CstListLen n in - Ast0.wrap(Ast0.MetaInitList(nm,lenname,pure)) ) -# 20532 "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 = + +# 459 "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) ) +# 16669 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16675 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20540,19 +16683,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 : 'tv_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize_list = -# 1398 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1 P.mkidots (fun c -> Ast0.IComma c))) ) -# 20556 "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 = + +# 463 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let len = Ast.AnyLen in + let tok = check_meta(Ast.MetaInitListDecl(arity,name,len)) in + !Data.add_initlist_meta name len pure; tok) ) +# 16727 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16733 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20564,34 +16741,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.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 _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_invalid = -# 1483 "parser_cocci_menhir.mly" - ( raise (Semantic_cocci.Semantic "not matchable") ) -# 20578 "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_is_expression = -# 321 "parser_cocci_menhir.mly" - ( false ) -# 20595 "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 = + +# 468 "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) ) +# 16780 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16786 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20603,17 +16794,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.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 _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_is_expression = -# 322 "parser_cocci_menhir.mly" - ( true ) -# 20617 "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 = + +# 472 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaDeclDecl(arity,name)) in + !Data.add_decl_meta name pure; tok) ) +# 16833 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16839 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20625,23 +16847,48 @@ 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.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 = 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 t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_ctype_ = -# 2422 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 20645 "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 = + +# 476 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaFieldDecl(arity,name)) in + !Data.add_field_meta name pure; tok) ) +# 16886 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16892 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20653,51 +16900,53 @@ 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.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; 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_ = -# 2423 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 20673 "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; + 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 t : 'tv_decl_var = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_decl_var_ = -# 2422 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 20701 "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 = + +# 480 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let len = Ast.AnyLen in + let tok = check_meta(Ast.MetaFieldListDecl(arity,name,len)) in + !Data.add_field_list_meta name len pure; tok) ) +# 16944 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 16950 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20709,23 +16958,52 @@ 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.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; 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 = 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 t : 'tv_decl_var = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_decl_var_ = -# 2423 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 20729 "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 = + +# 485 "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) ) +# 17001 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 17007 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20737,23 +17015,49 @@ 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.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 = 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 t : 'tv_eexpr = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_eexpr_ = -# 2422 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 20757 "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 = + +# 489 "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")) ) +# 17055 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 17061 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20765,23 +17069,53 @@ 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.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; 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 = 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 t : 'tv_eexpr = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_eexpr_ = -# 2423 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 20785 "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 = + +# 494 "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")) ) +# 17113 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 17119 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20793,23 +17127,53 @@ 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.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; 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 = 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 t : 'tv_iso_statement = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_iso_statement_ = -# 2422 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 20813 "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 = + +# 499 "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")) ) +# 17171 "parser_cocci_menhir.ml" + + in + +# 345 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 17177 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20821,23 +17185,40 @@ 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.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 = 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 t : 'tv_iso_statement = Obj.magic t in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = Obj.magic ids in let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_iso_statement_ = -# 2423 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 20841 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_metadec = let kindfn = + +# 430 "parser_cocci_menhir.mly" + ( (fun name check_meta seed -> + let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in + !Data.add_fresh_id_meta name seed; tok) ) +# 17216 "parser_cocci_menhir.ml" + + in + +# 348 "parser_cocci_menhir.mly" + ( P.create_fresh_metadec kindfn ids ) +# 17222 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20849,23 +17230,65 @@ 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.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 = 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 t : 'tv_nest_start = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_nest_start_ = -# 2422 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 20869 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = 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 = + +# 506 "parser_cocci_menhir.mly" + ( + let idfn arity name pure check_meta constraints = + let tok = check_meta(Ast.MetaIdDecl(arity,name)) in + !Data.add_id_meta name constraints pure; tok in + let virtfn arity name pure check_meta virtual_env = + try + let vl = List.assoc name virtual_env in + !Data.add_virt_id_meta_found name vl; [] + with Not_found -> + Iteration.parsed_virtual_identifiers := + Common.union_set [name] + !Iteration.parsed_virtual_identifiers; + let name = ("virtual",name) in + let tok = check_meta(Ast.MetaIdDecl(arity,name)) in + !Data.add_virt_id_meta_not_found name pure; tok in + (idfn,virtfn) ) +# 17282 "parser_cocci_menhir.ml" + + in + +# 354 "parser_cocci_menhir.mly" + ( let (normal,virt) = Common.partition_either (fun x -> x) ids in + let (idfn,virtfn) = kindfn in + function cr -> + (P.create_metadec_with_constraints ar ispure idfn normal cr) @ + (P.create_metadec_virt ar ispure virtfn virt cr) ) +# 17292 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20877,23 +17300,48 @@ 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.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 = 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 t : 'tv_nest_start = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_nest_start_ = -# 2423 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 20897 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 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 = + +# 525 "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) ) +# 17339 "parser_cocci_menhir.ml" + + in + +# 363 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17345 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20905,37 +17353,53 @@ 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 = 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__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 el : 'tv_list_iso_eexpr__ = Obj.magic el in - let e1 : 'tv_eexpr = Obj.magic e1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 20935 "parser_cocci_menhir.ml" - ) = -# 2390 "parser_cocci_menhir.mly" - ( let fn x = Ast0.ExprTag x in P.iso_adjust fn fn e1 el ) -# 20939 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 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 = + +# 529 "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) ) +# 17397 "parser_cocci_menhir.ml" + + in + +# 363 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17403 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20947,37 +17411,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_eexpr__ = Obj.magic el in - let e1 : 'tv_eexpr = Obj.magic e1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 20977 "parser_cocci_menhir.ml" - ) = -# 2392 "parser_cocci_menhir.mly" - ( let fn x = Ast0.ArgExprTag x in P.iso_adjust fn fn e1 el ) -# 20981 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 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 = + +# 534 "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) ) +# 17450 "parser_cocci_menhir.ml" + + in + +# 363 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17456 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20989,37 +17464,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_eexpr__ = Obj.magic el in - let e1 : 'tv_eexpr = Obj.magic e1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 21019 "parser_cocci_menhir.ml" - ) = -# 2394 "parser_cocci_menhir.mly" - ( let fn x = Ast0.TestExprTag x in P.iso_adjust fn fn e1 el ) -# 21023 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 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 = + +# 538 "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) ) +# 17503 "parser_cocci_menhir.ml" + + in + +# 363 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17509 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21031,39 +17517,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_eexpr__ = Obj.magic el in - let e1 : 'tv_eexpr = Obj.magic e1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 21061 "parser_cocci_menhir.ml" - ) = -# 2396 "parser_cocci_menhir.mly" - ( let ffn x = Ast0.ExprTag x in - let fn x = Ast0.TestExprTag x in - P.iso_adjust ffn fn e1 el ) -# 21067 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 = + +# 544 "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) ) +# 17556 "parser_cocci_menhir.ml" + + in + +# 368 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17562 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21075,37 +17570,67 @@ 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.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 sl : 'tv_list_iso_iso_statement__ = Obj.magic sl in - let s1 : 'tv_iso_statement = Obj.magic s1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 21105 "parser_cocci_menhir.ml" - ) = -# 2400 "parser_cocci_menhir.mly" - ( let fn x = Ast0.StmtTag x in P.iso_adjust fn fn s1 sl ) -# 21109 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 ) +# 17615 "parser_cocci_menhir.ml" + + in + +# 548 "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))) ) +# 17628 "parser_cocci_menhir.ml" + + in + +# 368 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17634 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21117,37 +17642,75 @@ 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__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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.semv = x00; + MenhirLib.EngineTypes.startp = _startpos_x00_; + MenhirLib.EngineTypes.endp = _endpos_x00_; 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__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 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 : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 21147 "parser_cocci_menhir.ml" - ) = -# 2402 "parser_cocci_menhir.mly" - ( let fn x = Ast0.TypeCTag x in P.iso_adjust fn fn t1 tl ) -# 21151 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 ) +# 17695 "parser_cocci_menhir.ml" + + in + +# 548 "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))) ) +# 17708 "parser_cocci_menhir.ml" + + in + +# 368 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17714 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21159,37 +17722,68 @@ 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__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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.semv = m0; + MenhirLib.EngineTypes.startp = _startpos_m0_; + MenhirLib.EngineTypes.endp = _endpos_m0_; 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__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 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 : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 21189 "parser_cocci_menhir.ml" - ) = -# 2404 "parser_cocci_menhir.mly" - ( let fn x = Ast0.DotsStmtTag x in P.iso_adjust fn fn e1 el ) -# 21193 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 + +# 557 "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))) ) +# 17781 "parser_cocci_menhir.ml" + + in + +# 368 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17787 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21201,50 +17795,56 @@ 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 = 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.semv = ty0; + MenhirLib.EngineTypes.startp = _startpos_ty0_; + MenhirLib.EngineTypes.endp = _endpos_ty0_; 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 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 : ( -# 236 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 21231 "parser_cocci_menhir.ml" - ) = -# 2406 "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 - let fn x = Ast0.DeclTag x in P.iso_adjust fn fn d1 dl ) -# 21248 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = Obj.magic ids in + let ty0 : 'tv_expression_type = Obj.magic ty0 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 ty = ty0 in + +# 567 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let ty = Some [ty] in + let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in + !Data.add_exp_meta ty name constraints pure; tok) ) +# 17842 "parser_cocci_menhir.ml" + + in + +# 368 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17848 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21256,23 +17856,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 = 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 : ( -# 239 "parser_cocci_menhir.mly" - ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 21272 "parser_cocci_menhir.ml" - ) = -# 256 "parser_cocci_menhir.mly" - ( m "" ) -# 21276 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 ) +# 17894 "parser_cocci_menhir.ml" + + in + +# 572 "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) ) +# 17902 "parser_cocci_menhir.ml" + + in + +# 368 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17908 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21284,27 +17916,63 @@ 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 = nm; - MenhirLib.EngineTypes.startp = _startpos_nm_; - MenhirLib.EngineTypes.endp = _endpos_nm_; - 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.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 nm : 'tv_pure_ident = Obj.magic nm in - let _startpos = _startpos_nm_ in - let _endpos = _endpos__2_ in - let _v : ( -# 223 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 21304 "parser_cocci_menhir.ml" - ) = -# 271 "parser_cocci_menhir.mly" - ( P.make_iso_rule_name_result (P.id2name nm) ) -# 21308 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 ) +# 17962 "parser_cocci_menhir.ml" + + in + +# 572 "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) ) +# 17970 "parser_cocci_menhir.ml" + + in + +# 368 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 17976 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21316,19 +17984,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 = _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 : 'tv_statement = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_iso_statement = -# 1188 "parser_cocci_menhir.mly" - ( _1 ) -# 21332 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = 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 = + +# 590 "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) ) +# 18023 "parser_cocci_menhir.ml" + + in + +# 373 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 18029 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21340,23 +18037,72 @@ 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.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 _1 : 'tv_decl_var = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_iso_statement = -# 1190 "parser_cocci_menhir.mly" - ( match _1 with - [decl] -> - Ast0.wrap - (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),decl)) - | _ -> failwith "exactly one decl allowed in statement iso" ) -# 21360 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = 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 + +# 594 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let ty = Some vl in + (match constraints with + Ast0.NotExpCstrt constraints -> + 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) + ) +# 18100 "parser_cocci_menhir.ml" + + in + +# 373 "parser_cocci_menhir.mly" + ( P.create_metadec_with_constraints ar ispure kindfn ids ) +# 18106 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21368,23 +18114,45 @@ 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.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 _1 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 21381 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_iter_ident = -# 2063 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 21388 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_x_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 = +# 379 "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_with_constraints ar false kindfn ids ) +# 18156 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21396,24 +18164,61 @@ 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__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.next = { + 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 = len; + MenhirLib.EngineTypes.startp = _startpos_len_; + MenhirLib.EngineTypes.endp = _endpos_len_; + 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 _1 : ( -# 132 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 21409 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_iter_ident = -# 2065 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,Ast.NoVal,pure)) ) -# 21417 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let len : 'tv_list_len = Obj.magic len 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 = +# 389 "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,lenname)) in + !Data.add_paramlist_meta name lenname pure; tok) + len ids ) +# 18222 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21424,13 +18229,62 @@ 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" - ( [] ) -# 21434 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.next = { + 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 = len; + MenhirLib.EngineTypes.startp = _startpos_len_; + MenhirLib.EngineTypes.endp = _endpos_len_; + 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 ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let len : 'tv_list_len = Obj.magic len 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 = +# 397 "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,lenname)) in + !Data.add_explist_meta name lenname pure; tok) + len ids ) +# 18288 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21442,29 +18296,61 @@ 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 = len; + MenhirLib.EngineTypes.startp = _startpos_len_; + MenhirLib.EngineTypes.endp = _endpos_len_; + 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_TMul_ = Obj.magic xs in - let x : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 21461 "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 ) -# 21468 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let len : 'tv_list_len = Obj.magic len 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 = +# 405 "parser_cocci_menhir.mly" + ( P.create_len_metadec ar ispure + (fun lenname arity name pure check_meta -> + let tok = check_meta(Ast.MetaFieldListDecl(arity,name,lenname)) in + !Data.add_field_list_meta name lenname pure; tok) + len ids ) +# 18354 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21475,13 +18361,62 @@ 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_array_dec_ = -# 114 "standard.mly" - ( [] ) -# 21485 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.next = { + 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 = len; + MenhirLib.EngineTypes.startp = _startpos_len_; + MenhirLib.EngineTypes.endp = _endpos_len_; + 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 ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let len : 'tv_list_len = Obj.magic len 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 = +# 413 "parser_cocci_menhir.mly" + ( P.create_len_metadec ar ispure + (fun lenname arity name pure check_meta -> + let tok = check_meta(Ast.MetaInitListDecl(arity,name,lenname)) in + !Data.add_initlist_meta name lenname pure; tok) + len ids ) +# 18420 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21493,25 +18428,30 @@ 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__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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.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_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 ) -# 21515 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_ = Obj.magic ids in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_metadec = +# 419 "parser_cocci_menhir.mly" + ( (fun _ -> + let add_sym = fun (nm,_) -> !Data.add_symbol_meta nm in + List.iter add_sym ids; []) + ) +# 18455 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21522,43 +18462,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_list_case_line_ = -# 114 "standard.mly" - ( [] ) -# 21532 "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 = _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 = 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 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 ) -# 21562 "parser_cocci_menhir.ml" + let _1 : 'tv_pure_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_mident = +# 2043 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 18479 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21569,13 +18486,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_list_decl_var_ = -# 114 "standard.mly" - ( [] ) -# 21579 "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_wrapped_sym_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_mident = +# 2044 "parser_cocci_menhir.mly" + ( _1 ) +# 18503 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21587,25 +18511,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.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_list_decl_var_ = Obj.magic xs in - let x : 'tv_decl_var = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_decl_var_ = -# 116 "standard.mly" - ( x :: xs ) -# 21609 "parser_cocci_menhir.ml" + let _1 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 18524 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_mident = +# 2045 "parser_cocci_menhir.mly" + ( tmeta_to_ident _1 ) +# 18531 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21616,13 +18538,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_list_designator_ = -# 114 "standard.mly" - ( [] ) -# 21626 "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 : ( +# 130 "parser_cocci_menhir.mly" + (Parse_aux.midinfo) +# 18552 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_mident = +# 2047 "parser_cocci_menhir.mly" + ( let (nm,constraints,seed,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) ) +# 18560 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21634,25 +18568,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_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 ) -# 21656 "parser_cocci_menhir.ml" + 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_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18590 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21663,13 +18597,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_incl_ = -# 114 "standard.mly" - ( [] ) -# 21673 "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_disj_ident__ = Obj.magic b in + let a : 'tv_disj_ident = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_disj_ident_disj_ident_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18620 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21681,25 +18628,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_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 ) -# 21703 "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_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18650 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21710,13 +18657,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_iso_ctype__ = -# 114 "standard.mly" - ( [] ) -# 21720 "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_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21728,25 +18688,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_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 ) -# 21750 "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_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18710 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21757,13 +18717,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_iso_decl_var__ = -# 114 "standard.mly" - ( [] ) -# 21767 "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_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18740 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21775,25 +18748,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_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 ) -# 21797 "parser_cocci_menhir.ml" + let b : 'tv_list_mzl_mctype__ = Obj.magic b in + let a : 'tv_mctype = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_mctype_mctype_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18770 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21804,13 +18777,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_iso_eexpr__ = -# 114 "standard.mly" - ( [] ) -# 21814 "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_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_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18800 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21822,25 +18808,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_iso_eexpr__ = Obj.magic xs in - let x : 'tv_iso_eexpr_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_iso_eexpr__ = -# 116 "standard.mly" - ( x :: xs ) -# 21844 "parser_cocci_menhir.ml" + 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_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18830 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21851,13 +18837,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_iso_iso_statement__ = -# 114 "standard.mly" - ( [] ) -# 21861 "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_struct_decl_one__ = Obj.magic b in + let a : 'tv_struct_decl_one = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_struct_decl_one_struct_decl_one_ = +# 2367 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 18860 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21869,25 +18868,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_iso_iso_statement__ = Obj.magic xs in - let x : 'tv_iso_iso_statement_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_iso_iso_statement__ = -# 116 "standard.mly" - ( x :: xs ) -# 21891 "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 = +# 850 "parser_cocci_menhir.mly" + ( match f@b(*@ew*) with + [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") + | code -> code ) +# 18892 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21898,13 +18899,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_iso_nest_start__ = -# 114 "standard.mly" - ( [] ) -# 21908 "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 = +# 864 "parser_cocci_menhir.mly" + ( match f@[b](*@ew*) with + [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") + | code -> code ) +# 18924 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21916,25 +18932,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_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 ) -# 21938 "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 : ( +# 211 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 18952 "parser_cocci_menhir.ml" + ) = +# 251 "parser_cocci_menhir.mly" + ( _1 ) +# 18956 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21945,13 +18963,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_ctype__ = -# 114 "standard.mly" - ( [] ) -# 21955 "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 : ( +# 211 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 18984 "parser_cocci_menhir.ml" + ) = +# 251 "parser_cocci_menhir.mly" + ( m ) +# 18988 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21963,25 +18996,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.next = _menhir_stack; - }; + 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_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 ) -# 21985 "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 : ( +# 211 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 19016 "parser_cocci_menhir.ml" + ) = +# 252 "parser_cocci_menhir.mly" + ( m ) +# 19020 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21992,13 +19027,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_disj_ident__ = -# 114 "standard.mly" - ( [] ) -# 22002 "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 : ( +# 208 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 19048 "parser_cocci_menhir.ml" + ) = +# 247 "parser_cocci_menhir.mly" + ( _1 ) +# 19052 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22010,25 +19060,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_mzl_disj_ident__ = Obj.magic xs in - let x : 'tv_mzl_disj_ident_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_disj_ident__ = -# 116 "standard.mly" - ( x :: xs ) -# 22032 "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 : ( +# 208 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 19080 "parser_cocci_menhir.ml" + ) = +# 247 "parser_cocci_menhir.mly" + ( m ) +# 19084 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22039,13 +19091,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_eexpr__ = -# 114 "standard.mly" - ( [] ) -# 22049 "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 : ( +# 208 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 19112 "parser_cocci_menhir.ml" + ) = +# 248 "parser_cocci_menhir.mly" + ( m ) +# 19116 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22057,25 +19124,19 @@ 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.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_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 ) -# 22079 "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 = +# 2192 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(_1))] ) +# 19140 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22086,13 +19147,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_list_mzl_fun_after_dots_or__ = -# 114 "standard.mly" - ( [] ) -# 22096 "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 = +# 2193 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) +# 19164 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22104,25 +19172,19 @@ 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.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_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 ) -# 22126 "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 = +# 2194 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) +# 19188 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22133,13 +19195,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_list_mzl_fun_start__ = -# 114 "standard.mly" - ( [] ) -# 22143 "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 = +# 2196 "parser_cocci_menhir.mly" + ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 ) +# 19212 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22151,25 +19220,72 @@ 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.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 a : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 19233 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_a_ in + let _v : 'tv_mul = let b = + +# 39 "standard.mly" + ( None ) +# 19241 "parser_cocci_menhir.ml" + + in + +# 740 "parser_cocci_menhir.mly" + ( (a,b) ) +# 19247 "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 = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; 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 ) -# 22173 "parser_cocci_menhir.ml" + let x0 : 'tv_const_vol = Obj.magic x0 in + let a : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 19274 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_x0_ in + let _v : 'tv_mul = let b = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 19283 "parser_cocci_menhir.ml" + + in + +# 740 "parser_cocci_menhir.mly" + ( (a,b) ) +# 19289 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22180,13 +19296,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_list_mzl_mctype__ = -# 114 "standard.mly" - ( [] ) -# 22190 "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_ctype = Obj.magic b in + let a : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19316 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_ctype_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19323 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22198,25 +19331,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 = 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_mctype__ = Obj.magic xs in - let x : 'tv_mzl_mctype_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_mctype__ = -# 116 "standard.mly" - ( x :: xs ) -# 22220 "parser_cocci_menhir.ml" + let b : 'tv_disj_ident = Obj.magic b in + let a : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19350 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_disj_ident_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19357 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22227,13 +19364,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_list_mzl_rule_elem_statement__ = -# 114 "standard.mly" - ( [] ) -# 22237 "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 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19384 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_eexpr_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19391 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22245,25 +19399,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 = 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_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 ) -# 22267 "parser_cocci_menhir.ml" + let b : 'tv_fun_after_dots_or = Obj.magic b in + let a : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19418 "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_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19425 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22274,13 +19432,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_list_mzl_statement__ = -# 114 "standard.mly" - ( [] ) -# 22284 "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 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19452 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_fun_start_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19459 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22292,25 +19467,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 = 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_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 ) -# 22314 "parser_cocci_menhir.ml" + let b : 'tv_mctype = Obj.magic b in + let a : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19486 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_mctype_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19493 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22321,13 +19500,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_list_mzl_struct_decl_one__ = -# 114 "standard.mly" - ( [] ) -# 22331 "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_rule_elem_statement = Obj.magic b in + let a : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19520 "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_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19527 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22339,25 +19535,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 = 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_struct_decl_one__ = Obj.magic xs in - let x : 'tv_mzl_struct_decl_one_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_struct_decl_one__ = -# 116 "standard.mly" - ( x :: xs ) -# 22361 "parser_cocci_menhir.ml" + let b : 'tv_statement = Obj.magic b in + let a : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19554 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_statement_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19561 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22368,13 +19568,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_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = -# 114 "standard.mly" - ( [] ) -# 22378 "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_struct_decl_one = Obj.magic b in + let a : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19588 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_struct_decl_one_ = +# 2370 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 19595 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22386,40 +19603,19 @@ 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.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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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) ) -# 22417 "parser_cocci_menhir.ml" - - in - -# 116 "standard.mly" - ( x :: xs ) -# 22423 "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 = +# 1090 "parser_cocci_menhir.mly" + ( _1 ) +# 19619 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22430,13 +19626,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_list_whenppdecs_ = -# 114 "standard.mly" - ( [] ) -# 22440 "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 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19670 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 19676 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let rp : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 19681 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let s : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 19686 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let lp : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 19691 "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 = +# 1093 "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)) ) +# 19704 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22448,25 +19712,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.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_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 ) -# 22470 "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 = +# 2312 "parser_cocci_menhir.mly" + (_1@_2) +# 19734 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22478,19 +19742,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 = _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 _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let _2 : 'tv_nest_after_exp = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_list_len = -# 425 "parser_cocci_menhir.mly" - ( Common.Left _1 ) -# 22494 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_dots = +# 2313 "parser_cocci_menhir.mly" + (_2) +# 19762 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22502,23 +19770,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 22515 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + 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__1_ in - let _v : 'tv_list_len = -# 426 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in Common.Right (int_of_string x) ) -# 22522 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_dots = +# 2314 "parser_cocci_menhir.mly" + ((Ast0.wrap(Ast0.Exp(_1)))::_2) +# 19792 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22532,10 +19802,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_choose_iso_ = -# 57 "standard.mly" - ( [] ) -# 22539 "parser_cocci_menhir.ml" + let _v : 'tv_nest_after_exp = +# 2322 "parser_cocci_menhir.mly" + ([]) +# 19809 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22547,19 +19817,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_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 ) -# 22563 "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 = +# 2323 "parser_cocci_menhir.mly" + (_1::_2) +# 19839 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22573,10 +19849,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_disable_ = -# 57 "standard.mly" - ( [] ) -# 22580 "parser_cocci_menhir.ml" + let _v : 'tv_nest_after_stm = +# 2317 "parser_cocci_menhir.mly" + ([]) +# 19856 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22588,19 +19864,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_disable = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_disable_ = -# 59 "standard.mly" - ( x ) -# 22604 "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 = +# 2318 "parser_cocci_menhir.mly" + (_1::_2) +# 19886 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22611,13 +19893,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_loption_filespec_ = -# 57 "standard.mly" - ( [] ) -# 22621 "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_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 = +# 2319 "parser_cocci_menhir.mly" + (_1@_2) +# 19916 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22629,19 +19924,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + 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; + }; + }; } = _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 ) -# 22645 "parser_cocci_menhir.ml" + let c : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 19947 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in + let _1 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 19953 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_c_ in + let _v : 'tv_nest_expressions = +# 1499 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1, + Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), + P.clt2mcode "...>" c, None, false)) ) +# 19962 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22652,13 +19969,42 @@ 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" - ( [] ) -# 22662 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + 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; + }; + }; + } = _menhir_stack in + let c : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 19993 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in + let _1 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 19999 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_c_ in + let _v : 'tv_nest_expressions = +# 1503 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1, + Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), + P.clt2mcode "...+>" c, None, true)) ) +# 20008 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22671,35 +20017,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 = 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_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 ) -# 22686 "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_not_pos_ = -# 57 "standard.mly" - ( [] ) -# 22703 "parser_cocci_menhir.ml" + let _1 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 20029 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_nest_expressions = +# 1506 "parser_cocci_menhir.mly" + ( tmeta_to_exp _1 ) +# 20036 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22711,19 +20044,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + 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; + }; + }; } = _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 ) -# 22727 "parser_cocci_menhir.ml" + let c : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 20067 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in + let _1 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 20073 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_c_ in + let _v : 'tv_nest_expressions_only = +# 1510 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1, + Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), + P.clt2mcode "...>" c, None, false)) ) +# 20082 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22734,13 +20089,42 @@ 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_plus_start_ = -# 57 "standard.mly" - ( [] ) -# 22744 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + 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; + }; + }; + } = _menhir_stack in + let c : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 20113 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in + let _1 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 20119 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_c_ in + let _v : 'tv_nest_expressions_only = +# 1514 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1, + Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), + P.clt2mcode "...+>" c, None, true)) ) +# 20128 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22753,18 +20137,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_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 ) -# 22768 "parser_cocci_menhir.ml" + 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 = +# 2309 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1)) ) +# 20152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22777,22 +20161,20 @@ 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 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 22789 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_mctype = -# 739 "parser_cocci_menhir.mly" - ( tmeta_to_type _1 ) -# 22796 "parser_cocci_menhir.ml" + let _v : ( +# 242 "parser_cocci_menhir.mly" + (unit) +# 20174 "parser_cocci_menhir.ml" + ) = +# 2437 "parser_cocci_menhir.mly" + ( () ) +# 20178 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22804,19 +20186,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.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 : 'tv_ctype = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_mctype = -# 740 "parser_cocci_menhir.mly" - (_1) -# 22820 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : ( +# 242 "parser_cocci_menhir.mly" + (unit) +# 20204 "parser_cocci_menhir.ml" + ) = +# 2438 "parser_cocci_menhir.mly" + ( () ) +# 20208 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22829,18 +20217,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let t : 'tv_typedef_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_t_ in - let _v : 'tv_meta_exp_type = -# 620 "parser_cocci_menhir.mly" - ( [Ast0_cocci.ast0_type_to_type t] ) -# 22844 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : ( +# 242 "parser_cocci_menhir.mly" + (unit) +# 20230 "parser_cocci_menhir.ml" + ) = +# 2439 "parser_cocci_menhir.mly" + ( () ) +# 20234 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22852,27 +20242,26 @@ 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 = dg; + MenhirLib.EngineTypes.startp = _startpos_dg_; + MenhirLib.EngineTypes.endp = _endpos_dg_; MenhirLib.EngineTypes.next = { - 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.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 t : 'tv_typedef_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos__3_ in - let _v : 'tv_meta_exp_type = -# 622 "parser_cocci_menhir.mly" - ( [Type_cocci.Array (Ast0_cocci.ast0_type_to_type t)] ) -# 22876 "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__ = +# 1756 "parser_cocci_menhir.mly" + ( function dot_builder -> + g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) ) +# 20265 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22884,35 +20273,23 @@ 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.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.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + 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 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_m_ in - let _v : 'tv_meta_exp_type = -# 624 "parser_cocci_menhir.mly" - ( List.map - (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m) - t ) -# 22916 "parser_cocci_menhir.ml" + let ty : ( +# 118 "parser_cocci_menhir.mly" + (Data.clt) +# 20286 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_non_signable_types = +# 677 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) +# 20293 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22924,33 +20301,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 = ty2; + MenhirLib.EngineTypes.startp = _startpos_ty2_; + MenhirLib.EngineTypes.endp = _endpos_ty2_; 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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty1; + MenhirLib.EngineTypes.startp = _startpos_ty1_; + MenhirLib.EngineTypes.endp = _endpos_ty1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : 'tv_pure_ident = Obj.magic _3 in - let _1 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 22947 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_meta_ident = -# 1787 "parser_cocci_menhir.mly" - ( (Some _1,P.id2name _3) ) -# 22954 "parser_cocci_menhir.ml" + let ty2 : ( +# 116 "parser_cocci_menhir.mly" + (Data.clt) +# 20319 "parser_cocci_menhir.ml" + ) = Obj.magic ty2 in + let ty1 : ( +# 116 "parser_cocci_menhir.mly" + (Data.clt) +# 20324 "parser_cocci_menhir.ml" + ) = Obj.magic ty1 in + let _startpos = _startpos_ty1_ in + let _endpos = _endpos_ty2_ in + let _v : 'tv_non_signable_types = +# 679 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongDoubleType, + [P.clt2mcode "long" ty1;P.clt2mcode "double" ty2])) ) +# 20334 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22962,33 +20342,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.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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_pure_ident_kwd = Obj.magic _3 in - let _1 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 22985 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_meta_ident = -# 1788 "parser_cocci_menhir.mly" - ( (Some _1,_3) ) -# 22992 "parser_cocci_menhir.ml" + let ty : ( +# 116 "parser_cocci_menhir.mly" + (Data.clt) +# 20355 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_non_signable_types = +# 684 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) +# 20362 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23001,22 +20371,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 = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; 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 : ( -# 231 "parser_cocci_menhir.mly" - ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 23016 "parser_cocci_menhir.ml" - ) = -# 255 "parser_cocci_menhir.mly" - ( m (!Ast0.rule_name) ) -# 23020 "parser_cocci_menhir.ml" + let ty : ( +# 116 "parser_cocci_menhir.mly" + (Data.clt) +# 20383 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_non_signable_types = +# 686 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) +# 20390 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23028,48 +20398,23 @@ 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = - -# 437 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaMetaDecl(arity,name)) in - !Data.add_meta_meta name pure; tok) ) -# 23067 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23073 "parser_cocci_menhir.ml" + let ty : ( +# 117 "parser_cocci_menhir.mly" + (Data.clt) +# 20411 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_non_signable_types = +# 688 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.SizeType,[P.clt2mcode "size_t" ty])) ) +# 20418 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23081,48 +20426,23 @@ 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = - -# 441 "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) ) -# 23120 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23126 "parser_cocci_menhir.ml" + let ty : ( +# 117 "parser_cocci_menhir.mly" + (Data.clt) +# 20439 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_non_signable_types = +# 690 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.SSizeType,[P.clt2mcode "ssize_t" ty])) ) +# 20446 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23134,53 +20454,57 @@ 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.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 : ( +# 117 "parser_cocci_menhir.mly" + (Data.clt) +# 20467 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_non_signable_types = +# 692 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.PtrDiffType,[P.clt2mcode "ptrdiff_t" ty])) ) +# 20474 "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.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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + 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 = - -# 445 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let len = Ast.AnyLen in - let tok = check_meta(Ast.MetaParamListDecl(arity,name,len)) in - !Data.add_paramlist_meta name len pure; tok) ) -# 23178 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23184 "parser_cocci_menhir.ml" + let i : 'tv_ident = Obj.magic i in + let s : ( +# 118 "parser_cocci_menhir.mly" + (Data.clt) +# 20501 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_i_ in + let _v : 'tv_non_signable_types = +# 694 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, Some i)) ) +# 20508 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23192,53 +20516,59 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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.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.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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + 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 = + let r : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20544 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let ids : 'tv_enum_decl_list = Obj.magic ids in + let l : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20550 "parser_cocci_menhir.ml" + ) = Obj.magic l in + let s : ( +# 118 "parser_cocci_menhir.mly" + (Data.clt) +# 20555 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_r_ in + let _v : 'tv_non_signable_types = let i = -# 450 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let len = Ast.AnyLen in - let tok = check_meta(Ast.MetaExpListDecl(arity,name,len)) in - !Data.add_explist_meta name len pure; tok) ) -# 23236 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 20563 "parser_cocci_menhir.ml" in -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23242 "parser_cocci_menhir.ml" +# 696 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "enums must be named in the iso file"); + Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), + P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) +# 20572 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23250,48 +20580,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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + 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 = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; 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 = + let r : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20613 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let ids : 'tv_enum_decl_list = Obj.magic ids in + let l : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20619 "parser_cocci_menhir.ml" + ) = Obj.magic l in + let x0 : 'tv_ident = Obj.magic x0 in + let s : ( +# 118 "parser_cocci_menhir.mly" + (Data.clt) +# 20625 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_r_ in + let _v : 'tv_non_signable_types = let i = + let x = x0 in -# 455 "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) ) -# 23289 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 20634 "parser_cocci_menhir.ml" in -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23295 "parser_cocci_menhir.ml" +# 696 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "enums must be named in the iso file"); + Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), + P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) +# 20643 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23303,48 +20651,25 @@ 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 = 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__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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + 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 = - -# 459 "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) ) -# 23342 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23348 "parser_cocci_menhir.ml" + let i : 'tv_type_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_non_signable_types = +# 701 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) +# 20673 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23356,53 +20681,56 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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.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 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 = + let r : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20709 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let d : 'tv_struct_decl_list = Obj.magic d in + let l : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20715 "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_non_signable_types = let i = -# 463 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let len = Ast.AnyLen in - let tok = check_meta(Ast.MetaInitListDecl(arity,name,len)) in - !Data.add_initlist_meta name len pure; tok) ) -# 23400 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 20724 "parser_cocci_menhir.ml" in -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23406 "parser_cocci_menhir.ml" +# 704 "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)) ) +# 20734 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23414,48 +20742,63 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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 = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + 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 = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; 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 = + let r : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20775 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let d : 'tv_struct_decl_list = Obj.magic d in + let l : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20781 "parser_cocci_menhir.ml" + ) = Obj.magic l in + let x0 : 'tv_type_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_non_signable_types = let i = + let x = x0 in -# 468 "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) ) -# 23453 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 20792 "parser_cocci_menhir.ml" in -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23459 "parser_cocci_menhir.ml" +# 704 "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)) ) +# 20802 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23467,48 +20810,51 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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 = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; 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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + 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 = - -# 472 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaDeclDecl(arity,name)) in - !Data.add_decl_meta name pure; tok) ) -# 23506 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23512 "parser_cocci_menhir.ml" + let r : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20838 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let d : 'tv_struct_decl_list = Obj.magic d in + let l : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 20844 "parser_cocci_menhir.ml" + ) = Obj.magic l in + let s : ( +# 134 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 20849 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_r_ in + let _v : 'tv_non_signable_types = +# 710 "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)) ) +# 20858 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23520,48 +20866,23 @@ 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 = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + 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 = - -# 476 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaFieldDecl(arity,name)) in - !Data.add_field_meta name pure; tok) ) -# 23559 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23565 "parser_cocci_menhir.ml" + let p : ( +# 127 "parser_cocci_menhir.mly" + (string * Data.clt) +# 20879 "parser_cocci_menhir.ml" + ) = Obj.magic p in + let _startpos = _startpos_p_ in + let _endpos = _endpos_p_ in + let _v : 'tv_non_signable_types = +# 714 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) +# 20886 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23573,53 +20894,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 = - -# 480 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let len = Ast.AnyLen in - let tok = check_meta(Ast.MetaFieldListDecl(arity,name,len)) in - !Data.add_field_list_meta name len pure; tok) ) -# 23617 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23623 "parser_cocci_menhir.ml" + let x : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 20907 "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 ] ) +# 20914 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23631,52 +20922,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 = 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__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 = - -# 485 "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) ) -# 23674 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23680 "parser_cocci_menhir.ml" + let xs : 'tv_nonempty_list_TMul_ = Obj.magic xs in + let x : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 20941 "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 ) +# 20948 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23688,49 +20956,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 = 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_ = 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 = - -# 489 "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")) ) -# 23728 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23734 "parser_cocci_menhir.ml" + let _1 : 'tv_aexpr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = +# 2119 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [_1] ) +# 20972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23742,53 +20980,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 = 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 = _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_ = 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 = - -# 494 "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")) ) -# 23786 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23792 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 20998 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_aexpr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = +# 2121 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21007 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23800,53 +21015,37 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = _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_ = 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 = - -# 499 "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")) ) -# 23844 "parser_cocci_menhir.ml" - - in - -# 345 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 23850 "parser_cocci_menhir.ml" + let _3 : 'tv_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21039 "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_nonempty_list_start_aexpr_TEllipsis_ = +# 2124 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (_3 build_dots build_comma) ) +# 21049 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23858,40 +21057,23 @@ 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 = 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; - }; - }; + 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_with_seed_ = Obj.magic ids in + let _2 : 'tv_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_metadec = let kindfn = - -# 430 "parser_cocci_menhir.mly" - ( (fun name check_meta seed -> - let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in - !Data.add_fresh_id_meta name seed; tok) ) -# 23889 "parser_cocci_menhir.ml" - - in - -# 348 "parser_cocci_menhir.mly" - ( P.create_fresh_metadec kindfn ids ) -# 23895 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = +# 2127 "parser_cocci_menhir.mly" + ( _2 ) +# 21077 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23903,65 +21085,23 @@ 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = 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 = - -# 506 "parser_cocci_menhir.mly" - ( - let idfn arity name pure check_meta constraints = - let tok = check_meta(Ast.MetaIdDecl(arity,name)) in - !Data.add_id_meta name constraints pure; tok in - let virtfn arity name pure check_meta virtual_env = - try - let vl = List.assoc name virtual_env in - !Data.add_virt_id_meta_found name vl; [] - with Not_found -> - Iteration.parsed_virtual_identifiers := - Common.union_set [name] - !Iteration.parsed_virtual_identifiers; - let name = ("virtual",name) in - let tok = check_meta(Ast.MetaIdDecl(arity,name)) in - !Data.add_virt_id_meta_not_found name pure; tok in - (idfn,virtfn) ) -# 23955 "parser_cocci_menhir.ml" - - in - -# 354 "parser_cocci_menhir.mly" - ( let (normal,virt) = Common.partition_either (fun x -> x) ids in - let (idfn,virtfn) = kindfn in - function cr -> - (P.create_metadec_with_constraints ar ispure idfn normal cr) @ - (P.create_metadec_virt ar ispure virtfn virt cr) ) -# 23965 "parser_cocci_menhir.ml" + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 21098 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = +# 2128 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [(build_dots "..." d)] ) +# 21105 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23973,48 +21113,34 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 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 = - -# 525 "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) ) -# 24012 "parser_cocci_menhir.ml" - - in - -# 363 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24018 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21131 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 21136 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = +# 2130 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21144 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24026,53 +21152,42 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 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 = - -# 529 "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) ) -# 24070 "parser_cocci_menhir.ml" - - in - -# 363 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24076 "parser_cocci_menhir.ml" + let r : 'tv_continue_list_aexpr_TEllipsis_ = Obj.magic r in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21176 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 21181 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = +# 2133 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + (build_dots "..." d):: + (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (r build_dots build_comma) ) +# 21191 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24084,48 +21199,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 = 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_idconstraint_re_or_not_eqid__ = 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 = - -# 534 "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) ) -# 24123 "parser_cocci_menhir.ml" - - in - -# 363 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24129 "parser_cocci_menhir.ml" + let _1 : 'tv_dparam = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = +# 2119 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [_1] ) +# 21215 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24137,48 +21223,30 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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_idconstraint_re_or_not_eqid__ = 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 = - -# 538 "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) ) -# 24176 "parser_cocci_menhir.ml" - - in - -# 363 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24182 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21241 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_dparam = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = +# 2121 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21250 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24190,48 +21258,37 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = _2; + 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.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_econstraint_re_or_not_eqe_or_sub__ = 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 = - -# 544 "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) ) -# 24229 "parser_cocci_menhir.ml" - - in - -# 368 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24235 "parser_cocci_menhir.ml" + let _3 : 'tv_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21282 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_dparam = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = +# 2124 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (_3 build_dots build_comma) ) +# 21292 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24243,67 +21300,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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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.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.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_econstraint_re_or_not_eqe_or_sub__ = 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 ) -# 24288 "parser_cocci_menhir.ml" - - in - -# 548 "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))) ) -# 24301 "parser_cocci_menhir.ml" - - in - -# 368 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24307 "parser_cocci_menhir.ml" + let _2 : 'tv_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = +# 2127 "parser_cocci_menhir.mly" + ( _2 ) +# 21320 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24315,75 +21328,23 @@ 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.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; - }; - }; - }; - }; - }; - }; + 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 ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 ) -# 24368 "parser_cocci_menhir.ml" - - in - -# 548 "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))) ) -# 24381 "parser_cocci_menhir.ml" - - in - -# 368 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24387 "parser_cocci_menhir.ml" + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 21341 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = +# 2128 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [(build_dots "..." d)] ) +# 21348 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24395,68 +21356,34 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; - }; - }; + 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 ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 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 - -# 557 "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))) ) -# 24454 "parser_cocci_menhir.ml" - - in - -# 368 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24460 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21374 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 21379 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = +# 2130 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21387 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24468,56 +21395,42 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty0; - MenhirLib.EngineTypes.startp = _startpos_ty0_; - MenhirLib.EngineTypes.endp = _endpos_ty0_; - 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = Obj.magic ids in - let ty0 : 'tv_expression_type = Obj.magic ty0 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 ty = ty0 in - -# 567 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let ty = Some [ty] in - let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in - !Data.add_exp_meta ty name constraints pure; tok) ) -# 24515 "parser_cocci_menhir.ml" - - in - -# 368 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24521 "parser_cocci_menhir.ml" + let r : 'tv_continue_list_dparam_TEllipsis_ = Obj.magic r in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21419 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 21424 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = +# 2133 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + (build_dots "..." d):: + (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (r build_dots build_comma) ) +# 21434 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24529,55 +21442,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 = 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_econstraint_re_or_not_eqe_or_sub__ = 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 ) -# 24567 "parser_cocci_menhir.ml" - - in - -# 572 "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) ) -# 24575 "parser_cocci_menhir.ml" - - in - -# 368 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24581 "parser_cocci_menhir.ml" + let _1 : 'tv_enum_decl_one = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = +# 2119 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [_1] ) +# 21458 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24589,63 +21466,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 = 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; - }; - }; - }; - }; + 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_econstraint_re_or_not_eqe_or_sub__ = 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 ) -# 24635 "parser_cocci_menhir.ml" - - in - -# 572 "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) ) -# 24643 "parser_cocci_menhir.ml" - - in - -# 368 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24649 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21484 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_enum_decl_one = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = +# 2121 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21493 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24657,48 +21501,37 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = _2; + 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.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_econstraint_not_ceq_or_sub__ = 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 = - -# 589 "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) ) -# 24696 "parser_cocci_menhir.ml" - - in - -# 373 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24702 "parser_cocci_menhir.ml" + let _3 : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21525 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_enum_decl_one = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = +# 2124 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (_3 build_dots build_comma) ) +# 21535 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24710,72 +21543,23 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; - }; + 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_with_econstraint_not_ceq_or_sub__ = 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 - -# 593 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let ty = Some vl in - (match constraints with - Ast0.NotExpCstrt constraints -> - 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) - ) -# 24773 "parser_cocci_menhir.ml" - - in - -# 373 "parser_cocci_menhir.mly" - ( P.create_metadec_with_constraints ar ispure kindfn ids ) -# 24779 "parser_cocci_menhir.ml" + let _2 : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = +# 2127 "parser_cocci_menhir.mly" + ( _2 ) +# 21563 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24787,45 +21571,54 @@ 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let d : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = +# 2128 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [(build_dots "..." d)] ) +# 21587 "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 = 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; - }; - }; - }; + 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 ids : 'tv_comma_list_pure_ident_or_meta_ident_with_x_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 = -# 379 "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_with_constraints ar false kindfn ids ) -# 24829 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21613 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = +# 2130 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21622 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24837,61 +21630,38 @@ 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.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = len; - MenhirLib.EngineTypes.startp = _startpos_len_; - MenhirLib.EngineTypes.endp = _endpos_len_; - 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; - }; - }; - }; - }; - }; - }; + 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 ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let len : 'tv_list_len = Obj.magic len 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 = -# 389 "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,lenname)) in - !Data.add_paramlist_meta name lenname pure; tok) - len ids ) -# 24895 "parser_cocci_menhir.ml" + let r : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic r in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21654 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = +# 2133 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + (build_dots "..." d):: + (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (r build_dots build_comma) ) +# 21665 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24903,61 +21673,19 @@ 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.next = { - 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 = len; - MenhirLib.EngineTypes.startp = _startpos_len_; - MenhirLib.EngineTypes.endp = _endpos_len_; - 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; - }; - }; - }; - }; - }; - }; - }; - }; + 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_ = Obj.magic ids in - let len : 'tv_list_len = Obj.magic len 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 = -# 397 "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,lenname)) in - !Data.add_explist_meta name lenname pure; tok) - len ids ) -# 24961 "parser_cocci_menhir.ml" + let _1 : 'tv_initialize2 = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2119 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [_1] ) +# 21689 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24969,61 +21697,30 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - 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 = len; - MenhirLib.EngineTypes.startp = _startpos_len_; - MenhirLib.EngineTypes.endp = _endpos_len_; - 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; - }; - }; - }; - }; - }; - }; - }; + 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_ = Obj.magic ids in - let len : 'tv_list_len = Obj.magic len 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 = -# 405 "parser_cocci_menhir.mly" - ( P.create_len_metadec ar ispure - (fun lenname arity name pure check_meta -> - let tok = check_meta(Ast.MetaFieldListDecl(arity,name,lenname)) in - !Data.add_field_list_meta name lenname pure; tok) - len ids ) -# 25027 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21715 "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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2121 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21724 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25035,61 +21732,37 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = len; - MenhirLib.EngineTypes.startp = _startpos_len_; - MenhirLib.EngineTypes.endp = _endpos_len_; - 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; - }; - }; - }; - }; - }; - }; + 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_ = Obj.magic ids in - let len : 'tv_list_len = Obj.magic len 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 = -# 413 "parser_cocci_menhir.mly" - ( P.create_len_metadec ar ispure - (fun lenname arity name pure check_meta -> - let tok = check_meta(Ast.MetaInitListDecl(arity,name,lenname)) in - !Data.add_initlist_meta name lenname pure; tok) - len ids ) -# 25093 "parser_cocci_menhir.ml" + let _3 : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21756 "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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2124 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (_3 build_dots build_comma) ) +# 21766 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25101,30 +21774,23 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - 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 ids : 'tv_comma_list_pure_ident_ = Obj.magic ids in + let _2 : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_metadec = -# 419 "parser_cocci_menhir.mly" - ( (fun _ -> - let add_sym = fun (nm,_) -> !Data.add_symbol_meta nm in - List.iter add_sym ids; []) - ) -# 25128 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2127 "parser_cocci_menhir.mly" + ( _2 ) +# 21794 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25137,18 +21803,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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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_mident = -# 2036 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 25152 "parser_cocci_menhir.ml" + let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2128 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [(build_dots "..." d)] ) +# 21818 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25160,19 +21826,30 @@ 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_wrapped_sym_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_mident = -# 2037 "parser_cocci_menhir.mly" - ( _1 ) -# 25176 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21844 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2130 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21853 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25184,23 +21861,38 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 25197 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_mident = -# 2038 "parser_cocci_menhir.mly" - ( tmeta_to_ident _1 ) -# 25204 "parser_cocci_menhir.ml" + let r : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic r in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21885 "parser_cocci_menhir.ml" + ) = Obj.magic _2 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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = +# 2133 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + (build_dots "..." d):: + (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (r build_dots build_comma) ) +# 21896 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25218,18 +21910,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 130 "parser_cocci_menhir.mly" - (Parse_aux.midinfo) -# 25225 "parser_cocci_menhir.ml" - ) = 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_mident = -# 2040 "parser_cocci_menhir.mly" - ( let (nm,constraints,seed,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) ) -# 25233 "parser_cocci_menhir.ml" + let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = +# 2119 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [_1] ) +# 21920 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25241,25 +21928,30 @@ 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 = _2; + 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_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_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25263 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21946 "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__2_ in + let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = +# 2121 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 21955 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25271,25 +21963,37 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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.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 b : 'tv_list_mzl_disj_ident__ = Obj.magic b in - let a : 'tv_disj_ident = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_disj_ident_disj_ident_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25293 "parser_cocci_menhir.ml" + let _3 : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 21987 "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_nonempty_list_start_one_dec_decl__TEllipsis_ = +# 2124 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (_3 build_dots build_comma) ) +# 21997 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25301,25 +22005,23 @@ 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 = _2; + 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25323 "parser_cocci_menhir.ml" + let _2 : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = +# 2127 "parser_cocci_menhir.mly" + ( _2 ) +# 22025 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25331,85 +22033,23 @@ 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_expr = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_expr_eexpr_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25353 "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_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_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25383 "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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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_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_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25413 "parser_cocci_menhir.ml" + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 22046 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = +# 2128 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [(build_dots "..." d)] ) +# 22053 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25421,25 +22061,34 @@ 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 = _2; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_list_mzl_mctype__ = Obj.magic b in - let a : 'tv_mctype = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_mctype_mctype_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25443 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 22079 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 22084 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = +# 2130 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 22092 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25451,25 +22100,42 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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.semv = _2; + 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 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_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25473 "parser_cocci_menhir.ml" + let r : 'tv_continue_list_one_dec_decl__TEllipsis_ = Obj.magic r in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 22124 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 22129 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = +# 2133 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + (build_dots "..." d):: + (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (r build_dots build_comma) ) +# 22139 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25481,55 +22147,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; - }; - } = _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_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25503 "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 = 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_struct_decl_one__ = Obj.magic b in - let a : 'tv_struct_decl_one = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_struct_decl_one_struct_decl_one_ = -# 2360 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 25533 "parser_cocci_menhir.ml" + 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_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2119 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [_1] ) +# 22163 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25541,27 +22171,30 @@ 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 = _2; + 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack 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_b_ in - let _v : 'tv_minus_body = -# 846 "parser_cocci_menhir.mly" - ( match f@b(*@ew*) with - [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") - | code -> code ) -# 25565 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 22189 "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__2_ in + let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2121 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 22198 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25573,27 +22206,37 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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.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 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 = -# 860 "parser_cocci_menhir.mly" - ( match f@[b](*@ew*) with - [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") - | code -> code ) -# 25597 "parser_cocci_menhir.ml" + let _3 : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 22230 "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_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2124 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (_3 build_dots build_comma) ) +# 22240 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25605,27 +22248,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; }; } = _menhir_stack in - let _1 : 'tv_minus_exp_body = Obj.magic _1 in + let _2 : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 211 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 25625 "parser_cocci_menhir.ml" - ) = -# 251 "parser_cocci_menhir.mly" - ( _1 ) -# 25629 "parser_cocci_menhir.ml" + let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2127 "parser_cocci_menhir.mly" + ( _2 ) +# 22268 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25637,27 +22276,23 @@ 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 = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; - 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 m : 'tv_minus_exp_body = Obj.magic m in - let _startpos = _startpos_m_ in - let _endpos = _endpos__2_ in - let _v : ( -# 211 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 25657 "parser_cocci_menhir.ml" - ) = -# 251 "parser_cocci_menhir.mly" - ( m ) -# 25661 "parser_cocci_menhir.ml" + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 22289 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2128 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> [(build_dots "..." d)] ) +# 22296 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25669,27 +22304,34 @@ 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 22322 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 22327 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in let _endpos = _endpos__2_ in - let _v : ( -# 211 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 25689 "parser_cocci_menhir.ml" - ) = -# 252 "parser_cocci_menhir.mly" - ( m ) -# 25693 "parser_cocci_menhir.ml" + let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2130 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) +# 22335 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25701,27 +22343,42 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + 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 : ( -# 208 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 25721 "parser_cocci_menhir.ml" - ) = -# 247 "parser_cocci_menhir.mly" - ( _1 ) -# 25725 "parser_cocci_menhir.ml" + let r : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = Obj.magic r in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 22367 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let d : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 22372 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = +# 2133 "parser_cocci_menhir.mly" + ( fun build_dots build_comma -> + (build_dots "..." d):: + (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: + (r build_dots build_comma) ) +# 22382 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25733,27 +22390,27 @@ 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + 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 _endpos = _endpos__2_ in - let _v : ( -# 208 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 25753 "parser_cocci_menhir.ml" - ) = -# 247 "parser_cocci_menhir.mly" - ( m ) -# 25757 "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 = +# 1952 "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] ) +# 22414 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25765,27 +22422,35 @@ 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__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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; + 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; + }; + }; }; } = _menhir_stack in - let m : 'tv_minus_body = Obj.magic m in - let _startpos = _startpos_m_ in - let _endpos = _endpos__2_ in - let _v : ( -# 208 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 25785 "parser_cocci_menhir.ml" - ) = -# 248 "parser_cocci_menhir.mly" - ( m ) -# 25789 "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 = +# 1958 "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 ) +# 22454 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25798,18 +22463,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 = ceq; + MenhirLib.EngineTypes.startp = _startpos_ceq_; + MenhirLib.EngineTypes.endp = _endpos_ceq_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_fundecl = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_minus_start = -# 2185 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(_1))] ) -# 25813 "parser_cocci_menhir.ml" + let ceq : 'tv_not_ceq = Obj.magic ceq in + let _startpos = _startpos_ceq_ in + let _endpos = _endpos_ceq_ in + let _v : 'tv_not_ceq_or_sub = +# 1928 "parser_cocci_menhir.mly" + (Ast0.NotExpCstrt ceq) +# 22478 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25822,18 +22487,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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; 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 = -# 2186 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) -# 25837 "parser_cocci_menhir.ml" + let s : 'tv_sub = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_not_ceq_or_sub = +# 1929 "parser_cocci_menhir.mly" + (Ast0.SubExpCstrt s) +# 22502 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25845,19 +22510,28 @@ 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.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_top_init = Obj.magic _1 in + let i : 'tv_pure_ident = Obj.magic i in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_minus_start = -# 2187 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) -# 25861 "parser_cocci_menhir.ml" + let _endpos = _endpos_i_ in + let _v : 'tv_not_eqe = +# 1933 "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))))] + ) +# 22535 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25869,19 +22543,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.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.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 : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = Obj.magic _1 in + let l : 'tv_comma_list_pure_ident_ = Obj.magic l in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_minus_start = -# 2189 "parser_cocci_menhir.mly" - ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 ) -# 25885 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_not_eqe = +# 1940 "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 + ) +# 22579 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25893,29 +22587,35 @@ 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_ctype = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 25912 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_ctype_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 25919 "parser_cocci_menhir.ml" + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos__1_ in + let _endpos = _endpos_i_ in + let _v : 'tv_not_eqid = +# 1890 "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"); + (match i with + (Some rn,id) -> + let i = + P.check_inherited_constraint i + (function mv -> Ast.MetaIdDecl(Ast.NONE,mv)) in + Ast.IdNegIdSet([],[i]) + | (None,i) -> Ast.IdNegIdSet([i],[])) ) +# 22619 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25927,29 +22627,47 @@ 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__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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.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; + }; + }; }; } = _menhir_stack in - let b : 'tv_disj_ident = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 25946 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_disj_ident_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 25953 "parser_cocci_menhir.ml" + let l : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic l in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_not_eqid = +# 1904 "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"); + let (str,meta) = + List.fold_left + (function (str,meta) -> + function + (Some rn,id) as i -> + let i = + P.check_inherited_constraint i + (function mv -> Ast.MetaIdDecl(Ast.NONE,mv)) in + (str,i::meta) + | (None,i) -> (i::str,meta)) + ([],[]) l in + Ast.IdNegIdSet(str,meta) + ) +# 22671 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25961,29 +22679,30 @@ 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_eexpr = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 25980 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_eexpr_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 25987 "parser_cocci_menhir.ml" + let i : 'tv_meta_ident = Obj.magic i in + let _startpos = _startpos__1_ in + let _endpos = _endpos_i_ in + let _v : 'tv_not_pos = +# 1997 "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"); + let i = + P.check_inherited_constraint i + (function mv -> Ast.MetaPosDecl(Ast.NONE,mv)) in + [i] ) +# 22706 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25995,29 +22714,39 @@ 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__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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.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; + }; + }; }; } = _menhir_stack in - let b : 'tv_fun_after_dots_or = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 26014 "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_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 26021 "parser_cocci_menhir.ml" + let l : 'tv_comma_list_meta_ident_ = Obj.magic l in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_not_pos = +# 2006 "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 -> + P.check_inherited_constraint i + (function mv -> Ast.MetaPosDecl(Ast.NONE,mv))) + l ) +# 22750 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26029,29 +22758,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_fun_start = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 26048 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_fun_start_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 26055 "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_ = +# 2094 "parser_cocci_menhir.mly" + ( _1 ) +# 22774 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26063,29 +22782,30 @@ 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_mctype = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 26082 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_mctype_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 26089 "parser_cocci_menhir.ml" + let _1 : ( +# 136 "parser_cocci_menhir.mly" + (Parse_aux.list_info) +# 22795 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_one_dec_decl_ = +# 2096 "parser_cocci_menhir.mly" + ( let (nm,lenname,pure,clt) = _1 in + let nm = P.clt2mcode nm clt in + let lenname = + match lenname with + Ast.AnyLen -> Ast0.AnyListLen + | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt) + | Ast.CstLen n -> Ast0.CstListLen n in + Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) +# 22809 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26097,29 +22817,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_rule_elem_statement = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 26116 "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_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 26123 "parser_cocci_menhir.ml" + 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_ = +# 2094 "parser_cocci_menhir.mly" + ( _1 ) +# 22833 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26131,29 +22841,30 @@ 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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 26150 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_statement_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 26157 "parser_cocci_menhir.ml" + let _1 : ( +# 136 "parser_cocci_menhir.mly" + (Parse_aux.list_info) +# 22854 "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_ = +# 2096 "parser_cocci_menhir.mly" + ( let (nm,lenname,pure,clt) = _1 in + let nm = P.clt2mcode nm clt in + let lenname = + match lenname with + Ast.AnyLen -> Ast0.AnyListLen + | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt) + | Ast.CstLen n -> Ast0.CstListLen n in + Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) +# 22868 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26165,29 +22876,29 @@ 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 = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; 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 = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_struct_decl_one = Obj.magic b in - let a : ( -# 149 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26184 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_struct_decl_one_ = -# 2363 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 26191 "parser_cocci_menhir.ml" +# 22894 "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 = +# 1288 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) ) +# 22902 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26205,13 +22916,17 @@ 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 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 22923 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_name_opt_decl = -# 1086 "parser_cocci_menhir.mly" - ( _1 ) -# 26215 "parser_cocci_menhir.ml" + let _v : 'tv_one_decl_var = +# 1289 "parser_cocci_menhir.mly" + ( P.meta_decl _1 ) +# 22930 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26223,80 +22938,43 @@ 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 = 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 = 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 = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 26266 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 26272 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let rp : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 26277 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let s : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 26282 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let lp : ( -# 148 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26287 "parser_cocci_menhir.ml" - ) = Obj.magic lp in +# 22961 "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_rp1_ in - let _v : 'tv_name_opt_decl = -# 1089 "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)) ) -# 26300 "parser_cocci_menhir.ml" + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = + +# 39 "standard.mly" + ( None ) +# 22971 "parser_cocci_menhir.ml" + + in + +# 1291 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) +# 22978 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26308,53 +22986,50 @@ 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 = 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_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 = -# 2305 "parser_cocci_menhir.mly" - (_1@_2) -# 26330 "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_nest_after_exp = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_dots = -# 2306 "parser_cocci_menhir.mly" - (_2) -# 26358 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23014 "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 ) +# 23026 "parser_cocci_menhir.ml" + + in + +# 1291 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) +# 23033 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26366,25 +23041,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 = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; + 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 _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_dots = -# 2307 "parser_cocci_menhir.mly" - ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 26388 "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_one_decl_var = +# 1293 "parser_cocci_menhir.mly" + ( f ) +# 23057 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26395,13 +23064,60 @@ 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 = -# 2315 "parser_cocci_menhir.mly" - ([]) -# 26405 "parser_cocci_menhir.ml" + 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 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23098 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23104 "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 ) +# 23114 "parser_cocci_menhir.ml" + + in + +# 1295 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) +# 23121 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26413,25 +23129,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_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 = -# 2316 "parser_cocci_menhir.mly" - (_1::_2) -# 26435 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23167 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23173 "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 ) +# 23185 "parser_cocci_menhir.ml" + + in + +# 1295 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) +# 23192 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26442,13 +23199,52 @@ 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 = -# 2310 "parser_cocci_menhir.mly" - ([]) -# 26452 "parser_cocci_menhir.ml" + 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; + }; + }; + } = _menhir_stack in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23223 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23233 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 23240 "parser_cocci_menhir.ml" + + in + +# 1300 "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)) ) +# 23248 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26460,25 +23256,58 @@ 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_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 = -# 2311 "parser_cocci_menhir.mly" - (_1::_2) -# 26482 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23284 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23296 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 23303 "parser_cocci_menhir.ml" + + in + +# 1300 "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)) ) +# 23311 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26490,25 +23319,58 @@ 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_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 = -# 2312 "parser_cocci_menhir.mly" - (_1@_2) -# 26512 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23347 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23358 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 23366 "parser_cocci_menhir.ml" + + in + +# 1300 "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)) ) +# 23374 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26520,41 +23382,65 @@ 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 = 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.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.next = _menhir_stack; + 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 c : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 26543 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in - let _1 : ( -# 145 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26549 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_nest_expressions = -# 1492 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1, - Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), - P.clt2mcode "...>" c, None, false)) ) -# 26558 "parser_cocci_menhir.ml" +# 23415 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23428 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 23436 "parser_cocci_menhir.ml" + + in + +# 1300 "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)) ) +# 23444 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26566,69 +23452,69 @@ 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 = 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.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 = 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 c : ( -# 145 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26589 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in - let _1 : ( -# 145 "parser_cocci_menhir.mly" +# 23485 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26595 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_nest_expressions = -# 1496 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1, - Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), - P.clt2mcode "...+>" c, None, true)) ) -# 26604 "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 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 26625 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nest_expressions = -# 1499 "parser_cocci_menhir.mly" - ( tmeta_to_exp _1 ) -# 26632 "parser_cocci_menhir.ml" +# 23491 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23501 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 23508 "parser_cocci_menhir.ml" + + in + +# 1305 "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)) ) +# 23518 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26640,41 +23526,76 @@ 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 = 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.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 = 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 c : ( -# 145 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26663 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in - let _1 : ( -# 145 "parser_cocci_menhir.mly" +# 23564 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26669 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_nest_expressions_only = -# 1503 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1, - Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), - P.clt2mcode "...>" c, None, false)) ) -# 26678 "parser_cocci_menhir.ml" +# 23570 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23582 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 23589 "parser_cocci_menhir.ml" + + in + +# 1305 "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)) ) +# 23599 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26686,41 +23607,76 @@ 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 = 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.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 = 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 c : ( -# 145 "parser_cocci_menhir.mly" + let pv : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26709 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in - let _1 : ( -# 145 "parser_cocci_menhir.mly" +# 23645 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 26715 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_nest_expressions_only = -# 1507 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1, - Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), - P.clt2mcode "...+>" c, None, true)) ) -# 26724 "parser_cocci_menhir.ml" +# 23651 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23662 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 23670 "parser_cocci_menhir.ml" + + in + +# 1305 "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)) ) +# 23680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26732,19 +23688,83 @@ 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 = 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.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 _1 : 'tv_nest_after_dots = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nest_start = -# 2302 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 26748 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23731 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23737 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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 ) +# 23750 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 23758 "parser_cocci_menhir.ml" + + in + +# 1305 "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)) ) +# 23768 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26756,21 +23776,104 @@ 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 = 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 _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : ( -# 242 "parser_cocci_menhir.mly" - (unit) -# 26770 "parser_cocci_menhir.ml" - ) = -# 2430 "parser_cocci_menhir.mly" - ( () ) -# 26774 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23829 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 23834 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 23840 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 23845 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 23851 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 23856 "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 ) +# 23865 "parser_cocci_menhir.ml" + + in + +# 1315 "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)) ) +# 23877 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26782,25 +23885,111 @@ 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 = 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 = 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 _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 242 "parser_cocci_menhir.mly" - (unit) -# 26800 "parser_cocci_menhir.ml" - ) = -# 2431 "parser_cocci_menhir.mly" - ( () ) -# 26804 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 23943 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 23948 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 23954 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 23959 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 23965 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 23970 "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 ) +# 23981 "parser_cocci_menhir.ml" + + in + +# 1315 "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)) ) +# 23993 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26812,21 +24001,56 @@ 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 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 24034 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 24039 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 24045 "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__1_ in - let _v : ( -# 242 "parser_cocci_menhir.mly" - (unit) -# 26826 "parser_cocci_menhir.ml" - ) = -# 2432 "parser_cocci_menhir.mly" - ( () ) -# 26830 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : 'tv_one_decl_var = +# 1323 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, + P.clt2mcode ")" _4,P.clt2mcode ";" _5)) ) +# 24054 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26838,390 +24062,75 @@ 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 = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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; - }; - } = _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__ = -# 1749 "parser_cocci_menhir.mly" - ( function dot_builder -> - g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) ) -# 26861 "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 : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 26882 "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 ] ) -# 26889 "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.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 xs : 'tv_nonempty_list_TMul_ = Obj.magic xs in - let x : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 26916 "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 ) -# 26923 "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_nonempty_list_start_aexpr_TEllipsis_ = -# 2112 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [_1] ) -# 26947 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 26973 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_aexpr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = -# 2114 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 26982 "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.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.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + 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 _3 : 'tv_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27014 "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_nonempty_list_start_aexpr_TEllipsis_ = -# 2117 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (_3 build_dots build_comma) ) -# 27024 "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_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = -# 2120 "parser_cocci_menhir.mly" - ( _2 ) -# 27052 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 27073 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = -# 2121 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [(build_dots "..." d)] ) -# 27080 "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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( + let _7 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 27106 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 27111 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = -# 2123 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27119 "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.semv = _2; - 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 r : 'tv_continue_list_aexpr_TEllipsis_ = Obj.magic r in - let _2 : ( +# 24105 "parser_cocci_menhir.ml" + ) = Obj.magic _7 in + let e : 'tv_initialize = Obj.magic e in + let q : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 27151 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" +# 24111 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let _4 : ( +# 149 "parser_cocci_menhir.mly" (Data.clt) -# 27156 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = -# 2126 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - (build_dots "..." d):: - (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (r build_dots build_comma) ) -# 27166 "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_dparam = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = -# 2112 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [_1] ) -# 27190 "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 +# 24116 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( -# 179 "parser_cocci_menhir.mly" +# 148 "parser_cocci_menhir.mly" (Data.clt) -# 27216 "parser_cocci_menhir.ml" +# 24122 "parser_cocci_menhir.ml" ) = Obj.magic _2 in - let _1 : 'tv_dparam = Obj.magic _1 in + let _1 : 'tv_decl_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = -# 2114 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27225 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : 'tv_one_decl_var = +# 1326 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.MacroDeclInit + (_1,P.clt2mcode "(" _2,_3, + P.clt2mcode ")" _4,P.clt2mcode "=" q,e, + P.clt2mcode ";" _7)) ) +# 24134 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27233,6053 +24142,120 @@ 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 = 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.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 _3 : 'tv_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _3 in - let _2 : ( + let pv : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 27257 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_dparam = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = -# 2117 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (_3 build_dots build_comma) ) -# 27267 "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_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = -# 2120 "parser_cocci_menhir.mly" - ( _2 ) -# 27295 "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 : ( -# 145 "parser_cocci_menhir.mly" +# 24205 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 27316 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = -# 2121 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [(build_dots "..." d)] ) -# 27323 "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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27349 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 27354 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = -# 2123 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27362 "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.semv = _2; - 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 r : 'tv_continue_list_dparam_TEllipsis_ = Obj.magic r in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27394 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 27399 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = -# 2126 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - (build_dots "..." d):: - (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (r build_dots build_comma) ) -# 27409 "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_enum_decl_one = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2112 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [_1] ) -# 27433 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27459 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_enum_decl_one = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2114 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27468 "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_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27500 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_enum_decl_one = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2117 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (_3 build_dots build_comma) ) -# 27510 "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_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2120 "parser_cocci_menhir.mly" - ( _2 ) -# 27538 "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 : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2121 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [(build_dots "..." d)] ) -# 27562 "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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27588 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2123 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27597 "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.semv = _2; - 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 r : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic r in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27629 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = -# 2126 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - (build_dots "..." d):: - (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (r build_dots build_comma) ) -# 27640 "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_initialize2 = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2112 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [_1] ) -# 27664 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27690 "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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2114 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27699 "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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27731 "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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2117 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (_3 build_dots build_comma) ) -# 27741 "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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2120 "parser_cocci_menhir.mly" - ( _2 ) -# 27769 "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 : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2121 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [(build_dots "..." d)] ) -# 27793 "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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27819 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2123 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27828 "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.semv = _2; - 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 r : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic r in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27860 "parser_cocci_menhir.ml" - ) = Obj.magic _2 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_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = -# 2126 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - (build_dots "..." d):: - (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (r build_dots build_comma) ) -# 27871 "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_one_dec_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = -# 2112 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [_1] ) -# 27895 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27921 "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__2_ in - let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = -# 2114 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 27930 "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_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 27962 "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_nonempty_list_start_one_dec_decl__TEllipsis_ = -# 2117 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (_3 build_dots build_comma) ) -# 27972 "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_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = -# 2120 "parser_cocci_menhir.mly" - ( _2 ) -# 28000 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 28021 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = -# 2121 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [(build_dots "..." d)] ) -# 28028 "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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28054 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 28059 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = -# 2123 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 28067 "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.semv = _2; - 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 r : 'tv_continue_list_one_dec_decl__TEllipsis_ = Obj.magic r in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28099 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 28104 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = -# 2126 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - (build_dots "..." d):: - (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (r build_dots build_comma) ) -# 28114 "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_one_dec_name_opt_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2112 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [_1] ) -# 28138 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28164 "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__2_ in - let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2114 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 28173 "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_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28205 "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_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2117 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (_3 build_dots build_comma) ) -# 28215 "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_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2120 "parser_cocci_menhir.mly" - ( _2 ) -# 28243 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 28264 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2121 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> [(build_dots "..." d)] ) -# 28271 "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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28297 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 28302 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2123 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] ) -# 28310 "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.semv = _2; - 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 r : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = Obj.magic r in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28342 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let d : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 28347 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = -# 2126 "parser_cocci_menhir.mly" - ( fun build_dots build_comma -> - (build_dots "..." d):: - (Ast0.wrap(build_comma(P.clt2mcode "," _2))):: - (r build_dots build_comma) ) -# 28357 "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_ident_or_const = Obj.magic i in - let _startpos = _startpos__1_ in - let _endpos = _endpos_i_ in - let _v : 'tv_not_ceq = -# 1945 "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] ) -# 28389 "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__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.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 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 = -# 1951 "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 ) -# 28429 "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 = ceq; - MenhirLib.EngineTypes.startp = _startpos_ceq_; - MenhirLib.EngineTypes.endp = _endpos_ceq_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let ceq : 'tv_not_ceq = Obj.magic ceq in - let _startpos = _startpos_ceq_ in - let _endpos = _endpos_ceq_ in - let _v : 'tv_not_ceq_or_sub = -# 1921 "parser_cocci_menhir.mly" - (Ast0.NotExpCstrt ceq) -# 28453 "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 : 'tv_sub = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_not_ceq_or_sub = -# 1922 "parser_cocci_menhir.mly" - (Ast0.SubExpCstrt s) -# 28477 "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_pure_ident = Obj.magic i in - let _startpos = _startpos__1_ in - let _endpos = _endpos_i_ in - let _v : 'tv_not_eqe = -# 1926 "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))))] - ) -# 28510 "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__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.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 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 = -# 1933 "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 - ) -# 28554 "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_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos__1_ in - let _endpos = _endpos_i_ in - let _v : 'tv_not_eqid = -# 1883 "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"); - (match i with - (Some rn,id) -> - let i = - P.check_inherited_constraint i - (function mv -> Ast.MetaIdDecl(Ast.NONE,mv)) in - Ast.IdNegIdSet([],[i]) - | (None,i) -> Ast.IdNegIdSet([i],[])) ) -# 28594 "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__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.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 l : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic l in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_not_eqid = -# 1897 "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"); - let (str,meta) = - List.fold_left - (function (str,meta) -> - function - (Some rn,id) as i -> - let i = - P.check_inherited_constraint i - (function mv -> Ast.MetaIdDecl(Ast.NONE,mv)) in - (str,i::meta) - | (None,i) -> (i::str,meta)) - ([],[]) l in - Ast.IdNegIdSet(str,meta) - ) -# 28646 "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 = -# 1990 "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"); - let i = - P.check_inherited_constraint i - (function mv -> Ast.MetaPosDecl(Ast.NONE,mv)) in - [i] ) -# 28681 "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__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.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 l : 'tv_comma_list_meta_ident_ = Obj.magic l in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_not_pos = -# 1999 "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 -> - P.check_inherited_constraint i - (function mv -> Ast.MetaPosDecl(Ast.NONE,mv))) - l ) -# 28725 "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 = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_one_dec_decl_ = -# 2087 "parser_cocci_menhir.mly" - ( _1 ) -# 28749 "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 : ( -# 136 "parser_cocci_menhir.mly" - (Parse_aux.list_info) -# 28770 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_one_dec_decl_ = -# 2089 "parser_cocci_menhir.mly" - ( let (nm,lenname,pure,clt) = _1 in - let nm = P.clt2mcode nm clt in - let lenname = - match lenname with - Ast.AnyLen -> Ast0.AnyListLen - | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt) - | Ast.CstLen n -> Ast0.CstListLen n in - Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) -# 28784 "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_ = -# 2087 "parser_cocci_menhir.mly" - ( _1 ) -# 28808 "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 : ( -# 136 "parser_cocci_menhir.mly" - (Parse_aux.list_info) -# 28829 "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_ = -# 2089 "parser_cocci_menhir.mly" - ( let (nm,lenname,pure,clt) = _1 in - let nm = P.clt2mcode nm clt in - let lenname = - match lenname with - Ast.AnyLen -> Ast0.AnyListLen - | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt) - | Ast.CstLen n -> Ast0.CstListLen n in - Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) -# 28843 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28869 "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 = -# 1281 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) ) -# 28877 "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 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 28898 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_one_decl_var = -# 1282 "parser_cocci_menhir.mly" - ( P.meta_decl _1 ) -# 28905 "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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28936 "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 ) -# 28946 "parser_cocci_menhir.ml" - - in - -# 1284 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 28953 "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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 28989 "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 ) -# 29001 "parser_cocci_menhir.ml" - - in - -# 1284 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 29008 "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 = 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 = -# 1286 "parser_cocci_menhir.mly" - ( f ) -# 29032 "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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29073 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29079 "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 ) -# 29089 "parser_cocci_menhir.ml" - - in - -# 1288 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) -# 29096 "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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29142 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29148 "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 ) -# 29160 "parser_cocci_menhir.ml" - - in - -# 1288 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) -# 29167 "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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29198 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29208 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 29215 "parser_cocci_menhir.ml" - - in - -# 1293 "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)) ) -# 29223 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29259 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29271 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 29278 "parser_cocci_menhir.ml" - - in - -# 1293 "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)) ) -# 29286 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29322 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29333 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 29341 "parser_cocci_menhir.ml" - - in - -# 1293 "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)) ) -# 29349 "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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29390 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29403 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 29411 "parser_cocci_menhir.ml" - - in - -# 1293 "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)) ) -# 29419 "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 = 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 pv : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29460 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29466 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29476 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 29483 "parser_cocci_menhir.ml" - - in - -# 1298 "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)) ) -# 29493 "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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29539 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29545 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29557 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 29564 "parser_cocci_menhir.ml" - - in - -# 1298 "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)) ) -# 29574 "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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29620 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29626 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29637 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 29645 "parser_cocci_menhir.ml" - - in - -# 1298 "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)) ) -# 29655 "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 = 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29706 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29712 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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 ) -# 29725 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 29733 "parser_cocci_menhir.ml" - - in - -# 1298 "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)) ) -# 29743 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29804 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 29809 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 29815 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 29820 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 29826 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 29831 "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 ) -# 29840 "parser_cocci_menhir.ml" - - in - -# 1308 "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)) ) -# 29852 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 29918 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 29923 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 29929 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 29934 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 29940 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 29945 "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 ) -# 29956 "parser_cocci_menhir.ml" - - in - -# 1308 "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)) ) -# 29968 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 30009 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 30014 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 30020 "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_one_decl_var = -# 1316 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, - P.clt2mcode ")" _4,P.clt2mcode ";" _5)) ) -# 30029 "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 = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - 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 = _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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 30080 "parser_cocci_menhir.ml" - ) = Obj.magic _7 in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 30086 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let _4 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 30091 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 30097 "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__7_ in - let _v : 'tv_one_decl_var = -# 1319 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.MacroDeclInit - (_1,P.clt2mcode "(" _2,_3, - P.clt2mcode ")" _4,P.clt2mcode "=" q,e, - P.clt2mcode ";" _7)) ) -# 30109 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 30180 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 30186 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 30191 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 30197 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 30202 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 30208 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 30213 "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 ) -# 30222 "parser_cocci_menhir.ml" - - in - -# 1328 "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))) -# 30234 "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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 30310 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 30316 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 30321 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 30327 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 30332 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 30338 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 30343 "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 ) -# 30354 "parser_cocci_menhir.ml" - - in - -# 1328 "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))) -# 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 _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 ) -# 30383 "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 : 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 ) -# 30407 "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_option_TPosAny_ = -# 29 "standard.mly" - ( None ) -# 30424 "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 : 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 ) -# 30448 "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_option_eexpr_ = -# 29 "standard.mly" - ( None ) -# 30465 "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 : '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 ) -# 30489 "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_option_expr_ = -# 29 "standard.mly" - ( None ) -# 30506 "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 : 'tv_expr = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_expr_ = -# 31 "standard.mly" - ( Some x ) -# 30530 "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_option_not_ceq_or_sub_ = -# 29 "standard.mly" - ( None ) -# 30547 "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 : 'tv_not_ceq_or_sub = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_not_ceq_or_sub_ = -# 31 "standard.mly" - ( Some x ) -# 30571 "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_option_re_or_not_eqe_or_sub_ = -# 29 "standard.mly" - ( None ) -# 30588 "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 : 'tv_re_or_not_eqe_or_sub = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_re_or_not_eqe_or_sub_ = -# 31 "standard.mly" - ( Some x ) -# 30612 "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_option_re_or_not_eqid_ = -# 29 "standard.mly" - ( None ) -# 30629 "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 : 'tv_re_or_not_eqid = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_re_or_not_eqid_ = -# 31 "standard.mly" - ( Some x ) -# 30653 "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_dots = -# 2252 "parser_cocci_menhir.mly" - ([]) -# 30670 "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_plus_after_exp = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_dots = -# 2253 "parser_cocci_menhir.mly" - (_2) -# 30698 "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_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_after_dots = -# 2255 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) -# 30728 "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_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_after_dots = -# 2256 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.OTHER(_1))::_2 ) -# 30758 "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_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_plus_after_dots = -# 2258 "parser_cocci_menhir.mly" - ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 30788 "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 = -# 2248 "parser_cocci_menhir.mly" - ([]) -# 30805 "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_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_after_exp = -# 2249 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 30835 "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 = -# 2261 "parser_cocci_menhir.mly" - ([]) -# 30852 "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_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_after_stm = -# 2262 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 30882 "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_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_after_stm = -# 2263 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.OTHER(_1))::_2 ) -# 30912 "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_plus_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_plus_after_stm = -# 2265 "parser_cocci_menhir.mly" - ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 30942 "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 = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack 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_b_ in - let _v : 'tv_plus_body = -# 854 "parser_cocci_menhir.mly" - ( f@b(*@ew*) ) -# 30972 "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 = 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_plus_exp_body = -# 868 "parser_cocci_menhir.mly" - ( f@[b](*@ew*) ) -# 31002 "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_plus_exp_body = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 217 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 31030 "parser_cocci_menhir.ml" - ) = -# 253 "parser_cocci_menhir.mly" - ( _1 ) -# 31034 "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 = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - 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 : ( -# 217 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 31062 "parser_cocci_menhir.ml" - ) = -# 253 "parser_cocci_menhir.mly" - ( p ) -# 31066 "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 = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - 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 : ( -# 217 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 31094 "parser_cocci_menhir.ml" - ) = -# 254 "parser_cocci_menhir.mly" - ( p ) -# 31098 "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_plus_body = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 214 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 31126 "parser_cocci_menhir.ml" - ) = -# 249 "parser_cocci_menhir.mly" - ( _1 ) -# 31130 "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 = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - 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 : ( -# 214 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 31158 "parser_cocci_menhir.ml" - ) = -# 249 "parser_cocci_menhir.mly" - ( p ) -# 31162 "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 = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - 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 : ( -# 214 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 31190 "parser_cocci_menhir.ml" - ) = -# 250 "parser_cocci_menhir.mly" - ( p ) -# 31194 "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_ctype = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_plus_start = -# 2237 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) -# 31218 "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_top_init = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_plus_start = -# 2238 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) -# 31242 "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_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 = -# 2240 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 31272 "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_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 = -# 2242 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) -# 31302 "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_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 = -# 2243 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.OTHER(_1))::_2 ) -# 31332 "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_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_plus_start = -# 2245 "parser_cocci_menhir.mly" - ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 31362 "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_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_ = -# 1665 "parser_cocci_menhir.mly" - ( _1 ) -# 31386 "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 = _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 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 31422 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 31428 "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_ = -# 1667 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 31437 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 31469 "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_ = -# 1670 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 31477 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 176 "parser_cocci_menhir.mly" - (Data.clt) -# 31509 "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_ = -# 1672 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 31518 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 31544 "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_ = -# 1675 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 31552 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 31578 "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_ = -# 1677 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 31586 "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 = _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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 31622 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 31628 "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_ = -# 1679 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 31638 "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 = _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 _6 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 31684 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_initialize_list = Obj.magic _5 in - let _4 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 31690 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 31695 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_ctype = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 31701 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1685 "parser_cocci_menhir.mly" - ( let init = - if P.struct_initializer _5 - then - let il = P.drop_dot_commas _5 in - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) - else - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in - Ast0.wrap - (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) -# 31718 "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_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_ = -# 1665 "parser_cocci_menhir.mly" - ( _1 ) -# 31742 "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 = _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 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 31778 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 31784 "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_ = -# 1667 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 31793 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 31825 "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_ = -# 1670 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 31833 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 176 "parser_cocci_menhir.mly" - (Data.clt) -# 31865 "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_ = -# 1672 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 31874 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 31900 "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_ = -# 1675 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 31908 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 31934 "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_ = -# 1677 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 31942 "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 = _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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 31978 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 31984 "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_ = -# 1679 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 31994 "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 = _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 _6 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 32040 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_initialize_list = Obj.magic _5 in - let _4 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 32046 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 32051 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_ctype = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 32057 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1685 "parser_cocci_menhir.mly" - ( let init = - if P.struct_initializer _5 - then - let il = P.drop_dot_commas _5 in - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) - else - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in - Ast0.wrap - (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) -# 32074 "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_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_ = -# 1665 "parser_cocci_menhir.mly" - ( _1 ) -# 32098 "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 = _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 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 32134 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 32140 "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_ = -# 1667 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 32149 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 32181 "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_ = -# 1670 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 32189 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 176 "parser_cocci_menhir.mly" - (Data.clt) -# 32221 "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_ = -# 1672 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 32230 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 32256 "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_ = -# 1675 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 32264 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 32290 "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_ = -# 1677 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 32298 "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 = _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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 32334 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 32340 "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_ = -# 1679 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 32350 "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 = _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 _6 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 32396 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_initialize_list = Obj.magic _5 in - let _4 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 32402 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 32407 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_ctype = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 32413 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1685 "parser_cocci_menhir.mly" - ( let init = - if P.struct_initializer _5 - then - let il = P.drop_dot_commas _5 in - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) - else - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in - Ast0.wrap - (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) -# 32430 "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_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_ = -# 1665 "parser_cocci_menhir.mly" - ( _1 ) -# 32454 "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 = _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 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 32490 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 174 "parser_cocci_menhir.mly" - (Data.clt) -# 32496 "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_ = -# 1667 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 32505 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 32537 "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_ = -# 1670 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 32545 "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_disj_ident = Obj.magic _3 in - let _2 : ( -# 176 "parser_cocci_menhir.mly" - (Data.clt) -# 32577 "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_ = -# 1672 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 32586 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 32612 "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_ = -# 1675 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 32620 "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 : ( -# 157 "parser_cocci_menhir.mly" - (Data.clt) -# 32646 "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_ = -# 1677 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 32654 "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 = _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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 32690 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 32696 "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_ = -# 1679 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 32706 "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 = _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 _6 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 32752 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_initialize_list = Obj.magic _5 in - let _4 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 32758 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : ( +# 24211 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 32763 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_ctype = Obj.magic _2 in - let _1 : ( +# 24216 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 32769 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1685 "parser_cocci_menhir.mly" - ( let init = - if P.struct_initializer _5 - then - let il = P.drop_dot_commas _5 in - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) - else - Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in - Ast0.wrap - (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) -# 32786 "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_pre_basic_expr_eexpr_dot_expressions_ = -# 1514 "parser_cocci_menhir.mly" - ( _1 ) -# 32810 "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_basic_expr_eexpr_dot_expressions_ = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 32842 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_pre_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_pre_basic_expr_eexpr_dot_expressions_ = -# 1517 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Sequence(_1,P.clt2mcode "," _2,_3)) ) -# 32850 "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_pre_basic_expr_eexpr_nest_expressions_ = -# 1514 "parser_cocci_menhir.mly" - ( _1 ) -# 32874 "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_basic_expr_eexpr_nest_expressions_ = Obj.magic _3 in - let _2 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 32906 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_pre_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_pre_basic_expr_eexpr_nest_expressions_ = -# 1517 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Sequence(_1,P.clt2mcode "," _2,_3)) ) -# 32914 "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_dot_expressions_ = -# 1698 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 32938 "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 : ( -# 162 "parser_cocci_menhir.mly" - (Data.clt) -# 32965 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1700 "parser_cocci_menhir.mly" - ( let op = P.clt2mcode Ast.GetRefLabel _1 in - Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) -# 32973 "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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 32994 "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_ = -# 1703 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 33002 "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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33023 "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_ = -# 1706 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 33031 "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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33052 "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_ = -# 1709 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 33060 "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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33081 "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_ = -# 1712 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 33089 "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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33110 "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_ = -# 1715 "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)) ) -# 33119 "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 : ( -# 133 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 33140 "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_ = -# 1719 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 33148 "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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33169 "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_ = -# 1722 "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)) ) -# 33178 "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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33199 "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_ = -# 1726 "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)) ) -# 33208 "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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33229 "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_ = -# 1730 "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)) ) -# 33238 "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 : ( +# 24222 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 33269 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 33275 "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_ = -# 1734 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 33283 "parser_cocci_menhir.ml" +# 24227 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 24233 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 24238 "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 ) +# 24247 "parser_cocci_menhir.ml" + + in + +# 1335 "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))) +# 24259 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33291,42 +24267,127 @@ 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 = 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.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 _3 : ( + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 24335 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 24341 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 33314 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in - let _1 : ( +# 24346 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 33320 "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_ = -# 1737 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 33330 "parser_cocci_menhir.ml" +# 24352 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 24357 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 24363 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 24368 "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 ) +# 24379 "parser_cocci_menhir.ml" + + in + +# 1335 "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))) +# 24391 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33337,20 +24398,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_dot_expressions = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1741 "parser_cocci_menhir.mly" - ( _1 ) -# 33354 "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 ) +# 24408 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33363,18 +24417,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_func_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1698 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 33378 "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 ) +# 24432 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33385,31 +24439,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 : 'tv_ident = Obj.magic _2 in - let _1 : ( -# 162 "parser_cocci_menhir.mly" - (Data.clt) -# 33405 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1700 "parser_cocci_menhir.mly" - ( let op = P.clt2mcode Ast.GetRefLabel _1 in - Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) -# 33413 "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 ) +# 24449 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33422,23 +24458,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33434 "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_ = -# 1703 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 33442 "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 ) +# 24473 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33449,25 +24480,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33463 "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_ = -# 1706 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 33471 "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 ) +# 24490 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33480,23 +24499,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33492 "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_ = -# 1709 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 33500 "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 ) +# 24514 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33507,25 +24521,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33521 "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_ = -# 1712 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 33529 "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_expr_ = +# 29 "standard.mly" + ( None ) +# 24531 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33538,24 +24540,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33550 "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_ = -# 1715 "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)) ) -# 33559 "parser_cocci_menhir.ml" + let x : 'tv_expr = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_expr_ = +# 31 "standard.mly" + ( Some x ) +# 24555 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33566,25 +24562,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 : ( -# 133 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 33580 "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_ = -# 1719 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 33588 "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_not_ceq_or_sub_ = +# 29 "standard.mly" + ( None ) +# 24572 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33597,24 +24581,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33609 "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_ = -# 1722 "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)) ) -# 33618 "parser_cocci_menhir.ml" + let x : 'tv_not_ceq_or_sub = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_not_ceq_or_sub_ = +# 31 "standard.mly" + ( Some x ) +# 24596 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33625,26 +24603,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33639 "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_ = -# 1726 "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)) ) -# 33648 "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_re_or_not_eqe_or_sub_ = +# 29 "standard.mly" + ( None ) +# 24613 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33657,24 +24622,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33669 "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_ = -# 1730 "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)) ) -# 33678 "parser_cocci_menhir.ml" + let x : 'tv_re_or_not_eqe_or_sub = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_re_or_not_eqe_or_sub_ = +# 31 "standard.mly" + ( Some x ) +# 24637 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33685,41 +24644,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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 33709 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 33715 "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_ = -# 1734 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 33723 "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_re_or_not_eqid_ = +# 29 "standard.mly" + ( None ) +# 24654 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33731,42 +24662,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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 33754 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 33760 "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_ = -# 1737 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 33770 "parser_cocci_menhir.ml" + let x : 'tv_re_or_not_eqid = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_re_or_not_eqid_ = +# 31 "standard.mly" + ( Some x ) +# 24678 "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_dots = +# 2259 "parser_cocci_menhir.mly" + ([]) +# 24695 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33778,19 +24703,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 = _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 _1 : 'tv_invalid = Obj.magic _1 in + let _2 : 'tv_plus_after_exp = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1741 "parser_cocci_menhir.mly" - ( _1 ) -# 33794 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_dots = +# 2260 "parser_cocci_menhir.mly" + (_2) +# 24723 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33802,19 +24731,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_func_ident = 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__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1698 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 33818 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_dots = +# 2262 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) +# 24753 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33837,19 +24772,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_ident = Obj.magic _2 in - let _1 : ( -# 162 "parser_cocci_menhir.mly" - (Data.clt) -# 33845 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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 : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1700 "parser_cocci_menhir.mly" - ( let op = P.clt2mcode Ast.GetRefLabel _1 in - Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) -# 33853 "parser_cocci_menhir.ml" + let _v : 'tv_plus_after_dots = +# 2263 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.OTHER(_1))::_2 ) +# 24783 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33861,24 +24791,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33874 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1703 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 33882 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_dots = +# 2265 "parser_cocci_menhir.mly" + ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) +# 24813 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33889,25 +24820,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33903 "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_ = -# 1706 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 33911 "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_exp = +# 2255 "parser_cocci_menhir.mly" + ([]) +# 24830 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33919,24 +24838,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33932 "parser_cocci_menhir.ml" - ) = 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__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1709 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 33940 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_exp = +# 2256 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) +# 24860 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33947,25 +24867,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 33961 "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_ = -# 1712 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 33969 "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_stm = +# 2268 "parser_cocci_menhir.mly" + ([]) +# 24877 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33977,25 +24885,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 33990 "parser_cocci_menhir.ml" - ) = 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__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1715 "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)) ) -# 33999 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_stm = +# 2269 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) +# 24907 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34007,24 +24915,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 : ( -# 133 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 34020 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1719 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 34028 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_stm = +# 2270 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.OTHER(_1))::_2 ) +# 24937 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34036,25 +24945,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 34049 "parser_cocci_menhir.ml" - ) = 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_primary_expr_eexpr_nest_expressions_ = -# 1722 "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)) ) -# 34058 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_stm = +# 2272 "parser_cocci_menhir.mly" + ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) +# 24967 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34066,25 +24975,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 34079 "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_ = -# 1726 "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)) ) -# 34088 "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 = +# 858 "parser_cocci_menhir.mly" + ( f@b(*@ew*) ) +# 24997 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34096,25 +25005,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 34109 "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_ = -# 1730 "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)) ) -# 34118 "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 = +# 872 "parser_cocci_menhir.mly" + ( f@[b](*@ew*) ) +# 25027 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34126,40 +25035,27 @@ 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.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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 34149 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 34155 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_plus_exp_body = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1734 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 34163 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : ( +# 217 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 25055 "parser_cocci_menhir.ml" + ) = +# 253 "parser_cocci_menhir.mly" + ( _1 ) +# 25059 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34171,42 +25067,27 @@ 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.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 = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 34194 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 34200 "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_ = -# 1737 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 34210 "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 : ( +# 217 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 25087 "parser_cocci_menhir.ml" + ) = +# 253 "parser_cocci_menhir.mly" + ( p ) +# 25091 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34218,19 +25099,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 = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + 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_ = -# 1741 "parser_cocci_menhir.mly" - ( _1 ) -# 34234 "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 : ( +# 217 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 25119 "parser_cocci_menhir.ml" + ) = +# 254 "parser_cocci_menhir.mly" + ( p ) +# 25123 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34242,19 +25131,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_func_ident = Obj.magic _1 in + let _1 : 'tv_plus_body = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1698 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 34258 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : ( +# 214 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 25151 "parser_cocci_menhir.ml" + ) = +# 249 "parser_cocci_menhir.mly" + ( _1 ) +# 25155 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34266,30 +25163,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.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_ident = Obj.magic _2 in - let _1 : ( -# 162 "parser_cocci_menhir.mly" - (Data.clt) -# 34285 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in + let p : 'tv_plus_body = Obj.magic p in + let _startpos = _startpos_p_ in let _endpos = _endpos__2_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1700 "parser_cocci_menhir.mly" - ( let op = P.clt2mcode Ast.GetRefLabel _1 in - Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) -# 34293 "parser_cocci_menhir.ml" + let _v : ( +# 214 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 25183 "parser_cocci_menhir.ml" + ) = +# 249 "parser_cocci_menhir.mly" + ( p ) +# 25187 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34301,24 +25195,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 = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 34314 "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_ = -# 1703 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 34322 "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 : ( +# 214 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 25215 "parser_cocci_menhir.ml" + ) = +# 250 "parser_cocci_menhir.mly" + ( p ) +# 25219 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34336,18 +25233,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 34343 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_ctype = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1706 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 34351 "parser_cocci_menhir.ml" + let _v : 'tv_plus_start = +# 2244 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) +# 25243 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34365,18 +25257,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 34372 "parser_cocci_menhir.ml" - ) = 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_primary_expr_expr_invalid_ = -# 1709 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 34380 "parser_cocci_menhir.ml" + let _v : 'tv_plus_start = +# 2245 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) +# 25267 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34388,24 +25275,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 34401 "parser_cocci_menhir.ml" - ) = 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__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1712 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 34409 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_start = +# 2247 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) +# 25297 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34417,25 +25305,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 34430 "parser_cocci_menhir.ml" - ) = 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__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1715 "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)) ) -# 34439 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_start = +# 2249 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) +# 25327 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34447,24 +25335,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 : ( -# 133 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 34460 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1719 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 34468 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_start = +# 2250 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.OTHER(_1))::_2 ) +# 25357 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34476,25 +25365,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 34489 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1722 "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)) ) -# 34498 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_start = +# 2252 "parser_cocci_menhir.mly" + ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) +# 25387 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34512,19 +25401,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 34519 "parser_cocci_menhir.ml" - ) = Obj.magic _1 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_primary_expr_expr_invalid_ = -# 1726 "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)) ) -# 34528 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1672 "parser_cocci_menhir.mly" + ( _1 ) +# 25411 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34536,25 +25419,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 : ( -# 138 "parser_cocci_menhir.mly" - (Parse_aux.typed_expinfo) -# 34549 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _4 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 25447 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 25453 "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__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1730 "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)) ) -# 34558 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1674 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 25462 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34582,24 +25486,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 34589 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" + let _3 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 34595 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in +# 25494 "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_primary_expr_expr_invalid_ = -# 1734 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 34603 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1677 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 25502 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34627,94 +25526,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 34634 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" + let _3 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 176 "parser_cocci_menhir.mly" (Data.clt) -# 34640 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in +# 25534 "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_primary_expr_expr_invalid_ = -# 1737 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 34650 "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_invalid = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1741 "parser_cocci_menhir.mly" - ( _1 ) -# 34674 "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_pure = -# 264 "parser_cocci_menhir.mly" - ( Ast0.Pure ) -# 34696 "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_pure = -# 265 "parser_cocci_menhir.mly" - ( Ast0.Context ) -# 34718 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1679 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 25543 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34726,21 +25551,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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 25569 "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_pure = -# 266 "parser_cocci_menhir.mly" - ( Ast0.PureContext ) -# 34744 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1682 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 25577 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34752,38 +25585,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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 25603 "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_pure = -# 267 "parser_cocci_menhir.mly" - ( Ast0.PureContext ) -# 34770 "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_pure = -# 268 "parser_cocci_menhir.mly" - ( Ast0.Impure ) -# 34787 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1684 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 25611 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34795,23 +25619,47 @@ 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 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 34808 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 25647 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 25653 "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__1_ in - let _v : 'tv_pure_ident = -# 1755 "parser_cocci_menhir.mly" - ( _1 ) -# 34815 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1686 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 25663 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34823,17 +25671,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 = _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 _6 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 25709 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_initialize_list = Obj.magic _5 in + let _4 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 25715 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 25720 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_ctype = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 25726 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_kwd = -# 1762 "parser_cocci_menhir.mly" - ( "identifier" ) -# 34837 "parser_cocci_menhir.ml" + let _endpos = _endpos__6_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1692 "parser_cocci_menhir.mly" + ( let init = + if P.struct_initializer _5 + then + let il = P.drop_dot_commas _5 in + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) + else + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in + Ast0.wrap + (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) +# 25743 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34846,16 +25752,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.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_pure_ident_kwd = -# 1763 "parser_cocci_menhir.mly" - ( "expression" ) -# 34859 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1672 "parser_cocci_menhir.mly" + ( _1 ) +# 25767 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34867,17 +25775,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.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 _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_kwd = -# 1764 "parser_cocci_menhir.mly" - ( "statement" ) -# 34881 "parser_cocci_menhir.ml" + let _4 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 25803 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 25809 "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_ = +# 1674 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 25818 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34889,17 +25826,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.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 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 25850 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1765 "parser_cocci_menhir.mly" - ( "function" ) -# 34903 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1677 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 25858 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34911,17 +25866,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.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 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 176 "parser_cocci_menhir.mly" + (Data.clt) +# 25890 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1766 "parser_cocci_menhir.mly" - ( "local" ) -# 34925 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1679 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 25899 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34933,17 +25907,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.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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 25925 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1767 "parser_cocci_menhir.mly" - ( "type" ) -# 34947 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1682 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 25933 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34955,17 +25941,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.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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 25959 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1768 "parser_cocci_menhir.mly" - ( "parameter" ) -# 34969 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1684 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 25967 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34977,17 +25975,47 @@ 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 = _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 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 26003 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 26009 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1769 "parser_cocci_menhir.mly" - ( "idexpression" ) -# 34991 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1686 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 26019 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34999,17 +26027,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 = _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 _6 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 26065 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_initialize_list = Obj.magic _5 in + let _4 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 26071 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 26076 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_ctype = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 26082 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_kwd = -# 1770 "parser_cocci_menhir.mly" - ( "initialiser" ) -# 35013 "parser_cocci_menhir.ml" + let _endpos = _endpos__6_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1692 "parser_cocci_menhir.mly" + ( let init = + if P.struct_initializer _5 + then + let il = P.drop_dot_commas _5 in + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) + else + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in + Ast0.wrap + (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) +# 26099 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35022,16 +26108,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.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_pure_ident_kwd = -# 1771 "parser_cocci_menhir.mly" - ( "list" ) -# 35035 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1672 "parser_cocci_menhir.mly" + ( _1 ) +# 26123 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35043,17 +26131,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.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 _4 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 26159 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 26165 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1772 "parser_cocci_menhir.mly" - ( "fresh" ) -# 35057 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1674 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 26174 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35065,17 +26182,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.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 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 26206 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1773 "parser_cocci_menhir.mly" - ( "constant" ) -# 35079 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1677 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 26214 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35087,17 +26222,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.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 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 176 "parser_cocci_menhir.mly" + (Data.clt) +# 26246 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1774 "parser_cocci_menhir.mly" - ( "error" ) -# 35101 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1679 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 26255 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35109,17 +26263,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.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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 26281 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1775 "parser_cocci_menhir.mly" - ( "words" ) -# 35123 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1682 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 26289 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35131,17 +26297,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.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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 26315 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1776 "parser_cocci_menhir.mly" - ( "pure" ) -# 35145 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1684 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 26323 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35153,17 +26331,47 @@ 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 = _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 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 26359 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 26365 "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__1_ in - let _v : 'tv_pure_ident_kwd = -# 1777 "parser_cocci_menhir.mly" - ( "context" ) -# 35167 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1686 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 26375 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35175,17 +26383,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 = _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 _6 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 26421 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_initialize_list = Obj.magic _5 in + let _4 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 26427 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 26432 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_ctype = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 26438 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_kwd = -# 1778 "parser_cocci_menhir.mly" - ( "generated" ) -# 35189 "parser_cocci_menhir.ml" + let _endpos = _endpos__6_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1692 "parser_cocci_menhir.mly" + ( let init = + if P.struct_initializer _5 + then + let il = P.drop_dot_commas _5 in + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) + else + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in + Ast0.wrap + (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) +# 26455 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35198,16 +26464,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.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_pure_ident_kwd = -# 1779 "parser_cocci_menhir.mly" - ( "typedef" ) -# 35211 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1672 "parser_cocci_menhir.mly" + ( _1 ) +# 26479 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35219,17 +26487,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.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 _4 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 26515 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 174 "parser_cocci_menhir.mly" + (Data.clt) +# 26521 "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_pure_ident_kwd = -# 1780 "parser_cocci_menhir.mly" - ( "declarer" ) -# 35233 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1674 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 26530 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35241,17 +26538,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.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 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 26562 "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_pure_ident_kwd = -# 1781 "parser_cocci_menhir.mly" - ( "iterator" ) -# 35255 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1677 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 26570 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35263,17 +26578,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.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 : 'tv_disj_ident = Obj.magic _3 in + let _2 : ( +# 176 "parser_cocci_menhir.mly" + (Data.clt) +# 26602 "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_pure_ident_kwd = -# 1782 "parser_cocci_menhir.mly" - ( "name" ) -# 35277 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1679 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 26611 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35285,17 +26619,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.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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 26637 "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_pure_ident_kwd = -# 1783 "parser_cocci_menhir.mly" - ( "position" ) -# 35299 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1682 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 26645 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35307,17 +26653,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.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 : ( +# 157 "parser_cocci_menhir.mly" + (Data.clt) +# 26671 "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_pure_ident_kwd = -# 1784 "parser_cocci_menhir.mly" - ( "symbol" ) -# 35321 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1684 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 26679 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35329,19 +26687,47 @@ 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 : 'tv_pure_ident = Obj.magic _1 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 26715 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 26721 "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_pure_ident_or_meta_ident = -# 1791 "parser_cocci_menhir.mly" - ( (None,P.id2name _1) ) -# 35345 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1686 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 26731 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35353,19 +26739,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.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 _1 : 'tv_pure_ident_kwd = Obj.magic _1 in + let _6 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 26777 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_initialize_list = Obj.magic _5 in + let _4 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 26783 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 26788 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_ctype = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 26794 "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 = -# 1792 "parser_cocci_menhir.mly" - ( (None,_1) ) -# 35369 "parser_cocci_menhir.ml" + let _endpos = _endpos__6_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1692 "parser_cocci_menhir.mly" + ( let init = + if P.struct_initializer _5 + then + let il = P.drop_dot_commas _5 in + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,il,P.clt2mcode "}" _6,false)) + else + Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in + Ast0.wrap + (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) ) +# 26811 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35383,47 +26825,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_meta_ident = Obj.magic _1 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_pure_ident_or_meta_ident = -# 1793 "parser_cocci_menhir.mly" - ( _1 ) -# 35393 "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 = optc; - MenhirLib.EngineTypes.startp = _startpos_optc_; - MenhirLib.EngineTypes.endp = _endpos_optc_; - 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 optc : 'tv_option_not_ceq_or_sub_ = Obj.magic optc in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_optc_ in - let _v : 'tv_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub_ = -# 1830 "parser_cocci_menhir.mly" - ( - match optc with - None -> (i, Ast0.NoConstraint) - | Some c -> (i, c) - ) -# 35427 "parser_cocci_menhir.ml" + let _v : 'tv_pre_basic_expr_eexpr_dot_expressions_ = +# 1521 "parser_cocci_menhir.mly" + ( _1 ) +# 26835 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35435,29 +26843,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = optc; - MenhirLib.EngineTypes.startp = _startpos_optc_; - MenhirLib.EngineTypes.endp = _endpos_optc_; + 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 = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - 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 optc : 'tv_option_re_or_not_eqe_or_sub_ = Obj.magic optc in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_optc_ in - let _v : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub_ = -# 1830 "parser_cocci_menhir.mly" - ( - match optc with - None -> (i, Ast0.NoConstraint) - | Some c -> (i, c) - ) -# 35461 "parser_cocci_menhir.ml" + let _3 : 'tv_basic_expr_eexpr_dot_expressions_ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 26867 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_pre_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_pre_basic_expr_eexpr_dot_expressions_ = +# 1524 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Sequence(_1,P.clt2mcode "," _2,_3)) ) +# 26875 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35469,64 +26883,19 @@ 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.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 c : 'tv_option_re_or_not_eqid_ = Obj.magic c in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_c_ in - let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = -# 1855 "parser_cocci_menhir.mly" - ( - match c with - None -> (i, Ast.IdNoConstraint) - | Some constraint_ -> (i,constraint_) - ) -# 35495 "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 = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; - 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 c : 'tv_option_re_or_not_eqid_ = Obj.magic c in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_c_ in - let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = -# 1838 "parser_cocci_menhir.mly" - ( - Common.Left - (match c with - None -> (i, Ast.IdNoConstraint) - | Some constraint_ -> (i,constraint_)) - ) -# 35530 "parser_cocci_menhir.ml" + 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_pre_basic_expr_eexpr_nest_expressions_ = +# 1521 "parser_cocci_menhir.mly" + ( _1 ) +# 26899 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35542,29 +26911,31 @@ 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 = { 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_pure_ident = Obj.magic _3 in + let _3 : 'tv_basic_expr_eexpr_nest_expressions_ = Obj.magic _3 in + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 26931 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_pre_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = -# 1845 "parser_cocci_menhir.mly" - ( - let nm = P.id2name _3 in - Iteration.parsed_virtual_identifiers := - Common.union_set [nm] - !Iteration.parsed_virtual_identifiers; - Common.Right nm - ) -# 35568 "parser_cocci_menhir.ml" + let _v : 'tv_pre_basic_expr_eexpr_nest_expressions_ = +# 1524 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Sequence(_1,P.clt2mcode "," _2,_3)) ) +# 26939 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35582,13 +26953,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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 _1 : 'tv_func_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 = -# 1799 "parser_cocci_menhir.mly" - ( (_1,Ast.NoVal) ) -# 35592 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1705 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 26963 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35600,31 +26971,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 = _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 = _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_separated_nonempty_list_TCppConcatOp_seed_elem_ = Obj.magic _3 in - let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let _2 : 'tv_ident = Obj.magic _2 in + let _1 : ( +# 162 "parser_cocci_menhir.mly" + (Data.clt) +# 26990 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_pure_ident_or_meta_ident_with_seed = -# 1802 "parser_cocci_menhir.mly" - ( match _3 with - [Ast.SeedString s] -> (_1,Ast.StringSeed s) - | _ -> (_1,Ast.ListSeed _3) ) -# 35628 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1707 "parser_cocci_menhir.mly" + ( let op = P.clt2mcode Ast.GetRefLabel _1 in + Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) +# 26998 "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 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27019 "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_ = +# 1710 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 27027 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35636,27 +27035,24 @@ 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.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 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_x_eq_not_pos_ = -# 1824 "parser_cocci_menhir.mly" - ( - (i, l) - ) -# 35660 "parser_cocci_menhir.ml" + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27048 "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_ = +# 1713 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 27056 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35674,13 +27070,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_pure_ident = Obj.magic _1 in + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27077 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_symbol = -# 1758 "parser_cocci_menhir.mly" - ( _1 ) -# 35684 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1716 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 27085 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35699,16 +27100,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 127 "parser_cocci_menhir.mly" +# 159 "parser_cocci_menhir.mly" (string * Data.clt) -# 35705 "parser_cocci_menhir.ml" +# 27106 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_symbol = -# 1759 "parser_cocci_menhir.mly" - ( _1 ) -# 35712 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1719 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 27114 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35721,18 +27123,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = re; - MenhirLib.EngineTypes.startp = _startpos_re_; - MenhirLib.EngineTypes.endp = _endpos_re_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let re : 'tv_regexp_eqid = Obj.magic re in - let _startpos = _startpos_re_ in - let _endpos = _endpos_re_ in - let _v : 'tv_re_or_not_eqe_or_sub = -# 1916 "parser_cocci_menhir.mly" - (Ast0.NotIdCstrt re) -# 35736 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27135 "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_ = +# 1722 "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)) ) +# 27144 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35745,18 +27153,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 = ne; - MenhirLib.EngineTypes.startp = _startpos_ne_; - MenhirLib.EngineTypes.endp = _endpos_ne_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ne : 'tv_not_eqe = Obj.magic ne in - let _startpos = _startpos_ne_ in - let _endpos = _endpos_ne_ in - let _v : 'tv_re_or_not_eqe_or_sub = -# 1917 "parser_cocci_menhir.mly" - (Ast0.NotExpCstrt ne) -# 35760 "parser_cocci_menhir.ml" + let _1 : ( +# 133 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 27165 "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_ = +# 1726 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 27173 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35769,18 +27182,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let s : 'tv_sub = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_re_or_not_eqe_or_sub = -# 1918 "parser_cocci_menhir.mly" - (Ast0.SubExpCstrt s) -# 35784 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27194 "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_ = +# 1729 "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)) ) +# 27203 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35793,18 +27212,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = re; - MenhirLib.EngineTypes.startp = _startpos_re_; - MenhirLib.EngineTypes.endp = _endpos_re_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let re : 'tv_regexp_eqid = Obj.magic re in - let _startpos = _startpos_re_ in - let _endpos = _endpos_re_ in - let _v : 'tv_re_or_not_eqid = -# 1862 "parser_cocci_menhir.mly" - (Ast.IdRegExpConstraint re) -# 35808 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27224 "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_ = +# 1733 "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)) ) +# 27233 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35817,18 +27242,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ne; - MenhirLib.EngineTypes.startp = _startpos_ne_; - MenhirLib.EngineTypes.endp = _endpos_ne_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ne : 'tv_not_eqid = Obj.magic ne in - let _startpos = _startpos_ne_ in - let _endpos = _endpos_ne_ in - let _v : 'tv_re_or_not_eqid = -# 1863 "parser_cocci_menhir.mly" - (ne) -# 35832 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27254 "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_ = +# 1737 "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)) ) +# 27263 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35840,32 +27271,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = re; - MenhirLib.EngineTypes.startp = _startpos_re_; - MenhirLib.EngineTypes.endp = _endpos_re_; + 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 re : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 35857 "parser_cocci_menhir.ml" - ) = Obj.magic re in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 27294 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 27300 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_re_ in - let _v : 'tv_regexp_eqid = -# 1867 "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"); - let (s,_) = re in Ast.IdRegExp (s,Regexp.regexp s) - ) -# 35869 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1741 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 27308 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35877,32 +27316,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = re; - MenhirLib.EngineTypes.startp = _startpos_re_; - MenhirLib.EngineTypes.endp = _endpos_re_; + 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 re : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 35894 "parser_cocci_menhir.ml" - ) = Obj.magic re in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 27339 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 27345 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_re_ in - let _v : 'tv_regexp_eqid = -# 1874 "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"); - let (s,_) = re in Ast.IdNotRegExp (s,Regexp.regexp s) - ) -# 35906 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1744 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 27355 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35913,17 +27362,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 : ( -# 205 "parser_cocci_menhir.mly" - (unit) -# 35923 "parser_cocci_menhir.ml" - ) = -# 246 "parser_cocci_menhir.mly" - ( ) -# 35927 "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_dot_expressions = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1748 "parser_cocci_menhir.mly" + ( _1 ) +# 27379 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35941,13 +27393,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_one_decl_var = Obj.magic _1 in + let _1 : 'tv_func_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_rule_elem_statement = -# 1162 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) ) -# 35951 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1705 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 27403 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35970,18 +27422,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 179 "parser_cocci_menhir.mly" + let _2 : 'tv_ident = Obj.magic _2 in + let _1 : ( +# 162 "parser_cocci_menhir.mly" (Data.clt) -# 35977 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_option_expr_ = Obj.magic _1 in +# 27430 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 1163 "parser_cocci_menhir.mly" - ( P.exp_stm _1 _2 ) -# 35985 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1707 "parser_cocci_menhir.mly" + ( let op = P.clt2mcode Ast.GetRefLabel _1 in + Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) +# 27438 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35993,39 +27446,24 @@ 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 36016 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 36022 "parser_cocci_menhir.ml" +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27459 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_rule_elem_statement = -# 1164 "parser_cocci_menhir.mly" - ( P.ret_exp _1 _2 _3 ) -# 36029 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1710 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 27467 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36037,33 +27475,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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 36055 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 36060 "parser_cocci_menhir.ml" +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27488 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 1165 "parser_cocci_menhir.mly" - ( P.ret _1 _2 ) -# 36067 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1713 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 27496 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36075,33 +27504,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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 36093 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in let _1 : ( -# 126 "parser_cocci_menhir.mly" - (Data.clt) -# 36098 "parser_cocci_menhir.ml" +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27517 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 1166 "parser_cocci_menhir.mly" - ( P.break _1 _2 ) -# 36105 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1716 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 27525 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36113,33 +27533,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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 36131 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in let _1 : ( -# 126 "parser_cocci_menhir.mly" - (Data.clt) -# 36136 "parser_cocci_menhir.ml" +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27546 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 1167 "parser_cocci_menhir.mly" - ( P.cont _1 _2 ) -# 36143 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1719 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 27554 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36151,43 +27562,25 @@ 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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 36174 "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 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 36180 "parser_cocci_menhir.ml" +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27575 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_rule_elem_statement = -# 1169 "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)) ) -# 36191 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1722 "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)) ) +# 27584 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36199,62 +27592,24 @@ 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.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; - }; - }; - }; - }; - }; - }; + 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 : ( +# 133 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 27605 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : ( -# 227 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 36247 "parser_cocci_menhir.ml" - ) = let nm = - -# 39 "standard.mly" - ( None ) -# 36252 "parser_cocci_menhir.ml" - - in - -# 276 "parser_cocci_menhir.mly" - ( P.make_cocci_rule_name_result nm d i a e ee ) -# 36258 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1726 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 27613 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36266,69 +27621,25 @@ 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.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 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 : ( -# 227 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 36320 "parser_cocci_menhir.ml" - ) = let nm = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 36326 "parser_cocci_menhir.ml" - - in - -# 276 "parser_cocci_menhir.mly" - ( P.make_cocci_rule_name_result nm d i a e ee ) -# 36332 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27634 "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_ = +# 1729 "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)) ) +# 27643 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36340,59 +27651,25 @@ 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 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27664 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__8_ in - let _v : ( -# 227 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 36392 "parser_cocci_menhir.ml" - ) = -# 281 "parser_cocci_menhir.mly" - ( P.make_generated_rule_name_result None d i a e ee ) -# 36396 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1733 "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)) ) +# 27673 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36404,48 +27681,25 @@ 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 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 27694 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : ( -# 227 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 36438 "parser_cocci_menhir.ml" - ) = let nm = - -# 39 "standard.mly" - ( None ) -# 36443 "parser_cocci_menhir.ml" - - in - -# 283 "parser_cocci_menhir.mly" - ( P.make_script_rule_name_result lang nm d ) -# 36449 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1737 "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)) ) +# 27703 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36457,55 +27711,40 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - 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 x0 : 'tv_pure_ident = Obj.magic x0 in - let lang : 'tv_pure_ident = Obj.magic lang in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 27734 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 27740 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : ( -# 227 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 36497 "parser_cocci_menhir.ml" - ) = let nm = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 36503 "parser_cocci_menhir.ml" - - in - -# 283 "parser_cocci_menhir.mly" - ( P.make_script_rule_name_result lang nm d ) -# 36509 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1741 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 27748 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36517,41 +27756,42 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + 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 d : 'tv_depends = Obj.magic d in - let lang : 'tv_pure_ident = Obj.magic lang in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 27779 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 27785 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : ( -# 227 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 36551 "parser_cocci_menhir.ml" - ) = -# 285 "parser_cocci_menhir.mly" - ( P.make_initial_script_rule_name_result lang d ) -# 36555 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1744 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 27795 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36563,41 +27803,43 @@ 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_invalid = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : ( -# 227 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 36597 "parser_cocci_menhir.ml" - ) = -# 287 "parser_cocci_menhir.mly" - ( P.make_final_script_rule_name_result lang d ) -# 36601 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1748 "parser_cocci_menhir.mly" + ( _1 ) +# 27819 "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_nest_expressions_ = +# 1705 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 27843 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36609,27 +27851,30 @@ 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 = py; - MenhirLib.EngineTypes.startp = _startpos_py_; - MenhirLib.EngineTypes.endp = _endpos_py_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let py : 'tv_pure_ident = Obj.magic py in - let _startpos = _startpos_py_ in + let _2 : 'tv_ident = Obj.magic _2 in + let _1 : ( +# 162 "parser_cocci_menhir.mly" + (Data.clt) +# 27870 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 233 "parser_cocci_menhir.mly" - ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) -# 36629 "parser_cocci_menhir.ml" - ) = -# 2436 "parser_cocci_menhir.mly" - ( ((Some (P.id2name py), None), None) ) -# 36633 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1707 "parser_cocci_menhir.mly" + ( let op = P.clt2mcode Ast.GetRefLabel _1 in + Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) +# 27878 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36641,33 +27886,24 @@ 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.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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_script_name_decl = Obj.magic _2 in - let py : 'tv_pure_ident = Obj.magic py in - let _startpos = _startpos_py_ in - let _endpos = _endpos__3_ in - let _v : ( -# 233 "parser_cocci_menhir.mly" - ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) -# 36667 "parser_cocci_menhir.ml" - ) = -# 2438 "parser_cocci_menhir.mly" - ( ((Some (P.id2name py), None), Some _2) ) -# 36671 "parser_cocci_menhir.ml" + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27899 "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_ = +# 1710 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 27907 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36679,49 +27915,24 @@ 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.next = { - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ast; - MenhirLib.EngineTypes.startp = _startpos_ast_; - MenhirLib.EngineTypes.endp = _endpos_ast_; - 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 _6 : 'tv_script_name_decl = Obj.magic _6 in - let ast : 'tv_pure_ident = Obj.magic ast in + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27928 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : ( -# 233 "parser_cocci_menhir.mly" - ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) -# 36721 "parser_cocci_menhir.ml" - ) = -# 2440 "parser_cocci_menhir.mly" - ( ((None, Some (P.id2name ast)), Some _6) ) -# 36725 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1713 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 27936 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36733,49 +27944,24 @@ 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.next = { - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - 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 = str; - MenhirLib.EngineTypes.startp = _startpos_str_; - MenhirLib.EngineTypes.endp = _endpos_str_; - 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 _6 : 'tv_script_name_decl = Obj.magic _6 in - let str : 'tv_pure_ident = Obj.magic str in + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27957 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : ( -# 233 "parser_cocci_menhir.mly" - ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) -# 36775 "parser_cocci_menhir.ml" - ) = -# 2442 "parser_cocci_menhir.mly" - ( ((Some (P.id2name str), None), Some _6) ) -# 36779 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1716 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 27965 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36787,51 +27973,24 @@ 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.next = { - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ast; - MenhirLib.EngineTypes.startp = _startpos_ast_; - MenhirLib.EngineTypes.endp = _endpos_ast_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = str; - MenhirLib.EngineTypes.startp = _startpos_str_; - MenhirLib.EngineTypes.endp = _endpos_str_; - 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 _6 : 'tv_script_name_decl = Obj.magic _6 in - let ast : 'tv_pure_ident = Obj.magic ast in - let str : 'tv_pure_ident = Obj.magic str in + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 27986 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : ( -# 233 "parser_cocci_menhir.mly" - ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) -# 36831 "parser_cocci_menhir.ml" - ) = -# 2444 "parser_cocci_menhir.mly" - ( ((Some (P.id2name str), Some (P.id2name ast)), Some _6) ) -# 36835 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1719 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 27994 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36843,39 +28002,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = cocci; - MenhirLib.EngineTypes.startp = _startpos_cocci_; - MenhirLib.EngineTypes.endp = _endpos_cocci_; - MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; + 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 cocci : 'tv_pure_ident = Obj.magic cocci in - let _2 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 36870 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28015 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_cocci_ in - let _v : 'tv_script_name_decl = -# 2448 "parser_cocci_menhir.mly" - ( let nm = P.id2name cocci in - let mv = Parse_aux.lookup _2 nm in - ((_2, nm), mv) ) -# 36879 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1722 "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)) ) +# 28024 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36887,37 +28032,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = cocci; - MenhirLib.EngineTypes.startp = _startpos_cocci_; - MenhirLib.EngineTypes.endp = _endpos_cocci_; - 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 cocci : 'tv_pure_ident = Obj.magic cocci in + let _1 : ( +# 133 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 28045 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_cocci_ in - let _v : 'tv_script_name_decl = -# 2452 "parser_cocci_menhir.mly" - ( let nm = P.id2name cocci in - Iteration.parsed_virtual_identifiers := - Common.union_set [nm] - !Iteration.parsed_virtual_identifiers; - let name = ("virtual", nm) in - let mv = Ast.MetaIdDecl(Ast.NONE,name) in - (name,mv) ) -# 36921 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1726 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 28053 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36936,16 +28068,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 36942 "parser_cocci_menhir.ml" +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28074 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_seed_elem = -# 1807 "parser_cocci_menhir.mly" - ( let (x,_) = _1 in Ast.SeedString x ) -# 36949 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1729 "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)) ) +# 28083 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36964,16 +28098,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 130 "parser_cocci_menhir.mly" - (Parse_aux.midinfo) -# 36970 "parser_cocci_menhir.ml" +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28104 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_seed_elem = -# 1808 "parser_cocci_menhir.mly" - ( let (x,_,_,_,_) = _1 in Ast.SeedId x ) -# 36977 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1733 "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)) ) +# 28113 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36986,16 +28122,24 @@ 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 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28134 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_seed_elem = -# 1809 "parser_cocci_menhir.mly" - (failwith "tmeta") -# 36999 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1737 "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)) ) +# 28143 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37011,28 +28155,36 @@ 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 = { 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_pure_ident = Obj.magic _3 in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 28174 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 28180 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_seed_elem = -# 1811 "parser_cocci_menhir.mly" - ( let nm = ("virtual",P.id2name _3) in - Iteration.parsed_virtual_identifiers := - Common.union_set [snd nm] - !Iteration.parsed_virtual_identifiers; - try Ast.SeedString (List.assoc (snd nm) !Flag.defined_virtual_env) - with Not_found -> Ast.SeedId nm ) -# 37036 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1741 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 28188 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37048,6 +28200,7 @@ 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 = { @@ -37059,20 +28212,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : 'tv_pure_ident = Obj.magic _3 in + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 28219 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in let _1 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 37067 "parser_cocci_menhir.ml" +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 28225 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_seed_elem = -# 1818 "parser_cocci_menhir.mly" - ( let nm = (_1,P.id2name _3) in - P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm)); - Ast.SeedId nm ) -# 37076 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1744 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 28235 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37085,22 +28244,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 : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 37097 "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 ] ) -# 37104 "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_ = +# 1748 "parser_cocci_menhir.mly" + ( _1 ) +# 28259 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37112,33 +28267,54 @@ 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.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_expr_invalid_ = +# 1705 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 28283 "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.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_TString_ = Obj.magic xs in - let x : ( -# 159 "parser_cocci_menhir.mly" - (string * Data.clt) -# 37135 "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 ) -# 37142 "parser_cocci_menhir.ml" + let _2 : 'tv_ident = Obj.magic _2 in + let _1 : ( +# 162 "parser_cocci_menhir.mly" + (Data.clt) +# 28310 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1707 "parser_cocci_menhir.mly" + ( let op = P.clt2mcode Ast.GetRefLabel _1 in + Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) ) +# 28318 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37151,18 +28327,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 = 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_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 ] ) -# 37166 "parser_cocci_menhir.ml" + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28339 "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_ = +# 1710 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 28347 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37174,29 +28355,24 @@ 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.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 ) -# 37200 "parser_cocci_menhir.ml" + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28368 "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_ = +# 1713 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 28376 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37209,18 +28385,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 = 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_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 ] ) -# 37224 "parser_cocci_menhir.ml" + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28397 "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_ = +# 1716 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 28405 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37232,29 +28413,24 @@ 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.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_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 ) -# 37258 "parser_cocci_menhir.ml" + let _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28426 "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_ = +# 1719 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 28434 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37267,18 +28443,24 @@ 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_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 ] ) -# 37282 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28455 "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_ = +# 1722 "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)) ) +# 28464 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37290,29 +28472,24 @@ 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.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 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 ) -# 37316 "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 : ( +# 133 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 28485 "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_ = +# 1726 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 28493 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37325,18 +28502,24 @@ 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_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 ] ) -# 37340 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28514 "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_ = +# 1729 "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)) ) +# 28523 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37348,29 +28531,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.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 ) -# 37374 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28544 "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_ = +# 1733 "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)) ) +# 28553 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37383,18 +28562,24 @@ 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_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 ] ) -# 37398 "parser_cocci_menhir.ml" + let _1 : ( +# 138 "parser_cocci_menhir.mly" + (Parse_aux.typed_expinfo) +# 28574 "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_ = +# 1737 "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)) ) +# 28583 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37406,53 +28591,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.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_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 ) -# 37432 "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 : '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 ] ) -# 37456 "parser_cocci_menhir.ml" + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 28614 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 28620 "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_ = +# 1741 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 28628 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37464,29 +28636,42 @@ 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_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 ) -# 37490 "parser_cocci_menhir.ml" + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 28659 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 28665 "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_ = +# 1744 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 28675 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37499,18 +28684,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_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 ] ) -# 37514 "parser_cocci_menhir.ml" + 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_ = +# 1748 "parser_cocci_menhir.mly" + ( _1 ) +# 28699 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37522,29 +28707,17 @@ 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.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_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 ) -# 37548 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure = +# 264 "parser_cocci_menhir.mly" + ( Ast0.Pure ) +# 28721 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37557,18 +28730,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + 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_econstraint_not_ceq_or_sub_ = 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_econstraint_not_ceq_or_sub__ = -# 144 "standard.mly" - ( [ x ] ) -# 37572 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure = +# 265 "parser_cocci_menhir.mly" + ( Ast0.Context ) +# 28743 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37580,29 +28751,21 @@ 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.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_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub_ = 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_econstraint_not_ceq_or_sub__ = -# 146 "standard.mly" - ( x :: xs ) -# 37606 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_pure = +# 266 "parser_cocci_menhir.mly" + ( Ast0.PureContext ) +# 28769 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37614,19 +28777,21 @@ 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.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_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub_ = 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_econstraint_re_or_not_eqe_or_sub__ = -# 144 "standard.mly" - ( [ x ] ) -# 37630 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_pure = +# 267 "parser_cocci_menhir.mly" + ( Ast0.PureContext ) +# 28795 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37637,30 +28802,13 @@ 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.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 xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub_ = 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_econstraint_re_or_not_eqe_or_sub__ = -# 146 "standard.mly" - ( x :: xs ) -# 37664 "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 = +# 268 "parser_cocci_menhir.mly" + ( Ast0.Impure ) +# 28812 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37673,18 +28821,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 = 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_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = 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_idconstraint_re_or_not_eqid__ = -# 144 "standard.mly" - ( [ x ] ) -# 37688 "parser_cocci_menhir.ml" + let _1 : ( +# 127 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28833 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident = +# 1762 "parser_cocci_menhir.mly" + ( _1 ) +# 28840 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37696,29 +28848,17 @@ 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.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_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = 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_idconstraint_re_or_not_eqid__ = -# 146 "standard.mly" - ( x :: xs ) -# 37722 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1769 "parser_cocci_menhir.mly" + ( "identifier" ) +# 28862 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37731,18 +28871,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + 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_idconstraint_virt_re_or_not_eqid_ = 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_idconstraint_virt_re_or_not_eqid__ = -# 144 "standard.mly" - ( [ x ] ) -# 37746 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1770 "parser_cocci_menhir.mly" + ( "expression" ) +# 28884 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37754,29 +28892,17 @@ 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.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_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = 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_idconstraint_virt_re_or_not_eqid__ = -# 146 "standard.mly" - ( x :: xs ) -# 37780 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1771 "parser_cocci_menhir.mly" + ( "statement" ) +# 28906 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37789,18 +28915,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + 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_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 ] ) -# 37804 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1772 "parser_cocci_menhir.mly" + ( "function" ) +# 28928 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37812,29 +28936,17 @@ 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.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_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 ) -# 37838 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1773 "parser_cocci_menhir.mly" + ( "local" ) +# 28950 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37847,18 +28959,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + 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_x_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_x_eq_not_pos__ = -# 144 "standard.mly" - ( [ x ] ) -# 37862 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1774 "parser_cocci_menhir.mly" + ( "type" ) +# 28972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37870,29 +28980,17 @@ 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.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_pure_ident_or_meta_ident_with_x_eq_not_pos__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_x_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_x_eq_not_pos__ = -# 146 "standard.mly" - ( x :: xs ) -# 37896 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1775 "parser_cocci_menhir.mly" + ( "parameter" ) +# 28994 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37905,18 +29003,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_typedef_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = -# 144 "standard.mly" - ( [ x ] ) -# 37920 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1776 "parser_cocci_menhir.mly" + ( "idexpression" ) +# 29016 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37928,29 +29024,17 @@ 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.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_typedef_ident_ = Obj.magic xs in - let x : 'tv_typedef_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = -# 146 "standard.mly" - ( x :: xs ) -# 37954 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1777 "parser_cocci_menhir.mly" + ( "initialiser" ) +# 29038 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37963,18 +29047,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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - 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 ] ) -# 37978 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1778 "parser_cocci_menhir.mly" + ( "list" ) +# 29060 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37986,29 +29068,17 @@ 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.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_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 ) -# 38012 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1779 "parser_cocci_menhir.mly" + ( "fresh" ) +# 29082 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38021,18 +29091,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_statement = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_single_statement = -# 1177 "parser_cocci_menhir.mly" - ( _1 ) -# 38036 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_kwd = +# 1780 "parser_cocci_menhir.mly" + ( "constant" ) +# 29104 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38044,43 +29112,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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38067 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in - let _1 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38073 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_single_statement = -# 1181 "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)) ) -# 38084 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1781 "parser_cocci_menhir.mly" + ( "error" ) +# 29126 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38093,18 +29135,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_includes = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_statement = -# 1103 "parser_cocci_menhir.mly" - ( _1 ) -# 38108 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_kwd = +# 1782 "parser_cocci_menhir.mly" + ( "words" ) +# 29148 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38117,22 +29157,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 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 38129 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_statement = -# 1104 "parser_cocci_menhir.mly" - ( tmeta_to_statement _1) -# 38136 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_kwd = +# 1783 "parser_cocci_menhir.mly" + ( "pure" ) +# 29170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38145,22 +29179,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 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 38157 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_statement = -# 1106 "parser_cocci_menhir.mly" - ( P.meta_stm _1 ) -# 38164 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_kwd = +# 1784 "parser_cocci_menhir.mly" + ( "context" ) +# 29192 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38172,29 +29200,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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38190 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_option_expr_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 1108 "parser_cocci_menhir.mly" - ( P.exp_stm _1 _2 ) -# 38198 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1785 "parser_cocci_menhir.mly" + ( "generated" ) +# 29214 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38206,55 +29222,17 @@ 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.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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38240 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38246 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38251 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_statement = -# 1110 "parser_cocci_menhir.mly" - ( P.ifthen _1 _2 _3 _4 _5 ) -# 38258 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1786 "parser_cocci_menhir.mly" + ( "typedef" ) +# 29236 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38266,71 +29244,17 @@ 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.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.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 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38310 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_single_statement = Obj.magic _5 in - let _4 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38316 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38322 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38327 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : 'tv_statement = -# 1112 "parser_cocci_menhir.mly" - ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 ) -# 38334 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1787 "parser_cocci_menhir.mly" + ( "declarer" ) +# 29258 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38342,87 +29266,17 @@ 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.state = _menhir_s; + 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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38396 "parser_cocci_menhir.ml" - ) = Obj.magic _8 in - let _7 : 'tv_option_eexpr_ = Obj.magic _7 in - let _6 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38402 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_option_eexpr_ = Obj.magic _5 in - let _4 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38408 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_option_eexpr_ = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38414 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38419 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__9_ in - let _v : 'tv_statement = -# 1115 "parser_cocci_menhir.mly" - ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 ) -# 38426 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1788 "parser_cocci_menhir.mly" + ( "iterator" ) +# 29280 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38434,55 +29288,17 @@ 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.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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38468 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38474 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38479 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_statement = -# 1117 "parser_cocci_menhir.mly" - ( P.whileloop _1 _2 _3 _4 _5 ) -# 38486 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1789 "parser_cocci_menhir.mly" + ( "name" ) +# 29302 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38494,75 +29310,17 @@ 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.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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38537 "parser_cocci_menhir.ml" - ) = Obj.magic _7 in - let _6 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38542 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_eexpr = Obj.magic _5 in - let _4 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38548 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38553 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_single_statement = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38559 "parser_cocci_menhir.ml" - ) = 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__7_ in - let _v : 'tv_statement = -# 1119 "parser_cocci_menhir.mly" - ( P.doloop _1 _2 _3 _4 _5 _6 _7 ) -# 38566 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1790 "parser_cocci_menhir.mly" + ( "position" ) +# 29324 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38574,51 +29332,17 @@ 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.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 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38608 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38614 "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 = -# 1121 "parser_cocci_menhir.mly" - ( P.iterator _1 _2 _3 _4 _5 ) -# 38622 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_kwd = +# 1791 "parser_cocci_menhir.mly" + ( "symbol" ) +# 29346 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38630,81 +29354,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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.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 _8 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 38678 "parser_cocci_menhir.ml" - ) = Obj.magic _8 in - let _7 : 'tv_list_case_line_ = Obj.magic _7 in - let _6 : 'tv_list_decl_var_ = Obj.magic _6 in - let _5 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 38685 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 38690 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38696 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38701 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_pure_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__8_ in - let _v : 'tv_statement = -# 1123 "parser_cocci_menhir.mly" - ( P.switch _1 _2 _3 _4 _5 (List.concat _6) _7 _8 ) -# 38708 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1798 "parser_cocci_menhir.mly" + ( (None,P.id2name _1) ) +# 29370 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38716,39 +29378,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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38739 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38745 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_pure_ident_kwd = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_statement = -# 1124 "parser_cocci_menhir.mly" - ( P.ret_exp _1 _2 _3 ) -# 38752 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1799 "parser_cocci_menhir.mly" + ( (None,_1) ) +# 29394 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38760,33 +29402,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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38778 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 125 "parser_cocci_menhir.mly" - (Data.clt) -# 38783 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_meta_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 1125 "parser_cocci_menhir.mly" - ( P.ret _1 _2 ) -# 38790 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1800 "parser_cocci_menhir.mly" + ( _1 ) +# 29418 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38798,33 +29426,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 = optc; + MenhirLib.EngineTypes.startp = _startpos_optc_; + MenhirLib.EngineTypes.endp = _endpos_optc_; 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38816 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 126 "parser_cocci_menhir.mly" - (Data.clt) -# 38821 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 1126 "parser_cocci_menhir.mly" - ( P.break _1 _2 ) -# 38828 "parser_cocci_menhir.ml" + let optc : 'tv_option_not_ceq_or_sub_ = Obj.magic optc in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_optc_ in + let _v : 'tv_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub_ = +# 1837 "parser_cocci_menhir.mly" + ( + match optc with + None -> (i, Ast0.NoConstraint) + | Some c -> (i, c) + ) +# 29452 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38836,33 +29460,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 = optc; + MenhirLib.EngineTypes.startp = _startpos_optc_; + MenhirLib.EngineTypes.endp = _endpos_optc_; 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38854 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 126 "parser_cocci_menhir.mly" - (Data.clt) -# 38859 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 1127 "parser_cocci_menhir.mly" - ( P.cont _1 _2 ) -# 38866 "parser_cocci_menhir.ml" + let optc : 'tv_option_re_or_not_eqe_or_sub_ = Obj.magic optc in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_optc_ in + let _v : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub_ = +# 1837 "parser_cocci_menhir.mly" + ( + match optc with + None -> (i, Ast0.NoConstraint) + | Some c -> (i, c) + ) +# 29486 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38874,29 +29494,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 = 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.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 38892 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_mident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 1128 "parser_cocci_menhir.mly" - ( P.label _1 _2 ) -# 38900 "parser_cocci_menhir.ml" + let c : 'tv_option_re_or_not_eqid_ = Obj.magic c in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_c_ in + let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = +# 1862 "parser_cocci_menhir.mly" + ( + match c with + None -> (i, Ast.IdNoConstraint) + | Some constraint_ -> (i,constraint_) + ) +# 29520 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38908,39 +29528,30 @@ 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.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 _3 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 38931 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_disj_ident = Obj.magic _2 in - let _1 : ( -# 126 "parser_cocci_menhir.mly" - (Data.clt) -# 38937 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_statement = -# 1129 "parser_cocci_menhir.mly" - ( P.goto _1 _2 _3 ) -# 38944 "parser_cocci_menhir.ml" + let c : 'tv_option_re_or_not_eqid_ = Obj.magic c in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_c_ in + let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = +# 1845 "parser_cocci_menhir.mly" + ( + Common.Left + (match c with + None -> (i, Ast.IdNoConstraint) + | Some constraint_ -> (i,constraint_)) + ) +# 29555 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38956,35 +29567,29 @@ 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 = { 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 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 38975 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_fun_start = Obj.magic _2 in - let _1 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 38981 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _3 : 'tv_pure_ident = Obj.magic _3 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_statement = -# 1131 "parser_cocci_menhir.mly" - ( P.seq _1 _2 _3 ) -# 38988 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = +# 1852 "parser_cocci_menhir.mly" + ( + let nm = P.id2name _3 in + Iteration.parsed_virtual_identifiers := + Common.union_set [nm] + !Iteration.parsed_virtual_identifiers; + Common.Right nm + ) +# 29593 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38996,80 +29601,19 @@ 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.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 w : 'tv_list_whenppdecs_ = Obj.magic w in - let _1 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 39015 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_w_ in - let _v : 'tv_stm_dots = -# 1135 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) ) -# 39022 "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 = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; - MenhirLib.EngineTypes.next = { - 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 c : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 39058 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 39065 "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_c_ in - let _v : 'tv_stm_dots = -# 1137 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b, - P.clt2mcode "...>" c, List.concat w, false)) ) -# 39073 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident_with_seed = +# 1806 "parser_cocci_menhir.mly" + ( (_1,Ast.NoVal) ) +# 29617 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39081,74 +29625,31 @@ 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 = _3; + 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.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 39109 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 39116 "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_c_ in - let _v : 'tv_stm_dots = -# 1140 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b, - P.clt2mcode "...+>" c, List.concat w, true)) ) -# 39124 "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 : ( -# 121 "parser_cocci_menhir.mly" - (Data.clt) -# 39145 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 1064 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Static s ) -# 39152 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_pure_ident_or_meta_ident_with_seed = +# 1809 "parser_cocci_menhir.mly" + ( match _3 with + [Ast.SeedString s] -> (_1,Ast.StringSeed s) + | _ -> (_1,Ast.ListSeed _3) ) +# 29653 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39160,23 +29661,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 = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - 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 s : ( -# 121 "parser_cocci_menhir.mly" - (Data.clt) -# 39173 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 1065 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Auto s ) -# 39180 "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_x_eq_not_pos_ = +# 1831 "parser_cocci_menhir.mly" + ( + (i, l) + ) +# 29685 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39189,22 +29694,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 = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let s : ( -# 121 "parser_cocci_menhir.mly" - (Data.clt) -# 39201 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 1066 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Register s ) -# 39208 "parser_cocci_menhir.ml" + 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_symbol = +# 1765 "parser_cocci_menhir.mly" + ( _1 ) +# 29709 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39217,22 +29718,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 = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let s : ( -# 121 "parser_cocci_menhir.mly" - (Data.clt) -# 39229 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 1067 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Extern s ) -# 39236 "parser_cocci_menhir.ml" + let _1 : ( +# 127 "parser_cocci_menhir.mly" + (string * Data.clt) +# 29730 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_symbol = +# 1766 "parser_cocci_menhir.mly" + ( _1 ) +# 29737 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39245,16 +29746,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 = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_struct_decl = -# 759 "parser_cocci_menhir.mly" - ( [] ) -# 39258 "parser_cocci_menhir.ml" + let re : 'tv_regexp_eqid = Obj.magic re in + let _startpos = _startpos_re_ in + let _endpos = _endpos_re_ in + let _v : 'tv_re_or_not_eqe_or_sub = +# 1923 "parser_cocci_menhir.mly" + (Ast0.NotIdCstrt re) +# 29761 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39267,18 +29770,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 = ne; + MenhirLib.EngineTypes.startp = _startpos_ne_; + MenhirLib.EngineTypes.endp = _endpos_ne_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_struct_decl_one = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_struct_decl = -# 760 "parser_cocci_menhir.mly" - ( [_1] ) -# 39282 "parser_cocci_menhir.ml" + let ne : 'tv_not_eqe = Obj.magic ne in + let _startpos = _startpos_ne_ in + let _endpos = _endpos_ne_ in + let _v : 'tv_re_or_not_eqe_or_sub = +# 1924 "parser_cocci_menhir.mly" + (Ast0.NotExpCstrt ne) +# 29785 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39291,18 +29794,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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; 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 = -# 788 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 39306 "parser_cocci_menhir.ml" + let s : 'tv_sub = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_re_or_not_eqe_or_sub = +# 1925 "parser_cocci_menhir.mly" + (Ast0.SubExpCstrt s) +# 29809 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39315,18 +29818,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 = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; 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 = -# 791 "parser_cocci_menhir.mly" - ( _1 ) -# 39330 "parser_cocci_menhir.ml" + let re : 'tv_regexp_eqid = Obj.magic re in + let _startpos = _startpos_re_ in + let _endpos = _endpos_re_ in + let _v : 'tv_re_or_not_eqid = +# 1869 "parser_cocci_menhir.mly" + (Ast.IdRegExpConstraint re) +# 29833 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39338,25 +29841,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 = ne; + MenhirLib.EngineTypes.startp = _startpos_ne_; + MenhirLib.EngineTypes.endp = _endpos_ne_; + 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 = -# 792 "parser_cocci_menhir.mly" - ( _1@_2 ) -# 39360 "parser_cocci_menhir.ml" + let ne : 'tv_not_eqid = Obj.magic ne in + let _startpos = _startpos_ne_ in + let _endpos = _endpos_ne_ in + let _v : 'tv_re_or_not_eqid = +# 1870 "parser_cocci_menhir.mly" + (ne) +# 29857 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39368,25 +29865,32 @@ 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 = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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_one_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_struct_decl_list_start = -# 794 "parser_cocci_menhir.mly" - ( (P.mkddots_one "..." d)::r ) -# 39390 "parser_cocci_menhir.ml" + let re : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 29882 "parser_cocci_menhir.ml" + ) = Obj.magic re in + let _startpos = _startpos__1_ in + let _endpos = _endpos_re_ in + let _v : 'tv_regexp_eqid = +# 1874 "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"); + let (s,_) = re in Ast.IdRegExp (s,Regexp.regexp s) + ) +# 29894 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39398,23 +29902,32 @@ 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 = re; + MenhirLib.EngineTypes.startp = _startpos_re_; + MenhirLib.EngineTypes.endp = _endpos_re_; + 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 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 39411 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let re : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 29919 "parser_cocci_menhir.ml" + ) = Obj.magic re in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_struct_decl_one = -# 763 "parser_cocci_menhir.mly" - ( P.meta_field _1 ) -# 39418 "parser_cocci_menhir.ml" + let _endpos = _endpos_re_ in + let _v : 'tv_regexp_eqid = +# 1881 "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"); + let (s,_) = re in Ast.IdNotRegExp (s,Regexp.regexp s) + ) +# 29931 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39425,24 +29938,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 : ( -# 137 "parser_cocci_menhir.mly" - (Parse_aux.list_info) -# 39439 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_struct_decl_one = -# 764 "parser_cocci_menhir.mly" - ( P.meta_field_list _1 ) -# 39446 "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 : ( +# 205 "parser_cocci_menhir.mly" + (unit) +# 29948 "parser_cocci_menhir.ml" + ) = +# 246 "parser_cocci_menhir.mly" + ( ) +# 29952 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39460,17 +29966,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 135 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 39467 "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_struct_decl_one = -# 765 "parser_cocci_menhir.mly" - ( tmeta_to_field _1 ) -# 39474 "parser_cocci_menhir.ml" + let _v : 'tv_rule_elem_statement = +# 1169 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) ) +# 29976 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39482,41 +29984,29 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - 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 rp : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 39505 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let t : 'tv_midzero_list_struct_decl_one_struct_decl_one_ = Obj.magic t in - let lp : ( -# 148 "parser_cocci_menhir.mly" + let _2 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 39511 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let _startpos = _startpos_lp_ in - let _endpos = _endpos_rp_ in - let _v : 'tv_struct_decl_one = -# 767 "parser_cocci_menhir.mly" - ( let (mids,code) = t in - Ast0.wrap - (Ast0.DisjDecl(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 39520 "parser_cocci_menhir.ml" +# 30002 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_option_expr_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 1170 "parser_cocci_menhir.mly" + ( P.exp_stm _1 _2 ) +# 30010 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39528,138 +30018,39 @@ 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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + 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 : ( -# 179 "parser_cocci_menhir.mly" - (Data.clt) -# 39551 "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_one = -# 771 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv)) ) -# 39561 "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 : ( + let _3 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 39622 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 39627 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 148 "parser_cocci_menhir.mly" - (Data.clt) -# 39633 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 149 "parser_cocci_menhir.mly" - (Data.clt) -# 39638 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 171 "parser_cocci_menhir.mly" - (Data.clt) -# 39644 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 148 "parser_cocci_menhir.mly" +# 30041 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" (Data.clt) -# 39649 "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_one = -# 775 "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)) ) -# 39663 "parser_cocci_menhir.ml" +# 30047 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_rule_elem_statement = +# 1171 "parser_cocci_menhir.mly" + ( P.ret_exp _1 _2 _3 ) +# 30054 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39671,44 +30062,33 @@ 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 = 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 : ( + let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 39694 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_struct_decl_one = let cv = - -# 39 "standard.mly" - ( None ) -# 39704 "parser_cocci_menhir.ml" - - in - -# 783 "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)) ) -# 39712 "parser_cocci_menhir.ml" +# 30080 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 30085 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 1172 "parser_cocci_menhir.mly" + ( P.ret _1 _2 ) +# 30092 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39720,51 +30100,33 @@ 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.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 pv : ( + let _2 : ( # 179 "parser_cocci_menhir.mly" (Data.clt) -# 39748 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident_or_symbol = 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_struct_decl_one = let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 39760 "parser_cocci_menhir.ml" - - in - -# 783 "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)) ) -# 39768 "parser_cocci_menhir.ml" +# 30118 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 126 "parser_cocci_menhir.mly" + (Data.clt) +# 30123 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 1173 "parser_cocci_menhir.mly" + ( P.break _1 _2 ) +# 30130 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39776,23 +30138,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 = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - 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 s : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 39789 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_struct_or_union = -# 755 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Struct s ) -# 39796 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 30156 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 126 "parser_cocci_menhir.mly" + (Data.clt) +# 30161 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 1174 "parser_cocci_menhir.mly" + ( P.cont _1 _2 ) +# 30168 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39804,23 +30176,43 @@ 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 = _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 u : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 39817 "parser_cocci_menhir.ml" - ) = Obj.magic u in - let _startpos = _startpos_u_ in - let _endpos = _endpos_u_ in - let _v : 'tv_struct_or_union = -# 756 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Union u ) -# 39824 "parser_cocci_menhir.ml" + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 30199 "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 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 30205 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_rule_elem_statement = +# 1176 "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)) ) +# 30216 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39832,30 +30224,62 @@ 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.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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 = 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 i : 'tv_meta_ident = Obj.magic i 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_i_ in - let _v : 'tv_sub = -# 1962 "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"); - let i = - P.check_inherited_constraint i - (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None)) in - [i] ) -# 39859 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : ( +# 227 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 30272 "parser_cocci_menhir.ml" + ) = let nm = + +# 39 "standard.mly" + ( None ) +# 30277 "parser_cocci_menhir.ml" + + in + +# 276 "parser_cocci_menhir.mly" + ( P.make_cocci_rule_name_result nm d i a e ee ) +# 30283 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39867,39 +30291,69 @@ 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__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = ee; + MenhirLib.EngineTypes.startp = _startpos_ee_; + MenhirLib.EngineTypes.endp = _endpos_ee_; 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.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 l : 'tv_comma_list_meta_ident_ = Obj.magic l in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_sub = -# 1971 "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 -> - P.check_inherited_constraint i - (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None))) - l) -# 39903 "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 : ( +# 227 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 30345 "parser_cocci_menhir.ml" + ) = let nm = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 30351 "parser_cocci_menhir.ml" + + in + +# 276 "parser_cocci_menhir.mly" + ( P.make_cocci_rule_name_result nm d i a e ee ) +# 30357 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39911,19 +30365,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 : 'tv_eexpr = 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_top_eexpr = -# 1480 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) ) -# 39927 "parser_cocci_menhir.ml" + let _endpos = _endpos__8_ in + let _v : ( +# 227 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 30417 "parser_cocci_menhir.ml" + ) = +# 281 "parser_cocci_menhir.mly" + ( P.make_generated_rule_name_result None d i a e ee ) +# 30421 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39935,44 +30429,48 @@ 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.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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.next = _menhir_stack; + 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 _3 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 39958 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_initialize_list = Obj.magic _2 in - let _1 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 39964 "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__3_ in - let _v : 'tv_top_init = -# 2225 "parser_cocci_menhir.mly" - ( if P.struct_initializer _2 - then - let il = P.drop_dot_commas _2 in - Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,il,P.clt2mcode "}" _3,false)) - else - Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3,true)) ) -# 39976 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : ( +# 227 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 30463 "parser_cocci_menhir.ml" + ) = let nm = + +# 39 "standard.mly" + ( None ) +# 30468 "parser_cocci_menhir.ml" + + in + +# 283 "parser_cocci_menhir.mly" + ( P.make_script_rule_name_result lang nm d ) +# 30474 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -39983,13 +30481,56 @@ 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_toplevel_after_dots = -# 2213 "parser_cocci_menhir.mly" - ([]) -# 39993 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + 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 d : 'tv_depends = Obj.magic d in + let x0 : 'tv_pure_ident = Obj.magic x0 in + let lang : 'tv_pure_ident = Obj.magic lang in + let _startpos = _startpos__1_ in + let _endpos = _endpos__6_ in + let _v : ( +# 227 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 30522 "parser_cocci_menhir.ml" + ) = let nm = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 30528 "parser_cocci_menhir.ml" + + in + +# 283 "parser_cocci_menhir.mly" + ( P.make_script_rule_name_result lang nm d ) +# 30534 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40001,23 +30542,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.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 = 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 _2 : 'tv_toplevel_after_exp = Obj.magic _2 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__2_ in - let _v : 'tv_toplevel_after_dots = -# 2214 "parser_cocci_menhir.mly" - (_2) -# 40021 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : ( +# 227 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 30576 "parser_cocci_menhir.ml" + ) = +# 285 "parser_cocci_menhir.mly" + ( P.make_initial_script_rule_name_result lang d ) +# 30580 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40029,25 +30588,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.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = 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 _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = 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__2_ in - let _v : 'tv_toplevel_after_dots = -# 2215 "parser_cocci_menhir.mly" - ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 40051 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : ( +# 227 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 30622 "parser_cocci_menhir.ml" + ) = +# 287 "parser_cocci_menhir.mly" + ( P.make_final_script_rule_name_result lang d ) +# 30626 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40059,25 +30634,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.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = py; + MenhirLib.EngineTypes.startp = _startpos_py_; + MenhirLib.EngineTypes.endp = _endpos_py_; 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 py : 'tv_pure_ident = Obj.magic py in + let _startpos = _startpos_py_ in let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots = -# 2216 "parser_cocci_menhir.mly" - (_1@_2) -# 40081 "parser_cocci_menhir.ml" + let _v : ( +# 233 "parser_cocci_menhir.mly" + ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) +# 30654 "parser_cocci_menhir.ml" + ) = +# 2443 "parser_cocci_menhir.mly" + ( ((Some (P.id2name py), None), None) ) +# 30658 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40089,23 +30666,33 @@ 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.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 = py; + MenhirLib.EngineTypes.startp = _startpos_py_; + MenhirLib.EngineTypes.endp = _endpos_py_; + 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 = -# 2204 "parser_cocci_menhir.mly" - (_2) -# 40109 "parser_cocci_menhir.ml" + let _2 : 'tv_script_name_decl = Obj.magic _2 in + let py : 'tv_pure_ident = Obj.magic py in + let _startpos = _startpos_py_ in + let _endpos = _endpos__3_ in + let _v : ( +# 233 "parser_cocci_menhir.mly" + ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) +# 30692 "parser_cocci_menhir.ml" + ) = +# 2445 "parser_cocci_menhir.mly" + ( ((Some (P.id2name py), None), Some _2) ) +# 30696 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40117,25 +30704,49 @@ 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__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ast; + MenhirLib.EngineTypes.startp = _startpos_ast_; + MenhirLib.EngineTypes.endp = _endpos_ast_; + 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; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in + let _6 : 'tv_script_name_decl = Obj.magic _6 in + let ast : 'tv_pure_ident = Obj.magic ast in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots_init = -# 2205 "parser_cocci_menhir.mly" - ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 40139 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : ( +# 233 "parser_cocci_menhir.mly" + ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) +# 30746 "parser_cocci_menhir.ml" + ) = +# 2447 "parser_cocci_menhir.mly" + ( ((None, Some (P.id2name ast)), Some _6) ) +# 30750 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40147,42 +30758,49 @@ 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__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = str; + MenhirLib.EngineTypes.startp = _startpos_str_; + MenhirLib.EngineTypes.endp = _endpos_str_; + 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_toplevel_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _6 : 'tv_script_name_decl = Obj.magic _6 in + let str : 'tv_pure_ident = Obj.magic str in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots_init = -# 2206 "parser_cocci_menhir.mly" - (_1@_2) -# 40169 "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 = -# 2209 "parser_cocci_menhir.mly" - ([]) -# 40186 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : ( +# 233 "parser_cocci_menhir.mly" + ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) +# 30800 "parser_cocci_menhir.ml" + ) = +# 2449 "parser_cocci_menhir.mly" + ( ((Some (P.id2name str), None), Some _6) ) +# 30804 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40194,42 +30812,51 @@ 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__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ast; + MenhirLib.EngineTypes.startp = _startpos_ast_; + MenhirLib.EngineTypes.endp = _endpos_ast_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = str; + MenhirLib.EngineTypes.startp = _startpos_str_; + MenhirLib.EngineTypes.endp = _endpos_str_; + 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_toplevel_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let _6 : 'tv_script_name_decl = Obj.magic _6 in + let ast : 'tv_pure_ident = Obj.magic ast in + let str : 'tv_pure_ident = Obj.magic str in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_exp = -# 2210 "parser_cocci_menhir.mly" - (_1::_2) -# 40216 "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 = -# 2219 "parser_cocci_menhir.mly" - ([]) -# 40233 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : ( +# 233 "parser_cocci_menhir.mly" + ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) +# 30856 "parser_cocci_menhir.ml" + ) = +# 2451 "parser_cocci_menhir.mly" + ( ((Some (P.id2name str), Some (P.id2name ast)), Some _6) ) +# 30860 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40241,25 +30868,39 @@ 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 = cocci; + MenhirLib.EngineTypes.startp = _startpos_cocci_; + MenhirLib.EngineTypes.endp = _endpos_cocci_; 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__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_toplevel_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let cocci : 'tv_pure_ident = Obj.magic cocci in + let _2 : ( +# 114 "parser_cocci_menhir.mly" + (string) +# 30895 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_stm = -# 2220 "parser_cocci_menhir.mly" - (_1::_2) -# 40263 "parser_cocci_menhir.ml" + let _endpos = _endpos_cocci_ in + let _v : 'tv_script_name_decl = +# 2455 "parser_cocci_menhir.mly" + ( let nm = P.id2name cocci in + let mv = Parse_aux.lookup _2 nm in + ((_2, nm), mv) ) +# 30904 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40271,25 +30912,37 @@ 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 = cocci; + MenhirLib.EngineTypes.startp = _startpos_cocci_; + MenhirLib.EngineTypes.endp = _endpos_cocci_; 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__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; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement = Obj.magic _1 in + let cocci : 'tv_pure_ident = Obj.magic cocci in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_stm = -# 2221 "parser_cocci_menhir.mly" - (_1@_2) -# 40293 "parser_cocci_menhir.ml" + let _endpos = _endpos_cocci_ in + let _v : 'tv_script_name_decl = +# 2459 "parser_cocci_menhir.mly" + ( let nm = P.id2name cocci in + Iteration.parsed_virtual_identifiers := + Common.union_set [nm] + !Iteration.parsed_virtual_identifiers; + let name = ("virtual", nm) in + let mv = Ast.MetaIdDecl(Ast.NONE,name) in + (name,mv) ) +# 30946 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40301,25 +30954,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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 _1 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 30967 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 2199 "parser_cocci_menhir.mly" - ( _1::_2 ) -# 40323 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_seed_elem = +# 1814 "parser_cocci_menhir.mly" + ( let (x,_) = _1 in Ast.SeedString x ) +# 30974 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40331,25 +30982,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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 _1 : ( +# 130 "parser_cocci_menhir.mly" + (Parse_aux.midinfo) +# 30995 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 2200 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 40353 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_seed_elem = +# 1815 "parser_cocci_menhir.mly" + ( let (x,_,_,_,_) = _1 in Ast.SeedId x ) +# 31002 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40361,25 +31010,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_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_ = -# 2201 "parser_cocci_menhir.mly" - ( _1@_2 ) -# 40383 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_seed_elem = +# 1816 "parser_cocci_menhir.mly" + (failwith "tmeta") +# 31024 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40391,44 +31032,32 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w0; - MenhirLib.EngineTypes.startp = _startpos_w0_; - MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a0; - MenhirLib.EngineTypes.startp = _startpos_a0_; - MenhirLib.EngineTypes.endp = _endpos_a0_; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40416 "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 - -# 1145 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) ) -# 40426 "parser_cocci_menhir.ml" - - in - -# 2192 "parser_cocci_menhir.mly" - ( a::b ) -# 40432 "parser_cocci_menhir.ml" + let _3 : 'tv_pure_ident = Obj.magic _3 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_seed_elem = +# 1818 "parser_cocci_menhir.mly" + ( let nm = ("virtual",P.id2name _3) in + Iteration.parsed_virtual_identifiers := + Common.union_set [snd nm] + !Iteration.parsed_virtual_identifiers; + try Ast.SeedString (List.assoc (snd nm) !Flag.defined_virtual_env) + with Not_found -> Ast.SeedId nm ) +# 31061 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40440,63 +31069,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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = c0; - MenhirLib.EngineTypes.startp = _startpos_c0_; - MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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.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_after_dots_init = Obj.magic b in - let c0 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40474 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40481 "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 - -# 1149 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, - P.clt2mcode "...>" c, List.concat w, false)) ) -# 40494 "parser_cocci_menhir.ml" - - in - -# 2193 "parser_cocci_menhir.mly" - ( a::b ) -# 40500 "parser_cocci_menhir.ml" + let _3 : 'tv_pure_ident = Obj.magic _3 in + let _1 : ( +# 114 "parser_cocci_menhir.mly" + (string) +# 31092 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_seed_elem = +# 1825 "parser_cocci_menhir.mly" + ( let nm = (_1,P.id2name _3) in + P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm)); + Ast.SeedId nm ) +# 31101 "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 : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 31122 "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 ] ) +# 31129 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40508,63 +31137,33 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = c0; - MenhirLib.EngineTypes.startp = _startpos_c0_; - MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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.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_after_dots_init = Obj.magic b in - let c0 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40542 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40549 "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 - -# 1152 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, - P.clt2mcode "...+>" c, List.concat w, true)) ) -# 40562 "parser_cocci_menhir.ml" - - in - -# 2193 "parser_cocci_menhir.mly" - ( a::b ) -# 40568 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_TString_ = Obj.magic xs in + let x : ( +# 159 "parser_cocci_menhir.mly" + (string * Data.clt) +# 31160 "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 ) +# 31167 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40576,57 +31175,19 @@ 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.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.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 c0 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40604 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40611 "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 - -# 1149 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, - P.clt2mcode "...>" c, List.concat w, false)) ) -# 40624 "parser_cocci_menhir.ml" - - in - -# 2194 "parser_cocci_menhir.mly" - ( [a] ) -# 40630 "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 ] ) +# 31191 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40638,57 +31199,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b0; - MenhirLib.EngineTypes.startp = _startpos_b0_; - MenhirLib.EngineTypes.endp = _endpos_b0_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let c0 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40666 "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 : ( -# 145 "parser_cocci_menhir.mly" - (Data.clt) -# 40673 "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 - -# 1152 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, - P.clt2mcode "...+>" c, List.concat w, true)) ) -# 40686 "parser_cocci_menhir.ml" - - in - -# 2194 "parser_cocci_menhir.mly" - ( [a] ) -# 40692 "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 ) +# 31225 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40700,25 +31233,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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + 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_ = -# 2195 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 40722 "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 ] ) +# 31249 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40730,25 +31257,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 = 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.next = _menhir_stack; + 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 _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_ = -# 2196 "parser_cocci_menhir.mly" - ( _1@_2 ) -# 40752 "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 ) +# 31283 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40761,18 +31292,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_disj_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_type_ident = -# 2050 "parser_cocci_menhir.mly" - ( _1 ) -# 40776 "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 ] ) +# 31307 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40784,23 +31315,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 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 40797 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_type_ident = -# 2052 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 40804 "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 ) +# 31341 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40812,63 +31349,19 @@ 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.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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 40836 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 40841 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 40853 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 40859 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 40866 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 40872 "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 ] ) +# 31365 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40880,63 +31373,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 40904 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 40909 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 40921 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 40927 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 40934 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 40940 "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 ) +# 31399 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -40948,77 +31407,19 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 40977 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 40982 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 40987 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 41003 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41009 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41016 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41022 "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 ] ) +# 31423 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41030,63 +31431,53 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41054 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41059 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 41071 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41077 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41084 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41090 "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 ) +# 31457 "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 : '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 ] ) +# 31481 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41098,64 +31489,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 41122 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41127 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 41140 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41146 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41153 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41159 "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 ) +# 31515 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41167,84 +31523,19 @@ 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.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; - }; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 41200 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 41205 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41210 "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 - -# 651 "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*))) ) -# 41229 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41235 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41242 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41248 "parser_cocci_menhir.ml" + 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 ] ) +# 31539 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41256,63 +31547,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41280 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41285 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 41297 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41303 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41310 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41316 "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 ) +# 31573 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41324,77 +31581,19 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41353 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41358 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41363 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 41379 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41385 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41392 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41398 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub_ = 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_econstraint_not_ceq_or_sub__ = +# 144 "standard.mly" + ( [ x ] ) +# 31597 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41406,78 +31605,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41435 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41440 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41445 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 41462 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41468 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41475 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41481 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub_ = 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_econstraint_not_ceq_or_sub__ = +# 146 "standard.mly" + ( x :: xs ) +# 31631 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41489,91 +31639,19 @@ 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.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; - 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; - }; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41523 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41528 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41533 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41538 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 41558 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 41564 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41571 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41577 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub_ = 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_econstraint_re_or_not_eqe_or_sub__ = +# 144 "standard.mly" + ( [ x ] ) +# 31655 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41585,63 +31663,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41609 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41614 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 41626 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 41632 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41639 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41645 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub_ = 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_econstraint_re_or_not_eqe_or_sub__ = +# 146 "standard.mly" + ( x :: xs ) +# 31689 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41653,63 +31697,53 @@ 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.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_with_idconstraint_re_or_not_eqid_ = 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_idconstraint_re_or_not_eqid__ = +# 144 "standard.mly" + ( [ x ] ) +# 31713 "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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41677 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41682 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 41694 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 41700 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41707 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41713 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = 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_idconstraint_re_or_not_eqid__ = +# 146 "standard.mly" + ( x :: xs ) +# 31747 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41721,77 +31755,19 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41750 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41755 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41760 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 41776 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 41782 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41789 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41795 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = 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_idconstraint_virt_re_or_not_eqid__ = +# 144 "standard.mly" + ( [ x ] ) +# 31771 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41803,63 +31779,53 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 41827 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41832 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 41844 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 41850 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41857 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41863 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = 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_idconstraint_virt_re_or_not_eqid__ = +# 146 "standard.mly" + ( x :: xs ) +# 31805 "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 : '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 ] ) +# 31829 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41871,64 +31837,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 41895 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41900 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 41913 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 41919 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 41926 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 41932 "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 ) +# 31863 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -41940,84 +31871,19 @@ 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.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; - }; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 41973 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 41978 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 41983 "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 - -# 651 "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*))) ) -# 42002 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 42008 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42015 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42021 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_x_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_x_eq_not_pos__ = +# 144 "standard.mly" + ( [ x ] ) +# 31887 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42029,63 +31895,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42053 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 42058 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 42070 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 42076 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42083 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42089 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_x_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_x_eq_not_pos__ = +# 146 "standard.mly" + ( x :: xs ) +# 31921 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42097,77 +31929,19 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42126 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42131 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 42136 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 42152 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 42158 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42165 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42171 "parser_cocci_menhir.ml" + let x : 'tv_typedef_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = +# 144 "standard.mly" + ( [ x ] ) +# 31945 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42179,78 +31953,29 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42208 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42213 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 42218 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 42235 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 42241 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42248 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42254 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_typedef_ident_ = Obj.magic xs in + let x : 'tv_typedef_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = +# 146 "standard.mly" + ( x :: xs ) +# 31979 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42262,91 +31987,53 @@ 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.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_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 ] ) +# 32003 "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 = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42296 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42301 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 42306 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 42311 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 42331 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 42337 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42344 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42350 "parser_cocci_menhir.ml" + 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 ) +# 32037 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42358,52 +32045,23 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( + let ty : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42377 "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 - +# 32058 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_signable_types = # 638 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 42388 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42394 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42401 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42407 "parser_cocci_menhir.ml" +# 32065 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42415,52 +32073,23 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( + let ty : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42434 "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 - +# 32086 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_signable_types = # 640 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 42445 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42451 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42458 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42464 "parser_cocci_menhir.ml" +# 32093 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42472,66 +32101,35 @@ 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 = ty2; + MenhirLib.EngineTypes.startp = _startpos_ty2_; + MenhirLib.EngineTypes.endp = _endpos_ty2_; 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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty1; + MenhirLib.EngineTypes.startp = _startpos_ty1_; + MenhirLib.EngineTypes.endp = _endpos_ty1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( + let ty2 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42496 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( +# 32119 "parser_cocci_menhir.ml" + ) = Obj.magic ty2 in + let ty1 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42501 "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 - +# 32124 "parser_cocci_menhir.ml" + ) = Obj.magic ty1 in + let _startpos = _startpos_ty1_ in + let _endpos = _endpos_ty2_ in + let _v : 'tv_signable_types = # 642 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 42516 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42522 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42529 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42535 "parser_cocci_menhir.ml" +# 32133 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42543,52 +32141,23 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( + let ty : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42562 "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 - +# 32154 "parser_cocci_menhir.ml" + ) = Obj.magic ty in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : 'tv_signable_types = # 646 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 42573 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42579 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42586 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42592 "parser_cocci_menhir.ml" +# 32161 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42600,53 +32169,24 @@ 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 = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( + let p : ( # 134 "parser_cocci_menhir.mly" (Parse_aux.info) -# 42619 "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 - +# 32182 "parser_cocci_menhir.ml" + ) = Obj.magic p in + let _startpos = _startpos_p_ in + let _endpos = _endpos_p_ in + let _v : 'tv_signable_types = # 648 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 42631 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42637 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42644 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42650 "parser_cocci_menhir.ml" +# 32190 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42658,73 +32198,42 @@ 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 = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + 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 = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( + let p : ( # 127 "parser_cocci_menhir.mly" (string * Data.clt) -# 42686 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( +# 32220 "parser_cocci_menhir.ml" + ) = Obj.magic p in + let r : ( # 114 "parser_cocci_menhir.mly" (string) -# 42691 "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 - +# 32225 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_p_ in + let _v : 'tv_signable_types = # 651 "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*))) ) -# 42709 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42715 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42722 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42728 "parser_cocci_menhir.ml" + ( 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*))) ) +# 32237 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42736,52 +32245,23 @@ 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty1; + MenhirLib.EngineTypes.startp = _startpos_ty1_; + MenhirLib.EngineTypes.endp = _endpos_ty1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty100 : ( + let ty1 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42755 "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 ty10 = ty100 in - let ty = - let ty1 = ty10 in - +# 32258 "parser_cocci_menhir.ml" + ) = Obj.magic ty1 in + let _startpos = _startpos_ty1_ in + let _endpos = _endpos_ty1_ in + let _v : 'tv_signable_types = # 658 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 42766 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42772 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42779 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42785 "parser_cocci_menhir.ml" +# 32265 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42793,66 +32273,35 @@ 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 = ty2; + MenhirLib.EngineTypes.startp = _startpos_ty2_; + MenhirLib.EngineTypes.endp = _endpos_ty2_; 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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty1; + MenhirLib.EngineTypes.startp = _startpos_ty1_; + MenhirLib.EngineTypes.endp = _endpos_ty1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( + let ty2 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42817 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( +# 32291 "parser_cocci_menhir.ml" + ) = Obj.magic ty2 in + let ty1 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42822 "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 - +# 32296 "parser_cocci_menhir.ml" + ) = Obj.magic ty1 in + let _startpos = _startpos_ty1_ in + let _endpos = _endpos_ty2_ in + let _v : 'tv_signable_types = # 660 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 42837 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42843 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42850 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42856 "parser_cocci_menhir.ml" +# 32305 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42864,67 +32313,36 @@ 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 = ty2; + MenhirLib.EngineTypes.startp = _startpos_ty2_; + MenhirLib.EngineTypes.endp = _endpos_ty2_; 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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty1; + MenhirLib.EngineTypes.startp = _startpos_ty1_; + MenhirLib.EngineTypes.endp = _endpos_ty1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( + let ty2 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42888 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( +# 32331 "parser_cocci_menhir.ml" + ) = Obj.magic ty2 in + let ty1 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42893 "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 - +# 32336 "parser_cocci_menhir.ml" + ) = Obj.magic ty1 in + let _startpos = _startpos_ty1_ in + let _endpos = _endpos_ty2_ in + let _v : 'tv_signable_types = # 664 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 42909 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 42915 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 42922 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 42928 "parser_cocci_menhir.ml" +# 32346 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -42936,80 +32354,47 @@ 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 = ty3; + MenhirLib.EngineTypes.startp = _startpos_ty3_; + MenhirLib.EngineTypes.endp = _endpos_ty3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; + MenhirLib.EngineTypes.semv = ty2; + MenhirLib.EngineTypes.startp = _startpos_ty2_; + MenhirLib.EngineTypes.endp = _endpos_ty2_; 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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty1; + MenhirLib.EngineTypes.startp = _startpos_ty1_; + MenhirLib.EngineTypes.endp = _endpos_ty1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty300 : ( + let ty3 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42965 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( +# 32377 "parser_cocci_menhir.ml" + ) = Obj.magic ty3 in + let ty2 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42970 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( +# 32382 "parser_cocci_menhir.ml" + ) = Obj.magic ty2 in + let ty1 : ( # 116 "parser_cocci_menhir.mly" (Data.clt) -# 42975 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - +# 32387 "parser_cocci_menhir.ml" + ) = Obj.magic ty1 in + let _startpos = _startpos_ty1_ in + let _endpos = _endpos_ty3_ in + let _v : 'tv_signable_types = # 669 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.BaseType (Ast.LongLongIntType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; P.clt2mcode "int" ty3])) ) -# 42994 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 43000 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43007 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43013 "parser_cocci_menhir.ml" +# 32398 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43021,52 +32406,19 @@ 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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; - 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 ty00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 43040 "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 - -# 678 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 43051 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43057 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43064 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43070 "parser_cocci_menhir.ml" + let _1 : 'tv_statement = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_single_statement = +# 1184 "parser_cocci_menhir.mly" + ( _1 ) +# 32422 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43078,67 +32430,43 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + 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 = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 43102 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 43107 "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 - -# 680 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongDoubleType, - [P.clt2mcode "long" ty1;P.clt2mcode "double" ty2])) ) -# 43123 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43129 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43136 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43142 "parser_cocci_menhir.ml" + let _3 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 32453 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in + let _1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 32459 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_single_statement = +# 1188 "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)) ) +# 32470 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43150,52 +32478,337 @@ 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.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_includes = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_statement = +# 1107 "parser_cocci_menhir.mly" + ( _1 ) +# 32494 "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 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 32515 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_statement = +# 1108 "parser_cocci_menhir.mly" + ( tmeta_to_statement _1) +# 32522 "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 : ( +# 134 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 32543 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_statement = +# 1110 "parser_cocci_menhir.mly" + ( P.meta_stm _1 ) +# 32550 "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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 43169 "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 - -# 685 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 43180 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43186 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43193 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43199 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 32576 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_option_expr_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 1112 "parser_cocci_menhir.mly" + ( P.exp_stm _1 _2 ) +# 32584 "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 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 32626 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 32632 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 32637 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_statement = +# 1114 "parser_cocci_menhir.mly" + ( P.ifthen _1 _2 _3 _4 _5 ) +# 32644 "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 = _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 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 32696 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 32702 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 32708 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 32713 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in + let _v : 'tv_statement = +# 1116 "parser_cocci_menhir.mly" + ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 ) +# 32720 "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 = _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 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 32782 "parser_cocci_menhir.ml" + ) = Obj.magic _8 in + let _7 : 'tv_option_eexpr_ = Obj.magic _7 in + let _6 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 32788 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_option_eexpr_ = Obj.magic _5 in + let _4 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 32794 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_option_eexpr_ = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 32800 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 32805 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__9_ in + let _v : 'tv_statement = +# 1119 "parser_cocci_menhir.mly" + ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 ) +# 32812 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43207,52 +32820,77 @@ 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 = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 43226 "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 - -# 687 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 43237 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43243 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43250 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43256 "parser_cocci_menhir.ml" + let _8 : 'tv_single_statement = Obj.magic _8 in + let _7 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 32869 "parser_cocci_menhir.ml" + ) = Obj.magic _7 in + let _6 : 'tv_option_eexpr_ = Obj.magic _6 in + let _5 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 32875 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : 'tv_option_eexpr_ = Obj.magic _4 in + let _3 : 'tv_one_decl_var = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 32882 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 32887 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__8_ in + let _v : 'tv_statement = +# 1122 "parser_cocci_menhir.mly" + ( P.forloop2 _1 _2 _3 _4 _5 _6 _7 _8 ) +# 32894 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43264,52 +32902,55 @@ 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 43283 "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 - -# 689 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SizeType,[P.clt2mcode "size_t" ty])) ) -# 43294 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43300 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43307 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43313 "parser_cocci_menhir.ml" + let _5 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 32936 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 32942 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 32947 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_statement = +# 1124 "parser_cocci_menhir.mly" + ( P.whileloop _1 _2 _3 _4 _5 ) +# 32954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43321,52 +32962,75 @@ 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 = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 43340 "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 - -# 691 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SSizeType,[P.clt2mcode "ssize_t" ty])) ) -# 43351 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43357 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43364 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43370 "parser_cocci_menhir.ml" + let _7 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 33005 "parser_cocci_menhir.ml" + ) = Obj.magic _7 in + let _6 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 33010 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_eexpr = Obj.magic _5 in + let _4 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 33016 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 33021 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_single_statement = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 33027 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in + let _v : 'tv_statement = +# 1126 "parser_cocci_menhir.mly" + ( P.doloop _1 _2 _3 _4 _5 _6 _7 ) +# 33034 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43378,52 +33042,51 @@ 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 43397 "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 - -# 693 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.PtrDiffType,[P.clt2mcode "ptrdiff_t" ty])) ) -# 43408 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43414 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43421 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43427 "parser_cocci_menhir.ml" + let _5 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 33076 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 33082 "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 = +# 1128 "parser_cocci_menhir.mly" + ( P.iterator _1 _2 _3 _4 _5 ) +# 33090 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43435,60 +33098,81 @@ 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 = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i00; - MenhirLib.EngineTypes.startp = _startpos_i00_; - MenhirLib.EngineTypes.endp = _endpos_i00_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let i00 : 'tv_ident = Obj.magic i00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 43460 "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 - -# 695 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, Some i)) ) -# 43473 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43479 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43486 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43492 "parser_cocci_menhir.ml" + let _8 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 33146 "parser_cocci_menhir.ml" + ) = Obj.magic _8 in + let _7 : 'tv_list_case_line_ = Obj.magic _7 in + let _6 : 'tv_list_decl_var_ = Obj.magic _6 in + let _5 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 33153 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 33158 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 33164 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 33169 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__8_ in + let _v : 'tv_statement = +# 1130 "parser_cocci_menhir.mly" + ( P.switch _1 _2 _3 _4 _5 (List.concat _6) _7 _8 ) +# 33176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43500,94 +33184,39 @@ 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 = _3; + 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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; - 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; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" + let _3 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 43534 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 33207 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" (Data.clt) -# 43540 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 43545 "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 ids0 = ids00 in - let l0 = l00 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let s = s0 in - let i = - -# 39 "standard.mly" - ( None ) -# 43563 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 43572 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43578 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43585 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43591 "parser_cocci_menhir.ml" +# 33213 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_statement = +# 1131 "parser_cocci_menhir.mly" + ( P.ret_exp _1 _2 _3 ) +# 33220 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43599,103 +33228,33 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; - 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; - }; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 43638 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 43644 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_ident = Obj.magic x000 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 43650 "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 ids0 = ids00 in - let l0 = l00 in - let x00 = x000 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let x0 = x00 in - let s = s0 in - let i = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 43671 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 43680 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43686 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43693 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43699 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 33246 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 125 "parser_cocci_menhir.mly" + (Data.clt) +# 33251 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 1132 "parser_cocci_menhir.mly" + ( P.ret _1 _2 ) +# 33258 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43707,56 +33266,33 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 i00 : 'tv_type_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 - -# 702 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 43741 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43747 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43754 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43760 "parser_cocci_menhir.ml" + let _2 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 33284 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 126 "parser_cocci_menhir.mly" + (Data.clt) +# 33289 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 1133 "parser_cocci_menhir.mly" + ( P.break _1 _2 ) +# 33296 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43768,91 +33304,33 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" + let _2 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 43802 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 33322 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 126 "parser_cocci_menhir.mly" (Data.clt) -# 43808 "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 ) -# 43827 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 43837 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43843 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43850 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43856 "parser_cocci_menhir.ml" +# 33327 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 1134 "parser_cocci_menhir.mly" + ( P.cont _1 _2 ) +# 33334 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43864,100 +33342,29 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 43903 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" + let _2 : ( +# 148 "parser_cocci_menhir.mly" (Data.clt) -# 43909 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_type_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 ) -# 43932 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 43942 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 43948 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 43955 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 43961 "parser_cocci_menhir.ml" +# 33360 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_mident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 1135 "parser_cocci_menhir.mly" + ( P.label _1 _2 ) +# 33368 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -43969,86 +33376,39 @@ 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 = _3; + 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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" + let _3 : ( +# 179 "parser_cocci_menhir.mly" (Data.clt) -# 44003 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 33399 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_disj_ident = Obj.magic _2 in + let _1 : ( +# 126 "parser_cocci_menhir.mly" (Data.clt) -# 44009 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 44014 "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 - -# 711 "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)) ) -# 44033 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 44039 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 44046 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44052 "parser_cocci_menhir.ml" +# 33405 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_statement = +# 1136 "parser_cocci_menhir.mly" + ( P.goto _1 _2 _3 ) +# 33412 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44060,52 +33420,39 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 44079 "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 - -# 715 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 44090 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 44096 "parser_cocci_menhir.ml" - - in - let cv = - -# 39 "standard.mly" - ( None ) -# 44103 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44109 "parser_cocci_menhir.ml" + let _3 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 33443 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_fun_start = Obj.magic _2 in + let _1 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 33449 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_statement = +# 1138 "parser_cocci_menhir.mly" + ( P.seq _1 _2 _3 ) +# 33456 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44117,70 +33464,29 @@ 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 = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; 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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44146 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 44151 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 44164 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44170 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44178 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44184 "parser_cocci_menhir.ml" + let w : 'tv_list_whenppdecs_ = Obj.magic w in + let _1 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 33483 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_w_ in + let _v : 'tv_stm_dots = +# 1142 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) ) +# 33490 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44192,70 +33498,46 @@ 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.semv = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + 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 = 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44221 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 44226 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 44239 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44245 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44253 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44259 "parser_cocci_menhir.ml" + let c : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 33526 "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 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 33533 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_c_ in + let _v : 'tv_stm_dots = +# 1144 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b, + P.clt2mcode "...>" c, List.concat w, false)) ) +# 33541 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44267,84 +33549,46 @@ 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.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; 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; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44301 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44306 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 44311 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 44328 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44334 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44342 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44348 "parser_cocci_menhir.ml" + let c : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 33577 "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 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 33584 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_c_ in + let _v : 'tv_stm_dots = +# 1147 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b, + P.clt2mcode "...+>" c, List.concat w, true)) ) +# 33592 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44356,70 +33600,23 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44385 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" + let s : ( +# 121 "parser_cocci_menhir.mly" (Data.clt) -# 44390 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 44403 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44409 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44417 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44423 "parser_cocci_menhir.ml" +# 33613 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 1068 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Static s ) +# 33620 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44431,71 +33628,23 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 44460 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" + let s : ( +# 121 "parser_cocci_menhir.mly" (Data.clt) -# 44465 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 44479 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44485 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44493 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44499 "parser_cocci_menhir.ml" +# 33641 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 1069 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Auto s ) +# 33648 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44507,91 +33656,23 @@ 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.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; - MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 44545 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 44550 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" + let s : ( +# 121 "parser_cocci_menhir.mly" (Data.clt) -# 44555 "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 - -# 651 "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*))) ) -# 44575 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44581 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44589 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44595 "parser_cocci_menhir.ml" +# 33669 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 1070 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Register s ) +# 33676 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44603,70 +33684,23 @@ 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.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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44632 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" + let s : ( +# 121 "parser_cocci_menhir.mly" (Data.clt) -# 44637 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 44650 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44656 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44664 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44670 "parser_cocci_menhir.ml" +# 33697 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 1071 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Extern s ) +# 33704 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44678,84 +33712,17 @@ 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.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; - }; - }; - }; - }; + 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_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44712 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44717 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 44722 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 44739 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44745 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44753 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44759 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl = +# 763 "parser_cocci_menhir.mly" + ( [] ) +# 33726 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44767,85 +33734,19 @@ 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.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; - }; - }; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44801 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44806 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 44811 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 44829 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44835 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44843 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44849 "parser_cocci_menhir.ml" + let _1 : 'tv_struct_decl_one = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl = +# 764 "parser_cocci_menhir.mly" + ( [_1] ) +# 33750 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44857,98 +33758,19 @@ 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.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; - 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.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; - }; - }; - }; - }; - }; + 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 ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44896 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44901 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44906 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 44911 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 44932 "parser_cocci_menhir.ml" - - in - -# 720 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 44938 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 44946 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 44952 "parser_cocci_menhir.ml" + 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 = +# 792 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1)) ) +# 33774 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -44960,70 +33782,19 @@ 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.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; - }; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 44989 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 44994 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 45007 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45013 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45021 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45027 "parser_cocci_menhir.ml" + 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 = +# 795 "parser_cocci_menhir.mly" + ( _1 ) +# 33798 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45035,70 +33806,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45064 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45069 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 45082 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45088 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45096 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45102 "parser_cocci_menhir.ml" + 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 = +# 796 "parser_cocci_menhir.mly" + ( _1@_2 ) +# 33828 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45110,84 +33836,25 @@ 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 = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; 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.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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45144 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45149 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45154 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 45171 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45177 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45185 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45191 "parser_cocci_menhir.ml" + 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_continue_struct_decl_list = Obj.magic r in + let d : 'tv_edots_when_TEllipsis_struct_decl_one_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_struct_decl_list_start = +# 798 "parser_cocci_menhir.mly" + ( (P.mkddots_one "..." d)::r ) +# 33858 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45199,70 +33866,23 @@ 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.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; - }; - }; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45228 "parser_cocci_menhir.ml" - ) = Obj.magic ty00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45233 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 45246 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45252 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45260 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45266 "parser_cocci_menhir.ml" + let _1 : ( +# 135 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 33879 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl_one = +# 767 "parser_cocci_menhir.mly" + ( P.meta_field _1 ) +# 33886 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45274,71 +33894,51 @@ 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.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; - }; - }; - }; + 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 p00 : ( -# 134 "parser_cocci_menhir.mly" + let _1 : ( +# 137 "parser_cocci_menhir.mly" + (Parse_aux.list_info) +# 33907 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl_one = +# 768 "parser_cocci_menhir.mly" + ( P.meta_field_list _1 ) +# 33914 "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 : ( +# 135 "parser_cocci_menhir.mly" (Parse_aux.info) -# 45303 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45308 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 45322 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45328 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45336 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45342 "parser_cocci_menhir.ml" +# 33935 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl_one = +# 769 "parser_cocci_menhir.mly" + ( tmeta_to_field _1 ) +# 33942 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45350,91 +33950,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 = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p00; - MenhirLib.EngineTypes.startp = _startpos_p00_; - MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 45388 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 45393 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let r1 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45398 "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 - -# 651 "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*))) ) -# 45418 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45424 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45432 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45438 "parser_cocci_menhir.ml" + let rp : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 33973 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let t : 'tv_midzero_list_struct_decl_one_struct_decl_one_ = Obj.magic t in + let lp : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 33979 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let _startpos = _startpos_lp_ in + let _endpos = _endpos_rp_ in + let _v : 'tv_struct_decl_one = +# 771 "parser_cocci_menhir.mly" + ( let (mids,code) = t in + Ast0.wrap + (Ast0.DisjDecl(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) +# 33988 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45446,70 +33996,36 @@ 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.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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; - }; + 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 ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45475 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45480 "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 ty10 = ty100 in - let r = r0 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 45493 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45499 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45507 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45513 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 34019 "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_one = +# 775 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv)) ) +# 34029 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45521,84 +34037,97 @@ 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.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; + 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 = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45555 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45560 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45565 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 45582 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45588 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45596 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45602 "parser_cocci_menhir.ml" + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 34090 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 34095 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 34101 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 149 "parser_cocci_menhir.mly" + (Data.clt) +# 34106 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 171 "parser_cocci_menhir.mly" + (Data.clt) +# 34112 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 148 "parser_cocci_menhir.mly" + (Data.clt) +# 34117 "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_one = +# 779 "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)) ) +# 34131 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45610,85 +34139,44 @@ 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.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45644 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45649 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45654 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 45672 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45678 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in + let pv : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 34162 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_struct_decl_one = let cv = -# 41 "standard.mly" - ( Some x ) -# 45686 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 34172 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45692 "parser_cocci_menhir.ml" +# 787 "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)) ) +# 34180 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45700,98 +34188,51 @@ 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.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45739 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45744 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45749 "parser_cocci_menhir.ml" - ) = Obj.magic ty100 in - let r0 : ( -# 119 "parser_cocci_menhir.mly" - (Data.clt) -# 45754 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let r = r0 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 45775 "parser_cocci_menhir.ml" - - in - -# 722 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 45781 "parser_cocci_menhir.ml" - - in - let cv = + 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 : ( +# 179 "parser_cocci_menhir.mly" + (Data.clt) +# 34216 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident_or_symbol = 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_struct_decl_one = let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 45789 "parser_cocci_menhir.ml" +# 34228 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45795 "parser_cocci_menhir.ml" +# 787 "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)) ) +# 34236 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45803,59 +34244,23 @@ 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.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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" + let s : ( +# 118 "parser_cocci_menhir.mly" (Data.clt) -# 45827 "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 - -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 45839 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 45845 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45853 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45859 "parser_cocci_menhir.ml" +# 34257 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_struct_or_union = +# 759 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Struct s ) +# 34264 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45867,59 +34272,58 @@ 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.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 u : ( +# 118 "parser_cocci_menhir.mly" + (Data.clt) +# 34285 "parser_cocci_menhir.ml" + ) = Obj.magic u in + let _startpos = _startpos_u_ in + let _endpos = _endpos_u_ in + let _v : 'tv_struct_or_union = +# 760 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Union u ) +# 34292 "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.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; - }; + 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_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45891 "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 - -# 640 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 45903 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 45909 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45917 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 45923 "parser_cocci_menhir.ml" + let i : 'tv_meta_ident = Obj.magic i in + let _startpos = _startpos__1_ in + let _endpos = _endpos_i_ in + let _v : 'tv_sub = +# 1969 "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"); + let i = + P.check_inherited_constraint i + (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None)) in + [i] ) +# 34327 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -45931,73 +34335,39 @@ 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.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty200; - MenhirLib.EngineTypes.startp = _startpos_ty200_; - MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty100; - MenhirLib.EngineTypes.startp = _startpos_ty100_; - MenhirLib.EngineTypes.endp = _endpos_ty100_; + 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.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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45960 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 45965 "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 - -# 642 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) ) -# 45981 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 45987 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 45995 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46001 "parser_cocci_menhir.ml" + let l : 'tv_comma_list_meta_ident_ = Obj.magic l in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_sub = +# 1978 "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 -> + P.check_inherited_constraint i + (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None))) + l) +# 34371 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46009,59 +34379,85 @@ 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.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_top_eexpr = +# 1487 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) ) +# 34395 "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 = ty00; - MenhirLib.EngineTypes.startp = _startpos_ty00_; - MenhirLib.EngineTypes.endp = _endpos_ty00_; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46033 "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 - -# 646 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 46045 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 46051 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46059 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46065 "parser_cocci_menhir.ml" + let _3 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 34426 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_initialize_list = Obj.magic _2 in + let _1 : ( +# 173 "parser_cocci_menhir.mly" + (Data.clt) +# 34432 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_top_init = +# 2232 "parser_cocci_menhir.mly" + ( if P.struct_initializer _2 + then + let il = P.drop_dot_commas _2 in + Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,il,P.clt2mcode "}" _3,false)) + else + Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3,true)) ) +# 34444 "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 = +# 2220 "parser_cocci_menhir.mly" + ([]) +# 34461 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46073,60 +34469,23 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = 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 m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 46097 "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 - -# 648 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 46110 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 46116 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46124 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46130 "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 = +# 2221 "parser_cocci_menhir.mly" + (_2) +# 34489 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46138,80 +34497,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - 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; - }; - }; - }; + 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 p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 46171 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in - let r00 : ( -# 114 "parser_cocci_menhir.mly" - (string) -# 46176 "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 - -# 651 "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*))) ) -# 46195 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 46201 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46209 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46215 "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 = +# 2222 "parser_cocci_menhir.mly" + ((Ast0.wrap(Ast0.Exp(_1)))::_2) +# 34519 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46223,59 +34527,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46247 "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 ty10 = ty100 in - let ty = - let ty1 = ty10 in - -# 658 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) ) -# 46259 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 46265 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46273 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46279 "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 = +# 2223 "parser_cocci_menhir.mly" + (_1@_2) +# 34549 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46287,73 +34557,23 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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_list_TMul_ = Obj.magic m in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46316 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46321 "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 - -# 660 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) ) -# 46337 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 46343 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46351 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46357 "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 = +# 2211 "parser_cocci_menhir.mly" + (_2) +# 34577 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46365,74 +34585,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46394 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46399 "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 - -# 664 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 46416 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 46422 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46430 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46436 "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 = +# 2212 "parser_cocci_menhir.mly" + ((Ast0.wrap(Ast0.Exp(_1)))::_2) +# 34607 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46444,87 +34615,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty300; - MenhirLib.EngineTypes.startp = _startpos_ty300_; - MenhirLib.EngineTypes.endp = _endpos_ty300_; - 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; - }; - }; - }; + 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 ty300 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46478 "parser_cocci_menhir.ml" - ) = Obj.magic ty300 in - let ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46483 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46488 "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 ty30 = ty300 in - let ty20 = ty200 in - let ty10 = ty100 in - let ty = - let ty3 = ty30 in - let ty2 = ty20 in - let ty1 = ty10 in - -# 669 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongLongIntType, - [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; - P.clt2mcode "int" ty3])) ) -# 46508 "parser_cocci_menhir.ml" - - in - -# 723 "parser_cocci_menhir.mly" - ( ty ) -# 46514 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46522 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46528 "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 = +# 2213 "parser_cocci_menhir.mly" + (_1@_2) +# 34637 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46535,60 +34644,13 @@ 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.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 m : 'tv_list_TMul_ = Obj.magic m in - let ty00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 46560 "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 - -# 678 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 46572 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 46578 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46586 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46592 "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 = +# 2216 "parser_cocci_menhir.mly" + ([]) +# 34654 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46600,74 +34662,42 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 ty200 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46629 "parser_cocci_menhir.ml" - ) = Obj.magic ty200 in - let ty100 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46634 "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 - -# 680 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.BaseType - (Ast.LongDoubleType, - [P.clt2mcode "long" ty1;P.clt2mcode "double" ty2])) ) -# 46651 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 46657 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46665 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46671 "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 = +# 2217 "parser_cocci_menhir.mly" + (_1::_2) +# 34684 "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 = +# 2226 "parser_cocci_menhir.mly" + ([]) +# 34701 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46679,59 +34709,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46703 "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 - -# 685 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 46715 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 46721 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46729 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46735 "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 = +# 2227 "parser_cocci_menhir.mly" + (_1::_2) +# 34731 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46743,59 +34739,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 ty00 : ( -# 116 "parser_cocci_menhir.mly" - (Data.clt) -# 46767 "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 - -# 687 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 46779 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 46785 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46793 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46799 "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 = +# 2228 "parser_cocci_menhir.mly" + (_1@_2) +# 34761 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46807,59 +34769,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 46831 "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 - -# 689 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SizeType,[P.clt2mcode "size_t" ty])) ) -# 46843 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 46849 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46857 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46863 "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_ = +# 2206 "parser_cocci_menhir.mly" + ( _1::_2 ) +# 34791 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46871,59 +34799,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 46895 "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 - -# 691 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.SSizeType,[P.clt2mcode "ssize_t" ty])) ) -# 46907 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 46913 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46921 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46927 "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_ = +# 2207 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) +# 34821 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46935,59 +34829,25 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; + 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 ty00 : ( -# 117 "parser_cocci_menhir.mly" - (Data.clt) -# 46959 "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 - -# 693 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.PtrDiffType,[P.clt2mcode "ptrdiff_t" ty])) ) -# 46971 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 46977 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 46985 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 46991 "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_ = +# 2208 "parser_cocci_menhir.mly" + ( _1@_2 ) +# 34851 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -46999,67 +34859,44 @@ 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 = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i00; - MenhirLib.EngineTypes.startp = _startpos_i00_; - MenhirLib.EngineTypes.endp = _endpos_i00_; + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; 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; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let i00 : 'tv_ident = Obj.magic i00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 47029 "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 - -# 695 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, Some i)) ) -# 47043 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47049 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in + let b : 'tv_toplevel_after_dots_init = Obj.magic b in + let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in + let a0 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 34884 "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 -# 41 "standard.mly" - ( Some x ) -# 47057 "parser_cocci_menhir.ml" +# 1152 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) ) +# 34894 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 47063 "parser_cocci_menhir.ml" +# 2199 "parser_cocci_menhir.mly" + ( a::b ) +# 34900 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47071,101 +34908,63 @@ 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 = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l00; - MenhirLib.EngineTypes.startp = _startpos_l00_; - MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; 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; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" + let b : 'tv_toplevel_after_dots_init = Obj.magic b in + let c0 : ( +# 145 "parser_cocci_menhir.mly" (Data.clt) -# 47110 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 34942 "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 : ( +# 145 "parser_cocci_menhir.mly" (Data.clt) -# 47116 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 47121 "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 ids0 = ids00 in - let l0 = l00 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let s = s0 in - let i = - -# 39 "standard.mly" - ( None ) -# 47140 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 47149 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47155 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in +# 34949 "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 -# 41 "standard.mly" - ( Some x ) -# 47163 "parser_cocci_menhir.ml" +# 1156 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, + P.clt2mcode "...>" c, List.concat w, false)) ) +# 34962 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 47169 "parser_cocci_menhir.ml" +# 2200 "parser_cocci_menhir.mly" + ( a::b ) +# 34968 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47177,110 +34976,63 @@ 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 = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids00; - MenhirLib.EngineTypes.startp = _startpos_ids00_; - MenhirLib.EngineTypes.endp = _endpos_ids00_; + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l00; - MenhirLib.EngineTypes.startp = _startpos_l00_; - MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; 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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" + let b : 'tv_toplevel_after_dots_init = Obj.magic b in + let c0 : ( +# 145 "parser_cocci_menhir.mly" (Data.clt) -# 47221 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let ids00 : 'tv_enum_decl_list = Obj.magic ids00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 35010 "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 : ( +# 145 "parser_cocci_menhir.mly" (Data.clt) -# 47227 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_ident = Obj.magic x000 in - let s00 : ( -# 118 "parser_cocci_menhir.mly" - (Data.clt) -# 47233 "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 ids0 = ids00 in - let l0 = l00 in - let x00 = x000 in - let s0 = s00 in - let ty = - let r = r0 in - let ids = ids0 in - let l = l0 in - let x0 = x00 in - let s = s0 in - let i = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 47255 "parser_cocci_menhir.ml" - - in - -# 697 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "enums must be named in the iso file"); - Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)), - P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) ) -# 47264 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47270 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in +# 35017 "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 -# 41 "standard.mly" - ( Some x ) -# 47278 "parser_cocci_menhir.ml" +# 1159 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, + P.clt2mcode "...+>" c, List.concat w, true)) ) +# 35030 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 47284 "parser_cocci_menhir.ml" +# 2200 "parser_cocci_menhir.mly" + ( a::b ) +# 35036 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47292,63 +35044,57 @@ 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 = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i00; - MenhirLib.EngineTypes.startp = _startpos_i00_; - MenhirLib.EngineTypes.endp = _endpos_i00_; + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = s00; - MenhirLib.EngineTypes.startp = _startpos_s00_; - MenhirLib.EngineTypes.endp = _endpos_s00_; + 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 = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = a0; + MenhirLib.EngineTypes.startp = _startpos_a0_; + MenhirLib.EngineTypes.endp = _endpos_a0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let i00 : 'tv_type_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 - -# 702 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 47332 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47338 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in + let c0 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 35072 "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 : ( +# 145 "parser_cocci_menhir.mly" + (Data.clt) +# 35079 "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 -# 41 "standard.mly" - ( Some x ) -# 47346 "parser_cocci_menhir.ml" +# 1156 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, + P.clt2mcode "...>" c, List.concat w, false)) ) +# 35092 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 47352 "parser_cocci_menhir.ml" +# 2201 "parser_cocci_menhir.mly" + ( [a] ) +# 35098 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47360,98 +35106,57 @@ 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 = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d00; - MenhirLib.EngineTypes.startp = _startpos_d00_; - MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; 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; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" + let c0 : ( +# 145 "parser_cocci_menhir.mly" (Data.clt) -# 47399 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" +# 35134 "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 : ( +# 145 "parser_cocci_menhir.mly" (Data.clt) -# 47405 "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 ) -# 47425 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 47435 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47441 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in +# 35141 "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 -# 41 "standard.mly" - ( Some x ) -# 47449 "parser_cocci_menhir.ml" +# 1159 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, + P.clt2mcode "...+>" c, List.concat w, true)) ) +# 35154 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 47455 "parser_cocci_menhir.ml" +# 2201 "parser_cocci_menhir.mly" + ( [a] ) +# 35160 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47463,107 +35168,107 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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.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; - }; - }; - }; - }; - }; + 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 r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 47507 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 47513 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let x000 : 'tv_type_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 ) -# 47537 "parser_cocci_menhir.ml" - - in - -# 705 "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)) ) -# 47547 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47553 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 47561 "parser_cocci_menhir.ml" - - in - -# 745 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 47567 "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_ = +# 2202 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) +# 35190 "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_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_ = +# 2203 "parser_cocci_menhir.mly" + ( _1@_2 ) +# 35220 "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_disj_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_type_ident = +# 2057 "parser_cocci_menhir.mly" + ( _1 ) +# 35244 "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 : ( +# 127 "parser_cocci_menhir.mly" + (string * Data.clt) +# 35265 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_type_ident = +# 2059 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 35272 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47579,89 +35284,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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; - }; - }; - }; - }; + 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 m : 'tv_list_TMul_ = Obj.magic m in - let r00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 47614 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let d00 : 'tv_struct_decl_list = Obj.magic d00 in - let l00 : ( -# 173 "parser_cocci_menhir.mly" - (Data.clt) -# 47620 "parser_cocci_menhir.ml" - ) = Obj.magic l00 in - let s00 : ( -# 134 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 47625 "parser_cocci_menhir.ml" - ) = Obj.magic s00 in - let x0 : 'tv_const_vol = Obj.magic x0 in - let _startpos = _startpos_x0_ in + let ty : 'tv_all_basic_types = Obj.magic ty in + let _startpos = _startpos_ty_ 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 - -# 711 "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)) ) -# 47645 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47651 "parser_cocci_menhir.ml" - - in - let cv = - let x = x0 in + let _v : 'tv_typedef_ctype = let cv = -# 41 "standard.mly" - ( Some x ) -# 47659 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 35303 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" +# 749 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 47665 "parser_cocci_menhir.ml" +# 35309 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47677,9 +35321,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = x0; @@ -47690,42 +35334,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; } = _menhir_stack in let m : 'tv_list_TMul_ = Obj.magic m in - let p00 : ( -# 127 "parser_cocci_menhir.mly" - (string * Data.clt) -# 47697 "parser_cocci_menhir.ml" - ) = Obj.magic p00 in + let ty : 'tv_all_basic_types = Obj.magic ty 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 - -# 715 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 47709 "parser_cocci_menhir.ml" - - in - -# 724 "parser_cocci_menhir.mly" - ( ty ) -# 47715 "parser_cocci_menhir.ml" - - in - let cv = + let _v : 'tv_typedef_ctype = let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 47723 "parser_cocci_menhir.ml" +# 35347 "parser_cocci_menhir.ml" in -# 745 "parser_cocci_menhir.mly" +# 749 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 47729 "parser_cocci_menhir.ml" +# 35353 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47756,22 +35380,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 47760 "parser_cocci_menhir.ml" +# 35384 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_midzero_list_mctype_mctype_ = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 47766 "parser_cocci_menhir.ml" +# 35390 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_rp_ in let _v : 'tv_typedef_ctype = -# 747 "parser_cocci_menhir.mly" +# 751 "parser_cocci_menhir.mly" ( let (mids,code) = t in Ast0.wrap (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 47775 "parser_cocci_menhir.ml" +# 35399 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47792,14 +35416,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 135 "parser_cocci_menhir.mly" (Parse_aux.info) -# 47796 "parser_cocci_menhir.ml" +# 35420 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ctype = -# 750 "parser_cocci_menhir.mly" +# 754 "parser_cocci_menhir.mly" ( tmeta_to_type _1 ) -# 47803 "parser_cocci_menhir.ml" +# 35427 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47821,9 +35445,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ident = -# 2070 "parser_cocci_menhir.mly" +# 2077 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode _1)) ) -# 47827 "parser_cocci_menhir.ml" +# 35451 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47844,14 +35468,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 135 "parser_cocci_menhir.mly" (Parse_aux.info) -# 47848 "parser_cocci_menhir.ml" +# 35472 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ident = -# 2071 "parser_cocci_menhir.mly" +# 2078 "parser_cocci_menhir.mly" ( tmeta_to_type _1 ) -# 47855 "parser_cocci_menhir.ml" +# 35479 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47872,15 +35496,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 134 "parser_cocci_menhir.mly" (Parse_aux.info) -# 47876 "parser_cocci_menhir.ml" +# 35500 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ident = -# 2073 "parser_cocci_menhir.mly" +# 2080 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = _1 in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 47884 "parser_cocci_menhir.ml" +# 35508 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47902,9 +35526,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_ = -# 1622 "parser_cocci_menhir.mly" +# 1629 "parser_cocci_menhir.mly" ( _1 ) -# 47908 "parser_cocci_menhir.ml" +# 35532 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47931,14 +35555,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 47935 "parser_cocci_menhir.ml" +# 35559 "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_ = -# 1624 "parser_cocci_menhir.mly" +# 1631 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 47942 "parser_cocci_menhir.ml" +# 35566 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -47965,14 +35589,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 47969 "parser_cocci_menhir.ml" +# 35593 "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_ = -# 1626 "parser_cocci_menhir.mly" +# 1633 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 47976 "parser_cocci_menhir.ml" +# 35600 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48000,9 +35624,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_ = -# 1628 "parser_cocci_menhir.mly" +# 1635 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48006 "parser_cocci_menhir.ml" +# 35630 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48029,15 +35653,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48033 "parser_cocci_menhir.ml" +# 35657 "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_ = -# 1630 "parser_cocci_menhir.mly" +# 1637 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48041 "parser_cocci_menhir.ml" +# 35665 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48064,14 +35688,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48068 "parser_cocci_menhir.ml" +# 35692 "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_ = -# 1633 "parser_cocci_menhir.mly" +# 1640 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 48075 "parser_cocci_menhir.ml" +# 35699 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48107,27 +35731,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 48111 "parser_cocci_menhir.ml" +# 35735 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48117 "parser_cocci_menhir.ml" +# 35741 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48122 "parser_cocci_menhir.ml" +# 35746 "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_ = -# 1635 "parser_cocci_menhir.mly" +# 1642 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 48131 "parser_cocci_menhir.ml" +# 35755 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48149,9 +35773,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1622 "parser_cocci_menhir.mly" +# 1629 "parser_cocci_menhir.mly" ( _1 ) -# 48155 "parser_cocci_menhir.ml" +# 35779 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48178,14 +35802,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48182 "parser_cocci_menhir.ml" +# 35806 "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_ = -# 1624 "parser_cocci_menhir.mly" +# 1631 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 48189 "parser_cocci_menhir.ml" +# 35813 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48212,14 +35836,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48216 "parser_cocci_menhir.ml" +# 35840 "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_ = -# 1626 "parser_cocci_menhir.mly" +# 1633 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 48223 "parser_cocci_menhir.ml" +# 35847 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48247,9 +35871,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1628 "parser_cocci_menhir.mly" +# 1635 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48253 "parser_cocci_menhir.ml" +# 35877 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48276,15 +35900,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48280 "parser_cocci_menhir.ml" +# 35904 "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_ = -# 1630 "parser_cocci_menhir.mly" +# 1637 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48288 "parser_cocci_menhir.ml" +# 35912 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48311,14 +35935,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48315 "parser_cocci_menhir.ml" +# 35939 "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_ = -# 1633 "parser_cocci_menhir.mly" +# 1640 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 48322 "parser_cocci_menhir.ml" +# 35946 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48354,27 +35978,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 48358 "parser_cocci_menhir.ml" +# 35982 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48364 "parser_cocci_menhir.ml" +# 35988 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48369 "parser_cocci_menhir.ml" +# 35993 "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_ = -# 1635 "parser_cocci_menhir.mly" +# 1642 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 48378 "parser_cocci_menhir.ml" +# 36002 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48396,9 +36020,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_ = -# 1622 "parser_cocci_menhir.mly" +# 1629 "parser_cocci_menhir.mly" ( _1 ) -# 48402 "parser_cocci_menhir.ml" +# 36026 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48425,14 +36049,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48429 "parser_cocci_menhir.ml" +# 36053 "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_ = -# 1624 "parser_cocci_menhir.mly" +# 1631 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 48436 "parser_cocci_menhir.ml" +# 36060 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48459,14 +36083,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48463 "parser_cocci_menhir.ml" +# 36087 "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_ = -# 1626 "parser_cocci_menhir.mly" +# 1633 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 48470 "parser_cocci_menhir.ml" +# 36094 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48494,9 +36118,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_ = -# 1628 "parser_cocci_menhir.mly" +# 1635 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48500 "parser_cocci_menhir.ml" +# 36124 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48523,15 +36147,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48527 "parser_cocci_menhir.ml" +# 36151 "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_ = -# 1630 "parser_cocci_menhir.mly" +# 1637 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48535 "parser_cocci_menhir.ml" +# 36159 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48558,14 +36182,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48562 "parser_cocci_menhir.ml" +# 36186 "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_ = -# 1633 "parser_cocci_menhir.mly" +# 1640 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 48569 "parser_cocci_menhir.ml" +# 36193 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48601,27 +36225,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 48605 "parser_cocci_menhir.ml" +# 36229 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48611 "parser_cocci_menhir.ml" +# 36235 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48616 "parser_cocci_menhir.ml" +# 36240 "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_ = -# 1635 "parser_cocci_menhir.mly" +# 1642 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 48625 "parser_cocci_menhir.ml" +# 36249 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48643,9 +36267,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1622 "parser_cocci_menhir.mly" +# 1629 "parser_cocci_menhir.mly" ( _1 ) -# 48649 "parser_cocci_menhir.ml" +# 36273 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48672,14 +36296,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48676 "parser_cocci_menhir.ml" +# 36300 "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_ = -# 1624 "parser_cocci_menhir.mly" +# 1631 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 48683 "parser_cocci_menhir.ml" +# 36307 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48706,14 +36330,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48710 "parser_cocci_menhir.ml" +# 36334 "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_ = -# 1626 "parser_cocci_menhir.mly" +# 1633 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 48717 "parser_cocci_menhir.ml" +# 36341 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48741,9 +36365,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1628 "parser_cocci_menhir.mly" +# 1635 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48747 "parser_cocci_menhir.ml" +# 36371 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48770,15 +36394,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48774 "parser_cocci_menhir.ml" +# 36398 "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_ = -# 1630 "parser_cocci_menhir.mly" +# 1637 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48782 "parser_cocci_menhir.ml" +# 36406 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48805,14 +36429,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48809 "parser_cocci_menhir.ml" +# 36433 "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_ = -# 1633 "parser_cocci_menhir.mly" +# 1640 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 48816 "parser_cocci_menhir.ml" +# 36440 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48848,27 +36472,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 48852 "parser_cocci_menhir.ml" +# 36476 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 48858 "parser_cocci_menhir.ml" +# 36482 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 48863 "parser_cocci_menhir.ml" +# 36487 "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_ = -# 1635 "parser_cocci_menhir.mly" +# 1642 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 48872 "parser_cocci_menhir.ml" +# 36496 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48890,9 +36514,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_bis = -# 1641 "parser_cocci_menhir.mly" +# 1648 "parser_cocci_menhir.mly" ( _1 ) -# 48896 "parser_cocci_menhir.ml" +# 36520 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48919,14 +36543,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48923 "parser_cocci_menhir.ml" +# 36547 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_bis = -# 1643 "parser_cocci_menhir.mly" +# 1650 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 48930 "parser_cocci_menhir.ml" +# 36554 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48953,14 +36577,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 157 "parser_cocci_menhir.mly" (Data.clt) -# 48957 "parser_cocci_menhir.ml" +# 36581 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_bis = -# 1645 "parser_cocci_menhir.mly" +# 1652 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 48964 "parser_cocci_menhir.ml" +# 36588 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -48988,9 +36612,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_bis = -# 1647 "parser_cocci_menhir.mly" +# 1654 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 48994 "parser_cocci_menhir.ml" +# 36618 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49017,15 +36641,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 49021 "parser_cocci_menhir.ml" +# 36645 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_bis = -# 1649 "parser_cocci_menhir.mly" +# 1656 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 49029 "parser_cocci_menhir.ml" +# 36653 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49052,14 +36676,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 49056 "parser_cocci_menhir.ml" +# 36680 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_bis = -# 1652 "parser_cocci_menhir.mly" +# 1659 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 49063 "parser_cocci_menhir.ml" +# 36687 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49095,27 +36719,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 149 "parser_cocci_menhir.mly" (Data.clt) -# 49099 "parser_cocci_menhir.ml" +# 36723 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 148 "parser_cocci_menhir.mly" (Data.clt) -# 49105 "parser_cocci_menhir.ml" +# 36729 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 126 "parser_cocci_menhir.mly" (Data.clt) -# 49110 "parser_cocci_menhir.ml" +# 36734 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_bis = -# 1654 "parser_cocci_menhir.mly" +# 1661 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 49119 "parser_cocci_menhir.ml" +# 36743 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49136,14 +36760,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 165 "parser_cocci_menhir.mly" (Data.clt) -# 49140 "parser_cocci_menhir.ml" +# 36764 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1658 "parser_cocci_menhir.mly" +# 1665 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.GetRef _1 ) -# 49147 "parser_cocci_menhir.ml" +# 36771 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49164,14 +36788,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 171 "parser_cocci_menhir.mly" (Data.clt) -# 49168 "parser_cocci_menhir.ml" +# 36792 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1659 "parser_cocci_menhir.mly" +# 1666 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.DeRef _1 ) -# 49175 "parser_cocci_menhir.ml" +# 36799 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49192,14 +36816,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 49196 "parser_cocci_menhir.ml" +# 36820 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1660 "parser_cocci_menhir.mly" +# 1667 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnPlus _1 ) -# 49203 "parser_cocci_menhir.ml" +# 36827 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49220,14 +36844,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 170 "parser_cocci_menhir.mly" (Data.clt) -# 49224 "parser_cocci_menhir.ml" +# 36848 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1661 "parser_cocci_menhir.mly" +# 1668 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnMinus _1 ) -# 49231 "parser_cocci_menhir.ml" +# 36855 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49248,14 +36872,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 171 "parser_cocci_menhir.mly" (Data.clt) -# 49252 "parser_cocci_menhir.ml" +# 36876 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1662 "parser_cocci_menhir.mly" +# 1669 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Tilde _1 ) -# 49259 "parser_cocci_menhir.ml" +# 36883 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49283,9 +36907,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_when_start = -# 2323 "parser_cocci_menhir.mly" +# 2330 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS((Ast0.wrap(Ast0.Exp(_1)))::_2)) ) -# 49289 "parser_cocci_menhir.ml" +# 36913 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49313,9 +36937,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_when_start = -# 2325 "parser_cocci_menhir.mly" +# 2332 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1@_2)) ) -# 49319 "parser_cocci_menhir.ml" +# 36943 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49337,9 +36961,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_w_ in let _endpos = _endpos_w_ in let _v : 'tv_whenppdecs = -# 1156 "parser_cocci_menhir.mly" +# 1163 "parser_cocci_menhir.mly" ( w ) -# 49343 "parser_cocci_menhir.ml" +# 36967 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49373,9 +36997,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_ = -# 2370 "parser_cocci_menhir.mly" +# 2377 "parser_cocci_menhir.mly" ( [Ast0.WhenNot w] ) -# 49379 "parser_cocci_menhir.ml" +# 37003 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49409,9 +37033,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_ = -# 2371 "parser_cocci_menhir.mly" +# 2378 "parser_cocci_menhir.mly" ( [Ast0.WhenAlways w] ) -# 49415 "parser_cocci_menhir.ml" +# 37039 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49441,9 +37065,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_ = -# 2373 "parser_cocci_menhir.mly" +# 2380 "parser_cocci_menhir.mly" ( List.map (function x -> Ast0.WhenModifier(x)) _2 ) -# 49447 "parser_cocci_menhir.ml" +# 37071 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49477,9 +37101,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_ = -# 2374 "parser_cocci_menhir.mly" +# 2381 "parser_cocci_menhir.mly" ( [Ast0.WhenNotTrue e] ) -# 49483 "parser_cocci_menhir.ml" +# 37107 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49513,9 +37137,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_ = -# 2375 "parser_cocci_menhir.mly" +# 2382 "parser_cocci_menhir.mly" ( [Ast0.WhenNotFalse e] ) -# 49519 "parser_cocci_menhir.ml" +# 37143 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49536,14 +37160,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 127 "parser_cocci_menhir.mly" (string * Data.clt) -# 49540 "parser_cocci_menhir.ml" +# 37164 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_wrapped_sym_ident = -# 1796 "parser_cocci_menhir.mly" +# 1803 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Id(P.sym2mcode _1)) ) -# 49547 "parser_cocci_menhir.ml" +# 37171 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -49564,90 +37188,90 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rec script_meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 2202 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1829 lexer lexbuf) : ( # 233 "parser_cocci_menhir.mly" ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option) -# 49571 "parser_cocci_menhir.ml" +# 37195 "parser_cocci_menhir.ml" )) and rule_name = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 2125 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1752 lexer lexbuf) : ( # 227 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 49579 "parser_cocci_menhir.ml" +# 37203 "parser_cocci_menhir.ml" )) and reinit = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 2123 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1750 lexer lexbuf) : ( # 205 "parser_cocci_menhir.mly" (unit) -# 49587 "parser_cocci_menhir.ml" +# 37211 "parser_cocci_menhir.ml" )) and plus_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 2087 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1714 lexer lexbuf) : ( # 214 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 49595 "parser_cocci_menhir.ml" +# 37219 "parser_cocci_menhir.ml" )) and plus_exp_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 2079 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1706 lexer lexbuf) : ( # 217 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 49603 "parser_cocci_menhir.ml" +# 37227 "parser_cocci_menhir.ml" )) and never_used = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 2073 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1700 lexer lexbuf) : ( # 242 "parser_cocci_menhir.mly" (unit) -# 49611 "parser_cocci_menhir.ml" +# 37235 "parser_cocci_menhir.ml" )) and minus_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1988 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1615 lexer lexbuf) : ( # 208 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 49619 "parser_cocci_menhir.ml" +# 37243 "parser_cocci_menhir.ml" )) and minus_exp_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1976 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1603 lexer lexbuf) : ( # 211 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 49627 "parser_cocci_menhir.ml" +# 37251 "parser_cocci_menhir.ml" )) and meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1973 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1600 lexer lexbuf) : ( # 231 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 49635 "parser_cocci_menhir.ml" +# 37259 "parser_cocci_menhir.ml" )) and iso_rule_name = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1969 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1596 lexer lexbuf) : ( # 223 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 49643 "parser_cocci_menhir.ml" +# 37267 "parser_cocci_menhir.ml" )) and iso_meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1674 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1301 lexer lexbuf) : ( # 239 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 49651 "parser_cocci_menhir.ml" +# 37275 "parser_cocci_menhir.ml" )) and iso_main = @@ -49655,7 +37279,7 @@ and iso_main = (Obj.magic (MenhirInterpreter.entry 18 lexer lexbuf) : ( # 236 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 49659 "parser_cocci_menhir.ml" +# 37283 "parser_cocci_menhir.ml" )) and include_main = @@ -49663,7 +37287,7 @@ and include_main = (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : ( # 220 "parser_cocci_menhir.mly" (Data.incl_iso list) -# 49667 "parser_cocci_menhir.ml" +# 37291 "parser_cocci_menhir.ml" )) diff --git a/parsing_cocci/parser_cocci_menhir.mly b/parsing_cocci/parser_cocci_menhir.mly index 978079b..7eec03b 100644 --- a/parsing_cocci/parser_cocci_menhir.mly +++ b/parsing_cocci/parser_cocci_menhir.mly @@ -584,7 +584,8 @@ expression_type: { P.ty_pointerify (Type_cocci.StructUnionName (Type_cocci.Union,Type_cocci.NoName)) m } -%inline metakind_atomic_expe: +%inline + metakind_atomic_expe: TExpression { (fun arity name pure check_meta constraints -> let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in @@ -632,7 +633,6 @@ arity: TBang0 { Ast.UNIQUE } /* ---------------------------------------------------------------------- */ -%inline signable_types: ty=Tchar { Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) } @@ -672,7 +672,6 @@ signable_types: [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2; P.clt2mcode "int" ty3])) } -%inline non_signable_types: ty=Tvoid { Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) } @@ -714,7 +713,6 @@ non_signable_types: | 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)) } @@ -724,8 +722,12 @@ all_basic_types: | 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 } + cv=ioption(const_vol) ty=all_basic_types m=list(mul) + { List.fold_left + (function prev -> + function (star,cv) -> + P.make_cv cv (P.pointerify prev [star])) + (P.make_cv cv ty) m } | r=Tsigned { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) } | r=Tunsigned @@ -735,6 +737,8 @@ ctype: Ast0.wrap (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) } +mul: a=TMul b=ioption(const_vol) { (a,b) } + mctype: | TMeta { tmeta_to_type $1 } | ctype {$1} @@ -1113,6 +1117,9 @@ statement: | TFor TOPar option(eexpr) TPtVirg option(eexpr) TPtVirg option(eexpr) TCPar single_statement { P.forloop $1 $2 $3 $4 $5 $6 $7 $8 $9 } +| TFor TOPar one_decl_var option(eexpr) TPtVirg + option(eexpr) TCPar single_statement + { P.forloop2 $1 $2 $3 $4 $5 $6 $7 $8 } | TWhile TOPar eexpr TCPar single_statement { P.whileloop $1 $2 $3 $4 $5 } | TDo single_statement TWhile TOPar eexpr TCPar TPtVirg diff --git a/parsing_cocci/pretty_print_cocci.ml b/parsing_cocci/pretty_print_cocci.ml index d33581e..4b425ae 100644 --- a/parsing_cocci/pretty_print_cocci.ml +++ b/parsing_cocci/pretty_print_cocci.ml @@ -361,8 +361,13 @@ and storage = function and fullType ft = match Ast.unwrap ft with Ast.Type(_,cv,ty) -> - print_option (function x -> mcode const_vol x; print_string " ") cv; - typeC ty + (match Ast.unwrap ty with + Ast.Pointer(_,_) -> + typeC ty; + print_option (function x -> print_string " "; mcode const_vol x) cv + | _ -> + print_option (function x -> mcode const_vol x; print_string " ") cv; + typeC ty) | Ast.AsType(ty,asty) -> fullType ty; print_string "@"; fullType asty | Ast.DisjType(decls) -> print_disj_list fullType decls | Ast.OptType(ty) -> print_string "?"; fullType ty @@ -619,10 +624,9 @@ let rec rule_elem arity re = mcode print_string whl; print_string " "; mcode print_string_box lp; expression exp; close_box(); mcode print_string rp; mcode print_string sem - | Ast.ForHeader(fr,lp,e1,sem1,e2,sem2,e3,rp) -> + | Ast.ForHeader(fr,lp,first,e2,sem2,e3,rp) -> print_string arity; - mcode print_string fr; mcode print_string_box lp; - print_option expression e1; mcode print_string sem1; + mcode print_string fr; mcode print_string_box lp; forinfo first; print_option expression e2; mcode print_string sem2; print_option expression e3; close_box(); mcode print_string rp; print_string " " @@ -678,6 +682,12 @@ let rec rule_elem arity re = res; force_newline(); print_string ")" +and forinfo = function + Ast.ForExp(e1,sem1) -> + print_option expression e1; mcode print_string sem1 + | Ast.ForDecl (bef,allminus,decl) -> + mcode (function _ -> ()) ((),Ast.no_info,bef,[]); + declaration decl and print_define_parameters params = match Ast.unwrap params with @@ -856,6 +866,7 @@ let _ = | Ast.IncFileTag(x) -> inc_file x | Ast.Rule_elemTag(x) -> rule_elem "" x | Ast.StatementTag(x) -> statement "" x + | Ast.ForInfoTag(x) -> forinfo x | Ast.CaseLineTag(x) -> case_line "" x | Ast.ConstVolTag(x) -> const_vol x | Ast.Token(x,Some info) -> print_string_befaft print_string x info diff --git a/parsing_cocci/single_statement.ml b/parsing_cocci/single_statement.ml index 16b8981..4d946f7 100644 --- a/parsing_cocci/single_statement.ml +++ b/parsing_cocci/single_statement.ml @@ -261,7 +261,7 @@ and left_statement s = modif_before_mcode iff | Ast0.While(whl,lp,exp,rp,body,(info,aft)) -> modif_before_mcode whl | Ast0.Do(d,body,whl,lp,exp,rp,sem) -> modif_before_mcode d - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,(info,aft)) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,aft)) -> modif_before_mcode fr | Ast0.Iterator(nm,lp,args,rp,body,(info,aft)) -> left_ident nm | Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) -> @@ -303,7 +303,7 @@ and right_statement s = modif_after_mcodekind aft | Ast0.While(whl,lp,exp,rp,body,(info,aft)) -> modif_after_mcodekind aft | Ast0.Do(d,body,whl,lp,exp,rp,sem) -> modif_after_mcode sem - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,(info,aft)) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,aft)) -> modif_after_mcodekind aft | Ast0.Iterator(nm,lp,args,rp,body,(info,aft)) -> modif_after_mcodekind aft @@ -424,7 +424,7 @@ and contains_only_minus = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode dots dots dots dots dots dots identifier expression typeC donothing donothing declaration - statement case_line donothing + statement donothing case_line donothing (* needs a special case when there is a Disj or an empty DOTS *) @@ -586,10 +586,10 @@ let rec statement dots_before dots_after s = do_one (Ast0.rewrap s (Ast0.Do(d,statement false false body,whl,lp,exp,rp,sem))) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,x) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,x) -> do_one (Ast0.rewrap s - (Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp, + (Ast0.For(fr,lp,first,e2,sem2,e3,rp, statement false false body,x))) | Ast0.Iterator(nm,lp,args,rp,body,x) -> do_one diff --git a/parsing_cocci/test_exps.ml b/parsing_cocci/test_exps.ml index df6985f..0a11d1b 100644 --- a/parsing_cocci/test_exps.ml +++ b/parsing_cocci/test_exps.ml @@ -80,9 +80,9 @@ let set_test_poss = Ast0.rewrap s (Ast0.While(i,lp,process_exp e,rp,s1,aft)) | Ast0.Do(d,s1,w,lp,e,rp,sc) -> Ast0.rewrap s (Ast0.Do(d,s1,w,lp,process_exp e,rp,sc)) - | Ast0.For(f,lp,e1,sc1,Some e2,sc2,e3,rp,s1,aft) -> + | Ast0.For(f,lp,first,Some e2,sc2,e3,rp,s1,aft) -> Ast0.rewrap s - (Ast0.For(f,lp,e1,sc1,Some (process_exp e2),sc2,e3,rp,s1,aft)) + (Ast0.For(f,lp,first,Some (process_exp e2),sc2,e3,rp,s1,aft)) | Ast0.Dots(d,wc) -> Ast0.rewrap s (Ast0.Dots(d,List.map process_wc wc)) | Ast0.Nest(l,s1,r,wc,m) -> diff --git a/parsing_cocci/type_infer.ml b/parsing_cocci/type_infer.ml index c0315c9..8a2b4b7 100644 --- a/parsing_cocci/type_infer.ml +++ b/parsing_cocci/type_infer.ml @@ -397,11 +397,25 @@ let rec propagate_types env = let fenv = List.concat (List.map get_binding (Ast0.undots params)) in (propagate_types (fenv@env)).VT0.combiner_rec_statement_dots body | Ast0.IfThen(_,_,exp,_,_,_) | Ast0.IfThenElse(_,_,exp,_,_,_,_,_) - | Ast0.While(_,_,exp,_,_,_) | Ast0.Do(_,_,_,_,exp,_,_) - | Ast0.For(_,_,_,_,Some exp,_,_,_,_,_) -> + | Ast0.While(_,_,exp,_,_,_) | Ast0.Do(_,_,_,_,exp,_,_) -> let _ = k s in - post_bool exp; - None + post_bool exp; + None + | Ast0.For(a,b,first,exp,c,d,e,f,g) -> + (match Ast0.unwrap first with + Ast0.ForExp _ -> + (match exp with + Some exp -> + let _ = k s in + post_bool exp; + None + | None -> k s) + | Ast0.ForDecl (_,decl) -> + (* not super elegant..., reuses a ; (d) *) + let newenv = (process_decl env decl)@env in + let dummy = Ast0.rewrap first (Ast0.ForExp (None,c)) in + (propagate_types newenv).VT0.combiner_rec_statement + (Ast0.rewrap s (Ast0.For(a,b,dummy,exp,c,d,e,f,g)))) | Ast0.Switch(_,_,exp,_,_,decls,cases,_) -> let senv = process_statement_list r env (Ast0.undots decls) in let res = diff --git a/parsing_cocci/unify_ast.ml b/parsing_cocci/unify_ast.ml index 38fbbee..80ebfd4 100644 --- a/parsing_cocci/unify_ast.ml +++ b/parsing_cocci/unify_ast.ml @@ -482,10 +482,16 @@ and unify_rule_elem re1 re2 = | (Ast.DoHeader(d1),Ast.DoHeader(d2)) -> return true | (Ast.WhileTail(wh1,lp1,e1,rp1,s1),Ast.WhileTail(wh2,lp2,e2,rp2,s2)) -> unify_expression e1 e2 - | (Ast.ForHeader(fr1,lp1,e11,s11,e21,s21,e31,rp1), - Ast.ForHeader(fr2,lp2,e12,s12,e22,s22,e32,rp2)) -> - conjunct_bindings - (unify_option unify_expression e11 e12) + | (Ast.ForHeader(fr1,lp1,first1,e21,s21,e31,rp1), + Ast.ForHeader(fr2,lp2,first2,e22,s22,e32,rp2)) -> + let first = + match (first1,first2) with + (Ast.ForExp(e11,s11),Ast.ForExp(e12,s1)) -> + unify_option unify_expression e11 e12 + | (Ast.ForDecl(_,_,d1),Ast.ForDecl(_,_,d2)) -> + unify_declaration d1 d2 + | _ -> return false in + conjunct_bindings first (conjunct_bindings (unify_option unify_expression e21 e22) (unify_option unify_expression e31 e32)) diff --git a/parsing_cocci/unparse_ast0.ml b/parsing_cocci/unparse_ast0.ml index 46268f5..63e1403 100644 --- a/parsing_cocci/unparse_ast0.ml +++ b/parsing_cocci/unparse_ast0.ml @@ -508,10 +508,13 @@ and statement arity s = mcode print_string whl; print_string " "; mcode print_string_box lp; expression exp; close_box(); mcode print_string rp; mcode print_string sem - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,(info,aft)) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,aft)) -> print_string arity; mcode print_string fr; mcode print_string_box lp; - print_option expression e1; mcode print_string sem1; + (match Ast0.unwrap first with + Ast0.ForExp(e1,sem1) -> + print_option expression e1; mcode print_string sem1 + | Ast0.ForDecl (_,decl) -> declaration decl); print_option expression e2; mcode print_string sem2; print_option expression e3; close_box(); mcode print_string rp; print_string " "; statement arity body; @@ -703,6 +706,12 @@ let unparse_anything x = | Ast0.StmtTag(d) -> print_string "Stm:"; force_newline(); statement "" d + | Ast0.ForInfoTag(fi) -> + print_string "ForInfo:"; force_newline(); + (match Ast0.unwrap fi with + Ast0.ForExp(e1,sem1) -> + print_option expression e1; mcode print_string sem1 + | Ast0.ForDecl (_,decl) -> declaration decl) | Ast0.CaseLineTag(d) -> case_line "" d | Ast0.TopTag(d) -> top_level d | Ast0.IsoWhenTag(x) -> U.print_when_modif x diff --git a/parsing_cocci/visitor_ast.ml b/parsing_cocci/visitor_ast.ml index d223e0d..b9d03a9 100644 --- a/parsing_cocci/visitor_ast.ml +++ b/parsing_cocci/visitor_ast.ml @@ -361,9 +361,9 @@ let combiner bind option_default | Ast.WhileTail(whl,lp,exp,rp,sem) -> multibind [string_mcode whl; string_mcode lp; expression exp; string_mcode rp; string_mcode sem] - | Ast.ForHeader(fr,lp,e1,sem1,e2,sem2,e3,rp) -> - multibind [string_mcode fr; string_mcode lp; - get_option expression e1; string_mcode sem1; + | Ast.ForHeader(fr,lp,first,e2,sem2,e3,rp) -> + let first = forinfo first in + multibind [string_mcode fr; string_mcode lp; first; get_option expression e2; string_mcode sem2; get_option expression e3; string_mcode rp] | Ast.IteratorHeader(nm,lp,args,rp) -> @@ -398,6 +398,14 @@ let combiner bind option_default | Ast.DisjRuleElem(res) -> multibind (List.map rule_elem res) in rulefn all_functions k re + (* not parameterisable, for now *) + and forinfo fi = + let k = function + Ast.ForExp(e1,sem1) -> + bind (get_option expression e1) (string_mcode sem1) + | Ast.ForDecl (_,_,decl) -> declaration decl in + k fi + (* not parameterizable for now... *) and define_parameters p = let k p = @@ -534,6 +542,7 @@ let combiner bind option_default | Ast.IncFileTag(stg) -> option_default | Ast.Rule_elemTag(rule) -> rule_elem rule | Ast.StatementTag(rule) -> statement rule + | Ast.ForInfoTag(rule) -> forinfo rule | Ast.CaseLineTag(case) -> case_line case | Ast.ConstVolTag(cv) -> option_default | Ast.Token(tok,info) -> option_default @@ -879,9 +888,9 @@ let rebuilder | Ast.WhileTail(whl,lp,exp,rp,sem) -> Ast.WhileTail(string_mcode whl, string_mcode lp, expression exp, string_mcode rp, string_mcode sem) - | Ast.ForHeader(fr,lp,e1,sem1,e2,sem2,e3,rp) -> - Ast.ForHeader(string_mcode fr, string_mcode lp, - get_option expression e1, string_mcode sem1, + | Ast.ForHeader(fr,lp,first,e2,sem2,e3,rp) -> + let first = forinfo first in + Ast.ForHeader(string_mcode fr, string_mcode lp, first, get_option expression e2, string_mcode sem2, get_option expression e3, string_mcode rp) | Ast.IteratorHeader(whl,lp,args,rp) -> @@ -925,6 +934,15 @@ let rebuilder | Ast.DisjRuleElem(res) -> Ast.DisjRuleElem(List.map rule_elem res)) in rulefn all_functions k re + (* not parameterizable for now... *) + and forinfo fi = + let k = function + Ast.ForExp(e1,sem1) -> + Ast.ForExp(get_option expression e1,string_mcode sem1) + | Ast.ForDecl (bef,allminus,decl) -> + Ast.ForDecl(bef,allminus,declaration decl) in + k fi + (* not parameterizable for now... *) and define_parameters p = let k p = @@ -1078,6 +1096,7 @@ let rebuilder | Ast.IncFileTag(stg) as x -> x | Ast.Rule_elemTag(rule) -> Ast.Rule_elemTag(rule_elem rule) | Ast.StatementTag(rule) -> Ast.StatementTag(statement rule) + | Ast.ForInfoTag(rule) -> Ast.ForInfoTag(forinfo rule) | Ast.CaseLineTag(case) -> Ast.CaseLineTag(case_line case) | Ast.ConstVolTag(cv) as x -> x | Ast.Token(tok,info) as x -> x diff --git a/parsing_cocci/visitor_ast0.ml b/parsing_cocci/visitor_ast0.ml index c5d9125..21346b8 100644 --- a/parsing_cocci/visitor_ast0.ml +++ b/parsing_cocci/visitor_ast0.ml @@ -43,7 +43,7 @@ let visitor mode bind option_default binary_mcode cv_mcode sign_mcode struct_mcode storage_mcode inc_mcode dotsexprfn dotsinitfn dotsparamfn dotsstmtfn dotsdeclfn dotscasefn - identfn exprfn tyfn initfn paramfn declfn stmtfn casefn topfn = + identfn exprfn tyfn initfn paramfn declfn stmtfn forinfofn casefn topfn = let multibind l = let rec loop = function [] -> option_default @@ -322,7 +322,12 @@ let visitor mode bind option_default Ast0.ConstVol(cv,ty) -> let (cv_n,cv) = cv_mcode cv in let (ty_n,ty) = typeC ty in - (bind cv_n ty_n, Ast0.ConstVol(cv,ty)) + let front = + (* bind in the right order *) + match Ast0.unwrap ty with + Ast0.Pointer(ty,star) -> bind ty_n cv_n + | _ -> bind cv_n ty_n in + (front, Ast0.ConstVol(cv,ty)) | Ast0.BaseType(ty,strings) -> let (strings_n,strings) = map_split_bind string_mcode strings in (strings_n, Ast0.BaseType(ty,strings)) @@ -668,18 +673,17 @@ let visitor mode bind option_default let (sem_n,sem) = string_mcode sem in (multibind [d_n;body_n;whl_n;lp_n;exp_n;rp_n;sem_n], Ast0.Do(d,body,whl,lp,exp,rp,sem)) - | Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft) -> + | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft) -> let (fr_n,fr) = string_mcode fr in let (lp_n,lp) = string_mcode lp in - let (e1_n,e1) = get_option expression e1 in - let (sem1_n,sem1) = string_mcode sem1 in + let (first_n,first) = forinfo first in let (e2_n,e2) = get_option expression e2 in let (sem2_n,sem2) = string_mcode sem2 in let (e3_n,e3) = get_option expression e3 in let (rp_n,rp) = string_mcode rp in let (body_n,body) = statement body in - (multibind [fr_n;lp_n;e1_n;sem1_n;e2_n;sem2_n;e3_n;rp_n;body_n], - Ast0.For(fr,lp,e1,sem1,e2,sem2,e3,rp,body,aft)) + (multibind [fr_n;lp_n;first_n;e2_n;sem2_n;e3_n;rp_n;body_n], + Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft)) | Ast0.Iterator(nm,lp,args,rp,body,aft) -> let (nm_n,nm) = ident nm in let (lp_n,lp) = string_mcode lp in @@ -796,6 +800,19 @@ let visitor mode bind option_default let (n,s) = stmtfn all_functions k s in (n,if mode = REBUILDER then process_bef_aft s else s) + and forinfo fi = + let k fi = + rewrap fi + (match Ast0.unwrap fi with + Ast0.ForExp(e1,sem1) -> + let (e1_n,e1) = get_option expression e1 in + let (sem1_n,sem1) = string_mcode sem1 in + (bind e1_n sem1_n, Ast0.ForExp(e1,sem1)) + | Ast0.ForDecl (bef,decl) -> + let (decl_n,decl) = declaration decl in + (decl_n,Ast0.ForDecl (bef,decl))) in + forinfofn all_functions k fi + (* not parameterizable for now... *) and define_parameters p = let k p = @@ -950,6 +967,9 @@ let visitor mode bind option_default | Ast0.StmtTag(stmt) -> let (stmt_n,stmt) = statement stmt in (stmt_n,Ast0.StmtTag(stmt)) + | Ast0.ForInfoTag(fi) -> + let (fi_n,fi) = forinfo fi in + (fi_n,Ast0.ForInfoTag(fi)) | Ast0.CaseLineTag(c) -> let (c_n,c) = case_line c in (c_n,Ast0.CaseLineTag(c)) @@ -980,6 +1000,7 @@ let visitor mode bind option_default VT0.parameter = parameterTypeDef; VT0.parameter_list = parameter_list; VT0.statement = statement; + VT0.forinfo = forinfo; VT0.case_line = case_line; VT0.top_level = top_level; VT0.expression_dots = expression_dots; @@ -1015,6 +1036,7 @@ let combiner_functions = VT0.combiner_paramfn = (fun r k e -> k e); VT0.combiner_declfn = (fun r k e -> k e); VT0.combiner_stmtfn = (fun r k e -> k e); + VT0.combiner_forinfofn = (fun r k e -> k e); VT0.combiner_casefn = (fun r k e -> k e); VT0.combiner_topfn = (fun r k e -> k e)} @@ -1037,6 +1059,8 @@ let combiner_dz r = (function e -> let (n,_) = r.VT0.parameter_list e in n); VT0.combiner_rec_statement = (function e -> let (n,_) = r.VT0.statement e in n); + VT0.combiner_rec_forinfo = + (function e -> let (n,_) = r.VT0.forinfo e in n); VT0.combiner_rec_case_line = (function e -> let (n,_) = r.VT0.case_line e in n); VT0.combiner_rec_top_level = @@ -1083,6 +1107,7 @@ let combiner bind option_default functions = (fun r k e -> (functions.VT0.combiner_paramfn (dz r) (xk k) e, e)) (fun r k e -> (functions.VT0.combiner_declfn (dz r) (xk k) e, e)) (fun r k e -> (functions.VT0.combiner_stmtfn (dz r) (xk k) e, e)) + (fun r k e -> (functions.VT0.combiner_forinfofn (dz r) (xk k) e, e)) (fun r k e -> (functions.VT0.combiner_casefn (dz r) (xk k) e, e)) (fun r k e -> (functions.VT0.combiner_topfn (dz r) (xk k) e, e))) @@ -1091,7 +1116,7 @@ let flat_combiner bind option_default binary_mcode cv_mcode sign_mcode struct_mcode storage_mcode inc_mcode dotsexprfn dotsinitfn dotsparamfn dotsstmtfn dotsdeclfn dotscasefn - identfn exprfn tyfn initfn paramfn declfn stmtfn casefn topfn = + identfn exprfn tyfn initfn paramfn declfn stmtfn forinfofn casefn topfn = let dz = combiner_dz in let xk k e = let (n,_) = k e in n in combiner_dz (visitor COMBINER bind option_default @@ -1120,6 +1145,7 @@ let flat_combiner bind option_default (fun r k e -> (paramfn (dz r) (xk k) e, e)) (fun r k e -> (declfn (dz r) (xk k) e, e)) (fun r k e -> (stmtfn (dz r) (xk k) e, e)) + (fun r k e -> (forinfofn (dz r) (xk k) e, e)) (fun r k e -> (casefn (dz r) (xk k) e, e)) (fun r k e -> (topfn (dz r) (xk k) e, e))) @@ -1149,6 +1175,7 @@ let rebuilder_functions = VT0.rebuilder_paramfn = (fun r k e -> k e); VT0.rebuilder_declfn = (fun r k e -> k e); VT0.rebuilder_stmtfn = (fun r k e -> k e); + VT0.rebuilder_forinfofn = (fun r k e -> k e); VT0.rebuilder_casefn = (fun r k e -> k e); VT0.rebuilder_topfn = (fun r k e -> k e)} @@ -1171,6 +1198,8 @@ let rebuilder_dz r = (function e -> let (_,e) = r.VT0.parameter_list e in e); VT0.rebuilder_rec_statement = (function e -> let (_,e) = r.VT0.statement e in e); + VT0.rebuilder_rec_forinfo = + (function e -> let (_,e) = r.VT0.forinfo e in e); VT0.rebuilder_rec_case_line = (function e -> let (_,e) = r.VT0.case_line e in e); VT0.rebuilder_rec_top_level = @@ -1216,6 +1245,7 @@ let rebuilder functions = (fun r k e -> ((),functions.VT0.rebuilder_paramfn (dz r) (xk k) e)) (fun r k e -> ((),functions.VT0.rebuilder_declfn (dz r) (xk k) e)) (fun r k e -> ((),functions.VT0.rebuilder_stmtfn (dz r) (xk k) e)) + (fun r k e -> ((),functions.VT0.rebuilder_forinfofn (dz r) (xk k) e)) (fun r k e -> ((),functions.VT0.rebuilder_casefn (dz r) (xk k) e)) (fun r k e -> ((),functions.VT0.rebuilder_topfn (dz r) (xk k) e))) @@ -1224,7 +1254,7 @@ let flat_rebuilder binary_mcode cv_mcode sign_mcode struct_mcode storage_mcode inc_mcode dotsexprfn dotsinitfn dotsparamfn dotsstmtfn dotsdeclfn dotscasefn - identfn exprfn tyfn initfn paramfn declfn stmtfn casefn topfn = + identfn exprfn tyfn initfn paramfn declfn stmtfn forinfofn casefn topfn = let dz = rebuilder_dz in let xk k e = let (_,e) = k e in e in rebuilder_dz @@ -1254,6 +1284,7 @@ let flat_rebuilder (fun r k e -> ((),paramfn (dz r) (xk k) e)) (fun r k e -> ((),declfn (dz r) (xk k) e)) (fun r k e -> ((),stmtfn (dz r) (xk k) e)) + (fun r k e -> ((),forinfofn (dz r) (xk k) e)) (fun r k e -> ((),casefn (dz r) (xk k) e)) (fun r k e -> ((),topfn (dz r) (xk k) e))) @@ -1295,6 +1326,7 @@ let combiner_rebuilder_functions = VT0.combiner_rebuilder_paramfn = (fun r k e -> k e); VT0.combiner_rebuilder_declfn = (fun r k e -> k e); VT0.combiner_rebuilder_stmtfn = (fun r k e -> k e); + VT0.combiner_rebuilder_forinfofn = (fun r k e -> k e); VT0.combiner_rebuilder_casefn = (fun r k e -> k e); VT0.combiner_rebuilder_topfn = (fun r k e -> k e)} @@ -1325,5 +1357,6 @@ let combiner_rebuilder bind option_default functions = functions.VT0.combiner_rebuilder_paramfn functions.VT0.combiner_rebuilder_declfn functions.VT0.combiner_rebuilder_stmtfn + functions.VT0.combiner_rebuilder_forinfofn functions.VT0.combiner_rebuilder_casefn functions.VT0.combiner_rebuilder_topfn diff --git a/parsing_cocci/visitor_ast0.mli b/parsing_cocci/visitor_ast0.mli index 819caf0..184b9fa 100644 --- a/parsing_cocci/visitor_ast0.mli +++ b/parsing_cocci/visitor_ast0.mli @@ -59,6 +59,7 @@ val flat_combiner : ((Ast0_cocci.parameterTypeDef,'a) Visitor_ast0_types.ccode) -> ((Ast0_cocci.declaration,'a) Visitor_ast0_types.ccode) -> ((Ast0_cocci.statement,'a) Visitor_ast0_types.ccode) -> + ((Ast0_cocci.forinfo,'a) Visitor_ast0_types.ccode) -> ((Ast0_cocci.case_line,'a) Visitor_ast0_types.ccode) -> ((Ast0_cocci.top_level,'a) Visitor_ast0_types.ccode) -> 'a Visitor_ast0_types.combiner_rec_functions @@ -93,6 +94,7 @@ val flat_rebuilder : (Ast0_cocci.parameterTypeDef Visitor_ast0_types.rcode) -> (Ast0_cocci.declaration Visitor_ast0_types.rcode) -> (Ast0_cocci.statement Visitor_ast0_types.rcode) -> + (Ast0_cocci.forinfo Visitor_ast0_types.rcode) -> (Ast0_cocci.case_line Visitor_ast0_types.rcode) -> (Ast0_cocci.top_level Visitor_ast0_types.rcode) -> Visitor_ast0_types.rebuilder_rec_functions diff --git a/parsing_cocci/visitor_ast0_types.ml b/parsing_cocci/visitor_ast0_types.ml index bca7f8e..539eb40 100644 --- a/parsing_cocci/visitor_ast0_types.ml +++ b/parsing_cocci/visitor_ast0_types.ml @@ -40,6 +40,7 @@ type 'n all_functions = parameter : (Ast0.parameterTypeDef,'n) inout; parameter_list : (Ast0.parameter_list,'n) inout; statement : (Ast0.statement,'n) inout; + forinfo : (Ast0.forinfo,'n) inout; case_line : (Ast0.case_line,'n) inout; top_level : (Ast0.top_level,'n) inout; expression_dots : (Ast0.expression Ast0.dots,'n) inout; @@ -64,6 +65,7 @@ type 'n combiner_rec_functions = combiner_rec_parameter : (Ast0.parameterTypeDef,'n) combiner_inout; combiner_rec_parameter_list : (Ast0.parameter_list,'n) combiner_inout; combiner_rec_statement : (Ast0.statement,'n) combiner_inout; + combiner_rec_forinfo : (Ast0.forinfo,'n) combiner_inout; combiner_rec_case_line : (Ast0.case_line,'n) combiner_inout; combiner_rec_top_level : (Ast0.top_level,'n) combiner_inout; combiner_rec_expression_dots : @@ -106,6 +108,7 @@ type 'n combiner_functions = combiner_paramfn : (Ast0.parameterTypeDef,'n) ccode; combiner_declfn : (Ast0.declaration,'n) ccode; combiner_stmtfn : (Ast0.statement,'n) ccode; + combiner_forinfofn : (Ast0.forinfo,'n) ccode; combiner_casefn : (Ast0.case_line,'n) ccode; combiner_topfn : (Ast0.top_level,'n) ccode} @@ -125,6 +128,7 @@ type rebuilder_rec_functions = rebuilder_rec_parameter : Ast0.parameterTypeDef rebuilder_inout; rebuilder_rec_parameter_list : Ast0.parameter_list rebuilder_inout; rebuilder_rec_statement : Ast0.statement rebuilder_inout; + rebuilder_rec_forinfo : Ast0.forinfo rebuilder_inout; rebuilder_rec_case_line : Ast0.case_line rebuilder_inout; rebuilder_rec_top_level : Ast0.top_level rebuilder_inout; rebuilder_rec_expression_dots : @@ -167,6 +171,7 @@ type rebuilder_functions = rebuilder_paramfn : Ast0.parameterTypeDef rcode; rebuilder_declfn : Ast0.declaration rcode; rebuilder_stmtfn : Ast0.statement rcode; + rebuilder_forinfofn : Ast0.forinfo rcode; rebuilder_casefn : Ast0.case_line rcode; rebuilder_topfn : Ast0.top_level rcode} @@ -204,5 +209,6 @@ type 'n combiner_rebuilder_functions = combiner_rebuilder_paramfn : (Ast0.parameterTypeDef,'n) rccode; combiner_rebuilder_declfn : (Ast0.declaration,'n) rccode; combiner_rebuilder_stmtfn : (Ast0.statement,'n) rccode; + combiner_rebuilder_forinfofn : (Ast0.forinfo,'n) rccode; combiner_rebuilder_casefn : (Ast0.case_line,'n) rccode; combiner_rebuilder_topfn : (Ast0.top_level,'n) rccode} diff --git a/popl/Makefile b/popl/Makefile index 265b17e..96e10b1 100644 --- a/popl/Makefile +++ b/popl/Makefile @@ -30,8 +30,8 @@ endif TARGET = popl -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g SRC = ast_popl.ml asttopopl.ml insert_quantifiers.ml insert_befaft.ml \ pretty_print_popl.ml popltoctl.ml popl.ml flag_popl.ml @@ -45,8 +45,8 @@ INCLUDE_PATH = -I ../commons -I ../globals \ #The Caml compilers. #for warning: -w A #for profiling: -p -inline 0 with OCAMLOPT -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) OCAMLDEP_CMD=$(OCAMLDEP) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom diff --git a/popl09/Makefile b/popl09/Makefile index 631e9b9..263e7e8 100644 --- a/popl09/Makefile +++ b/popl09/Makefile @@ -30,8 +30,8 @@ endif TARGET = popl -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g SRC = ast_popl.ml asttopopl.ml insert_quantifiers.ml \ pretty_print_popl.ml flag_popl.ml popltoctl.ml popl.ml @@ -45,8 +45,8 @@ INCLUDES = -I ../commons -I ../globals \ #The Caml compilers. #for warning: -w A #for profiling: -p -inline 0 with OCAMLOPT -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDES) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) diff --git a/python/Makefile b/python/Makefile index 3981f56..be01e6d 100644 --- a/python/Makefile +++ b/python/Makefile @@ -34,8 +34,8 @@ endif ############################################################################## TARGET=coccipython -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g SOURCES= pycocci_aux.ml $(PYCOCCI_FILE) pycocci.ml @@ -59,8 +59,8 @@ INCLUDES_DEPEND=$(INCLUDEDIRS_LOCAL:%=-I %) $(INCLUDESEXTRA) ############################################################################## # The Caml compilers. -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDES) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDES) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDES_DEPEND) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES) @@ -116,6 +116,7 @@ clean:: distclean:: $(MAKE) -C coccilib $@ rm -f pycocci.ml + rm -f *.cm[iox] *.o *.annot ############################################################################## # Generic ocaml rules diff --git a/release.nix b/release.nix index 9c9bb41..d5ba698 100644 --- a/release.nix +++ b/release.nix @@ -1,6 +1,6 @@ # Hydra build file for coccinelle -{ nixpkgs ? /etc/nixos/nixpkgs +{ nixpkgs ? "/etc/nixos/nixpkgs" , cocciSrc ? { outPath = ./.; revCount = 1234; gitTag = "abcdef"; } , testsSrc ? { outPath = ../big-tests; rev = 1234; } , officialRelease ? false @@ -47,7 +47,7 @@ let postDist = '' export HOME=$PREVHOME # restore the home directory - ensureDir "$out/tarballs" + mkdir -p "$out/tarballs" # rename the tarball to give it a version-specific name cp coccinelle-*.tar.gz "$out/tarballs/coccinelle-${version}${versionSuffix}.tar.gz" @@ -60,12 +60,13 @@ let # selOcamlDefault = orig: orig.ocamlPackages; + selOcaml400 = orig: orig.ocamlPackages_4_00_0; selOcaml312 = orig: orig.ocamlPackages_3_12_1; selOcaml311 = orig: orig.ocamlPackages_3_11_2; selOcaml310 = orig: orig.ocamlPackages_3_10_0; selCommonOcamlPkgs = ocamlPackages: with ocamlPackages; [ - findlib menhir ocaml_sexplib ocaml_extlib + findlib menhir ocaml_sexplib ]; selMinimalOcamlPkgs = ocamlPackages: with ocamlPackages; [ @@ -73,7 +74,7 @@ let ]; selAllOcamlPkgs = ocamlPackages: with ocamlPackages; [ - findlib menhir ocaml_sexplib ocaml_extlib ocaml_pcre pycaml + findlib menhir ocaml_sexplib ocaml_pcre pycaml ]; selCommonInputs = pkgs: [ pkgs.pkgconfig pkgs.pcre ]; @@ -93,6 +94,7 @@ let selOcaml = selOcamlDefault; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # creates a configuration for a given ocaml version @@ -104,16 +106,18 @@ let ocamls = selMinimalOcamlPkgs pkgs.ocamlPackages; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # creates a default configuration with additional flags - mkCfgDefault = { name, flags }: pkgs: { + mkCfgDefault = { name, flags, extra ? {} }: pkgs: { inherit name flags; pythons = selPythonDefault pkgs; ocamls = selAllOcamlPkgs pkgs.ocamlPackages; selOcaml = selOcamlDefault; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = extra; }; # creates a minimal configuration with additional flags @@ -124,6 +128,7 @@ let selOcaml = selOcamlDefault; extras = []; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # creates a configuration for the given ocaml packages @@ -134,6 +139,7 @@ let selOcaml = selOcamlDefault; extras = selCommonInputs pkgs; shell = selDefaultShell pkgs; + extraAttrs = { }; }; # build the project using the given shell @@ -147,6 +153,7 @@ let flags = []; extras = [ pkgs.pcre ]; shell = selShell pkgs; + extraAttrs = { }; }; # creates a configuration with multiple ocaml versions: this gives @@ -165,6 +172,7 @@ let flags = []; extras = selCommonInputs pkgs ++ map (selOcaml pkgs) sels; shell = selDefaultShell pkgs; + extraAttrs = { }; }; @@ -175,7 +183,7 @@ let defaultCfg = mkCfgDefault { name = "default"; flags = []; }; debugCfg = mkCfgDefault { name = "debug"; flags = [ "--enable-release=no" ]; }; wrappersCfg = mkCfgDefault { name = "wrappers"; flags = [ "--enable-python" "--enable-ocaml" "--without-pkg-config" "--without-ocamlfind" ]; }; - manyOcamlCfg = mkCfgManyOcaml [ selOcaml312 selOcaml311 selOcaml310 ]; + manyOcamlCfg = mkCfgManyOcaml [ selOcaml400 selOcaml312 selOcaml311 selOcaml310 ]; minimalCfgs = map mkCfgMinimal [ { name = "minimal"; flags = []; } @@ -225,6 +233,8 @@ let # These versions ship with minimal global packages in order # to thest the bundled packages with these ocaml versions. ocamlCfgs = map mkCfgOcaml [ + { name = "400nat"; selOcaml = selOcaml400; flags = [ "--enable-release=yes" ]; } + { name = "400byt"; selOcaml = selOcaml400; flags = []; } { name = "312"; selOcaml = selOcaml312; flags = []; } { name = "311"; selOcaml = selOcaml311; flags = [ "--enable-release=yes" ]; } { name = "310"; selOcaml = selOcaml310; flags = []; } @@ -233,7 +243,6 @@ let # Several configurations testing different available # ocaml packages. pkgCfgs = map mkCfgPackage [ - { name = "extlib"; ocamls = ps: [ ps.ocaml_extlib ]; flags = [ "--enable-extlib" ]; } { name = "pcre"; ocamls = ps: [ ps.ocaml_pcre ]; flags = [ "--enable-pcre-syntax" ]; } { name = "sexplib"; ocamls = ps: [ ps.ocaml_sexplib ]; flags = [ "--enable-sexplib" ]; } { name = "pycaml"; ocamls = ps: [ ps.pycaml ]; flags = [ "--enable-pycaml" ]; } @@ -277,7 +286,7 @@ let }; cfg = mkConfiguration pkgs; flags = [ "--enable-release=world" ] ++ cfg.flags; - in with pkgs; releaseTools.nixBuild { + in with pkgs; releaseTools.nixBuild ({ inherit (cfg) shell; name = "cocci-build-${cfg.name}"; src = tarball; @@ -302,12 +311,27 @@ let substituteInPlace $script --replace '#! /bin/sh' '#! ${cfg.shell}' done ''; - }; + } // cfg.extraAttrs); build = mkBuild defaultCfg; altBuilds = map mkBuild altCfgs; allBuilds = [ build ] ++ altBuilds; + # compile with ocaml profiling turned on and then running the + # test suite to collect results. + profileCfg = mkCfgDefault { + name = "profiling"; + flags = [ "--enable-release=profile" ]; + extra = { + installPhase = '' + mkdir -p "$out/nix-support" + cp ocamlprof.dump "$out/ocamlprof.dump" + echo "file binary $out/ocamlprof.dump" >> "$out/nix-support/hydra-build-products" + ''; + }; + }; + profile = mkBuild profileCfg {}; + # # Package builders @@ -355,8 +379,8 @@ let phases = [ "runPhase" ]; runPhase = '' - ensureDir "$out" - ensureDir "$out/nix-support" + mkdir -p "$out" + mkdir -p "$out/nix-support" touch "$TMPDIR/result.log" exec > >(tee -a "$TMPDIR/result.log") 2> >(tee -a "$TMPDIR/result.log" >&2) runHook execPhase @@ -421,7 +445,7 @@ let # as this directory contains large # files, we'll create links to the # individual files. - ensureDir "$TMPDIR/tests" + mkdir -p "$TMPDIR/tests" cp -rs ${testsSrc}/* "$TMPDIR/tests/" chmod -R u+w "$TMPDIR/tests/" cd "$TMPDIR/tests" @@ -467,7 +491,7 @@ let # as this directory contains large # files, we'll create links to the # individual files. - ensureDir "$TMPDIR/tests" + mkdir -p "$TMPDIR/tests" cp -rs ${testsSrc}/* "$TMPDIR/tests/" chmod -R u+w "$TMPDIR/tests/" @@ -542,6 +566,7 @@ let inherit build; inherit report; inherit dist; + inherit profile; }; # artificial dependency on report to ensure that we are not going through diff --git a/setup/wrapper-ocamlcp.sh b/setup/wrapper-ocamlcp.sh new file mode 100755 index 0000000..8fb206a --- /dev/null +++ b/setup/wrapper-ocamlcp.sh @@ -0,0 +1,39 @@ +#! /bin/sh -e + +set -e + +# this command acts as a replacement for ocamlcp to selectively turn +# off profiling for some files. + +# $1: path to ocamlc +# $2: path to ocamlprof + +OCAMLC="$1" +OCAMLPROF="$2" +shift 2 + +noprofile= +case "$@" in + + # skip profiling of files that are already preprocessed. + *-pp\ *) + noprofile=1 + ;; + + # uses "include" + *regexp.ml*) + noprofile=1 + ;; + *pycocci.ml*) + noprofile=1 + ;; + *prepare_ocamlcocci.ml*) + noprofile=1 + ;; +esac + +if test -n "$noprofile"; then + exec $OCAMLC "$@" +else + exec $OCAMLC -pp "$OCAMLPROF -instrument -m a" "$@" +fi diff --git a/testing.ml b/testing.ml index 5856a06..2acebfa 100644 --- a/testing.ml +++ b/testing.ml @@ -26,7 +26,6 @@ # 0 "./testing.ml" open Common -open Sexplib (*****************************************************************************) (* Test framework *) @@ -176,9 +175,6 @@ let testall expected_score_file update_score_file = pr2 "regression testing information"; pr2 "--------------------------------"; - (* now default argument of testall: - let expected_score_file = "tests/SCORE_expected.sexp" in - *) let expected_score_file_orig = "tests/SCORE_expected_orig.sexp" in let best_of_both_file = "tests/SCORE_best_of_both.sexp" in let actual_score_file = "tests/SCORE_actual.sexp" in @@ -187,16 +183,22 @@ let testall expected_score_file update_score_file = let (expected_score : score) = if Sys.file_exists expected_score_file then + Common.load_score expected_score_file () + (* let sexp = Sexp.load_sexp expected_score_file in Sexp_common.score_of_sexp sexp + *) else if Sys.file_exists expected_score_file_orig then begin pr2 (spf "use expected orig file (%s)" expected_score_file_orig); Common.command2 (spf "cp %s %s" expected_score_file_orig expected_score_file); - let sexp = Sexp.load_sexp expected_score_file in + (* + let sexp = Sexp.load_sexp expected_score_file in Sexp_common.score_of_sexp sexp + *) + Common.load_score expected_score_file () end else empty_score() @@ -204,16 +206,21 @@ let testall expected_score_file update_score_file = let new_bestscore = Common.regression_testing_vs score expected_score in - + (* let xs = Common.hash_to_list score in let sexp = Sexp_common.sexp_of_score_list xs in let s_score = Sexp.to_string_hum sexp in Common.write_file ~file:(actual_score_file) s_score; + *) + Common.save_score score actual_score_file; + (* let xs2 = Common.hash_to_list new_bestscore in let sexp2 = Sexp_common.sexp_of_score_list xs2 in let s_score2 = Sexp.to_string_hum sexp2 in Common.write_file ~file:(best_of_both_file) s_score2; + *) + Common.save_score new_bestscore best_of_both_file; Common.print_total_score score; diff --git a/tests/SCORE_expected.sexp b/tests/SCORE_expected.sexp dissimilarity index 99% index 9254d1dd3b7b5621a9ecca1f2f8925b8043c6354..fb9e4eb771593de1fd1d9948780a91c19ab5c488 100644 GIT binary patch literal 13294 zcmcgyOK;p*c2;MAAkrqQECX=dlPcCz^^hz-#*WY)_n-my*yw2wCTI@`7Ri!mvB+wY zC6zjGR#{{fc#};w$s))u0DnO?*=LzW_W2Rn1i=vxV{r+ zi4$zy)jA4j`2E4&-e>>x)i0jC{N|hI&%S-+hs&jvCl^8d$g-_p{nFYVd>KZ8buSOH zJUiT-!MiuKqA(7u+0gQmXtRo~`$Nm}&fRpKWY!aF`tZQQpPMF|*vEa>?hdW1^8{0R zNt_39jzP-`mzHgBaXIhxtTf0sY5e%sg+cm9FTMTX(%WiLCYQNjV~tIe+du7Dmzfo8 z*MXM@zN4d0LFf~U-#$IHM$_SuHK3o}=(RvE8%&nny+-*d?)NAkS)K(5UrJ zraCyqUvVG&%5o=!s?HIC=>(inaE`JD8^CS<_*j$6H8DAGRWFsFG1MI8% zyy!t&qM5ukqH8D1U7Zay^s_t-eR+`(+n4(H8WX=}FkOy@iSSQnHLT#lT1)SdBS*hI%k?)&4 zKHzshUJFi!53Iq-@L{P1Bm@^z9ybL1IkVUL^5sij2VO^)rPnQGE3QWEk7E$VPfEu` zpON>QO^JZntc8O4ABKYY@$keN%!v`k5MVP~Hq1HDzTf}) z)i*D{c=7yeS~S?k5W`;unX^s<_{+daJa-j&iRXpm7h!zyr5i?@G_da-=BxD~&l1e% z^W(|bTWzy@y#w;esTjp6T<|E2&x15XBoeE+AI4s?TDy6;hyv%*jW!(D@#c8t=H9sz z#-Rp>qQ44ONqVi`7az*i08t$=!-SJ=zFEtIsh@0URyQL%m9fJpiO=YN1UMc!Esj?~ z?jla)!3y!*Stb%NijnL4ivYJmQSl&h7cgC?@w(12y9$HUcii-BLzBo_eL(_xBgE+Y zoePah#nF1Gk zihW!Q+@08!DTfUKofd;^rw)DBq7Rh1Aq-bP8XW~A|c|6gtxTxnISFy3U3Sj>SHq-l~qvfhwM zvPXZTuvRByt9;Yq)920TF?)z9@K=S8@p$~SC3xT+dh#ZQ9fM|=u3>+{P@1$-10JC( zx=jQeofb1FaPFQt+4X9XM1~C=ccJ1V>0&lzLFdCPh!bmlou4N{#2^jMfcfSk&%S7OY!n<#Xr6L|!+ zTN+&rmkae3V>eCRYbOhT&}U#)RNoo)UARtGk%b7dWQN!XQeMa8RT zXfHNripIMzMR}zMx2zESw3xy`LMPrt5twUKZ$xR{#WD><7LYBg$yUDaT&RH#z0C2> z1Mh;zS-(jm>F)jhofWc_kP_O-HL`WGD>HF^4OjkFmLFtm*MqZ{JH*{QW#{xe#$C*^ zeBhs)EKJ-zEsl~k`7W1|pd@wAR5QEqflAnv7zIHfxL4t@w~UQ!P76EBR}X~LK6q0l zZQVubZfA{vD58UFrL-&yzL$?j5n`D`ep#2cmw@-?8jGCJ^_|&X^ogONa2lB$S&8z$ zFAhhio{3d+%)Zo2uo$uFPZyzhrJ}pc&gK2nVzSBL!ZT<_Y5#{SvP_NzyvFlyI_y5{%jxruv0^Ao-S5??5SgNQ zK$_!hV#&8ynnFPVPhHn4tbSBqN^Y<-JG%%4Enqds-$xLUDMZONpa?(A4Ll7}eqHH) zX-?m7z)eJV)n80d!B3e@{Z}VbfFjfCC;&11n$9{P*_;RLo4AnhtIESOa?@hglJdoO zjhd4AvZaW%qdLcowyJQyY*!n5zEdwSE5I}js;Ja+Cneo2RJ?0hdc;OC$t}qIh482QA~`2%YfV=l^8@#y4hMo&-^TmVELo(H_$bM`4ANV z+@J^YHiEw=ufq^3v<{(PmdJ=KK>frWgGez1gM;+anXi05W{6cejAC#>5IZqN+#xxIswfA`Hd0}Bf_EwyBrrrW{Hano$~KF-@+TZ}?BRD~c_CI87;c5qDB09B^Af-? zI7g(Dj2_rj|GwQ+-;t@hw-@}5%F0gDRF7smrrKskR9UT8bZ$^*jI~+?SGD@l(Qf(3 zZ826d9IC<0KDn$jrJBaHR@}QxLSL%NgegN)TE;@*(w^3CC3|$mdXY<(l+Y#qBpsDH zkNje&7y-@KHKZFXN+Y7BMVK~3t2Kn_GTb`LD7kXtz{q+;S!Y?tqnOA*rsgt4<=4?h z-~&KtT@%fUJr1R^Bx9jO<8Luzj6j)4WhTfa0j}ijNrv_VD)o!hL{;Pgm!Tgd6=dmX zo>lZ!iHYJ_>@U$4l?uwC)+{4jvoMs$GGvz>(>h_T8 z;_;RZQl{=_S11=LXex$_Ft0rv8g}SP1MIwpKBiLea93Ha2hiuu8ajLMWd^MEz%5PC zi@%UG9_+|KJo-Ru3Bg6zE5Y`NoJ)mgixDRWm4h0Q*Q|2F)8bH?Of@eumfe-UzBnXT z3YQ1hr7@pMzXWa!GxMvYCU04Dkt7@|xEB1Ac3;sWU-9E7w>yg}=AutfGvnE=v*@*& zF_p!qv#Lc@cOA?eL#S~Z)p`$`>+Qz)A3wQeL2Qd#5!J%%+CHHi#nq^q8zJXG!QX0B zpmugiZbExjuGQ&S(;59PDr)EjZCv5m4PtAL&G-6F%RG2_m&^1${%F{Ie{+4jKqc%g z2$`WKRt%Q0lPA8EG7;^OBN>$+OFOGX+Aso2$Ox&J*jm$Mw2d}#Z5c(2st3%)W{vwx!ay?3zxqG>YP*j zYNAdm3EC!nNdpyXw!0<1C)7EE6O|$|HxI>q0*WjvG53*$mvx8#{cvhYTUieZj=mlO|L8$q6MfO@c9mp=QqlQ zsKHU$phdWEQ1b+wzcK5tRF8lk> z;b(5`3^S3&;40+UYz?36hMeD9XP9tf13XG5M~V=7a2|vxEC!UEUeLJ)ZWxzZ=Y>14Y9H?oL6qqc#evrzHh(aOEHyxBv;Ch_sHV z^iMyg?bon5Ha6Z6^VwM^X>P2Ihpj&Uvtwkp@=9#%_RVN4Ee?_1p=pB3Y@{WdG3z0n z)>1{R%wsP4HgO#nSrE5SL^I*86LaW?wOlivZe$X~$3(HBeY9lbYo}2?=}~=WB9?$e zNxBzW+C%Kq`cPrJvFRK3F3R)+AHZx-fj4$W9dk~}?q2(@HmR!)(4(%cz`N4=?f}+C z$4%65CtM$KFj#gV2An{ey>|il^j*}Qw5Wsf7EWbpRtewc`5~u49MS%+-8#2ql+#(m z81>828ml1FJal(-w=*ZyliKdsTSc5PxH~U0{Xj7ts~~&&WSgQ+TBDuzIq3-6+HlI7 z1u{$G<_zdsY)yU%U*5=Y%zoKsEN;m$Va7iC5Nn=P#~`j%;fENnrRUv?l_IN3k&M%3 z)sgZ%Dg?ka+*%V;GN&mT=my4s6Ls3E6YaOR+T5#+FN;{ zOV}r*<8!h;m6-E-!I~w_7y=b8q$5C6R8LXSjM>N4@NU%e@ zRu5;J%6)aOGNn`Kkq}pqR|%Jf)G=y%dL~Kdo8aD!&w?Zc{^hYYN?Bs>_y6*SPLwBI zNNm>0BiKG#bJp>k{xgX!?B3TyC<8sWCM$IohOjQGcrwNtRN@C{w3RhaG>z#Lw{ehM z=?C8+IXWdKAIol)J)<)mE?FSAE>8#`Ypxj9A`qsAJ=tLu7JqNYw00v4MU9&WHTqWb zOqMyKg|HzIy>=RlLkWiKiig;Ug&G{e3J+{L$!XlPK1Nk1yCBQQwDt zZb>7~lTGA1S4nz-lOTx&RJlxc5{HlEAj6{l+dgXDqoSuu^Qpu}B?eA+`~*i|nM#eW z3mj0T+7D8oWddlSgco+|ZCC^0si$&sHBPF73Plf|Nb><8D@;}$Y(+7NJhrI)L}PK) zp}?m#7j#5^(vgay6PYtAh#`CiLn0YSkP}bh9C2i0wJw{w10?gc*oJlq73m-YH7A^d rqwVY6s4Nu-c{bv$0gFR4J$R?`X#94Axj03WfkVa{*k?Y~11A3m-IV#I literal 14854 zcmcgz@o(F<68?RE1(yPSa+;*EoiuH?21WDQhXUPNZ0*B)mwbt?+TJd(#d@_792NJmj}P{~@ny%>oonP#jICuJ7P9wEMz)tFJ|_WL(r zkY&lDu>@V7%Y~{qmn<_RG?Z1)R2H>sXqYW>S#XiEEMEj&@&y-#swcMIaA=gW1c*aJ z#sP~`m8_o2Q!Q-;ajKS^l`Oex)jFw?m2E>!s^mJ(%RFdAv^xJ7=tT|dkF00YRG2wW zm@}p3T%mcA#d)n_xlLBC-suYj*gh^BN^Qyv zgnvZ;*b`Uh3S3iFHkcd`g~%5oinjPV9gRdKn@v@Icgx_gzdH=Sy>a+08`ub~=Oe;6 zo1%%nABoFa$n9FDjm+YfdJ1u$3Df-fbFn|(I}#7*5 zq8^w^E)0>yA1%9CxicEUv}h?V7L{}+Vo2+ziq{p!WM+Yu&GlMl(rp6MAG+99hJYm_ z0<(>GKfQhN=H(B1Y`HC=>Z>F#HkFKKJJkkjST{-48ZB zq>RLV6h(DYZPG@p8!Y0o7Q3|Wy60&BR8{#hmdO_DFd2=$o9&F)gm-39&-m53WUc_K z@=;dIcfe`=%qKZ$oHrd$HLsFX>NPN)b&iR=u-!4-X6d##t=MK+DCO2r6S!YWlPY7( z(xi4)f!TqQX=$_5B8f*^@`&T-($i+tOHu(PR?b+Guw;$fW`|$qN>o+e?+a2)O?Ett~?pUYO zuKg3sA>(gmjUH`XVgLU4;mw=xuzTN~y@qjjeQYbe+kYo+bnL`n^uzAxLwm;0x-;+H(z{t8{mU$o9z z%o;j#))h85QTJO}S?Lp#Mm-)3XxGv^J==ld!j137EbD!ItC76?91HP2GPIDBV>7OI zkS}krj+dWf7g}Ox7)Li4#>u2R=wEFYW3mhS@OEL=8Anr-r#OE#K)FH4YQogFKTV76xhFYI}rR;GbZ$0R&`RhR`3}6>}4lldd&@>wpo`tkFLj zbGs+5du}NZ-5H?=ogHw{1D$^i3<}MRba!w@v-NYLmiN4sBDZvbp1M9VZ24K(p zW4dXA_Xb)y;Hb`8<>e(&*h2Nu*oQLT9?(ZDt4dYT1QRjaA+im zfC!y|kbNwGeJaEQfG z>#Mv;&+U>~a*LpeuVXOKvhI6HK@_=K zbJQadqZ6V_m|~#u7+01X2d0R@7W&?5kN=f5!VgKXFji@@DzwQRyum8_z~N!DT0hkM zCdZ5P*idQwmS*x3{H!^#_BoTtE<(zS9T_3 z8%*tT7#`>{4W`t!>l&ckA}ar?^F&d8@;H5b+?^*KJg@~c zi$Yz+rIc=?K+8oL^G!_z1XFezsEDwf7r8wxaG=^c;)Nnh5G~w_psHq@2L6KeTINL| z>;2z1Sg^o}ELEdAq0qS#T}0=IHf7}|0^^@chv-qr3l}vZ3UoV*z6T*rzL;|*@&y|M z1<8{}y3DLbmz~iNYqURN%4x!}CA1A5b<1qhbcdB}90__kTA&a{qIO+rh~^~XowZnB z;aG9f9Q96?d;xF5m7|QDTOm>eVKT4($P!z5>3|N2U8Y&C+cJ@dW2!9ymN5`$fLK}v z9<6xn8s@5w9(B>maI$EjRJ84dPF_xjPdR4Uh=1P~u7inJcF}ffyvKyoe#Hp+VRJqomCxBtZ&GFe^~_MEBq04p zc_lqpY|nk_9LAxush`<&EwH=Q%L5RgAc4o$g>-eVeX9ij{Uo=&BHmj4p$Kt`s-V-1E z&}t`OdknVp-3B}N^o)yFZ{Hd^EXIzmo7rhbVgIHUls{{^BDt%(nLqR}U@|6ICX*py zrhm6E)8oAp@nA~R<8Dpv>HJ?HxA^+AVys@V(-#gsgbG1=4h5uwk|O?n14My{$RPnZ zc2|jGp-PqvZs6^ZPXnSMvc&bd;=VpesDhU+$3fP@kivIMnub(&RmUB8fEtSF*txTw z$3Fe6pI}hs;EsOxLdQ<#Aw_YGix9DtCB%&r@$_pH83C#uFz`v9fr#A&#f?-@e}2 z)G`b4V1Gf6thHnR%wxSbYW}8#_LZjBuxunXf+!F*cp((m*Q>cI9Oy$2w6lDPfvSU7 zDpV$);M(XW48`f^PeAzehK%#6kVUp-^r4~)Iofi7>>16qBYCJJ?uuj;j0qx(Ns&4C z_jw|!(v4n|_Ff3jjRN;%%5D&}*9}}3BCO!UV#Mp*!GPKgTyXbN;M%wQ;EOmw;!B^s zf+m=v&XRz_79yNN-5ygK+XpyyE)6F{{Fb0wqRbSk0qyB#v9fK@sZP~e;{^fsY30Js|-RewFCsl74`m~FGel!kdcs%VrKk_3C%r)NnI02&j zdX)Xsth$VAx$5O*oK|k3zd#JH+MpP|+KExhE8Nhf7k?_te?+GoeYi8eU3JQo;1P_r z3ayx)_IRzT#y)@1WU;IN^k2Pvdg91V@DA!0wX`*Pt3gHq4`}sUN9zvY4RH7Fy%Uw0 zC!(j&9y5~f(1chgb2*QXGPtv(W|#rzb-+_K%J+zX7;Usy3OjYR}eJ7%4f1$W`~_43vIaDZC30MK^;4=QF7OjhM7yo>Y+@I z{7zRTVEx!Ct$DGN5(ic%#|uhQE~Tn)iEDdlfhwMxMyosvRKqK0_Btv&2u**y{nUwL zq?{~c5{KS|_76xy2QaiviN|Ih@&(B~_N4FO8xT{b*EXDo#y6HAqJ~`{H5t!MA*yhI z1?^zD?%o2jP}$gy{?Ualy85=dYYn=Q>tvaXJ2s2Z) zbh)d6Bf5z(d z041AidKtz0@~03y(L}t~GUNt4mXyePQrO9PfX>5Uk{f-Arl(`@`2Pz-+RqK?eiKwBo#JV8Nv!*Aew?J2qGbUkXc0BDp zq$IwB5X0^a9j@nUp5R9I843%ve@dMW0NGxE_znvwlucX8-O;I2JeCc$yi0D(@hPAaIN&g){Z<)f| zIxVg7C}NHW67&-f9H$EvH%@`TY>}l3A3M?tdnhF$g!y#mg3!`mi@?TlWa7tb%!yv+ znN<9@8)$IMCQnf^c3)@XqRpDn> zdjbzR@k=8l$mUQTq6@V!KPqa@lSW)6wSf21sk8)9CEthGeKDCoCJMXJOkv0Py%atI z@iAT)f%IQC`vC^c-&c!WlB2ux{NVgP`16N18VwHJ+RHj!rFlYbD5sxFv_cqbxvJf{ TCZer=c;Z*~n$_`NH;w)eyn6{0 diff --git a/tests/SCORE_expected_orig.sexp b/tests/SCORE_expected_orig.sexp dissimilarity index 99% index 9254d1dd3b7b5621a9ecca1f2f8925b8043c6354..fb9e4eb771593de1fd1d9948780a91c19ab5c488 100644 GIT binary patch literal 13294 zcmcgyOK;p*c2;MAAkrqQECX=dlPcCz^^hz-#*WY)_n-my*yw2wCTI@`7Ri!mvB+wY zC6zjGR#{{fc#};w$s))u0DnO?*=LzW_W2Rn1i=vxV{r+ zi4$zy)jA4j`2E4&-e>>x)i0jC{N|hI&%S-+hs&jvCl^8d$g-_p{nFYVd>KZ8buSOH zJUiT-!MiuKqA(7u+0gQmXtRo~`$Nm}&fRpKWY!aF`tZQQpPMF|*vEa>?hdW1^8{0R zNt_39jzP-`mzHgBaXIhxtTf0sY5e%sg+cm9FTMTX(%WiLCYQNjV~tIe+du7Dmzfo8 z*MXM@zN4d0LFf~U-#$IHM$_SuHK3o}=(RvE8%&nny+-*d?)NAkS)K(5UrJ zraCyqUvVG&%5o=!s?HIC=>(inaE`JD8^CS<_*j$6H8DAGRWFsFG1MI8% zyy!t&qM5ukqH8D1U7Zay^s_t-eR+`(+n4(H8WX=}FkOy@iSSQnHLT#lT1)SdBS*hI%k?)&4 zKHzshUJFi!53Iq-@L{P1Bm@^z9ybL1IkVUL^5sij2VO^)rPnQGE3QWEk7E$VPfEu` zpON>QO^JZntc8O4ABKYY@$keN%!v`k5MVP~Hq1HDzTf}) z)i*D{c=7yeS~S?k5W`;unX^s<_{+daJa-j&iRXpm7h!zyr5i?@G_da-=BxD~&l1e% z^W(|bTWzy@y#w;esTjp6T<|E2&x15XBoeE+AI4s?TDy6;hyv%*jW!(D@#c8t=H9sz z#-Rp>qQ44ONqVi`7az*i08t$=!-SJ=zFEtIsh@0URyQL%m9fJpiO=YN1UMc!Esj?~ z?jla)!3y!*Stb%NijnL4ivYJmQSl&h7cgC?@w(12y9$HUcii-BLzBo_eL(_xBgE+Y zoePah#nF1Gk zihW!Q+@08!DTfUKofd;^rw)DBq7Rh1Aq-bP8XW~A|c|6gtxTxnISFy3U3Sj>SHq-l~qvfhwM zvPXZTuvRByt9;Yq)920TF?)z9@K=S8@p$~SC3xT+dh#ZQ9fM|=u3>+{P@1$-10JC( zx=jQeofb1FaPFQt+4X9XM1~C=ccJ1V>0&lzLFdCPh!bmlou4N{#2^jMfcfSk&%S7OY!n<#Xr6L|!+ zTN+&rmkae3V>eCRYbOhT&}U#)RNoo)UARtGk%b7dWQN!XQeMa8RT zXfHNripIMzMR}zMx2zESw3xy`LMPrt5twUKZ$xR{#WD><7LYBg$yUDaT&RH#z0C2> z1Mh;zS-(jm>F)jhofWc_kP_O-HL`WGD>HF^4OjkFmLFtm*MqZ{JH*{QW#{xe#$C*^ zeBhs)EKJ-zEsl~k`7W1|pd@wAR5QEqflAnv7zIHfxL4t@w~UQ!P76EBR}X~LK6q0l zZQVubZfA{vD58UFrL-&yzL$?j5n`D`ep#2cmw@-?8jGCJ^_|&X^ogONa2lB$S&8z$ zFAhhio{3d+%)Zo2uo$uFPZyzhrJ}pc&gK2nVzSBL!ZT<_Y5#{SvP_NzyvFlyI_y5{%jxruv0^Ao-S5??5SgNQ zK$_!hV#&8ynnFPVPhHn4tbSBqN^Y<-JG%%4Enqds-$xLUDMZONpa?(A4Ll7}eqHH) zX-?m7z)eJV)n80d!B3e@{Z}VbfFjfCC;&11n$9{P*_;RLo4AnhtIESOa?@hglJdoO zjhd4AvZaW%qdLcowyJQyY*!n5zEdwSE5I}js;Ja+Cneo2RJ?0hdc;OC$t}qIh482QA~`2%YfV=l^8@#y4hMo&-^TmVELo(H_$bM`4ANV z+@J^YHiEw=ufq^3v<{(PmdJ=KK>frWgGez1gM;+anXi05W{6cejAC#>5IZqN+#xxIswfA`Hd0}Bf_EwyBrrrW{Hano$~KF-@+TZ}?BRD~c_CI87;c5qDB09B^Af-? zI7g(Dj2_rj|GwQ+-;t@hw-@}5%F0gDRF7smrrKskR9UT8bZ$^*jI~+?SGD@l(Qf(3 zZ826d9IC<0KDn$jrJBaHR@}QxLSL%NgegN)TE;@*(w^3CC3|$mdXY<(l+Y#qBpsDH zkNje&7y-@KHKZFXN+Y7BMVK~3t2Kn_GTb`LD7kXtz{q+;S!Y?tqnOA*rsgt4<=4?h z-~&KtT@%fUJr1R^Bx9jO<8Luzj6j)4WhTfa0j}ijNrv_VD)o!hL{;Pgm!Tgd6=dmX zo>lZ!iHYJ_>@U$4l?uwC)+{4jvoMs$GGvz>(>h_T8 z;_;RZQl{=_S11=LXex$_Ft0rv8g}SP1MIwpKBiLea93Ha2hiuu8ajLMWd^MEz%5PC zi@%UG9_+|KJo-Ru3Bg6zE5Y`NoJ)mgixDRWm4h0Q*Q|2F)8bH?Of@eumfe-UzBnXT z3YQ1hr7@pMzXWa!GxMvYCU04Dkt7@|xEB1Ac3;sWU-9E7w>yg}=AutfGvnE=v*@*& zF_p!qv#Lc@cOA?eL#S~Z)p`$`>+Qz)A3wQeL2Qd#5!J%%+CHHi#nq^q8zJXG!QX0B zpmugiZbExjuGQ&S(;59PDr)EjZCv5m4PtAL&G-6F%RG2_m&^1${%F{Ie{+4jKqc%g z2$`WKRt%Q0lPA8EG7;^OBN>$+OFOGX+Aso2$Ox&J*jm$Mw2d}#Z5c(2st3%)W{vwx!ay?3zxqG>YP*j zYNAdm3EC!nNdpyXw!0<1C)7EE6O|$|HxI>q0*WjvG53*$mvx8#{cvhYTUieZj=mlO|L8$q6MfO@c9mp=QqlQ zsKHU$phdWEQ1b+wzcK5tRF8lk> z;b(5`3^S3&;40+UYz?36hMeD9XP9tf13XG5M~V=7a2|vxEC!UEUeLJ)ZWxzZ=Y>14Y9H?oL6qqc#evrzHh(aOEHyxBv;Ch_sHV z^iMyg?bon5Ha6Z6^VwM^X>P2Ihpj&Uvtwkp@=9#%_RVN4Ee?_1p=pB3Y@{WdG3z0n z)>1{R%wsP4HgO#nSrE5SL^I*86LaW?wOlivZe$X~$3(HBeY9lbYo}2?=}~=WB9?$e zNxBzW+C%Kq`cPrJvFRK3F3R)+AHZx-fj4$W9dk~}?q2(@HmR!)(4(%cz`N4=?f}+C z$4%65CtM$KFj#gV2An{ey>|il^j*}Qw5Wsf7EWbpRtewc`5~u49MS%+-8#2ql+#(m z81>828ml1FJal(-w=*ZyliKdsTSc5PxH~U0{Xj7ts~~&&WSgQ+TBDuzIq3-6+HlI7 z1u{$G<_zdsY)yU%U*5=Y%zoKsEN;m$Va7iC5Nn=P#~`j%;fENnrRUv?l_IN3k&M%3 z)sgZ%Dg?ka+*%V;GN&mT=my4s6Ls3E6YaOR+T5#+FN;{ zOV}r*<8!h;m6-E-!I~w_7y=b8q$5C6R8LXSjM>N4@NU%e@ zRu5;J%6)aOGNn`Kkq}pqR|%Jf)G=y%dL~Kdo8aD!&w?Zc{^hYYN?Bs>_y6*SPLwBI zNNm>0BiKG#bJp>k{xgX!?B3TyC<8sWCM$IohOjQGcrwNtRN@C{w3RhaG>z#Lw{ehM z=?C8+IXWdKAIol)J)<)mE?FSAE>8#`Ypxj9A`qsAJ=tLu7JqNYw00v4MU9&WHTqWb zOqMyKg|HzIy>=RlLkWiKiig;Ug&G{e3J+{L$!XlPK1Nk1yCBQQwDt zZb>7~lTGA1S4nz-lOTx&RJlxc5{HlEAj6{l+dgXDqoSuu^Qpu}B?eA+`~*i|nM#eW z3mj0T+7D8oWddlSgco+|ZCC^0si$&sHBPF73Plf|Nb><8D@;}$Y(+7NJhrI)L}PK) zp}?m#7j#5^(vgay6PYtAh#`CiLn0YSkP}bh9C2i0wJw{w10?gc*oJlq73m-YH7A^d rqwVY6s4Nu-c{bv$0gFR4J$R?`X#94Axj03WfkVa{*k?Y~11A3m-IV#I literal 14854 zcmcgz@o(F<68?RE1(yPSa+;*EoiuH?21WDQhXUPNZ0*B)mwbt?+TJd(#d@_792NJmj}P{~@ny%>oonP#jICuJ7P9wEMz)tFJ|_WL(r zkY&lDu>@V7%Y~{qmn<_RG?Z1)R2H>sXqYW>S#XiEEMEj&@&y-#swcMIaA=gW1c*aJ z#sP~`m8_o2Q!Q-;ajKS^l`Oex)jFw?m2E>!s^mJ(%RFdAv^xJ7=tT|dkF00YRG2wW zm@}p3T%mcA#d)n_xlLBC-suYj*gh^BN^Qyv zgnvZ;*b`Uh3S3iFHkcd`g~%5oinjPV9gRdKn@v@Icgx_gzdH=Sy>a+08`ub~=Oe;6 zo1%%nABoFa$n9FDjm+YfdJ1u$3Df-fbFn|(I}#7*5 zq8^w^E)0>yA1%9CxicEUv}h?V7L{}+Vo2+ziq{p!WM+Yu&GlMl(rp6MAG+99hJYm_ z0<(>GKfQhN=H(B1Y`HC=>Z>F#HkFKKJJkkjST{-48ZB zq>RLV6h(DYZPG@p8!Y0o7Q3|Wy60&BR8{#hmdO_DFd2=$o9&F)gm-39&-m53WUc_K z@=;dIcfe`=%qKZ$oHrd$HLsFX>NPN)b&iR=u-!4-X6d##t=MK+DCO2r6S!YWlPY7( z(xi4)f!TqQX=$_5B8f*^@`&T-($i+tOHu(PR?b+Guw;$fW`|$qN>o+e?+a2)O?Ett~?pUYO zuKg3sA>(gmjUH`XVgLU4;mw=xuzTN~y@qjjeQYbe+kYo+bnL`n^uzAxLwm;0x-;+H(z{t8{mU$o9z z%o;j#))h85QTJO}S?Lp#Mm-)3XxGv^J==ld!j137EbD!ItC76?91HP2GPIDBV>7OI zkS}krj+dWf7g}Ox7)Li4#>u2R=wEFYW3mhS@OEL=8Anr-r#OE#K)FH4YQogFKTV76xhFYI}rR;GbZ$0R&`RhR`3}6>}4lldd&@>wpo`tkFLj zbGs+5du}NZ-5H?=ogHw{1D$^i3<}MRba!w@v-NYLmiN4sBDZvbp1M9VZ24K(p zW4dXA_Xb)y;Hb`8<>e(&*h2Nu*oQLT9?(ZDt4dYT1QRjaA+im zfC!y|kbNwGeJaEQfG z>#Mv;&+U>~a*LpeuVXOKvhI6HK@_=K zbJQadqZ6V_m|~#u7+01X2d0R@7W&?5kN=f5!VgKXFji@@DzwQRyum8_z~N!DT0hkM zCdZ5P*idQwmS*x3{H!^#_BoTtE<(zS9T_3 z8%*tT7#`>{4W`t!>l&ckA}ar?^F&d8@;H5b+?^*KJg@~c zi$Yz+rIc=?K+8oL^G!_z1XFezsEDwf7r8wxaG=^c;)Nnh5G~w_psHq@2L6KeTINL| z>;2z1Sg^o}ELEdAq0qS#T}0=IHf7}|0^^@chv-qr3l}vZ3UoV*z6T*rzL;|*@&y|M z1<8{}y3DLbmz~iNYqURN%4x!}CA1A5b<1qhbcdB}90__kTA&a{qIO+rh~^~XowZnB z;aG9f9Q96?d;xF5m7|QDTOm>eVKT4($P!z5>3|N2U8Y&C+cJ@dW2!9ymN5`$fLK}v z9<6xn8s@5w9(B>maI$EjRJ84dPF_xjPdR4Uh=1P~u7inJcF}ffyvKyoe#Hp+VRJqomCxBtZ&GFe^~_MEBq04p zc_lqpY|nk_9LAxush`<&EwH=Q%L5RgAc4o$g>-eVeX9ij{Uo=&BHmj4p$Kt`s-V-1E z&}t`OdknVp-3B}N^o)yFZ{Hd^EXIzmo7rhbVgIHUls{{^BDt%(nLqR}U@|6ICX*py zrhm6E)8oAp@nA~R<8Dpv>HJ?HxA^+AVys@V(-#gsgbG1=4h5uwk|O?n14My{$RPnZ zc2|jGp-PqvZs6^ZPXnSMvc&bd;=VpesDhU+$3fP@kivIMnub(&RmUB8fEtSF*txTw z$3Fe6pI}hs;EsOxLdQ<#Aw_YGix9DtCB%&r@$_pH83C#uFz`v9fr#A&#f?-@e}2 z)G`b4V1Gf6thHnR%wxSbYW}8#_LZjBuxunXf+!F*cp((m*Q>cI9Oy$2w6lDPfvSU7 zDpV$);M(XW48`f^PeAzehK%#6kVUp-^r4~)Iofi7>>16qBYCJJ?uuj;j0qx(Ns&4C z_jw|!(v4n|_Ff3jjRN;%%5D&}*9}}3BCO!UV#Mp*!GPKgTyXbN;M%wQ;EOmw;!B^s zf+m=v&XRz_79yNN-5ygK+XpyyE)6F{{Fb0wqRbSk0qyB#v9fK@sZP~e;{^fsY30Js|-RewFCsl74`m~FGel!kdcs%VrKk_3C%r)NnI02&j zdX)Xsth$VAx$5O*oK|k3zd#JH+MpP|+KExhE8Nhf7k?_te?+GoeYi8eU3JQo;1P_r z3ayx)_IRzT#y)@1WU;IN^k2Pvdg91V@DA!0wX`*Pt3gHq4`}sUN9zvY4RH7Fy%Uw0 zC!(j&9y5~f(1chgb2*QXGPtv(W|#rzb-+_K%J+zX7;Usy3OjYR}eJ7%4f1$W`~_43vIaDZC30MK^;4=QF7OjhM7yo>Y+@I z{7zRTVEx!Ct$DGN5(ic%#|uhQE~Tn)iEDdlfhwMxMyosvRKqK0_Btv&2u**y{nUwL zq?{~c5{KS|_76xy2QaiviN|Ih@&(B~_N4FO8xT{b*EXDo#y6HAqJ~`{H5t!MA*yhI z1?^zD?%o2jP}$gy{?Ualy85=dYYn=Q>tvaXJ2s2Z) zbh)d6Bf5z(d z041AidKtz0@~03y(L}t~GUNt4mXyePQrO9PfX>5Uk{f-Arl(`@`2Pz-+RqK?eiKwBo#JV8Nv!*Aew?J2qGbUkXc0BDp zq$IwB5X0^a9j@nUp5R9I843%ve@dMW0NGxE_znvwlucX8-O;I2JeCc$yi0D(@hPAaIN&g){Z<)f| zIxVg7C}NHW67&-f9H$EvH%@`TY>}l3A3M?tdnhF$g!y#mg3!`mi@?TlWa7tb%!yv+ znN<9@8)$IMCQnf^c3)@XqRpDn> zdjbzR@k=8l$mUQTq6@V!KPqa@lSW)6wSf21sk8)9CEthGeKDCoCJMXJOkv0Py%atI z@iAT)f%IQC`vC^c-&c!WlB2ux{NVgP`16N18VwHJ+RHj!rFlYbD5sxFv_cqbxvJf{ TCZer=c;Z*~n$_`NH;w)eyn6{0 diff --git a/tests/cptr.c b/tests/cptr.c new file mode 100644 index 0000000..a92ec09 --- /dev/null +++ b/tests/cptr.c @@ -0,0 +1 @@ +static const char *str = "..."; diff --git a/tests/cptr.cocci b/tests/cptr.cocci new file mode 100644 index 0000000..4f6bef1 --- /dev/null +++ b/tests/cptr.cocci @@ -0,0 +1,7 @@ +@@ +identifier str; +expression E; +@@ +-static const char *str ++static const char * const str + = E; diff --git a/tests/cptr.res b/tests/cptr.res new file mode 100644 index 0000000..63d35ac --- /dev/null +++ b/tests/cptr.res @@ -0,0 +1 @@ +static const char * const str = "..."; diff --git a/tests/fortype.c b/tests/fortype.c new file mode 100644 index 0000000..b85617c --- /dev/null +++ b/tests/fortype.c @@ -0,0 +1,4 @@ +int main () { + for (int x = 0; x!=10; x++) + return x; +} diff --git a/tests/fortype.cocci b/tests/fortype.cocci new file mode 100644 index 0000000..d5e2f6a --- /dev/null +++ b/tests/fortype.cocci @@ -0,0 +1,15 @@ +@@ +@@ + +- x ++ y + +@@ +identifier x; +statement S; +@@ + +for ( +- int x ++ char *p + ; ...; ...) S \ No newline at end of file diff --git a/tests/fortype.res b/tests/fortype.res new file mode 100644 index 0000000..1ed1af2 --- /dev/null +++ b/tests/fortype.res @@ -0,0 +1,4 @@ +int main () { + for (char * p = 0; y!=10; y++) + return y; +} diff --git a/tools/Makefile b/tools/Makefile index e86f2fb..53cc4a1 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -26,8 +26,8 @@ ifneq ($(MAKECMDGOALS),distclean) include ../Makefile.config endif -OCAMLCFLAGS ?= -g -dtypes -OPTFLAGS ?= -g -dtypes +OCAMLCFLAGS ?= -g +OPTFLAGS ?= -g PROGS=spp gitgrep splitpatch extract_c_and_res #generate_dependencies @@ -64,8 +64,8 @@ INCLUDE=-I ../commons -I ../extra -I ../parsing_c LIBS=../commons/commons.cma ../globals/globals.cma \ ../parsing_c/parsing_c.cma ../extra/extra.cma -OCAMLC_CMD=$(OCAMLC) -thread $(OCAMLCFLAGS) $(INCLUDE) -OCAMLOPT_CMD=$(OCAMLOPT) -thread $(OPTFLAGS) $(INCLUDE) +OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDE) +OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDE) OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDE) OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDE) OCAMLYACC_CMD=$(OCAMLYACC) -v diff --git a/tools/splitpatch.ml b/tools/splitpatch.ml index 7774e4d..80d3ccd 100644 --- a/tools/splitpatch.ml +++ b/tools/splitpatch.ml @@ -267,6 +267,28 @@ let uctr = ref 0 let found_a_maintainer = ref false +let common_prefix l1 l2 = + let rec loop = function + ([],_) | (_,[]) -> [] + | (x::xs,y::ys) when x = y -> x :: (loop (xs,ys)) + | _ -> [] in + match loop (l1,l2) with + [] -> None + | res -> Some (String.concat "/" res) + +let find_common_path file cell = + let fs = Str.split (Str.regexp "/") file in + let rec loop = function + [] -> + let c1 = ref [] in + cell := ((ref file),c1)::!cell; + c1 + | (f,c1)::xs -> + (match common_prefix fs (Str.split (Str.regexp "/") !f) with + None -> loop xs + | Some cp -> f := cp; c1) in + loop !cell + let resolve_maintainers patches = let maintainer_table = Hashtbl.create (List.length patches) in List.iter @@ -298,7 +320,8 @@ let resolve_maintainers patches = let cell = ref [] in Hashtbl.add maintainer_table info cell; cell in - cell := (file,(diff_line :: rest)) :: !cell + let cell1 = find_common_path file cell in + cell1 := (file,(diff_line :: rest)) :: !cell1 | _ -> failwith "filename not found") | _ -> failwith (Printf.sprintf "prefix a/ not found in %s" diff_line)) @@ -308,32 +331,6 @@ let resolve_maintainers patches = (* ------------------------------------------------------------------------ *) -let common_prefix l1 l2 = - let rec loop = function - ([],_) | (_,[]) -> [] - | (x::xs,y::ys) when x = y -> x :: (loop (xs,ys)) - | _ -> [] in - match loop (l1,l2) with - [] -> - failwith - (Printf.sprintf "found nothing in common for %s and %s" - (String.concat "/" l1) (String.concat "/" l2)) - | res -> res - -let merge_files the_rest = function - [l] -> l - | files -> - let butlast l = if the_rest then l else List.rev(List.tl(List.rev l)) in - match List.map (function s -> Str.split (Str.regexp "/") s) files with - first::rest -> - let rec loop res = function - [] -> String.concat "/" res - | x::rest -> loop (common_prefix res x) rest in - loop (butlast first) rest - | _ -> failwith "not possible" - -(* ------------------------------------------------------------------------ *) - let print_all o l = List.iter (function x -> Printf.fprintf o "%s\n" x) l @@ -351,37 +348,42 @@ let make_mail_header o date maintainers ctr number subject = else Printf.fprintf o "Subject: [PATCH %d/%d] %s\n\n" ctr number subject let make_message_files subject cover message date maintainer_table - patch front add_ext = + patch front add_ext nomerge = let ctr = ref 0 in let elements = Hashtbl.fold (function (services,maintainers) -> function diffs -> function rest -> - if services=[default_string] + if services=[default_string] or nomerge then (* if no maintainer, then one file per diff *) + let diffs = + List.concat + (List.map (function (common,diffs) -> !diffs) !diffs) in (List.map (function (file,diff) -> ctr := !ctr + 1; - (!ctr,true,maintainers,[file],[diff])) - (List.rev !diffs)) @ + (file,(!ctr,true,maintainers,[file],[diff]))) + (List.rev diffs)) @ rest else - begin - ctr := !ctr + 1; - let (files,diffs) = List.split (List.rev !diffs) in - (!ctr,false,maintainers,files,diffs)::rest - end) + (List.map + (function (common,diffs) -> + ctr := !ctr + 1; + let (files,diffs) = List.split (List.rev !diffs) in + (!common,(!ctr,false,maintainers,files,diffs))) + !diffs) @ + rest) maintainer_table [] in let number = List.length elements in let generated = List.map - (function (ctr,the_rest,maintainers,files,diffs) -> + (function (common,(ctr,the_rest,maintainers,files,diffs)) -> let output_file = add_ext(Printf.sprintf "%s%d" front ctr) in let o = open_out output_file in make_mail_header o date maintainers ctr number - (Printf.sprintf "%s: %s" (merge_files the_rest files) subject); + (Printf.sprintf "%s: %s" common subject); print_all o message; Printf.fprintf o "\n---\n"; let (nm,o1) = Filename.open_temp_file "patch" "patch" in @@ -455,7 +457,7 @@ let generate_command front cover generated = (String.concat " " ((front^".cover") :: generated))); close_out o -let make_output_files subject cover message maintainer_table patch = +let make_output_files subject cover message maintainer_table patch nomerge = let date = List.hd (cmd_to_list "date") in let front = safe_chop_extension patch in let add_ext = @@ -464,18 +466,22 @@ let make_output_files subject cover message maintainer_table patch = | None -> (function s -> s) in let generated = make_message_files subject cover message date maintainer_table - patch front add_ext in + patch front add_ext nomerge in make_cover_file (List.length generated) subject cover front date maintainer_table; generate_command front cover generated (* ------------------------------------------------------------------------ *) +let nomerge = ref false + let parse_args l = let (other_args,files) = - List.partition - (function a -> String.length a > 1 && String.get a 0 = '-') + List.partition (function a -> String.length a > 1 && String.get a 0 = '-') l in + let (nomergep,other_args) = + List.partition (function a -> a = "-nomerge") other_args in + (if not(nomergep = []) then nomerge := true); match files with [file] -> (file,String.concat " " other_args) | _ -> failwith "Only one file allowed" @@ -494,4 +500,4 @@ let _ = let maintainer_table = resolve_maintainers patches in (if !found_a_maintainer = false then git_options := !not_linux); (if not (git_args = "") then git_options := !git_options^" "^git_args); - make_output_files subject cover message maintainer_table file + make_output_files subject cover message maintainer_table file !nomerge diff --git a/version b/version index 6187c95..d65492e 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.0.0-rc14 \ No newline at end of file +1.0.0-rc15 \ No newline at end of file -- 2.20.1