From 174d164065f16d4a54fd565b9cae251e89a5095e Mon Sep 17 00:00:00 2001 From: Coccinelle Date: Sun, 3 Oct 2010 14:03:59 +0200 Subject: [PATCH] Release coccinelle-0.2.3rc3 Release Candidate 3 for coccinelle-0.2.3 --- Makefile | 33 +- Makefile.dev | 42 +- Makefile.release | 20 +- authors.txt | 5 + changes.txt | 8 +- cocci.ml | 150 +-- commitmsg | 4 +- configure | 60 +- demos/ocaml.c | 4 + demos/ocaml.cocci | 34 + demos/ocaml1.c | 4 + demos/ocaml1.cocci | 28 + demos/pg.c | 3 + demos/pg.cocci | 17 + docs/manual/cocci_syntax.tex | 3 +- docs/manual/macros.tex | 2 +- docs/manual/main_grammar.pdf | Bin 325745 -> 325812 bytes docs/manual/manual.pdf | Bin 428934 -> 429003 bytes docs/manual/options.pdf | Bin 133058 -> 133904 bytes docs/spatch.1.in | 4 +- globals/config.ml.in | 3 +- globals/flag.ml | 5 + install.txt | 108 ++- ocaml/Makefile | 92 ++ ocaml/coccilib.ml | 19 + ocaml/coccilib.mli | 17 + ocaml/no_prepare_ocamlcocci.ml | 25 + ocaml/ocamlcocci_aux.ml | 35 + ocaml/prepare_ocamlcocci.ml | 1 + ocaml/prepare_ocamlcocci.mli | 8 + ocaml/run_ocamlcocci.ml | 38 + ocaml/yes_prepare_ocamlcocci.ml | 213 +++++ parsing_c/control_flow_c_build.ml | 6 +- parsing_c/unparse_cocci.ml | 2 +- parsing_cocci/ast0_cocci.ml | 9 +- parsing_cocci/ast0_cocci.mli | 9 +- parsing_cocci/ast_cocci.ml | 19 +- parsing_cocci/ast_cocci.mli | 18 +- parsing_cocci/free_vars.ml | 15 +- parsing_cocci/get_constants2.ml | 8 +- parsing_cocci/parse_aux.ml | 27 +- parsing_cocci/parse_cocci.ml | 59 +- parsing_cocci/parser_cocci_menhir.ml | 1277 +++++++++++++------------ parsing_cocci/parser_cocci_menhir.mli | 2 +- parsing_cocci/parser_cocci_menhir.mly | 9 +- parsing_cocci/pretty_print_cocci.ml | 6 +- parsing_cocci/unitary_ast0.ml | 4 +- pycaml/Makefile | 1 + python/no_pycocci.ml | 2 +- python/yes_pycocci.ml | 4 +- readme.txt | 5 + scripts/spatch.bash_completion | 99 ++ test.ml | 72 ++ testing.ml | 11 + tests/condexp.c | 13 + tests/condexp.cocci | 10 + tests/condexp.res | 13 + 57 files changed, 1813 insertions(+), 872 deletions(-) create mode 100644 demos/ocaml.c create mode 100644 demos/ocaml.cocci create mode 100644 demos/ocaml1.c create mode 100644 demos/ocaml1.cocci create mode 100644 demos/pg.c create mode 100644 demos/pg.cocci rewrite install.txt (69%) create mode 100644 ocaml/Makefile create mode 100644 ocaml/coccilib.ml create mode 100644 ocaml/coccilib.mli create mode 100644 ocaml/no_prepare_ocamlcocci.ml create mode 100644 ocaml/ocamlcocci_aux.ml create mode 120000 ocaml/prepare_ocamlcocci.ml create mode 100644 ocaml/prepare_ocamlcocci.mli create mode 100644 ocaml/run_ocamlcocci.ml create mode 100644 ocaml/yes_prepare_ocamlcocci.ml create mode 100644 scripts/spatch.bash_completion create mode 100644 tests/condexp.c create mode 100644 tests/condexp.cocci create mode 100644 tests/condexp.res diff --git a/Makefile b/Makefile index 2761047..6e07dfa 100644 --- a/Makefile +++ b/Makefile @@ -60,14 +60,14 @@ endif SEXPSYSCMA=bigarray.cma nums.cma -SYSLIBS=str.cma unix.cma $(SEXPSYSCMA) $(PYCMA) +SYSLIBS=str.cma unix.cma $(SEXPSYSCMA) $(PYCMA) dynlink.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 \ engine/cocciengine.cma popl09/popl.cma \ - extra/extra.cma python/coccipython.cma + extra/extra.cma python/coccipython.cma ocaml/cocciocaml.cma # Should we use the local version of pycaml ifeq ("$(PYCAMLDIR)","pycaml") @@ -77,8 +77,8 @@ LOCALPYCAML= endif # Should we use the local version of menhirLib -ifeq ("$(MENHIRDIR)","menhirLib") -LOCALMENHIR=menhirLib +ifeq ("$(MENHIRDIR)","menhirlib") +LOCALMENHIR=menhirlib else LOCALMENHIR= endif @@ -90,14 +90,21 @@ else LOCALSEXP= endif -#used for clean: and depend: and a little for rec & rec.opt +# used for depend: and a little for rec & rec.opt MAKESUBDIRS=$(LOCALPYCAML) $(LOCALSEXP) commons \ globals $(LOCALMENHIR) ctl parsing_cocci parsing_c \ - engine popl09 extra python + engine popl09 extra python ocaml + +# used for clean: +# It is like MAKESUBDIRS but also +# force cleaning of local library copies +CLEANSUBDIRS=pycaml ocamlsexp commons \ + globals menhirlib ctl parsing_cocci parsing_c \ + engine popl09 extra python ocaml INCLUDEDIRSDEP=commons commons/ocamlextra $(LOCALSEXP) \ globals $(LOCALMENHIR) $(LOCALPYCAML) ctl \ - parsing_cocci parsing_c engine popl09 extra python + parsing_cocci parsing_c engine popl09 extra python ocaml INCLUDEDIRS=$(INCLUDEDIRSDEP) $(SEXPDIR) $(MENHIRDIR) $(PYCAMLDIR) @@ -198,7 +205,7 @@ $(MAKESUBDIRS:%=%.opt): # python:pycaml parsing_cocci parsing_c clean:: - set -e; for i in $(MAKESUBDIRS); do $(MAKE) -C $$i $@; done + set -e; for i in $(CLEANSUBDIRS); do $(MAKE) -C $$i $@; done $(MAKE) -C demos/spp $@ $(LIBS): $(MAKESUBDIRS) @@ -308,12 +315,19 @@ clean:: install-common: mkdir -p $(DESTDIR)$(BINDIR) mkdir -p $(DESTDIR)$(LIBDIR) - mkdir -p $(DESTDIR)$(SHAREDIR) + mkdir -p $(DESTDIR)$(SHAREDIR)/ocaml mkdir -p $(DESTDIR)$(MANDIR)/man1 $(INSTALL_DATA) standard.h $(DESTDIR)$(SHAREDIR) $(INSTALL_DATA) standard.iso $(DESTDIR)$(SHAREDIR) + $(INSTALL_DATA) ocaml/coccilib.cmi $(DESTDIR)$(SHAREDIR)/ocaml/ $(INSTALL_DATA) docs/spatch.1 $(DESTDIR)$(MANDIR)/man1/ @if [ $(FEATURE_PYTHON) -eq 1 ]; then $(MAKE) install-python; fi + @if [ -d $(BASH_COMPLETION_DIR) ]; then $(MAKE) install-bash; fi + +install-bash: + mkdir -p $(DESTDIR)$(BASH_COMPLETION_DIR) + $(INSTALL_DATA) scripts/spatch.bash_completion \ + $(DESTDIR)$(BASH_COMPLETION_DIR)/spatch install-python: mkdir -p $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui @@ -366,6 +380,7 @@ uninstall: rm -f $(DESTDIR)$(SHAREDIR)/spatch.opt rm -f $(DESTDIR)$(SHAREDIR)/standard.h rm -f $(DESTDIR)$(SHAREDIR)/standard.iso + rm -f $(DESTDIR)$(SHAREDIR)/ocaml/coccilib.cmi rm -f $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui/* rm -f $(DESTDIR)$(SHAREDIR)/python/coccilib/*.py rmdir --ignore-fail-on-non-empty -p \ diff --git a/Makefile.dev b/Makefile.dev index 0534424..5d857da 100644 --- a/Makefile.dev +++ b/Makefile.dev @@ -10,11 +10,19 @@ website: cp $(TMP)/$(PACKAGE).tgz $(WEBSITE) cp $(TMP)/$(PACKAGE)-bin-x86.tgz $(WEBSITE) cp $(TMP)/$(PACKAGE)-bin-x86-static.tgz $(WEBSITE) - cp $(TMP)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz $(WEBSITE) - rm -f $(WEBSITE)/LATEST* $(WEBSITE)/coccinelle-latest.tgz - cp changes.txt $(WEBSITE)/changes-$(VERSION).txt - cd $(WEBSITE); touch LATEST_IS_$(VERSION); ln -s $(PACKAGE).tgz coccinelle-latest.tgz - cp readme.txt $(WEBSITE) + cp $(TMP)/$(PACKAGE)-bin-x86-python.tgz $(WEBSITE) + cp $(TMP)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz $(WEBSITE) + cp $(TMP)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION)-python.tgz $(WEBSITE) + cvs add $(WEBSITE)/$(PACKAGE).tgz \ + $(WEBSITE)/$(PACKAGE)-bin-x86.tgz \ + $(WEBSITE)/$(PACKAGE)-bin-x86-static.tgz \ + $(WEBSITE)/$(PACKAGE)-bin-x86-python.tgz \ + $(WEBSITE)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz \ + $(WEBSITE)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION)-python.tgz +# rm -f $(WEBSITE)/LATEST* $(WEBSITE)/coccinelle-latest.tgz +# cp changes.txt $(WEBSITE)/changes-$(VERSION).txt +# cd $(WEBSITE); touch LATEST_IS_$(VERSION); ln -s $(PACKAGE).tgz coccinelle-latest.tgz +# cp readme.txt $(WEBSITE) #TXT=$(wildcard *.txt) @@ -42,3 +50,27 @@ diff_darcs: gitupdate: git cvsimport -d :ext:topps:/var/cvs/cocci coccinelle +UBUNTU=karmic lucid +UBUNTURELEASE=$(UBUNTU:%=ubuntu-%) + +.PHONY:: ubuntu $(UBUNTURELEASE) + +ubuntu: + for r in $(UBUNTURELEASE); do $(MAKE) $$r ; done + +#$(UBUNTURELEASE): +# debchange -c debian/changelog.karmic -D karmic -v $(VERSION).deb-0~$(@:ubuntu-%=%)~npalix1 "New release $(VERSION)" + +ubuntu-karmic: + debchange -c debian/changelog.karmic -D karmic -v $(VERSION).deb-0~910npalix1 "New release $(VERSION)" + +ubuntu-lucid: + debchange -c debian/changelog.lucid -D lucid -v $(VERSION).deb-0~1004npalix1 "New release $(VERSION)" + +ubuntu-maverik: + if [ ! -f debian/changelog.$(@:ubuntu-%=%) ] ; then \ + debchange --create -c debian/changelog.$(@:ubuntu-%=%) -D UNRELEASED \ + -v $(VERSION).deb-0~npalix1 "New release $(VERSION)" --package $(PRJNAME) ; \ + else \ + debchange -c debian/changelog.$(@:ubuntu-%=%) -D UNRELEASED -v $(VERSION).deb-0~npalix1 "New release $(VERSION)" ; \ + fi diff --git a/Makefile.release b/Makefile.release index d3a5c0b..cd35e58 100644 --- a/Makefile.release +++ b/Makefile.release @@ -61,10 +61,13 @@ prerelease: cvs up -CdP $(MAKE) distclean sed -i "s|^OCAMLCFLAGS=.*$$|OCAMLCFLAGS=|" Makefile + @echo "\n\tEdit globals/config.ml.in" + @echo "\tCommit with 'make release'\n" release: cvs ci -m "Release $(VERSION)" globals/config.ml.in $(MAKE) licensify + @echo "\n\tRun 'make package'\n" package: $(MAKE) package-src @@ -100,15 +103,14 @@ package-python: # make clean is there to remove them while not removing the pdf # (only distclean remove the pdfs). srctar: - make distclean - make docs - make clean + $(MAKE) distclean + $(MAKE) docs + $(MAKE) clean cp -a . $(TMP)/$(PACKAGE) - cd $(TMP)/$(PACKAGE); cd parsing_cocci/; make parser_cocci_menhir.ml + cd $(TMP)/$(PACKAGE); cd parsing_cocci/; $(MAKE) parser_cocci_menhir.ml cd $(TMP); tar cvfz $(PACKAGE).tgz --exclude-vcs $(EXCL) $(PACKAGE) rm -rf $(TMP)/$(PACKAGE) - bintar: all rm -f $(TMP)/$(PACKAGE) ln -s `pwd` $(TMP)/$(PACKAGE) @@ -118,7 +120,7 @@ bintar: all staticbintar: all.opt rm -f $(TMP)/$(PACKAGE) ln -s `pwd` $(TMP)/$(PACKAGE) - make static + $(MAKE) static cd $(TMP); tar cvfz $(PACKAGE)-bin-x86-static.tgz --exclude-vcs $(BINSRC2) rm -f $(TMP)/$(PACKAGE) @@ -126,7 +128,7 @@ staticbintar: all.opt bytecodetar: all rm -f $(TMP)/$(PACKAGE) ln -s `pwd` $(TMP)/$(PACKAGE) - make purebytecode + $(MAKE) purebytecode cd $(TMP); tar cvfz $(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz --exclude-vcs $(BINSRC2) rm -f $(TMP)/$(PACKAGE) @@ -140,7 +142,7 @@ bintar-python: all bytecodetar-python: all rm -f $(TMP)/$(PACKAGE) ln -s `pwd` $(TMP)/$(PACKAGE) - make purebytecode + $(MAKE) purebytecode cd $(TMP); tar cvfz $(PACKAGE)-bin-bytecode-$(OCAMLVERSION)-python.tgz --exclude-vcs $(BINSRC2-PY) rm -f $(TMP)/$(PACKAGE) @@ -207,6 +209,7 @@ EXCL_SYNC=--exclude ".git" \ packsrc: prepack $(MAKE) -C $(TMP)/$(PACKAGE)/debian lucid $(MAKE) -C $(TMP)/$(PACKAGE)/debian karmic +# $(MAKE) -C $(TMP)/$(PACKAGE)/debian maverik $(MAKE) push rm -rf $(TMP)/$(PACKAGE)/ @@ -226,3 +229,4 @@ push: rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*_source.$(PRJNAME).upload rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*.dsc rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*.tar.gz + diff --git a/authors.txt b/authors.txt index d553352..c1e93eb 100644 --- a/authors.txt +++ b/authors.txt @@ -31,6 +31,11 @@ Here are the authors and maintainers of the different parts of coccinelle: - python/ (python SmPL extension and a coccinelle GUI) +* Nicolas Palix + +- ocaml/ (OCaml SmPL extension) +- scripts/spatch.bash_completion + * All - tests/ demos/ diff --git a/changes.txt b/changes.txt index be3440a..2db95f2 100644 --- a/changes.txt +++ b/changes.txt @@ -23,6 +23,7 @@ - identifiers can be constrained to be different from an inherited identifier metavariable, or from a set containing both concrete identifiers and inherited identifier metavariables. +- support for ocaml scripting ** Features: - drop inconsistent paths check when only one node was matched @@ -38,8 +39,10 @@ - Add a new option, -ignore_unknown_options, to ease the integration of Coccinelle as a checker in a toolchain. - error in python code causes immediate abort of spatch -- use the same algorithm for collecing grep tokens as for collecting +- use the same algorithm for collecting grep tokens as for collecting glimpse tokens +- Add scripts/spatch.bash_completion for automatic completion of common + options under the bash shell. ** Bugfix: - drop inconsistent paths check when only one node was matched @@ -61,6 +64,9 @@ - matching and transformation allowed on inline - allow removed field between two ... in structure initialization - allow removing an entire structure initialization +- manage labels within do while 0 macros +- added space after : in printing a conditional expression. Thanks to Josh + Triplett for noticing the problem. * 0.2.2 ** Language: diff --git a/cocci.ml b/cocci.ml index 6f3ee5b..a43055e 100644 --- a/cocci.ml +++ b/cocci.ml @@ -69,7 +69,14 @@ let _hctl = Hashtbl.create 101 (* --------------------------------------------------------------------- *) let sp_of_file2 file iso = Common.memoized _hparse (file, iso) (fun () -> - Parse_cocci.process file iso false) + let (_,xs,_,_,_,_,_,_) as res = Parse_cocci.process file iso false in + (match Prepare_ocamlcocci.prepare file xs with + None -> () + | Some ocaml_script_file -> + (* compile file *) + Prepare_ocamlcocci.load_file ocaml_script_file; + Prepare_ocamlcocci.clean_file ocaml_script_file); + res) let sp_of_file file iso = Common.profile_code "parse cocci" (fun () -> sp_of_file2 file iso) @@ -748,7 +755,10 @@ type toplevel_c_info = { } type toplevel_cocci_info_script_rule = { - scr_ast_rule: string * (string * Ast_cocci.meta_name) list * string; + scr_rulename: string; + scr_ast_rule: + string * (string * Ast_cocci.meta_name * Ast_cocci.metavar) list * + string; language: string; scr_dependencies: Ast_cocci.dependency; scr_ruleid: int; @@ -843,9 +853,10 @@ let python_code = local_python_code ^ "cocci = Cocci()\n" -let make_init rulenb lang deps code = +let make_init name rulenb lang deps code = let mv = [] in { + scr_rulename = name; scr_ast_rule = (lang, mv, code); language = lang; scr_dependencies = deps; @@ -876,9 +887,10 @@ let prepare_cocci ctls free_var_lists negated_pos_lists then failwith "not handling multiple minirules"; match ast with - Ast_cocci.ScriptRule (lang,deps,mv,code) -> + Ast_cocci.ScriptRule (name,lang,deps,mv,code) -> let r = { + scr_rulename = name; scr_ast_rule = (lang, mv, code); language = lang; scr_dependencies = deps; @@ -886,13 +898,14 @@ let prepare_cocci ctls free_var_lists negated_pos_lists script_code = code; } in ScriptRuleCocciInfo r - | Ast_cocci.InitialScriptRule (lang,deps,code) -> - let r = make_init rulenb lang deps code in + | Ast_cocci.InitialScriptRule (name,lang,deps,code) -> + let r = make_init name rulenb lang deps code in InitialScriptRuleCocciInfo r - | Ast_cocci.FinalScriptRule (lang,deps,code) -> + | Ast_cocci.FinalScriptRule (name,lang,deps,code) -> let mv = [] in let r = { + scr_rulename = name; scr_ast_rule = (lang, mv, code); language = lang; scr_dependencies = deps; @@ -1140,9 +1153,25 @@ let merge_env new_e old_e = ([],old_e) new_e in old_e @ (List.rev ext) -let apply_python_rule r cache newes e rules_that_have_matched - rules_that_have_ever_matched = - Common.profile_code "python" (fun () -> +let contains_binding e (_,(r,m),_) = + try + let _ = List.find (function ((re, rm), _) -> r =*= re && m =$= rm) e in + true + with Not_found -> false + +let python_application mv ve r = + Pycocci.build_classes (List.map (function (x,y) -> x) ve); + Pycocci.construct_variables mv ve; + let _ = Pycocci.pyrun_simplestring (local_python_code ^r.script_code) in + !Pycocci.inc_match + +let ocaml_application mv ve r = + Run_ocamlcocci.run mv ve r.scr_rulename r.script_code; + !Coccilib.inc_match + +let apply_script_rule r cache newes e rules_that_have_matched + rules_that_have_ever_matched script_application = + Common.profile_code r.language (fun () -> show_or_not_scr_rule_name r.scr_ruleid; if not(interpret_dependencies rules_that_have_matched !rules_that_have_ever_matched r.scr_dependencies) @@ -1160,47 +1189,41 @@ let apply_python_rule r cache newes e rules_that_have_matched let ve = (List.map (function (n,v) -> (("virtual",n),Ast_c.MetaIdVal (v,[]))) !Flag.defined_virtual_env) @ e in - let not_bound x = not (Pycocci.contains_binding ve x) in + let not_bound x = not (contains_binding ve x) in (match List.filter not_bound mv with [] -> let relevant_bindings = List.filter (function ((re,rm),_) -> - List.exists (function (_,(r,m)) -> r =*= re && m =$= rm) mv) + List.exists (function (_,(r,m),_) -> r =*= re && m =$= rm) mv) e in - let new_cache = - if List.mem relevant_bindings cache - then - begin - print_dependencies - "dependencies for script satisfied, but cached:" - rules_that_have_matched - !rules_that_have_ever_matched - r.scr_dependencies; - show_or_not_binding "in" e; - cache - end - else - begin - print_dependencies "dependencies for script satisfied:" - rules_that_have_matched - !rules_that_have_ever_matched - r.scr_dependencies; - show_or_not_binding "in" e; - Pycocci.build_classes (List.map (function (x,y) -> x) ve); - Pycocci.construct_variables mv ve; - let _ = - Pycocci.pyrun_simplestring - (local_python_code ^r.script_code) in - relevant_bindings :: cache - end in - if !Pycocci.inc_match - then (new_cache, merge_env [(e, rules_that_have_matched)] newes) - else (new_cache, newes) + if List.mem relevant_bindings cache + then + begin + print_dependencies + "dependencies for script satisfied, but cached:" + rules_that_have_matched + !rules_that_have_ever_matched + r.scr_dependencies; + show_or_not_binding "in" e; + (cache,newes) + end + else + begin + print_dependencies "dependencies for script satisfied:" + rules_that_have_matched + !rules_that_have_ever_matched + r.scr_dependencies; + show_or_not_binding "in" e; + let new_cache = relevant_bindings :: cache in + if script_application mv ve r + then (new_cache, merge_env [(e, rules_that_have_matched)] newes) + else (new_cache, newes) + end | unbound -> (if !Flag_cocci.show_dependencies then - let m2c (_,(r,x)) = r^"."^x in + let m2c (_,(r,x),_) = r^"."^x in pr2 (Printf.sprintf "script not applied: %s not bound" (String.concat ", " (List.map m2c unbound)))); (cache, merge_env [(e, rules_that_have_matched)] newes)) @@ -1511,7 +1534,7 @@ let rec bigloop2 rs (ccs: file_info list) = let (l,mv,code) = r.scr_ast_rule in let deps = r.scr_dependencies in Pretty_print_cocci.unparse - (Ast_cocci.ScriptRule (l,deps,mv,code))); + (Ast_cocci.ScriptRule ("",l,deps,mv,code))); end; if !Flag.show_misc then print_endline "RESULT ="; @@ -1522,8 +1545,11 @@ let rec bigloop2 rs (ccs: file_info list) = function (e, rules_that_have_matched) -> match r.language with "python" -> - apply_python_rule r cache newes e rules_that_have_matched - rules_that_have_ever_matched + apply_script_rule r cache newes e rules_that_have_matched + rules_that_have_ever_matched python_application + | "ocaml" -> + apply_script_rule r cache newes e rules_that_have_matched + rules_that_have_ever_matched ocaml_application | "test" -> concat_headers_and_c !ccs +> List.iter (fun (c,_) -> if c.flow <> None @@ -1532,8 +1558,7 @@ let rec bigloop2 rs (ccs: file_info list) = (cache, newes) | _ -> Printf.printf "Unknown language: %s\n" r.language; - (cache, newes) - ) + (cache, newes)) ([],[]) !es in es := (if newes = [] then init_es else newes); @@ -1559,11 +1584,14 @@ let rec bigloop2 rs (ccs: file_info list) = let bigloop a b = Common.profile_code "bigloop" (fun () -> bigloop2 a b) +type init_final = Initial | Final + let initial_final_bigloop2 ty rebuild r = if !Flag_cocci.show_ctl_text then begin Common.pr_xxxxxxxxxxxxxxxxx (); - pr (ty ^ ": " ^ r.language); + pr ((match ty with Initial -> "initial" | Final -> "final") ^ ": " ^ + r.language); Common.pr_xxxxxxxxxxxxxxxxx (); adjust_pp_with_indent (fun () -> @@ -1575,7 +1603,13 @@ let initial_final_bigloop2 ty rebuild r = "python" -> (* include_match makes no sense in an initial or final rule, although we have no way to prevent it *) - let _ = apply_python_rule r [] [] [] [] (ref []) in + let _ = apply_script_rule r [] [] [] [] (ref []) python_application in + () + | "ocaml" when ty = Initial -> () (* nothing to do *) + | "ocaml" -> + (* include_match makes no sense in an initial or final rule, although + we have no way to prevent it *) + let _ = apply_script_rule r [] [] [] [] (ref []) ocaml_application in () | _ -> Printf.printf "Unknown language for initial/final script: %s\n" @@ -1602,7 +1636,8 @@ let pre_engine2 (coccifile, isofile) = else Some isofile in (* useful opti when use -dir *) - let (metavars,astcocci,free_var_lists,negated_pos_lists,used_after_lists, + let (metavars,astcocci, + free_var_lists,negated_pos_lists,used_after_lists, positions_lists,toks,_) = sp_of_file coccifile isofile in let ctls = ctls_of_ast astcocci used_after_lists positions_lists in @@ -1641,9 +1676,9 @@ let pre_engine2 (coccifile, isofile) = if interpret_dependencies [] [] r.scr_dependencies then begin - initial_final_bigloop "initial" + initial_final_bigloop Initial (fun (x,_,y) -> fun deps -> - Ast_cocci.InitialScriptRule(x,deps,y)) + Ast_cocci.InitialScriptRule(r.scr_rulename,x,deps,y)) r; r.language::languages end @@ -1657,10 +1692,10 @@ let pre_engine2 (coccifile, isofile) = used_languages in List.iter (fun lgg -> - initial_final_bigloop "initial" + initial_final_bigloop Initial (fun (x,_,y) -> fun deps -> - Ast_cocci.InitialScriptRule(x,deps,y)) - (make_init (-1) lgg Ast_cocci.NoDep ""); + Ast_cocci.InitialScriptRule("",x,deps,y)) + (make_init "" (-1) lgg Ast_cocci.NoDep ""); ) uninitialized_languages; @@ -1741,8 +1776,9 @@ let post_engine2 (cocci_infos,_) = FinalScriptRuleCocciInfo(r) -> (if List.mem r.language languages then failwith ("double finalizer found for "^r.language)); - initial_final_bigloop "final" - (fun (x,_,y) -> fun deps -> Ast_cocci.FinalScriptRule(x,deps,y)) + initial_final_bigloop Final + (fun (x,_,y) -> fun deps -> + Ast_cocci.FinalScriptRule(r.scr_rulename,x,deps,y)) r; r.language::languages | _ -> languages) diff --git a/commitmsg b/commitmsg index 647fd7f..dd5b35f 100644 --- a/commitmsg +++ b/commitmsg @@ -1,3 +1,3 @@ -Release coccinelle-0.2.3rc2 +Release coccinelle-0.2.3rc3 -Release Candidate 2 for coccinelle-0.2.3 +Release Candidate 3 for coccinelle-0.2.3 diff --git a/configure b/configure index 4660d92..6d7d802 100755 --- a/configure +++ b/configure @@ -28,6 +28,7 @@ my $projectcmdline = my $prefix="/usr/local"; my $python=1; +my $noocamlscripting=0; my $opt=".opt"; my $tarzan=1; my $pydir="pycaml"; @@ -99,14 +100,20 @@ my $error = 0; #--------------------------------------------------------------------- # Compilers and runtimes #--------------------------------------------------------------------- + $error += check_config("echo \"1;;\\n\" | ocaml |", -# "Objective(.*) 3.0[9]", - "Objective(.*) 3.", + "Objective(.*) 3.\(09|1[0-9]\)", "OCaml (the wonderful language) is present.", "The program ocaml is missing or is not a good version. We need at least 3.09", ); +$noocamlscripting = check_config("echo \"1;;\\n\" | ocaml |", + "Objective(.*) 3.1[1-9]", + "OCaml >= 3.11 is present. OCaml scripting activated.", + "OCaml scripting disabled. We need at least OCaml 3.11", + ); + if ($opt eq ".opt") { my $opt_check = `which ocamlc.opt 2> /dev/null`; if($opt_check =~ "/ocamlc.opt\$") { @@ -189,7 +196,9 @@ my $syspydir=`ocamlfind query pycaml 2> /dev/null | xargs echo -n`; if($syspydir) { $pydir=$syspydir; - pr2 "'pycaml' library present in $pydir"; + pr2 "'pycaml' library is present in $pydir"; +} else { + pr2 "'pycaml' library is not present. A local copy will be used."; } # menhirLib. Runtime system for the parsers generated with menhir @@ -197,7 +206,9 @@ my $sysmenhirdir=`ocamlfind query menhirLib 2> /dev/null | xargs echo -n`; if($sysmenhirdir) { $menhirdir=$sysmenhirdir; - pr2 "'menhirLib' library present in $menhirdir"; + pr2 "'menhirLib' library is present in $menhirdir"; +} else { + pr2 "'menhirLib' library is not present. A local copy will be used.."; } # sexplib. Runtime system for the parsers generated with menhir @@ -205,7 +216,9 @@ my $syssexpdir=`ocamlfind query sexplib 2> /dev/null | xargs echo -n`; if($syssexpdir) { $sexpdir=$syssexpdir; - pr2 "'sexplib' library present in $sexpdir"; + pr2 "'sexplib' library is present in $sexpdir"; +} else { + pr2 "'sexplib' library is not present. A local copy will be used.."; } ###################################################################### @@ -235,12 +248,8 @@ on the $project website. !!!! "; } else { -#pad: before the message was saying (make depend); make all -# I found this confusing so I removed it. - - pr2 " - ----------------------------------------------------------------------- + pr2 +"---------------------------------------------------------------------- All seems fine for $project. @@ -265,18 +274,14 @@ Then, to test $project simply type: if($python) { pr2 "To use the python SmPL feature you may have to set some environment variables. +However, they are automatically set by the front-end installed in $prefix/bin. For bash do: export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$prefix/lib -export PYTHONPATH=\$PYTHONPATH:$src/python -" +export PYTHONPATH=\$PYTHONPATH:$src/python" } - pr2 " ----------------------------------------------------------------------- -"; + pr2 "----------------------------------------------------------------------"; } - - ###################################################################### # Generating the configuration ###################################################################### @@ -303,6 +308,8 @@ LIBDIR=$prefix/lib # Where to install the configuration files SHAREDIR=$src +BASH_COMPLETION_DIR=/etc/bash_completion.d + # Features FEATURE_PYTHON=$python FEATURE_TARZAN=$tarzan @@ -318,14 +325,19 @@ SEXPDIR=$sexpdir OPTBIN=$opt "; -pr2 "Modifying globals/config.ml"; -pr2 "Generating appropriate links in python/ (python=$python)"; -my $pythonprefix = $python ? "yes_" : "no_"; -`cd python; rm -f pycocci.ml pycocci_aux.ml;`; -`cd python; ln -s ${pythonprefix}pycocci.ml pycocci.ml; `; -`cd python; ln -s ${pythonprefix}pycocci_aux.ml pycocci_aux.ml;`; + +my $pythonprefix = $python ? "yes" : "no"; +pr2 "Support for python scripting : $pythonprefix"; +`cd python; ln -sf ${pythonprefix}_pycocci.ml pycocci.ml; `; +`cd python; ln -sf ${pythonprefix}_pycocci_aux.ml pycocci_aux.ml;`; `cd python; make depend`; +my $ocamlprefix = $noocamlscripting ? "no" : "yes"; +pr2 "Support for ocaml scripting : $ocamlprefix"; +`cd ocaml; ln -sf ${ocamlprefix}_prepare_ocamlcocci.ml prepare_ocamlcocci.ml;`; +`cd ocaml; make depend`; + +pr2 "Modifying globals/config.ml"; my $command = "perl -p -e 's#Not_found.\*#Not_found->\\\"$src\\\"#' globals/config.ml.in > globals/config.ml"; `$command`; diff --git a/demos/ocaml.c b/demos/ocaml.c new file mode 100644 index 0000000..01b003b --- /dev/null +++ b/demos/ocaml.c @@ -0,0 +1,4 @@ +int main() { + f(12,120); + f(27,270); +} diff --git a/demos/ocaml.cocci b/demos/ocaml.cocci new file mode 100644 index 0000000..fef53a7 --- /dev/null +++ b/demos/ocaml.cocci @@ -0,0 +1,34 @@ +@r@ +expression x,a; +position p1, p2; +@@ + +f(x@p1,a@p2) + +@script:ocaml@ +y << r.x; +yy << r.a; +p1 << r.p1; +p2 << r.p2; +@@ + +let p1_ = List.hd p1 in +let file1 = p1_.Coccilib.file in +let cure1 = p1_.Coccilib.current_element in +let line1 = p1_.Coccilib.line in +let line_end1 = p1_.Coccilib.line_end in +let colb1 = p1_.Coccilib.col in +let cole1 = p1_.Coccilib.col_end in + +Printf.printf "%s and %s\n" y yy; +Printf.printf + "%s @ p1 (file:\"%s\" fct:\"%s\" line:%d-%d col:%d-%d)\n" + y file1 cure1 line1 line_end1 colb1 cole1; +Printf.printf "%s @ p2 - p2 is not used in the SP. ocamlc should have reported a warning.\n" yy + +@script:ocaml@ +y << r.a; +zz << r.x; +@@ + +Printf.printf "%s again and %s again \n" zz y diff --git a/demos/ocaml1.c b/demos/ocaml1.c new file mode 100644 index 0000000..01b003b --- /dev/null +++ b/demos/ocaml1.c @@ -0,0 +1,4 @@ +int main() { + f(12,120); + f(27,270); +} diff --git a/demos/ocaml1.cocci b/demos/ocaml1.cocci new file mode 100644 index 0000000..205ef29 --- /dev/null +++ b/demos/ocaml1.cocci @@ -0,0 +1,28 @@ +@initialize:ocaml@ +let a = ref 0 +let _ = Printf.printf "starting ocaml\n" + +@r@ +expression x,a; +@@ + +f(x,a) + +@script:ocaml@ +y << r.x; +yy << r.a; +@@ + +a := !a + 1; +Printf.printf "%s and %s\n" y yy + +@script:ocaml@ +y << r.a; +zz << r.x; +@@ + +a := !a + 1; +Printf.printf "%s again and %s again \n" zz y + +@finalize:ocaml@ +Printf.printf "ending ocaml %d\n" !a diff --git a/demos/pg.c b/demos/pg.c new file mode 100644 index 0000000..3b51d08 --- /dev/null +++ b/demos/pg.c @@ -0,0 +1,3 @@ +int main() { + f(12,120); +} diff --git a/demos/pg.cocci b/demos/pg.cocci new file mode 100644 index 0000000..0f03b06 --- /dev/null +++ b/demos/pg.cocci @@ -0,0 +1,17 @@ +@initialize:ocaml@ +open Postgresql + +@r@ +expression x,a; +@@ + +f(x,a) + +@script:ocaml@ +y << r.x; +yy << r.a; +@@ +() + +@finalize:ocaml@ +() \ No newline at end of file diff --git a/docs/manual/cocci_syntax.tex b/docs/manual/cocci_syntax.tex index b179c41..0300f14 100644 --- a/docs/manual/cocci_syntax.tex +++ b/docs/manual/cocci_syntax.tex @@ -252,7 +252,8 @@ typing, metavariables for scripts do not include type declarations. \RULE{\rt{script\_metadecl}} \CASE{\T{id} <{}< \T{rulename\_id}.\T{id} ;} \end{grammar} -Currently, the only scripting language that is supported is Python. The +Currently, the only scripting languages that are supported are Python and +OCaml, indicated using {\tt python} and {\tt ocaml}, respectively. The set of available scripting languages may be extended at some point. Script rules declared with \KW{initialize} are run before the treatment of diff --git a/docs/manual/macros.tex b/docs/manual/macros.tex index 5001ca4..bc7e1ad 100644 --- a/docs/manual/macros.tex +++ b/docs/manual/macros.tex @@ -4,5 +4,5 @@ \newcommand{\cpp}{\texttt{cpp}\xspace} -\newcommand{\cocciversion}{0.2.2\xspace} +\newcommand{\cocciversion}{0.2.3\xspace} diff --git a/docs/manual/main_grammar.pdf b/docs/manual/main_grammar.pdf index fe91f2834286527442eaea0a29f4e8831fb36fa5..411d5499a09450321d73427b5125c3ad263f4058 100644 GIT binary patch delta 26195 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 delta 27118 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 J4!t^B{0|&!jZFXm diff --git a/docs/manual/manual.pdf b/docs/manual/manual.pdf index 7a0d3e01855d72749776d163588db6cbf54d5eda..876440a5c0048a949f8875636e9a9e6bb6824850 100644 GIT binary patch delta 33619 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�Sn$B*0tcI$kSQml|!UG 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 QW$*-kMDgO)>Q#^UKc-R%0RR91 diff --git a/docs/manual/options.pdf b/docs/manual/options.pdf index 814590eeb4556e921d02481a86fde1ab5f870a30..90bee69679facf0d13c6dd68d65b3f9596c06a90 100644 GIT binary patch delta 9396 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 Ap#T5? delta 9661 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 y^6~N=i1l-o!1%D*cBb@d(L=kR}1QJ0GV diff --git a/docs/spatch.1.in b/docs/spatch.1.in index 5459320..72a6780 100644 --- a/docs/spatch.1.in +++ b/docs/spatch.1.in @@ -88,10 +88,10 @@ works with -dir, use information generated by glimpseindex the output file. If none is specified, a patch is generated on the standard output .TP -.B -inplace +.B -in_place do the modification on the file directly .TP -.B -outplace +.B -out_place store modifications in a .cocci_res file .TP .B -version diff --git a/globals/config.ml.in b/globals/config.ml.in index 2134e4e..10cbb45 100644 --- a/globals/config.ml.in +++ b/globals/config.ml.in @@ -1,4 +1,4 @@ -let version = "0.2.3rc2" +let version = "0.2.3rc3" let path = try (Sys.getenv "COCCINELLE_HOME") @@ -6,3 +6,4 @@ let path = let std_iso = ref (Filename.concat path "standard.iso") let std_h = ref (Filename.concat path "standard.h") + diff --git a/globals/flag.ml b/globals/flag.ml index 982cfd3..2d39793 100644 --- a/globals/flag.ml +++ b/globals/flag.ml @@ -37,6 +37,11 @@ let scanner = ref Grep let pyoutput = ref "coccilib.output.Console" +let ocamlc = ref "ocamlc" +let ocamlopt = ref "ocamlopt" +let ocamldep = ref "ocamldep" +let ocamlfind = ref "ocamlfind" + (*"Some" value is the path with respect to which the patch should be created*) let patch = ref (None : string option) diff --git a/install.txt b/install.txt dissimilarity index 69% index 619665b..2ed11d8 100644 --- a/install.txt +++ b/install.txt @@ -1,38 +1,70 @@ -You must first install a recent version of - - OCaml (at least 3.09.2), - see http://caml.inria.fr/download.en.html - - the Menhir parser generator (at least 20080912), - see http://cristal.inria.fr/~fpottier/menhir/ - (unless you got a version of the coccinelle source with - the SmPL parser pre-generated) - - Python and its development files (python-dev) - (unless you run configure with the --without-python option) - - pdftk and graphviz (with PDF support) if you want to use - the -graphical_trace option - -Then simply type - ./configure - make depend - make - make install - - - - - -'make' will compile the bytecode version by default. -You could use 'make all.opt' to have the optimized version. -If you compile both, 'make install' will take care of that -and install both, spatch and spatch.opt. -If you use only one of them, 'make install' will install -the one you have compiled, either spatch ou spatch.opt, -under the front-end spatch. You could use 'make world' to -compile the bytecode and the optimized code version. - -We provide the files generated by menhir in the tarball. -However, 'make distclean' will remove them. You could -either restore them from the tarball or install menhir. -Using 'make clean' should be safe with regards to these files. - -Note: The test target is intended for developers. In particular, - you should not expect that every test will pass. + + ** Compilation ** + +You must first install a recent version of + - OCaml (at least 3.09.2), + see http://caml.inria.fr/download.en.html + At least, OCaml 3.11 is required to use the OCaml scripting + feature in the SmPL code. + - The Menhir parser generator (at least 20080912), + see http://cristal.inria.fr/~fpottier/menhir/ + (unless you got a version of the coccinelle source with + the SmPL parser pre-generated) + - Python and its development files (python-dev) + (unless you run configure with the --without-python option) + +Then simply type + ./configure + make depend + make + make install + + + + + +'make' will compile the bytecode version by default. You could use +'make all.opt' to have the optimized version. If you compile both, +'make install' will take care of that and install both, spatch and +spatch.opt. If you use only one of them, 'make install' will install +the one you have compiled, either spatch ou spatch.opt, under the +front-end spatch. You could use 'make world' to compile the bytecode +and the optimized code version. + +We provide the files generated by menhir in the tarball. However, +'make distclean' will remove them. You could either restore them from +the tarball or install menhir. Using 'make clean' should be safe with +regards to these files. + +Note: The test target is intended for developers. In particular, you + should not expect that every test will pass. + + + In order to use the OCaml scripting feature in SmPL, you must compile +Coccinelle with at least OCaml version 3.11. + + + ** Runtime dependencies ** + + - Basic shell commands: + - ls, cat, cp, mv, rm, grep, mkdir, find + - Developper tool: diff + + + ** Optional runtime dependencies ** + + - To quickly apply the semantic patches + - glimpse indexer + + - To use OCaml scripting feature in SmPL + - ocaml-native-compilers or ocaml-nox + - ocaml-findlib + + - To generate a PDF of the control flow graph with '-graphical_trace' + - pdftk and graphviz (with PDF support) + + + + ** Dependencies for additional tools ** + + git, pushd, popd, sed, diffstat, cpp diff --git a/ocaml/Makefile b/ocaml/Makefile new file mode 100644 index 0000000..760da79 --- /dev/null +++ b/ocaml/Makefile @@ -0,0 +1,92 @@ +############################################################################## +# Variables +############################################################################## +#TARGET=cocciocaml +-include ../Makefile.config + +TARGET=cocciocaml + +SRC=coccilib.ml ocamlcocci_aux.ml prepare_ocamlcocci.ml run_ocamlcocci.ml + +#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 +LIBS=../commons/commons.cma ../globals/globals.cma \ + ../parsing_c/parsing_c.cma ../parsing_cocci/cocci_parser.cma + +SYSLIBS= str.cma unix.cma + +############################################################################## +# Generic variables +############################################################################## + +#for warning: -w A +#for profiling: -p -inline 0 with OCAMLOPT +OCAMLCFLAGS ?= -g -dtypes + +OCAMLC=ocamlc$(OPTBIN) $(OCAMLCFLAGS) $(INCLUDES) +OCAMLOPT=ocamlopt$(OPTBIN) $(OPTFLAGS) $(INCLUDES) +OCAMLLEX=ocamllex$(OPTBIN) #-ml +OCAMLYACC=ocamlyacc -v +OCAMLDEP=ocamldep$(OPTBIN) $(INCLUDES) +OCAMLMKTOP=ocamlmktop -g -custom $(INCLUDES) + + +OBJS = $(SRC:.ml=.cmo) +OPTOBJS = $(SRC:.ml=.cmx) + + +############################################################################## +# Top rules +############################################################################## +all: $(TARGET).cma +all.opt: $(TARGET).cmxa + +$(TARGET).cma: $(OBJS) + $(OCAMLC) -a -o $(TARGET).cma $(OBJS) + +$(TARGET).cmxa: $(OPTOBJS) $(LIBS:.cma=.cmxa) + $(OCAMLOPT) -a -o $(TARGET).cmxa $(OPTOBJS) + +$(TARGET).top: $(OBJS) $(LIBS) + $(OCAMLMKTOP) -o $(TARGET).top $(SYSLIBS) $(LIBS) $(OBJS) + +clean:: + rm -f $(TARGET).top + + + +############################################################################## +# Pad's rules +############################################################################## + +############################################################################## +# Generic rules +############################################################################## + +.SUFFIXES: .ml .mli .cmo .cmi .cmx + +.ml.cmo: + $(OCAMLC) -c $< +.mli.cmi: + $(OCAMLC) -c $< +.ml.cmx: + $(OCAMLOPT) -c $< + +.ml.mldepend: + $(OCAMLC) -i $< + +clean:: + rm -f *.cm[ioxa] *.o *.a *.cmxa *.annot + rm -f *~ .*~ gmon.out #*# + +distclean:: + rm -f .depend + +beforedepend:: + +depend:: beforedepend + $(OCAMLDEP) *.mli *.ml > .depend + +-include .depend diff --git a/ocaml/coccilib.ml b/ocaml/coccilib.ml new file mode 100644 index 0000000..588277b --- /dev/null +++ b/ocaml/coccilib.ml @@ -0,0 +1,19 @@ +(* Function table management *) + +type pos = { current_element : string; + file :string ; + line : int; + col : int; + line_end : int; + col_end : int; } + +type param_type = Pos of pos list | Str of string + +let fcts : (string, param_type list -> unit) Hashtbl.t = + Hashtbl.create 11 (* Use prime number *) + +(* ---------------------------------------------------------------------- *) +(* Match management *) + +let inc_match = ref true +let include_match x = inc_match := x diff --git a/ocaml/coccilib.mli b/ocaml/coccilib.mli new file mode 100644 index 0000000..04e7a12 --- /dev/null +++ b/ocaml/coccilib.mli @@ -0,0 +1,17 @@ + +type pos = { current_element : string; + file :string ; + line : int; + col : int; + line_end : int; + col_end : int; } + +type param_type = Pos of pos list | Str of string + +val fcts : (string, param_type list -> unit) Hashtbl.t + +(* ---------------------------------------------------------------------- *) +(* Match management *) + +val inc_match : bool ref +val include_match : bool -> unit diff --git a/ocaml/no_prepare_ocamlcocci.ml b/ocaml/no_prepare_ocamlcocci.ml new file mode 100644 index 0000000..73e9aa5 --- /dev/null +++ b/ocaml/no_prepare_ocamlcocci.ml @@ -0,0 +1,25 @@ + +exception CompileFailure of string +exception LinkFailure of string + +let prepare coccifile code = + let ocamls_rules = + List.fold_left + (function prev -> + function + Ast_cocci.ScriptRule (name,"ocaml",deps,mv,code) -> + code :: prev + | Ast_cocci.InitialScriptRule (name,"ocaml",deps,code) -> + code :: prev + | Ast_cocci.FinalScriptRule (name,"ocaml",deps,code) -> + code :: prev + | _ -> prev) + [] code in + if ocamls_rules = [] + then None + else failwith "OCaml scripting is unsupported. Compile spatch with OCaml version >= 3.11" + +let load_file mlfile = () +let clean_file mlfile = () +let test () = () + diff --git a/ocaml/ocamlcocci_aux.ml b/ocaml/ocamlcocci_aux.ml new file mode 100644 index 0000000..fd182a6 --- /dev/null +++ b/ocaml/ocamlcocci_aux.ml @@ -0,0 +1,35 @@ +(* sams as for python; perhaps this could be put somewhere else *) + +open Ast_c +open Common + +let call_pretty f a = + let str = ref ([] : string list) in + let pr_elem info = str := (Ast_c.str_of_info info) :: !str in + let pr_sp _ = () in + f ~pr_elem ~pr_space:pr_sp a; + String.concat " " (List.rev !str) + +let exprrep = call_pretty Pretty_print_c.pp_expression_gen + +let stringrep = function + Ast_c.MetaIdVal (s,_) -> s +| Ast_c.MetaFuncVal s -> s +| Ast_c.MetaLocalFuncVal s -> s +| Ast_c.MetaExprVal (expr,_) -> exprrep expr +| Ast_c.MetaExprListVal expr_list -> "TODO: <>" +| Ast_c.MetaTypeVal typ -> call_pretty Pretty_print_c.pp_type_gen typ +| Ast_c.MetaInitVal ini -> call_pretty Pretty_print_c.pp_init_gen ini +| Ast_c.MetaStmtVal statement -> + call_pretty Pretty_print_c.pp_statement_gen statement +| Ast_c.MetaParamVal param -> + call_pretty Pretty_print_c.pp_param_gen param +| Ast_c.MetaParamListVal params -> "TODO: <>" +| Ast_c.MetaListlenVal n -> string_of_int n +| Ast_c.MetaPosVal (pos1, pos2) -> + let print_pos = function + Ast_cocci.Real x -> string_of_int x + | Ast_cocci.Virt(x,off) -> Printf.sprintf "%d+%d" x off in + Common.sprintf ("pos(%s,%s)") (print_pos pos1) (print_pos pos2) +| Ast_c.MetaPosValList positions -> "TODO: <>" + diff --git a/ocaml/prepare_ocamlcocci.ml b/ocaml/prepare_ocamlcocci.ml new file mode 120000 index 0000000..59536b4 --- /dev/null +++ b/ocaml/prepare_ocamlcocci.ml @@ -0,0 +1 @@ +yes_prepare_ocamlcocci.ml \ No newline at end of file diff --git a/ocaml/prepare_ocamlcocci.mli b/ocaml/prepare_ocamlcocci.mli new file mode 100644 index 0000000..b0fd387 --- /dev/null +++ b/ocaml/prepare_ocamlcocci.mli @@ -0,0 +1,8 @@ + +exception CompileFailure of string +exception LinkFailure of string + +val prepare : string -> Ast_cocci.rule list -> string option (* filename *) +val load_file : string -> unit +val clean_file : string -> unit +val test : unit -> unit diff --git a/ocaml/run_ocamlcocci.ml b/ocaml/run_ocamlcocci.ml new file mode 100644 index 0000000..43cc248 --- /dev/null +++ b/ocaml/run_ocamlcocci.ml @@ -0,0 +1,38 @@ +open Common + +let run mv ve name code = + (* set up variables *) + let find_binding (r,m) = + try + let elem = + List.find (function ((re,rm),_) -> r =*= re && m =$= rm) ve in + Some elem + with Not_found -> None in + + let args = + List.map + (function (ocaml_name,(r,m),_) -> + match find_binding (r,m) with + None -> failwith "unbound variable" + | Some (_, Ast_c.MetaPosValList l) -> + let locs = + List.map + (function + (fname,current_element,(line,col),(line_end,col_end)) -> + { Coccilib.current_element = current_element; + Coccilib.file = fname; + Coccilib.line = line; + Coccilib.col = col; + Coccilib.line_end = line_end; + Coccilib.col_end = col_end }) l in + Coccilib.Pos locs + | Some (_,binding) -> + Coccilib.Str (Ocamlcocci_aux.stringrep binding)) + mv in + + (* call the function *) + Coccilib.include_match true; + let fn = + try Hashtbl.find Coccilib.fcts name + with Not_found -> failwith (Printf.sprintf "%s not found" name) in + fn args diff --git a/ocaml/yes_prepare_ocamlcocci.ml b/ocaml/yes_prepare_ocamlcocci.ml new file mode 100644 index 0000000..210da53 --- /dev/null +++ b/ocaml/yes_prepare_ocamlcocci.ml @@ -0,0 +1,213 @@ +module Ast = Ast_cocci + +exception CompileFailure of string +exception LinkFailure of string + +let has_ocamlfind = ref false + +let check_cmd cmd = + match Sys.command cmd with + 0 -> true + | _ -> false + +let check_runtime () = + let has_opt = check_cmd (!Flag.ocamlc ^".opt -version 2>&1 > /dev/null") in + let has_c = check_cmd (!Flag.ocamlc ^" -version 2>&1 > /dev/null") in + let has_find = check_cmd (!Flag.ocamlfind ^ " printconf 2>&1 > /dev/null") in + has_ocamlfind := has_find; + if has_opt then + begin + Flag.ocamlc := !Flag.ocamlc ^ ".opt"; + Flag.ocamlopt := !Flag.ocamlopt ^ ".opt"; + Flag.ocamldep := !Flag.ocamldep ^ ".opt"; + Common.pr2 "Using native version of ocamlc/ocamlopt/ocamldep" + end + else + if has_c then + Common.pr2 "Using bytecode version of ocamlc/ocamlopt/ocamldep" + else + if Dynlink.is_native then + failwith + "No OCaml compiler found! Install either ocamlopt or ocamlopt.opt" + else + failwith + "No OCaml compiler found! Install either ocamlc or ocamlc.opt" + +let init_ocamlcocci _ = + "open Coccilib\n" + +let prepare_rule (name, metavars, code) = + let fname = String.concat "_" (Str.split (Str.regexp " ") name) in + (* function header *) + let function_header body = + Printf.sprintf "let %s args =\n %s" fname body in + (* parameter list *) + let build_parameter_list body = + let ctr = ref 0 in + List.fold_left + (function body -> + function (nm,_,mv) -> + let endlet = + Printf.sprintf "| _ -> failwith \"bad value\" in\n%s" body in + let index = !ctr in + ctr := !ctr + 1; + match mv with + Ast.MetaPosDecl(_,_) -> + Printf.sprintf + "let %s = match List.nth args %d with Coccilib.Pos x -> x %s" + nm index endlet + | _ (* strings for everything else *) -> + Printf.sprintf + "let %s = match List.nth args %d with Coccilib.Str x -> x %s" + nm index endlet) + body metavars in + (* add to hash table *) + let hash_add body = + Printf.sprintf + "%s\nlet _ = Hashtbl.add Coccilib.fcts \"%s\" %s\n" body name fname in + hash_add (function_header (build_parameter_list code)) + +let prepare coccifile code = + let init_rules = + List.fold_left + (function prev -> + function + Ast_cocci.InitialScriptRule (name,"ocaml",deps,code) -> + code :: prev + | _ -> prev) + [] code in + let init_rules = List.rev init_rules in + let other_rules = + List.fold_left + (function prev -> + function + Ast_cocci.ScriptRule (name,"ocaml",deps,mv,code) -> + (name,mv,code) :: prev + | Ast_cocci.InitialScriptRule (name,"ocaml",deps,code) -> prev + | Ast_cocci.FinalScriptRule (name,"ocaml",deps,code) -> + (name,[],code) :: prev + | _ -> prev) + [] code in + let other_rules = List.rev other_rules in + if init_rules = [] && other_rules = [] + then None + else + let basefile = Filename.basename (Filename.chop_extension coccifile) in + let (file,o) = Filename.open_temp_file basefile ".ml" in + (* Global initialization *) + Printf.fprintf o "%s" (init_ocamlcocci()); + (* Semantic patch specific initialization *) + Printf.fprintf o "%s" (String.concat "\n\n" init_rules); + (* Semantic patch rules and finalizer *) + let rule_code = List.map prepare_rule other_rules in + Printf.fprintf o "%s" (String.concat "\n\n" rule_code); + close_out o; + check_runtime (); + Some file + +let filter_dep acc dep = + match dep with + (* Built-in and OCaml defaults are filtered out *) + "Arg" | "Arith_status" | "Array" | "ArrayLabels" | "Big_int" | "Bigarray" + | "Buffer" | "Callback" | "CamlinternalLazy" | "CamlinternalMod" | "CamlinternalOO" + | "Char" | "Complex" | "Condition" | "Dbm" | "Digest" | "Dynlink" | "Event" | "Filename" + | "Format" | "Gc" | "Genlex" | "Graphics" | "GraphicsX11" | "Hashtbl" | "Int32" | "Int64" + | "Lazy" | "Lexing" | "List" | "ListLabels" | "Map" | "Marshal" | "MoreLabels" | "Mutex" + | "Nativeint" | "Num" | "Obj" | "Oo" | "Parsing" | "Pervasives" | "Printexc" | "Printf" + | "Queue" | "Random" | "Scanf" | "Set" | "Sort" | "Stack" | "StdLabels" | "Str" | "Stream" + | "String" | "StringLabels" | "Sys" | "Thread" | "ThreadUnix" | "Tk" | "Unix" | "UnixLabels" + | "Weak" + + (* Coccilib is filtered out too *) + | "Coccilib" -> acc + + | _ -> + let l = Char.lowercase (String.get dep 0)in + String.set dep 0 l; + dep::acc + +let parse_dep mlfile depout = + let re_colon = Str.regexp_string ":" in + match Str.split re_colon depout with + _::[dep] -> + let deplist = Str.split (Str.regexp_string " ") dep in + let orderdep = List.rev (List.fold_left filter_dep [] deplist) in + if orderdep <> [] then + if !has_ocamlfind then + let packages = String.concat " " orderdep in + let inclcmd = !Flag.ocamlfind ^" query -i-format "^packages in + let inclflags = Common.cmd_to_list inclcmd in + let flags = String.concat " " inclflags in + if flags <> "" then + (Common.pr2 ("Extra OCaml packages used in the semantic patch: "^ packages); + flags) + else + raise (CompileFailure ("ocamlfind did not found "^ + (if List.length orderdep = 1 + then "this package: " + else "one of these packages: ")^ packages)) + else + raise (CompileFailure ("ocamlfind not found but "^mlfile^" uses "^dep)) + else + "" + | _ -> raise (CompileFailure ("Wrong dependencies for "^mlfile^" (Got "^depout^")")) + +let dep_flag mlfile = + let depcmd = !Flag.ocamldep ^" -modules "^mlfile in + match Common.cmd_to_list depcmd with + [dep] -> parse_dep mlfile dep + | _ -> raise (CompileFailure ("Wrong dependencies for "^mlfile)) + +let compile_bytecode_cmd flags mlfile = + let obj = (Filename.chop_extension mlfile) ^ ".cmo" in + (obj, Printf.sprintf "%s -c %s %s %s" !Flag.ocamlc obj flags mlfile) + +let compile_native_cmd flags mlfile = + let obj = (Filename.chop_extension mlfile) ^ ".cmxs" in + (obj, Printf.sprintf "%s -shared -o %s %s %s" !Flag.ocamlopt obj flags mlfile) + +let compile mlfile cmd = + Common.pr2 cmd; + match Sys.command cmd with + 0 -> () + | _ -> raise (CompileFailure mlfile) + +let load_file mlfile = + let flags = "-g " ^ (dep_flag mlfile) ^ " -I "^Config.path^"/ocaml/" in + let (obj, cmd) = + if Dynlink.is_native + then compile_native_cmd flags mlfile + else compile_bytecode_cmd flags mlfile + in + compile mlfile cmd; + Common.pr2 "Compilation OK! Loading..."; + try + Dynlink.loadfile obj + with Dynlink.Error e -> + Common.pr2 (Dynlink.error_message e); + raise (LinkFailure obj) + +let clean_file mlfile = + let basefile = Filename.chop_extension mlfile in + let files = + if Dynlink.is_native then + [basefile ^ ".cmxs"; + basefile ^ ".cmx"; + basefile ^ ".o"] + else + [basefile ^ ".cmo"] + in + Sys.remove mlfile; + Sys.remove (basefile^".cmi"); + List.iter (fun f -> Sys.remove f) files + +(* + This function is used in testing.ml. + Once the ML file is compiled and loaded, + newly available functions are reported here. +*) +let test () = + Hashtbl.iter + (fun key fct -> + Common.pr2 ("Fct registered: \""^key^"\"") + ) Coccilib.fcts diff --git a/parsing_c/control_flow_c_build.ml b/parsing_c/control_flow_c_build.ml index 54d5270..aeaabd0 100644 --- a/parsing_c/control_flow_c_build.ml +++ b/parsing_c/control_flow_c_build.ml @@ -1207,7 +1207,6 @@ let ast_to_control_flow e = !g#add_arc ((ei, endi) ,Direct); | Ast_c.DefineStmt st -> - (* can have some return; inside the statement *) let exiti = !g +> add_node Exit lbl_0 "[exit]" in let errorexiti = !g +> add_node ErrorExit lbl_0 "[errorexit]" in @@ -1229,10 +1228,13 @@ let ast_to_control_flow e = | Ast_c.DefineDoWhileZero ((st,_e), ii) -> + let goto_labels = compute_labels_and_create_them st in + let info = { initial_info with + labels_assoc = goto_labels } in + let headerdoi = !g +> add_node (DefineDoWhileZeroHeader ((),ii)) lbl_0 "do0" in !g#add_arc ((headeri, headerdoi), Direct); - let info = initial_info in let lasti = aux_statement (Some headerdoi , info) st in lasti +> do_option (fun lasti -> let endi = !g +> add_node EndNode lbl_0 "[end]" in diff --git a/parsing_c/unparse_cocci.ml b/parsing_c/unparse_cocci.ml index d5f24ef..5fbaa8a 100644 --- a/parsing_c/unparse_cocci.ml +++ b/parsing_c/unparse_cocci.ml @@ -287,7 +287,7 @@ let rec expression e = | Ast.CondExpr(exp1,why,exp2,colon,exp3) -> expression exp1; pr_space(); mcode print_string why; print_option (function e -> pr_space(); expression e) exp2; - pr_space(); mcode print_string colon; expression exp3 + pr_space(); mcode print_string colon; pr_space(); expression exp3 | Ast.Postfix(exp,op) -> expression exp; mcode fixOp op | Ast.Infix(exp,op) -> mcode fixOp op; expression exp | Ast.Unary(exp,op) -> mcode unaryOp op; expression exp diff --git a/parsing_cocci/ast0_cocci.ml b/parsing_cocci/ast0_cocci.ml index c2c54c3..db4b98a 100644 --- a/parsing_cocci/ast0_cocci.ml +++ b/parsing_cocci/ast0_cocci.ml @@ -400,10 +400,11 @@ and parsed_rule = (rule * Ast.metavar list * (string list * string list * Ast.dependency * string * Ast.exists)) * (rule * Ast.metavar list) * Ast.ruletype - | ScriptRule of - string * Ast.dependency * (string * Ast.meta_name) list * string - | InitialScriptRule of string * Ast.dependency * string - | FinalScriptRule of string * Ast.dependency * string + | ScriptRule of string (* name *) * + string * Ast.dependency * (string * Ast.meta_name * Ast.metavar) list * + string + | InitialScriptRule of string (* name *) *string * Ast.dependency * string + | FinalScriptRule of string (* name *) *string * Ast.dependency * string (* --------------------------------------------------------------------- *) diff --git a/parsing_cocci/ast0_cocci.mli b/parsing_cocci/ast0_cocci.mli index 731661f..284e926 100644 --- a/parsing_cocci/ast0_cocci.mli +++ b/parsing_cocci/ast0_cocci.mli @@ -393,12 +393,13 @@ and parsed_rule = (string list * string list * Ast_cocci.dependency * string * Ast_cocci.exists)) * (rule * Ast_cocci.metavar list) * Ast_cocci.ruletype - | ScriptRule of - string * Ast_cocci.dependency * (string * Ast_cocci.meta_name) list * + | ScriptRule of string (* name *) * + string * Ast_cocci.dependency * + (string * Ast_cocci.meta_name * Ast_cocci.metavar) list * string - | InitialScriptRule of + | InitialScriptRule of string (* name *) * string (*language*) * Ast_cocci.dependency * string (*code*) - | FinalScriptRule of + | FinalScriptRule of string (* name *) * string (*language*) * Ast_cocci.dependency * string (*code*) (* --------------------------------------------------------------------- *) diff --git a/parsing_cocci/ast_cocci.ml b/parsing_cocci/ast_cocci.ml index 8dabab8..8a0b283 100644 --- a/parsing_cocci/ast_cocci.ml +++ b/parsing_cocci/ast_cocci.ml @@ -555,9 +555,12 @@ and rulename = string list * string list * exists * bool | GeneratedRulename of string option * dependency * string list * string list * exists * bool - | ScriptRulename of string * dependency - | InitialScriptRulename of string * dependency - | FinalScriptRulename of string * dependency + | ScriptRulename of string option (* name *) * string (* language *) * + dependency + | InitialScriptRulename of string option (* name *) * string (* language *) * + dependency + | FinalScriptRulename of string option (* name *) * string (* language *) * + dependency and ruletype = Normal | Generated @@ -565,9 +568,13 @@ and rule = CocciRule of string (* name *) * (dependency * string list (* dropped isos *) * exists) * top_level list * bool list * ruletype - | ScriptRule of string * dependency * (string * meta_name) list * string - | InitialScriptRule of string (*language*) * dependency * string (*code*) - | FinalScriptRule of string (*language*) * dependency * string (*code*) + | ScriptRule of string (* name *) * + (* metaname for python (untyped), metavar for ocaml (typed) *) + string * dependency * (string * meta_name * metavar) list * string + | InitialScriptRule of string (* name *) * + string (*language*) * dependency * string (*code*) + | FinalScriptRule of string (* name *) * + string (*language*) * dependency * string (*code*) and dependency = Dep of string (* rule applies for the current binding *) diff --git a/parsing_cocci/ast_cocci.mli b/parsing_cocci/ast_cocci.mli index 135830d..90b21c3 100644 --- a/parsing_cocci/ast_cocci.mli +++ b/parsing_cocci/ast_cocci.mli @@ -529,9 +529,12 @@ and rulename = | GeneratedRulename of string option * dependency * string list * string list * exists * bool (* true if the whole thing is an expression *) - | ScriptRulename of string * dependency - | InitialScriptRulename of string * dependency - | FinalScriptRulename of string * dependency + | ScriptRulename of string option (* name *) * string (* language *) * + dependency + | InitialScriptRulename of string option (* name *) * string (* language *) * + dependency + | FinalScriptRulename of string option (* name *) * string (* language *) * + dependency and ruletype = Normal | Generated @@ -539,9 +542,12 @@ and rule = CocciRule of string (* name *) * (dependency * string list (* dropped isos *) * exists) * top_level list * bool list (* true if generates an exp *) * ruletype - | ScriptRule of string * dependency * (string * meta_name) list * string - | InitialScriptRule of string * dependency * string - | FinalScriptRule of string * dependency * string + | ScriptRule of string (* name *) * + string * dependency * (string * meta_name * metavar) list * string + | InitialScriptRule of string (* name *) * + string * dependency * string + | FinalScriptRule of string (* name *) * + string * dependency * string and dependency = Dep of string (* rule applies for the current binding *) diff --git a/parsing_cocci/free_vars.ml b/parsing_cocci/free_vars.ml index 2bc4318..3efc01e 100644 --- a/parsing_cocci/free_vars.ml +++ b/parsing_cocci/free_vars.ml @@ -713,8 +713,8 @@ let collect_astfvs rules = [] -> [] | (metavars, rule)::rules -> match rule with - Ast.ScriptRule (_,_,_,_) - | Ast.InitialScriptRule (_,_,_) | Ast.FinalScriptRule (_,_,_) -> + Ast.ScriptRule (_,_,_,_,_) + | Ast.InitialScriptRule (_,_,_,_) | Ast.FinalScriptRule (_,_,_,_) -> (* bound stays as is because script rules have no names, so no inheritance is possible *) rule::(loop bound rules) @@ -791,9 +791,10 @@ let collect_top_level_used_after metavar_rule_list = used_after in let free_vars = match r with - Ast.ScriptRule (_,_,mv,_) -> - drop_virt(List.map (function (_,(r,v)) -> (r,v)) mv) - | Ast.InitialScriptRule (_,_,_) | Ast.FinalScriptRule (_,_,_) -> [] + Ast.ScriptRule (_,_,_,mv,_) -> + drop_virt(List.map (function (_,(r,v),_) -> (r,v)) mv) + | Ast.InitialScriptRule (_,_,_,_) + | Ast.FinalScriptRule (_,_,_,_) -> [] | Ast.CocciRule (_,_,rule,_,_) -> drop_virt (Common.union_set (nub (collect_all_rule_refs rule)) @@ -900,8 +901,8 @@ let collect_used_after metavar_rule_list = (function (metavars,r) -> function used_after -> match r with - Ast.ScriptRule (_,_,_,_) - | Ast.InitialScriptRule (_,_,_) | Ast.FinalScriptRule (_,_,_) -> + Ast.ScriptRule (_,_,_,_,_) + | Ast.InitialScriptRule (_,_,_,_) | Ast.FinalScriptRule (_,_,_,_) -> ([], [used_after], [], []) | Ast.CocciRule (name, rule_info, minirules, _,_) -> collect_local_used_after metavars minirules used_after diff --git a/parsing_cocci/get_constants2.ml b/parsing_cocci/get_constants2.ml index bd11836..29c3f4d 100644 --- a/parsing_cocci/get_constants2.ml +++ b/parsing_cocci/get_constants2.ml @@ -557,11 +557,11 @@ let run rules neg_pos_vars = List.fold_left (function (rest_info,in_plus,env,locals(*dom of env*)) -> function - (Ast.ScriptRule (_,deps,mv,_),_) -> + (Ast.ScriptRule (_,_,deps,mv,_),_) -> let extra_deps = List.fold_left (function prev -> - function (_,(rule,_)) -> + function (_,(rule,_),_) -> if rule = "virtual" then prev else Ast.AndDep (Ast.Dep rule,prev)) @@ -570,8 +570,8 @@ let run rules neg_pos_vars = False -> (rest_info, in_plus, env, locals) | dependencies -> (build_or dependencies rest_info, in_plus, env, locals)) - | (Ast.InitialScriptRule (_,deps,_),_) - | (Ast.FinalScriptRule (_,deps,_),_) -> + | (Ast.InitialScriptRule (_,_,deps,_),_) + | (Ast.FinalScriptRule (_,_,deps,_),_) -> (* initialize and finalize dependencies are irrelevant to get_constants *) (rest_info, in_plus, env, locals) diff --git a/parsing_cocci/parse_aux.ml b/parsing_cocci/parse_aux.ml index 7304304..d09ac94 100644 --- a/parsing_cocci/parse_aux.ml +++ b/parsing_cocci/parse_aux.ml @@ -190,17 +190,16 @@ let iso_adjust first_fn fn first rest = front::after -> (first_fn first::front)::after | _ -> failwith "not possible" -let check_meta_tyopt type_irrelevant tok = - let lookup rule name = - try - let info = Hashtbl.find Data.all_metadecls rule in - List.find (function mv -> Ast.get_meta_name mv = (rule,name)) info - with - Not_found -> - raise - (Semantic_cocci.Semantic - ("bad rule "^rule^" or bad variable "^name)) in - match tok with +let lookup rule name = + try + let info = Hashtbl.find Data.all_metadecls rule in + List.find (function mv -> Ast.get_meta_name mv = (rule,name)) info + with + Not_found -> + raise + (Semantic_cocci.Semantic("bad rule "^rule^" or bad variable "^name)) + +let check_meta_tyopt type_irrelevant = function Ast.MetaIdDecl(Ast.NONE,(rule,name)) -> (match lookup rule name with Ast.MetaIdDecl(_,_) | Ast.MetaFreshIdDecl(_,_) -> () @@ -526,15 +525,15 @@ let make_generated_rule_name_result nm d i a e ee = let make_script_rule_name_result lang deps = let l = id2name lang in - Ast.ScriptRulename (l,deps) + Ast.ScriptRulename (None,l,deps) let make_initial_script_rule_name_result lang deps = let l = id2name lang in - Ast.InitialScriptRulename(l,deps) + Ast.InitialScriptRulename(None,l,deps) let make_final_script_rule_name_result lang deps = let l = id2name lang in - Ast.FinalScriptRulename(l,deps) + Ast.FinalScriptRulename(None,l,deps) (* Allows type alone only when it is void and only when there is only one parameter. This avoids ambiguity problems in the parser. *) diff --git a/parsing_cocci/parse_cocci.ml b/parsing_cocci/parse_cocci.ml index 5a7a538..a6d1056 100644 --- a/parsing_cocci/parse_cocci.ml +++ b/parsing_cocci/parse_cocci.ml @@ -1378,9 +1378,12 @@ let get_rule_name parse_fn starts_with_name get_tokens file prefix = Ast.CocciRulename (check_name nm,a,b,c,d,e) | Ast.GeneratedRulename (nm,a,b,c,d,e) -> Ast.GeneratedRulename (check_name nm,a,b,c,d,e) - | Ast.ScriptRulename(s,deps) -> Ast.ScriptRulename(s,deps) - | Ast.InitialScriptRulename(s,deps) -> Ast.InitialScriptRulename(s,deps) - | Ast.FinalScriptRulename(s,deps) -> Ast.FinalScriptRulename(s,deps) + | Ast.ScriptRulename(_,s,deps) -> + Ast.ScriptRulename(check_name None,s,deps) + | Ast.InitialScriptRulename(_,s,deps) -> + Ast.InitialScriptRulename(check_name None,s,deps) + | Ast.FinalScriptRulename(_,s,deps) -> + Ast.FinalScriptRulename(check_name None,s,deps) else Ast.CocciRulename(Some(mknm()),Ast.NoDep,[],[],Ast.Undetermined,false) in Data.in_rule_name := false; @@ -1629,7 +1632,7 @@ let parse file = toks; failwith "Malformed script rule" in - let parse_script_rule language old_metas deps = + let parse_script_rule name language old_metas deps = let get_tokens = tokens_script_all table file false lexbuf in (* meta-variables *) @@ -1637,7 +1640,7 @@ let parse file = Data.call_in_meta (function _ -> get_script_metavars PC.script_meta_main table file lexbuf) in - +(* let exists_in old_metas (py,(r,m)) = r = "virtual" or let test (rr,mr) x = @@ -1654,34 +1657,35 @@ let parse file = "Script references unknown meta-variable: %s" (meta2c(snd x)))) metavars; - +*) (* script code *) let (more, tokens) = get_tokens [PC.TArobArob; PC.TArob] in let data = collect_script_tokens tokens in - (more,Ast0.ScriptRule(language, deps, metavars, data),[],tokens) in + (more,Ast0.ScriptRule(name, language, deps, metavars, data), + [],tokens) in - let parse_if_script_rule k language _ deps = + let parse_if_script_rule k name language _ deps = let get_tokens = tokens_script_all table file false lexbuf in (* script code *) let (more, tokens) = get_tokens [PC.TArobArob; PC.TArob] in let data = collect_script_tokens tokens in - (more,k (language, deps, data),[],tokens) in + (more,k (name, language, deps, data),[],tokens) in let parse_iscript_rule = parse_if_script_rule - (function (language,deps,data) -> - Ast0.InitialScriptRule(language,deps,data)) in + (function (name,language,deps,data) -> + Ast0.InitialScriptRule(name,language,deps,data)) in let parse_fscript_rule = parse_if_script_rule - (function (language,deps,data) -> - Ast0.FinalScriptRule(language,deps,data)) in + (function (name,language,deps,data) -> + Ast0.FinalScriptRule(name,language,deps,data)) in - let do_parse_script_rule fn l old_metas deps = + let do_parse_script_rule fn name l old_metas deps = match eval_depend deps virt with - Some deps -> fn l old_metas deps - | None -> fn l old_metas Ast.FailDep in + Some deps -> fn name l old_metas deps + | None -> fn name l old_metas Ast.FailDep in let parse_rule old_metas starts_with_name = let rulename = @@ -1717,12 +1721,12 @@ let parse file = D.ignore_patch_or_match := false; Data.in_generating := false; res) - | Ast.ScriptRulename(l,deps) -> - do_parse_script_rule parse_script_rule l old_metas deps - | Ast.InitialScriptRulename(l,deps) -> - do_parse_script_rule parse_iscript_rule l old_metas deps - | Ast.FinalScriptRulename(l,deps) -> - do_parse_script_rule parse_fscript_rule l old_metas deps + | Ast.ScriptRulename(Some s,l,deps) -> + do_parse_script_rule parse_script_rule s l old_metas deps + | Ast.InitialScriptRulename(Some s,l,deps) -> + do_parse_script_rule parse_iscript_rule s l old_metas deps + | Ast.FinalScriptRulename(Some s,l,deps) -> + do_parse_script_rule parse_fscript_rule s l old_metas deps | _ -> failwith "Malformed rule name" in let rec loop old_metas starts_with_name = @@ -1778,9 +1782,12 @@ let process file isofile verbose = let parsed = List.map (function - Ast0.ScriptRule (a,b,c,d) -> [([],Ast.ScriptRule (a,b,c,d))] - | Ast0.InitialScriptRule (a,b,c) -> [([],Ast.InitialScriptRule (a,b,c))] - | Ast0.FinalScriptRule (a,b,c) -> [([],Ast.FinalScriptRule (a,b,c))] + Ast0.ScriptRule (a,b,c,d,e) -> + [([],Ast.ScriptRule (a,b,c,d,e))] + | Ast0.InitialScriptRule(a,b,c,d) -> + [([],Ast.InitialScriptRule (a,b,c,d))] + | Ast0.FinalScriptRule (a,b,c,d) -> + [([],Ast.FinalScriptRule (a,b,c,d))] | Ast0.CocciRule ((minus, metavarsm, (iso, dropiso, dependencies, rule_name, exists)), @@ -1883,4 +1890,4 @@ let process file isofile verbose = Common.profile_code "get_glimpse_constants" (* for glimpse *) (fun () -> Get_constants2.get_constants code neg_pos) in - (metavars,code,fvs,neg_pos,ua,pos,grep_tokens,glimpse_tokens) + (metavars,code,fvs,neg_pos,ua,pos, grep_tokens,glimpse_tokens) diff --git a/parsing_cocci/parser_cocci_menhir.ml b/parsing_cocci/parser_cocci_menhir.ml index 652ac45..5c46f20 100644 --- a/parsing_cocci/parser_cocci_menhir.ml +++ b/parsing_cocci/parser_cocci_menhir.ml @@ -29092,12 +29092,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__6_ in let _v : ( # 162 "parser_cocci_menhir.mly" - (string * Ast_cocci.meta_name) + (string * Ast_cocci.meta_name * Ast_cocci.metavar) # 29097 "parser_cocci_menhir.ml" ) = # 2048 "parser_cocci_menhir.mly" - ( (P.id2name py, (_3, P.id2name cocci)) ) -# 29101 "parser_cocci_menhir.ml" + ( let mv = Parse_aux.lookup _3 (P.id2name cocci) in + (P.id2name py, (_3, P.id2name cocci), mv) ) +# 29102 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29142,12 +29143,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _endpos = _endpos__6_ in let _v : ( # 162 "parser_cocci_menhir.mly" - (string * Ast_cocci.meta_name) -# 29147 "parser_cocci_menhir.ml" + (string * Ast_cocci.meta_name * Ast_cocci.metavar) +# 29148 "parser_cocci_menhir.ml" ) = -# 2050 "parser_cocci_menhir.mly" - ( (P.id2name py, ("virtual", P.id2name cocci)) ) -# 29151 "parser_cocci_menhir.ml" +# 2051 "parser_cocci_menhir.mly" + ( let name = ("virtual", P.id2name cocci) in + let mv = Ast.MetaIdDecl(Ast.NONE,name) in + (P.id2name py, name, mv) ) +# 29154 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29168,14 +29171,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 90 "parser_cocci_menhir.mly" (string * Data.clt) -# 29172 "parser_cocci_menhir.ml" +# 29175 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_seed_elem = # 1473 "parser_cocci_menhir.mly" ( let (x,_) = _1 in Ast.SeedString x ) -# 29179 "parser_cocci_menhir.ml" +# 29182 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29196,14 +29199,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 29200 "parser_cocci_menhir.ml" +# 29203 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_seed_elem = # 1474 "parser_cocci_menhir.mly" ( let (x,_,_,_) = _1 in Ast.SeedId x ) -# 29207 "parser_cocci_menhir.ml" +# 29210 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29234,7 +29237,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 49 "parser_cocci_menhir.mly" (string) -# 29238 "parser_cocci_menhir.ml" +# 29241 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in @@ -29243,7 +29246,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( let nm = (_1,P.id2name _3) in P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm)); Ast.SeedId nm ) -# 29247 "parser_cocci_menhir.ml" +# 29250 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29264,14 +29267,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let x : ( # 90 "parser_cocci_menhir.mly" (string * Data.clt) -# 29268 "parser_cocci_menhir.ml" +# 29271 "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 ] ) -# 29275 "parser_cocci_menhir.ml" +# 29278 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29302,14 +29305,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let x : ( # 90 "parser_cocci_menhir.mly" (string * Data.clt) -# 29306 "parser_cocci_menhir.ml" +# 29309 "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 ) -# 29313 "parser_cocci_menhir.ml" +# 29316 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29333,7 +29336,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = # 144 "standard.mly" ( [ x ] ) -# 29337 "parser_cocci_menhir.ml" +# 29340 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29367,7 +29370,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = # 146 "standard.mly" ( x :: xs ) -# 29371 "parser_cocci_menhir.ml" +# 29374 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29391,7 +29394,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ctype_ = # 144 "standard.mly" ( [ x ] ) -# 29395 "parser_cocci_menhir.ml" +# 29398 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29425,7 +29428,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ctype_ = # 146 "standard.mly" ( x :: xs ) -# 29429 "parser_cocci_menhir.ml" +# 29432 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29449,7 +29452,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = # 144 "standard.mly" ( [ x ] ) -# 29453 "parser_cocci_menhir.ml" +# 29456 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29483,7 +29486,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = # 146 "standard.mly" ( x :: xs ) -# 29487 "parser_cocci_menhir.ml" +# 29490 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29507,7 +29510,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = # 144 "standard.mly" ( [ x ] ) -# 29511 "parser_cocci_menhir.ml" +# 29514 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29541,7 +29544,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = # 146 "standard.mly" ( x :: xs ) -# 29545 "parser_cocci_menhir.ml" +# 29548 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29565,7 +29568,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = # 144 "standard.mly" ( [ x ] ) -# 29569 "parser_cocci_menhir.ml" +# 29572 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29599,7 +29602,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = # 146 "standard.mly" ( x :: xs ) -# 29603 "parser_cocci_menhir.ml" +# 29606 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29623,7 +29626,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = # 144 "standard.mly" ( [ x ] ) -# 29627 "parser_cocci_menhir.ml" +# 29630 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29657,7 +29660,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = # 146 "standard.mly" ( x :: xs ) -# 29661 "parser_cocci_menhir.ml" +# 29664 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29681,7 +29684,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = # 144 "standard.mly" ( [ x ] ) -# 29685 "parser_cocci_menhir.ml" +# 29688 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29715,7 +29718,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = # 146 "standard.mly" ( x :: xs ) -# 29719 "parser_cocci_menhir.ml" +# 29722 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29739,7 +29742,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = # 144 "standard.mly" ( [ x ] ) -# 29743 "parser_cocci_menhir.ml" +# 29746 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29773,7 +29776,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = # 146 "standard.mly" ( x :: xs ) -# 29777 "parser_cocci_menhir.ml" +# 29780 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29797,7 +29800,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = # 144 "standard.mly" ( [ x ] ) -# 29801 "parser_cocci_menhir.ml" +# 29804 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29831,7 +29834,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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 ) -# 29835 "parser_cocci_menhir.ml" +# 29838 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29855,7 +29858,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = # 144 "standard.mly" ( [ x ] ) -# 29859 "parser_cocci_menhir.ml" +# 29862 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29889,7 +29892,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = # 146 "standard.mly" ( x :: xs ) -# 29893 "parser_cocci_menhir.ml" +# 29896 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29913,7 +29916,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = # 144 "standard.mly" ( [ x ] ) -# 29917 "parser_cocci_menhir.ml" +# 29920 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29947,7 +29950,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = # 146 "standard.mly" ( x :: xs ) -# 29951 "parser_cocci_menhir.ml" +# 29954 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29971,7 +29974,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = # 144 "standard.mly" ( [ x ] ) -# 29975 "parser_cocci_menhir.ml" +# 29978 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30005,7 +30008,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = # 146 "standard.mly" ( x :: xs ) -# 30009 "parser_cocci_menhir.ml" +# 30012 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30029,7 +30032,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = # 144 "standard.mly" ( [ x ] ) -# 30033 "parser_cocci_menhir.ml" +# 30036 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30063,7 +30066,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = # 146 "standard.mly" ( x :: xs ) -# 30067 "parser_cocci_menhir.ml" +# 30070 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30087,7 +30090,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = # 144 "standard.mly" ( [ x ] ) -# 30091 "parser_cocci_menhir.ml" +# 30094 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30121,7 +30124,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = # 146 "standard.mly" ( x :: xs ) -# 30125 "parser_cocci_menhir.ml" +# 30128 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30145,7 +30148,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = # 144 "standard.mly" ( [ x ] ) -# 30149 "parser_cocci_menhir.ml" +# 30152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30179,7 +30182,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = # 146 "standard.mly" ( x :: xs ) -# 30183 "parser_cocci_menhir.ml" +# 30186 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30203,7 +30206,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_single_statement = # 952 "parser_cocci_menhir.mly" ( _1 ) -# 30207 "parser_cocci_menhir.ml" +# 30210 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30234,13 +30237,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30238 "parser_cocci_menhir.ml" +# 30241 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in let _1 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30244 "parser_cocci_menhir.ml" +# 30247 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in @@ -30251,7 +30254,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.Disj(P.clt2mcode "(" _1, List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code, mids, P.clt2mcode ")" _3)) ) -# 30255 "parser_cocci_menhir.ml" +# 30258 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30275,7 +30278,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_statement = # 879 "parser_cocci_menhir.mly" ( _1 ) -# 30279 "parser_cocci_menhir.ml" +# 30282 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30296,14 +30299,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 30300 "parser_cocci_menhir.ml" +# 30303 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_statement = # 881 "parser_cocci_menhir.mly" ( P.meta_stm _1 ) -# 30307 "parser_cocci_menhir.ml" +# 30310 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30329,7 +30332,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30333 "parser_cocci_menhir.ml" +# 30336 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_expr = Obj.magic _1 in let _startpos = _startpos__1_ in @@ -30337,7 +30340,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_statement = # 883 "parser_cocci_menhir.mly" ( P.exp_stm _1 _2 ) -# 30341 "parser_cocci_menhir.ml" +# 30344 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30379,25 +30382,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30383 "parser_cocci_menhir.ml" +# 30386 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30389 "parser_cocci_menhir.ml" +# 30392 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30394 "parser_cocci_menhir.ml" +# 30397 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_statement = # 885 "parser_cocci_menhir.mly" ( P.ifthen _1 _2 _3 _4 _5 ) -# 30401 "parser_cocci_menhir.ml" +# 30404 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30449,31 +30452,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _6 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30453 "parser_cocci_menhir.ml" +# 30456 "parser_cocci_menhir.ml" ) = Obj.magic _6 in let _5 : 'tv_single_statement = Obj.magic _5 in let _4 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30459 "parser_cocci_menhir.ml" +# 30462 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30465 "parser_cocci_menhir.ml" +# 30468 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30470 "parser_cocci_menhir.ml" +# 30473 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__7_ in let _v : 'tv_statement = # 887 "parser_cocci_menhir.mly" ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 ) -# 30477 "parser_cocci_menhir.ml" +# 30480 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30535,37 +30538,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _8 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30539 "parser_cocci_menhir.ml" +# 30542 "parser_cocci_menhir.ml" ) = Obj.magic _8 in let _7 : 'tv_option_eexpr_ = Obj.magic _7 in let _6 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30545 "parser_cocci_menhir.ml" +# 30548 "parser_cocci_menhir.ml" ) = Obj.magic _6 in let _5 : 'tv_option_eexpr_ = Obj.magic _5 in let _4 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30551 "parser_cocci_menhir.ml" +# 30554 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_option_eexpr_ = Obj.magic _3 in let _2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30557 "parser_cocci_menhir.ml" +# 30560 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30562 "parser_cocci_menhir.ml" +# 30565 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__9_ in let _v : 'tv_statement = # 890 "parser_cocci_menhir.mly" ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 ) -# 30569 "parser_cocci_menhir.ml" +# 30572 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30607,25 +30610,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30611 "parser_cocci_menhir.ml" +# 30614 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30617 "parser_cocci_menhir.ml" +# 30620 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30622 "parser_cocci_menhir.ml" +# 30625 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_statement = # 892 "parser_cocci_menhir.mly" ( P.whileloop _1 _2 _3 _4 _5 ) -# 30629 "parser_cocci_menhir.ml" +# 30632 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30676,36 +30679,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _7 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30680 "parser_cocci_menhir.ml" +# 30683 "parser_cocci_menhir.ml" ) = Obj.magic _7 in let _6 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30685 "parser_cocci_menhir.ml" +# 30688 "parser_cocci_menhir.ml" ) = Obj.magic _6 in let _5 : 'tv_eexpr = Obj.magic _5 in let _4 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30691 "parser_cocci_menhir.ml" +# 30694 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30696 "parser_cocci_menhir.ml" +# 30699 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_single_statement = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30702 "parser_cocci_menhir.ml" +# 30705 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__7_ in let _v : 'tv_statement = # 894 "parser_cocci_menhir.mly" ( P.doloop _1 _2 _3 _4 _5 _6 _7 ) -# 30709 "parser_cocci_menhir.ml" +# 30712 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30747,13 +30750,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _4 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30751 "parser_cocci_menhir.ml" +# 30754 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr_list_option = Obj.magic _3 in let _2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30757 "parser_cocci_menhir.ml" +# 30760 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_iter_ident = Obj.magic _1 in let _startpos = _startpos__1_ in @@ -30761,7 +30764,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_statement = # 896 "parser_cocci_menhir.mly" ( P.iterator _1 _2 _3 _4 _5 ) -# 30765 "parser_cocci_menhir.ml" +# 30768 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30817,37 +30820,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _8 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 30821 "parser_cocci_menhir.ml" +# 30824 "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 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 30828 "parser_cocci_menhir.ml" +# 30831 "parser_cocci_menhir.ml" ) = Obj.magic _5 in let _4 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 30833 "parser_cocci_menhir.ml" +# 30836 "parser_cocci_menhir.ml" ) = Obj.magic _4 in let _3 : 'tv_eexpr = Obj.magic _3 in let _2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 30839 "parser_cocci_menhir.ml" +# 30842 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30844 "parser_cocci_menhir.ml" +# 30847 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__8_ in let _v : 'tv_statement = # 898 "parser_cocci_menhir.mly" ( P.switch _1 _2 _3 _4 _5 (List.concat _6) _7 _8 ) -# 30851 "parser_cocci_menhir.ml" +# 30854 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30878,20 +30881,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30882 "parser_cocci_menhir.ml" +# 30885 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30888 "parser_cocci_menhir.ml" +# 30891 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_statement = # 899 "parser_cocci_menhir.mly" ( P.ret_exp _1 _2 _3 ) -# 30895 "parser_cocci_menhir.ml" +# 30898 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30917,19 +30920,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30921 "parser_cocci_menhir.ml" +# 30924 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 59 "parser_cocci_menhir.mly" (Data.clt) -# 30926 "parser_cocci_menhir.ml" +# 30929 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = # 900 "parser_cocci_menhir.mly" ( P.ret _1 _2 ) -# 30933 "parser_cocci_menhir.ml" +# 30936 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30955,19 +30958,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30959 "parser_cocci_menhir.ml" +# 30962 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 30964 "parser_cocci_menhir.ml" +# 30967 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = # 901 "parser_cocci_menhir.mly" ( P.break _1 _2 ) -# 30971 "parser_cocci_menhir.ml" +# 30974 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30993,19 +30996,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 30997 "parser_cocci_menhir.ml" +# 31000 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 31002 "parser_cocci_menhir.ml" +# 31005 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_statement = # 902 "parser_cocci_menhir.mly" ( P.cont _1 _2 ) -# 31009 "parser_cocci_menhir.ml" +# 31012 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31031,7 +31034,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 31035 "parser_cocci_menhir.ml" +# 31038 "parser_cocci_menhir.ml" ) = Obj.magic _2 in let _1 : 'tv_ident = Obj.magic _1 in let _startpos = _startpos__1_ in @@ -31039,7 +31042,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_statement = # 903 "parser_cocci_menhir.mly" ( P.label _1 _2 ) -# 31043 "parser_cocci_menhir.ml" +# 31046 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31070,20 +31073,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 31074 "parser_cocci_menhir.ml" +# 31077 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_ident = Obj.magic _2 in let _1 : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 31080 "parser_cocci_menhir.ml" +# 31083 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_statement = # 904 "parser_cocci_menhir.mly" ( P.goto _1 _2 _3 ) -# 31087 "parser_cocci_menhir.ml" +# 31090 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31114,20 +31117,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 31118 "parser_cocci_menhir.ml" +# 31121 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_fun_start = Obj.magic _2 in let _1 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 31124 "parser_cocci_menhir.ml" +# 31127 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_statement = # 906 "parser_cocci_menhir.mly" ( P.seq _1 _2 _3 ) -# 31131 "parser_cocci_menhir.ml" +# 31134 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31154,14 +31157,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 31158 "parser_cocci_menhir.ml" +# 31161 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_w_ in let _v : 'tv_stm_dots = # 910 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) ) -# 31165 "parser_cocci_menhir.ml" +# 31168 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31197,14 +31200,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 31201 "parser_cocci_menhir.ml" +# 31204 "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 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 31208 "parser_cocci_menhir.ml" +# 31211 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_c_ in @@ -31212,7 +31215,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 912 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b, P.clt2mcode "...>" c, List.concat w, false)) ) -# 31216 "parser_cocci_menhir.ml" +# 31219 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31248,14 +31251,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 31252 "parser_cocci_menhir.ml" +# 31255 "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 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 31259 "parser_cocci_menhir.ml" +# 31262 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos_c_ in @@ -31263,7 +31266,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 915 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b, P.clt2mcode "...+>" c, List.concat w, true)) ) -# 31267 "parser_cocci_menhir.ml" +# 31270 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31284,14 +31287,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 55 "parser_cocci_menhir.mly" (Data.clt) -# 31288 "parser_cocci_menhir.ml" +# 31291 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = # 841 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Static s ) -# 31295 "parser_cocci_menhir.ml" +# 31298 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31312,14 +31315,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 55 "parser_cocci_menhir.mly" (Data.clt) -# 31316 "parser_cocci_menhir.ml" +# 31319 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = # 842 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Auto s ) -# 31323 "parser_cocci_menhir.ml" +# 31326 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31340,14 +31343,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 55 "parser_cocci_menhir.mly" (Data.clt) -# 31344 "parser_cocci_menhir.ml" +# 31347 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = # 843 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Register s ) -# 31351 "parser_cocci_menhir.ml" +# 31354 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31368,14 +31371,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 55 "parser_cocci_menhir.mly" (Data.clt) -# 31372 "parser_cocci_menhir.ml" +# 31375 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_storage = # 844 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Extern s ) -# 31379 "parser_cocci_menhir.ml" +# 31382 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31397,7 +31400,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_struct_decl = # 595 "parser_cocci_menhir.mly" ( [] ) -# 31401 "parser_cocci_menhir.ml" +# 31404 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31428,7 +31431,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 31432 "parser_cocci_menhir.ml" +# 31435 "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 @@ -31438,7 +31441,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 597 "parser_cocci_menhir.mly" ( let (id,fn) = d in [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] ) -# 31442 "parser_cocci_menhir.ml" +# 31445 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31499,34 +31502,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 31503 "parser_cocci_menhir.ml" +# 31506 "parser_cocci_menhir.ml" ) = Obj.magic pv in let rp2 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 31508 "parser_cocci_menhir.ml" +# 31511 "parser_cocci_menhir.ml" ) = Obj.magic rp2 in let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in let lp2 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 31514 "parser_cocci_menhir.ml" +# 31517 "parser_cocci_menhir.ml" ) = Obj.magic lp2 in let rp1 : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 31519 "parser_cocci_menhir.ml" +# 31522 "parser_cocci_menhir.ml" ) = Obj.magic rp1 in let d : 'tv_d_ident = Obj.magic d in let st : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 31525 "parser_cocci_menhir.ml" +# 31528 "parser_cocci_menhir.ml" ) = Obj.magic st in let lp1 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 31530 "parser_cocci_menhir.ml" +# 31533 "parser_cocci_menhir.ml" ) = Obj.magic lp1 in let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in @@ -31540,7 +31543,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (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))] ) -# 31544 "parser_cocci_menhir.ml" +# 31547 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31571,7 +31574,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 31575 "parser_cocci_menhir.ml" +# 31578 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -31581,7 +31584,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 31585 "parser_cocci_menhir.ml" +# 31588 "parser_cocci_menhir.ml" in @@ -31589,7 +31592,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( 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))] ) -# 31593 "parser_cocci_menhir.ml" +# 31596 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31625,7 +31628,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let pv : ( # 110 "parser_cocci_menhir.mly" (Data.clt) -# 31629 "parser_cocci_menhir.ml" +# 31632 "parser_cocci_menhir.ml" ) = Obj.magic pv in let d : 'tv_d_ident = Obj.magic d in let i : 'tv_pure_ident = Obj.magic i in @@ -31637,7 +31640,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 31641 "parser_cocci_menhir.ml" +# 31644 "parser_cocci_menhir.ml" in @@ -31645,7 +31648,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( 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))] ) -# 31649 "parser_cocci_menhir.ml" +# 31652 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31669,7 +31672,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_struct_decl_list = # 614 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 31673 "parser_cocci_menhir.ml" +# 31676 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31693,7 +31696,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_struct_decl_list_start = # 617 "parser_cocci_menhir.mly" ( _1 ) -# 31697 "parser_cocci_menhir.ml" +# 31700 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31723,7 +31726,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_struct_decl_list_start = # 618 "parser_cocci_menhir.mly" ( _1@_2 ) -# 31727 "parser_cocci_menhir.ml" +# 31730 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31753,7 +31756,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_struct_decl_list_start = # 620 "parser_cocci_menhir.mly" ( (P.mkddots "..." d)::r ) -# 31757 "parser_cocci_menhir.ml" +# 31760 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31774,14 +31777,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s : ( # 52 "parser_cocci_menhir.mly" (Data.clt) -# 31778 "parser_cocci_menhir.ml" +# 31781 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_struct_or_union = # 591 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Struct s ) -# 31785 "parser_cocci_menhir.ml" +# 31788 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31802,14 +31805,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let u : ( # 52 "parser_cocci_menhir.mly" (Data.clt) -# 31806 "parser_cocci_menhir.ml" +# 31809 "parser_cocci_menhir.ml" ) = Obj.magic u in let _startpos = _startpos_u_ in let _endpos = _endpos_u_ in let _v : 'tv_struct_or_union = # 592 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Union u ) -# 31813 "parser_cocci_menhir.ml" +# 31816 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31844,7 +31847,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct P.check_inherited_constraint i (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None)) in [i] ) -# 31848 "parser_cocci_menhir.ml" +# 31851 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31888,7 +31891,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct P.check_inherited_constraint i (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None))) l) -# 31892 "parser_cocci_menhir.ml" +# 31895 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31912,7 +31915,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_top_eexpr = # 1243 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) ) -# 31916 "parser_cocci_menhir.ml" +# 31919 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31943,20 +31946,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 31947 "parser_cocci_menhir.ml" +# 31950 "parser_cocci_menhir.ml" ) = Obj.magic _3 in let _2 : 'tv_initialize_list = Obj.magic _2 in let _1 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 31953 "parser_cocci_menhir.ml" +# 31956 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_top_init = # 1821 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) -# 31960 "parser_cocci_menhir.ml" +# 31963 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -31973,7 +31976,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_dots = # 1809 "parser_cocci_menhir.mly" ([]) -# 31977 "parser_cocci_menhir.ml" +# 31980 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32001,7 +32004,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_dots = # 1810 "parser_cocci_menhir.mly" (_2) -# 32005 "parser_cocci_menhir.ml" +# 32008 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32031,7 +32034,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_dots = # 1811 "parser_cocci_menhir.mly" ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 32035 "parser_cocci_menhir.ml" +# 32038 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32061,7 +32064,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_dots = # 1812 "parser_cocci_menhir.mly" (_1@_2) -# 32065 "parser_cocci_menhir.ml" +# 32068 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32089,7 +32092,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_dots_init = # 1800 "parser_cocci_menhir.mly" (_2) -# 32093 "parser_cocci_menhir.ml" +# 32096 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32119,7 +32122,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_dots_init = # 1801 "parser_cocci_menhir.mly" ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 32123 "parser_cocci_menhir.ml" +# 32126 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32149,7 +32152,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_dots_init = # 1802 "parser_cocci_menhir.mly" (_1@_2) -# 32153 "parser_cocci_menhir.ml" +# 32156 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32166,7 +32169,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_exp = # 1805 "parser_cocci_menhir.mly" ([]) -# 32170 "parser_cocci_menhir.ml" +# 32173 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32196,7 +32199,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_exp = # 1806 "parser_cocci_menhir.mly" (_1::_2) -# 32200 "parser_cocci_menhir.ml" +# 32203 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32213,7 +32216,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_stm = # 1815 "parser_cocci_menhir.mly" ([]) -# 32217 "parser_cocci_menhir.ml" +# 32220 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32243,7 +32246,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_stm = # 1816 "parser_cocci_menhir.mly" (_1::_2) -# 32247 "parser_cocci_menhir.ml" +# 32250 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32273,7 +32276,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_after_stm = # 1817 "parser_cocci_menhir.mly" (_1@_2) -# 32277 "parser_cocci_menhir.ml" +# 32280 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32303,7 +32306,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = # 1795 "parser_cocci_menhir.mly" ( _1::_2 ) -# 32307 "parser_cocci_menhir.ml" +# 32310 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32333,7 +32336,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = # 1796 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 32337 "parser_cocci_menhir.ml" +# 32340 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32363,7 +32366,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = # 1797 "parser_cocci_menhir.mly" ( _1@_2 ) -# 32367 "parser_cocci_menhir.ml" +# 32370 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32396,7 +32399,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let a0 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32400 "parser_cocci_menhir.ml" +# 32403 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_b_ in @@ -32406,13 +32409,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 920 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) ) -# 32410 "parser_cocci_menhir.ml" +# 32413 "parser_cocci_menhir.ml" in # 1788 "parser_cocci_menhir.mly" ( a::b ) -# 32416 "parser_cocci_menhir.ml" +# 32419 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32454,14 +32457,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32458 "parser_cocci_menhir.ml" +# 32461 "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 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32465 "parser_cocci_menhir.ml" +# 32468 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_b_ in @@ -32474,13 +32477,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 924 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, P.clt2mcode "...>" c, List.concat w, false)) ) -# 32478 "parser_cocci_menhir.ml" +# 32481 "parser_cocci_menhir.ml" in # 1789 "parser_cocci_menhir.mly" ( a::b ) -# 32484 "parser_cocci_menhir.ml" +# 32487 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32522,14 +32525,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32526 "parser_cocci_menhir.ml" +# 32529 "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 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32533 "parser_cocci_menhir.ml" +# 32536 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_b_ in @@ -32542,13 +32545,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 927 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, P.clt2mcode "...+>" c, List.concat w, true)) ) -# 32546 "parser_cocci_menhir.ml" +# 32549 "parser_cocci_menhir.ml" in # 1789 "parser_cocci_menhir.mly" ( a::b ) -# 32552 "parser_cocci_menhir.ml" +# 32555 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32584,14 +32587,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32588 "parser_cocci_menhir.ml" +# 32591 "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 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32595 "parser_cocci_menhir.ml" +# 32598 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_c0_ in @@ -32604,13 +32607,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 924 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, P.clt2mcode "...>" c, List.concat w, false)) ) -# 32608 "parser_cocci_menhir.ml" +# 32611 "parser_cocci_menhir.ml" in # 1790 "parser_cocci_menhir.mly" ( [a] ) -# 32614 "parser_cocci_menhir.ml" +# 32617 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32646,14 +32649,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let c0 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32650 "parser_cocci_menhir.ml" +# 32653 "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 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 32657 "parser_cocci_menhir.ml" +# 32660 "parser_cocci_menhir.ml" ) = Obj.magic a0 in let _startpos = _startpos_a0_ in let _endpos = _endpos_c0_ in @@ -32666,13 +32669,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 927 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, P.clt2mcode "...+>" c, List.concat w, true)) ) -# 32670 "parser_cocci_menhir.ml" +# 32673 "parser_cocci_menhir.ml" in # 1790 "parser_cocci_menhir.mly" ( [a] ) -# 32676 "parser_cocci_menhir.ml" +# 32679 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32702,7 +32705,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = # 1791 "parser_cocci_menhir.mly" ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 32706 "parser_cocci_menhir.ml" +# 32709 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32732,7 +32735,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = # 1792 "parser_cocci_menhir.mly" ( _1@_2 ) -# 32736 "parser_cocci_menhir.ml" +# 32739 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32764,12 +32767,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32768 "parser_cocci_menhir.ml" +# 32771 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 32773 "parser_cocci_menhir.ml" +# 32776 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32781,26 +32784,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 509 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 32785 "parser_cocci_menhir.ml" +# 32788 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32791 "parser_cocci_menhir.ml" +# 32794 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32798 "parser_cocci_menhir.ml" +# 32801 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32804 "parser_cocci_menhir.ml" +# 32807 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32832,12 +32835,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32836 "parser_cocci_menhir.ml" +# 32839 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 32841 "parser_cocci_menhir.ml" +# 32844 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32849,26 +32852,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 511 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 32853 "parser_cocci_menhir.ml" +# 32856 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32859 "parser_cocci_menhir.ml" +# 32862 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32866 "parser_cocci_menhir.ml" +# 32869 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32872 "parser_cocci_menhir.ml" +# 32875 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32900,12 +32903,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 32904 "parser_cocci_menhir.ml" +# 32907 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 32909 "parser_cocci_menhir.ml" +# 32912 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32917,26 +32920,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 513 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 32921 "parser_cocci_menhir.ml" +# 32924 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32927 "parser_cocci_menhir.ml" +# 32930 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 32934 "parser_cocci_menhir.ml" +# 32937 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 32940 "parser_cocci_menhir.ml" +# 32943 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -32968,12 +32971,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 32972 "parser_cocci_menhir.ml" +# 32975 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 32977 "parser_cocci_menhir.ml" +# 32980 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -32986,26 +32989,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 515 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 32990 "parser_cocci_menhir.ml" +# 32993 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 32996 "parser_cocci_menhir.ml" +# 32999 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33003 "parser_cocci_menhir.ml" +# 33006 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33009 "parser_cocci_menhir.ml" +# 33012 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33046,17 +33049,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 33050 "parser_cocci_menhir.ml" +# 33053 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 49 "parser_cocci_menhir.mly" (string) -# 33055 "parser_cocci_menhir.ml" +# 33058 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33060 "parser_cocci_menhir.ml" +# 33063 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let _startpos = _startpos_r1_ in let _endpos = _endpos_m_ in @@ -33075,26 +33078,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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*))) ) -# 33079 "parser_cocci_menhir.ml" +# 33082 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 33085 "parser_cocci_menhir.ml" +# 33088 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33092 "parser_cocci_menhir.ml" +# 33095 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33098 "parser_cocci_menhir.ml" +# 33101 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33126,12 +33129,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33130 "parser_cocci_menhir.ml" +# 33133 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33135 "parser_cocci_menhir.ml" +# 33138 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33143,26 +33146,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 525 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 33147 "parser_cocci_menhir.ml" +# 33150 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 33153 "parser_cocci_menhir.ml" +# 33156 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33160 "parser_cocci_menhir.ml" +# 33163 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33166 "parser_cocci_menhir.ml" +# 33169 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33199,17 +33202,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33203 "parser_cocci_menhir.ml" +# 33206 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33208 "parser_cocci_menhir.ml" +# 33211 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33213 "parser_cocci_menhir.ml" +# 33216 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33226,26 +33229,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 33230 "parser_cocci_menhir.ml" +# 33233 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 33236 "parser_cocci_menhir.ml" +# 33239 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33243 "parser_cocci_menhir.ml" +# 33246 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33249 "parser_cocci_menhir.ml" +# 33252 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33277,12 +33280,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33281 "parser_cocci_menhir.ml" +# 33284 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33286 "parser_cocci_menhir.ml" +# 33289 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33294,26 +33297,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 509 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 33298 "parser_cocci_menhir.ml" +# 33301 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 33304 "parser_cocci_menhir.ml" +# 33307 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33311 "parser_cocci_menhir.ml" +# 33314 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33317 "parser_cocci_menhir.ml" +# 33320 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33345,12 +33348,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33349 "parser_cocci_menhir.ml" +# 33352 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33354 "parser_cocci_menhir.ml" +# 33357 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33362,26 +33365,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 511 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 33366 "parser_cocci_menhir.ml" +# 33369 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 33372 "parser_cocci_menhir.ml" +# 33375 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33379 "parser_cocci_menhir.ml" +# 33382 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33385 "parser_cocci_menhir.ml" +# 33388 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33413,12 +33416,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33417 "parser_cocci_menhir.ml" +# 33420 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33422 "parser_cocci_menhir.ml" +# 33425 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33430,26 +33433,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 513 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 33434 "parser_cocci_menhir.ml" +# 33437 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 33440 "parser_cocci_menhir.ml" +# 33443 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33447 "parser_cocci_menhir.ml" +# 33450 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33453 "parser_cocci_menhir.ml" +# 33456 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33481,12 +33484,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 33485 "parser_cocci_menhir.ml" +# 33488 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33490 "parser_cocci_menhir.ml" +# 33493 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33499,26 +33502,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 515 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 33503 "parser_cocci_menhir.ml" +# 33506 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 33509 "parser_cocci_menhir.ml" +# 33512 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33516 "parser_cocci_menhir.ml" +# 33519 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33522 "parser_cocci_menhir.ml" +# 33525 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33559,17 +33562,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 33563 "parser_cocci_menhir.ml" +# 33566 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 49 "parser_cocci_menhir.mly" (string) -# 33568 "parser_cocci_menhir.ml" +# 33571 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33573 "parser_cocci_menhir.ml" +# 33576 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let _startpos = _startpos_r1_ in let _endpos = _endpos_m_ in @@ -33588,26 +33591,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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*))) ) -# 33592 "parser_cocci_menhir.ml" +# 33595 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 33598 "parser_cocci_menhir.ml" +# 33601 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33605 "parser_cocci_menhir.ml" +# 33608 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33611 "parser_cocci_menhir.ml" +# 33614 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33639,12 +33642,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33643 "parser_cocci_menhir.ml" +# 33646 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33648 "parser_cocci_menhir.ml" +# 33651 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33656,26 +33659,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 525 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 33660 "parser_cocci_menhir.ml" +# 33663 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 33666 "parser_cocci_menhir.ml" +# 33669 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33673 "parser_cocci_menhir.ml" +# 33676 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33679 "parser_cocci_menhir.ml" +# 33682 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33712,17 +33715,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33716 "parser_cocci_menhir.ml" +# 33719 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33721 "parser_cocci_menhir.ml" +# 33724 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 33726 "parser_cocci_menhir.ml" +# 33729 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in @@ -33739,26 +33742,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 33743 "parser_cocci_menhir.ml" +# 33746 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 33749 "parser_cocci_menhir.ml" +# 33752 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33756 "parser_cocci_menhir.ml" +# 33759 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33762 "parser_cocci_menhir.ml" +# 33765 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33785,7 +33788,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33789 "parser_cocci_menhir.ml" +# 33792 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33796,26 +33799,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 509 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 33800 "parser_cocci_menhir.ml" +# 33803 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 33806 "parser_cocci_menhir.ml" +# 33809 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33813 "parser_cocci_menhir.ml" +# 33816 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33819 "parser_cocci_menhir.ml" +# 33822 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33842,7 +33845,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33846 "parser_cocci_menhir.ml" +# 33849 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33853,26 +33856,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 511 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 33857 "parser_cocci_menhir.ml" +# 33860 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 33863 "parser_cocci_menhir.ml" +# 33866 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33870 "parser_cocci_menhir.ml" +# 33873 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33876 "parser_cocci_menhir.ml" +# 33879 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33899,7 +33902,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 33903 "parser_cocci_menhir.ml" +# 33906 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -33910,26 +33913,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 513 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 33914 "parser_cocci_menhir.ml" +# 33917 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 33920 "parser_cocci_menhir.ml" +# 33923 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33927 "parser_cocci_menhir.ml" +# 33930 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33933 "parser_cocci_menhir.ml" +# 33936 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -33956,7 +33959,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 33960 "parser_cocci_menhir.ml" +# 33963 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let _startpos = _startpos_p00_ in let _endpos = _endpos_m_ in @@ -33968,26 +33971,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 515 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 33972 "parser_cocci_menhir.ml" +# 33975 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 33978 "parser_cocci_menhir.ml" +# 33981 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 33985 "parser_cocci_menhir.ml" +# 33988 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 33991 "parser_cocci_menhir.ml" +# 33994 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34023,12 +34026,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 34027 "parser_cocci_menhir.ml" +# 34030 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 49 "parser_cocci_menhir.mly" (string) -# 34032 "parser_cocci_menhir.ml" +# 34035 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let _startpos = _startpos_r00_ in let _endpos = _endpos_m_ in @@ -34046,26 +34049,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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*))) ) -# 34050 "parser_cocci_menhir.ml" +# 34053 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 34056 "parser_cocci_menhir.ml" +# 34059 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34063 "parser_cocci_menhir.ml" +# 34066 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34069 "parser_cocci_menhir.ml" +# 34072 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34092,7 +34095,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34096 "parser_cocci_menhir.ml" +# 34099 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -34103,26 +34106,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 525 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 34107 "parser_cocci_menhir.ml" +# 34110 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 34113 "parser_cocci_menhir.ml" +# 34116 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34120 "parser_cocci_menhir.ml" +# 34123 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34126 "parser_cocci_menhir.ml" +# 34129 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34154,12 +34157,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34158 "parser_cocci_menhir.ml" +# 34161 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34163 "parser_cocci_menhir.ml" +# 34166 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let _startpos = _startpos_ty100_ in let _endpos = _endpos_m_ in @@ -34175,26 +34178,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 34179 "parser_cocci_menhir.ml" +# 34182 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 34185 "parser_cocci_menhir.ml" +# 34188 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34192 "parser_cocci_menhir.ml" +# 34195 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34198 "parser_cocci_menhir.ml" +# 34201 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34221,7 +34224,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 52 "parser_cocci_menhir.mly" (Data.clt) -# 34225 "parser_cocci_menhir.ml" +# 34228 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -34232,26 +34235,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 535 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 34236 "parser_cocci_menhir.ml" +# 34239 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34242 "parser_cocci_menhir.ml" +# 34245 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34249 "parser_cocci_menhir.ml" +# 34252 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34255 "parser_cocci_menhir.ml" +# 34258 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34278,7 +34281,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34282 "parser_cocci_menhir.ml" +# 34285 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -34289,26 +34292,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 537 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 34293 "parser_cocci_menhir.ml" +# 34296 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34299 "parser_cocci_menhir.ml" +# 34302 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34306 "parser_cocci_menhir.ml" +# 34309 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34312 "parser_cocci_menhir.ml" +# 34315 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34335,7 +34338,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34339 "parser_cocci_menhir.ml" +# 34342 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let _startpos = _startpos_ty00_ in let _endpos = _endpos_m_ in @@ -34346,26 +34349,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 539 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 34350 "parser_cocci_menhir.ml" +# 34353 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34356 "parser_cocci_menhir.ml" +# 34359 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34363 "parser_cocci_menhir.ml" +# 34366 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34369 "parser_cocci_menhir.ml" +# 34372 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34398,7 +34401,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s00 : ( # 52 "parser_cocci_menhir.mly" (Data.clt) -# 34402 "parser_cocci_menhir.ml" +# 34405 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let _startpos = _startpos_s00_ in let _endpos = _endpos_m_ in @@ -34411,26 +34414,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 541 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) -# 34415 "parser_cocci_menhir.ml" +# 34418 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34421 "parser_cocci_menhir.ml" +# 34424 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34428 "parser_cocci_menhir.ml" +# 34431 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34434 "parser_cocci_menhir.ml" +# 34437 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34472,26 +34475,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 543 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 34476 "parser_cocci_menhir.ml" +# 34479 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34482 "parser_cocci_menhir.ml" +# 34485 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34489 "parser_cocci_menhir.ml" +# 34492 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34495 "parser_cocci_menhir.ml" +# 34498 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34533,13 +34536,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 34537 "parser_cocci_menhir.ml" +# 34540 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 34543 "parser_cocci_menhir.ml" +# 34546 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : 'tv_struct_or_union = Obj.magic s00 in let _startpos = _startpos_s00_ in @@ -34558,7 +34561,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 34562 "parser_cocci_menhir.ml" +# 34565 "parser_cocci_menhir.ml" in @@ -34568,26 +34571,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 34572 "parser_cocci_menhir.ml" +# 34575 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34578 "parser_cocci_menhir.ml" +# 34581 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34585 "parser_cocci_menhir.ml" +# 34588 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34591 "parser_cocci_menhir.ml" +# 34594 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34634,13 +34637,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 34638 "parser_cocci_menhir.ml" +# 34641 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 34644 "parser_cocci_menhir.ml" +# 34647 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let x000 : 'tv_ident = Obj.magic x000 in let s00 : 'tv_struct_or_union = Obj.magic s00 in @@ -34663,7 +34666,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34667 "parser_cocci_menhir.ml" +# 34670 "parser_cocci_menhir.ml" in @@ -34673,26 +34676,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 34677 "parser_cocci_menhir.ml" +# 34680 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34683 "parser_cocci_menhir.ml" +# 34686 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34690 "parser_cocci_menhir.ml" +# 34693 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34696 "parser_cocci_menhir.ml" +# 34699 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34734,18 +34737,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 34738 "parser_cocci_menhir.ml" +# 34741 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 34744 "parser_cocci_menhir.ml" +# 34747 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 34749 "parser_cocci_menhir.ml" +# 34752 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let _startpos = _startpos_s00_ in let _endpos = _endpos_m_ in @@ -34764,26 +34767,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( 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)) ) -# 34768 "parser_cocci_menhir.ml" +# 34771 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34774 "parser_cocci_menhir.ml" +# 34777 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34781 "parser_cocci_menhir.ml" +# 34784 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34787 "parser_cocci_menhir.ml" +# 34790 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34810,7 +34813,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 34814 "parser_cocci_menhir.ml" +# 34817 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let _startpos = _startpos_p00_ in let _endpos = _endpos_m_ in @@ -34821,26 +34824,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 556 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 34825 "parser_cocci_menhir.ml" +# 34828 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 34831 "parser_cocci_menhir.ml" +# 34834 "parser_cocci_menhir.ml" in let cv = # 39 "standard.mly" ( None ) -# 34838 "parser_cocci_menhir.ml" +# 34841 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34844 "parser_cocci_menhir.ml" +# 34847 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34877,12 +34880,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34881 "parser_cocci_menhir.ml" +# 34884 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 34886 "parser_cocci_menhir.ml" +# 34889 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34895,13 +34898,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 509 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 34899 "parser_cocci_menhir.ml" +# 34902 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34905 "parser_cocci_menhir.ml" +# 34908 "parser_cocci_menhir.ml" in let cv = @@ -34909,13 +34912,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34913 "parser_cocci_menhir.ml" +# 34916 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34919 "parser_cocci_menhir.ml" +# 34922 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -34952,12 +34955,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 34956 "parser_cocci_menhir.ml" +# 34959 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 34961 "parser_cocci_menhir.ml" +# 34964 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -34970,13 +34973,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 511 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 34974 "parser_cocci_menhir.ml" +# 34977 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 34980 "parser_cocci_menhir.ml" +# 34983 "parser_cocci_menhir.ml" in let cv = @@ -34984,13 +34987,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 34988 "parser_cocci_menhir.ml" +# 34991 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 34994 "parser_cocci_menhir.ml" +# 34997 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35027,12 +35030,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35031 "parser_cocci_menhir.ml" +# 35034 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35036 "parser_cocci_menhir.ml" +# 35039 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35045,13 +35048,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 513 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 35049 "parser_cocci_menhir.ml" +# 35052 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 35055 "parser_cocci_menhir.ml" +# 35058 "parser_cocci_menhir.ml" in let cv = @@ -35059,13 +35062,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35063 "parser_cocci_menhir.ml" +# 35066 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35069 "parser_cocci_menhir.ml" +# 35072 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35102,12 +35105,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 35106 "parser_cocci_menhir.ml" +# 35109 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35111 "parser_cocci_menhir.ml" +# 35114 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35121,13 +35124,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 515 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 35125 "parser_cocci_menhir.ml" +# 35128 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 35131 "parser_cocci_menhir.ml" +# 35134 "parser_cocci_menhir.ml" in let cv = @@ -35135,13 +35138,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35139 "parser_cocci_menhir.ml" +# 35142 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35145 "parser_cocci_menhir.ml" +# 35148 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35187,17 +35190,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 35191 "parser_cocci_menhir.ml" +# 35194 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 49 "parser_cocci_menhir.mly" (string) -# 35196 "parser_cocci_menhir.ml" +# 35199 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35201 "parser_cocci_menhir.ml" +# 35204 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35217,13 +35220,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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*))) ) -# 35221 "parser_cocci_menhir.ml" +# 35224 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 35227 "parser_cocci_menhir.ml" +# 35230 "parser_cocci_menhir.ml" in let cv = @@ -35231,13 +35234,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35235 "parser_cocci_menhir.ml" +# 35238 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35241 "parser_cocci_menhir.ml" +# 35244 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35274,12 +35277,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35278 "parser_cocci_menhir.ml" +# 35281 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35283 "parser_cocci_menhir.ml" +# 35286 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35292,13 +35295,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 525 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 35296 "parser_cocci_menhir.ml" +# 35299 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 35302 "parser_cocci_menhir.ml" +# 35305 "parser_cocci_menhir.ml" in let cv = @@ -35306,13 +35309,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35310 "parser_cocci_menhir.ml" +# 35313 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35316 "parser_cocci_menhir.ml" +# 35319 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35354,17 +35357,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35358 "parser_cocci_menhir.ml" +# 35361 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35363 "parser_cocci_menhir.ml" +# 35366 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35368 "parser_cocci_menhir.ml" +# 35371 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35382,13 +35385,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 35386 "parser_cocci_menhir.ml" +# 35389 "parser_cocci_menhir.ml" in # 561 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) -# 35392 "parser_cocci_menhir.ml" +# 35395 "parser_cocci_menhir.ml" in let cv = @@ -35396,13 +35399,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35400 "parser_cocci_menhir.ml" +# 35403 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35406 "parser_cocci_menhir.ml" +# 35409 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35439,12 +35442,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35443 "parser_cocci_menhir.ml" +# 35446 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35448 "parser_cocci_menhir.ml" +# 35451 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35457,13 +35460,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 509 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 35461 "parser_cocci_menhir.ml" +# 35464 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35467 "parser_cocci_menhir.ml" +# 35470 "parser_cocci_menhir.ml" in let cv = @@ -35471,13 +35474,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35475 "parser_cocci_menhir.ml" +# 35478 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35481 "parser_cocci_menhir.ml" +# 35484 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35514,12 +35517,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35518 "parser_cocci_menhir.ml" +# 35521 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35523 "parser_cocci_menhir.ml" +# 35526 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35532,13 +35535,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 511 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 35536 "parser_cocci_menhir.ml" +# 35539 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35542 "parser_cocci_menhir.ml" +# 35545 "parser_cocci_menhir.ml" in let cv = @@ -35546,13 +35549,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35550 "parser_cocci_menhir.ml" +# 35553 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35556 "parser_cocci_menhir.ml" +# 35559 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35589,12 +35592,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35593 "parser_cocci_menhir.ml" +# 35596 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35598 "parser_cocci_menhir.ml" +# 35601 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35607,13 +35610,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 513 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 35611 "parser_cocci_menhir.ml" +# 35614 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35617 "parser_cocci_menhir.ml" +# 35620 "parser_cocci_menhir.ml" in let cv = @@ -35621,13 +35624,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35625 "parser_cocci_menhir.ml" +# 35628 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35631 "parser_cocci_menhir.ml" +# 35634 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35664,12 +35667,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 35668 "parser_cocci_menhir.ml" +# 35671 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35673 "parser_cocci_menhir.ml" +# 35676 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35683,13 +35686,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 515 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 35687 "parser_cocci_menhir.ml" +# 35690 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35693 "parser_cocci_menhir.ml" +# 35696 "parser_cocci_menhir.ml" in let cv = @@ -35697,13 +35700,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35701 "parser_cocci_menhir.ml" +# 35704 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35707 "parser_cocci_menhir.ml" +# 35710 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35749,17 +35752,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 35753 "parser_cocci_menhir.ml" +# 35756 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 49 "parser_cocci_menhir.mly" (string) -# 35758 "parser_cocci_menhir.ml" +# 35761 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let r1 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35763 "parser_cocci_menhir.ml" +# 35766 "parser_cocci_menhir.ml" ) = Obj.magic r1 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35779,13 +35782,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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*))) ) -# 35783 "parser_cocci_menhir.ml" +# 35786 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35789 "parser_cocci_menhir.ml" +# 35792 "parser_cocci_menhir.ml" in let cv = @@ -35793,13 +35796,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35797 "parser_cocci_menhir.ml" +# 35800 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35803 "parser_cocci_menhir.ml" +# 35806 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35836,12 +35839,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35840 "parser_cocci_menhir.ml" +# 35843 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35845 "parser_cocci_menhir.ml" +# 35848 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35854,13 +35857,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 525 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 35858 "parser_cocci_menhir.ml" +# 35861 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35864 "parser_cocci_menhir.ml" +# 35867 "parser_cocci_menhir.ml" in let cv = @@ -35868,13 +35871,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35872 "parser_cocci_menhir.ml" +# 35875 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35878 "parser_cocci_menhir.ml" +# 35881 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35916,17 +35919,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35920 "parser_cocci_menhir.ml" +# 35923 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35925 "parser_cocci_menhir.ml" +# 35928 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let r0 : ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 35930 "parser_cocci_menhir.ml" +# 35933 "parser_cocci_menhir.ml" ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -35944,13 +35947,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 35948 "parser_cocci_menhir.ml" +# 35951 "parser_cocci_menhir.ml" in # 563 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) -# 35954 "parser_cocci_menhir.ml" +# 35957 "parser_cocci_menhir.ml" in let cv = @@ -35958,13 +35961,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 35962 "parser_cocci_menhir.ml" +# 35965 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 35968 "parser_cocci_menhir.ml" +# 35971 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -35996,7 +35999,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36000 "parser_cocci_menhir.ml" +# 36003 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36008,13 +36011,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 509 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) -# 36012 "parser_cocci_menhir.ml" +# 36015 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 36018 "parser_cocci_menhir.ml" +# 36021 "parser_cocci_menhir.ml" in let cv = @@ -36022,13 +36025,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36026 "parser_cocci_menhir.ml" +# 36029 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36032 "parser_cocci_menhir.ml" +# 36035 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36060,7 +36063,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36064 "parser_cocci_menhir.ml" +# 36067 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36072,13 +36075,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 511 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) -# 36076 "parser_cocci_menhir.ml" +# 36079 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 36082 "parser_cocci_menhir.ml" +# 36085 "parser_cocci_menhir.ml" in let cv = @@ -36086,13 +36089,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36090 "parser_cocci_menhir.ml" +# 36093 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36096 "parser_cocci_menhir.ml" +# 36099 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36124,7 +36127,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36128 "parser_cocci_menhir.ml" +# 36131 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36136,13 +36139,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 513 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) -# 36140 "parser_cocci_menhir.ml" +# 36143 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 36146 "parser_cocci_menhir.ml" +# 36149 "parser_cocci_menhir.ml" in let cv = @@ -36150,13 +36153,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36154 "parser_cocci_menhir.ml" +# 36157 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36160 "parser_cocci_menhir.ml" +# 36163 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36188,7 +36191,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 36192 "parser_cocci_menhir.ml" +# 36195 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36201,13 +36204,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 515 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = p in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 36205 "parser_cocci_menhir.ml" +# 36208 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 36211 "parser_cocci_menhir.ml" +# 36214 "parser_cocci_menhir.ml" in let cv = @@ -36215,13 +36218,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36219 "parser_cocci_menhir.ml" +# 36222 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36225 "parser_cocci_menhir.ml" +# 36228 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36262,12 +36265,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 36266 "parser_cocci_menhir.ml" +# 36269 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let r00 : ( # 49 "parser_cocci_menhir.mly" (string) -# 36271 "parser_cocci_menhir.ml" +# 36274 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36286,13 +36289,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 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*))) ) -# 36290 "parser_cocci_menhir.ml" +# 36293 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 36296 "parser_cocci_menhir.ml" +# 36299 "parser_cocci_menhir.ml" in let cv = @@ -36300,13 +36303,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36304 "parser_cocci_menhir.ml" +# 36307 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36310 "parser_cocci_menhir.ml" +# 36313 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36338,7 +36341,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36342 "parser_cocci_menhir.ml" +# 36345 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36350,13 +36353,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 525 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) -# 36354 "parser_cocci_menhir.ml" +# 36357 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 36360 "parser_cocci_menhir.ml" +# 36363 "parser_cocci_menhir.ml" in let cv = @@ -36364,13 +36367,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36368 "parser_cocci_menhir.ml" +# 36371 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36374 "parser_cocci_menhir.ml" +# 36377 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36407,12 +36410,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty200 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36411 "parser_cocci_menhir.ml" +# 36414 "parser_cocci_menhir.ml" ) = Obj.magic ty200 in let ty100 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36416 "parser_cocci_menhir.ml" +# 36419 "parser_cocci_menhir.ml" ) = Obj.magic ty100 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36429,13 +36432,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (Ast0.BaseType (Ast.LongLongType, [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) -# 36433 "parser_cocci_menhir.ml" +# 36436 "parser_cocci_menhir.ml" in # 564 "parser_cocci_menhir.mly" ( ty ) -# 36439 "parser_cocci_menhir.ml" +# 36442 "parser_cocci_menhir.ml" in let cv = @@ -36443,13 +36446,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36447 "parser_cocci_menhir.ml" +# 36450 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36453 "parser_cocci_menhir.ml" +# 36456 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36481,7 +36484,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 52 "parser_cocci_menhir.mly" (Data.clt) -# 36485 "parser_cocci_menhir.ml" +# 36488 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36493,13 +36496,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 535 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) -# 36497 "parser_cocci_menhir.ml" +# 36500 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 36503 "parser_cocci_menhir.ml" +# 36506 "parser_cocci_menhir.ml" in let cv = @@ -36507,13 +36510,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36511 "parser_cocci_menhir.ml" +# 36514 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36517 "parser_cocci_menhir.ml" +# 36520 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36545,7 +36548,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36549 "parser_cocci_menhir.ml" +# 36552 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36557,13 +36560,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 537 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) -# 36561 "parser_cocci_menhir.ml" +# 36564 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 36567 "parser_cocci_menhir.ml" +# 36570 "parser_cocci_menhir.ml" in let cv = @@ -36571,13 +36574,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36575 "parser_cocci_menhir.ml" +# 36578 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36581 "parser_cocci_menhir.ml" +# 36584 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36609,7 +36612,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let ty00 : ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 36613 "parser_cocci_menhir.ml" +# 36616 "parser_cocci_menhir.ml" ) = Obj.magic ty00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36621,13 +36624,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 539 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) -# 36625 "parser_cocci_menhir.ml" +# 36628 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 36631 "parser_cocci_menhir.ml" +# 36634 "parser_cocci_menhir.ml" in let cv = @@ -36635,13 +36638,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36639 "parser_cocci_menhir.ml" +# 36642 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36645 "parser_cocci_menhir.ml" +# 36648 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36679,7 +36682,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let s00 : ( # 52 "parser_cocci_menhir.mly" (Data.clt) -# 36683 "parser_cocci_menhir.ml" +# 36686 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -36693,13 +36696,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 541 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) -# 36697 "parser_cocci_menhir.ml" +# 36700 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 36703 "parser_cocci_menhir.ml" +# 36706 "parser_cocci_menhir.ml" in let cv = @@ -36707,13 +36710,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36711 "parser_cocci_menhir.ml" +# 36714 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36717 "parser_cocci_menhir.ml" +# 36720 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36761,13 +36764,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 543 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 36765 "parser_cocci_menhir.ml" +# 36768 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 36771 "parser_cocci_menhir.ml" +# 36774 "parser_cocci_menhir.ml" in let cv = @@ -36775,13 +36778,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36779 "parser_cocci_menhir.ml" +# 36782 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36785 "parser_cocci_menhir.ml" +# 36788 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36828,13 +36831,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 36832 "parser_cocci_menhir.ml" +# 36835 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 36838 "parser_cocci_menhir.ml" +# 36841 "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 @@ -36854,7 +36857,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 39 "standard.mly" ( None ) -# 36858 "parser_cocci_menhir.ml" +# 36861 "parser_cocci_menhir.ml" in @@ -36864,13 +36867,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 36868 "parser_cocci_menhir.ml" +# 36871 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 36874 "parser_cocci_menhir.ml" +# 36877 "parser_cocci_menhir.ml" in let cv = @@ -36878,13 +36881,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36882 "parser_cocci_menhir.ml" +# 36885 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 36888 "parser_cocci_menhir.ml" +# 36891 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -36936,13 +36939,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 36940 "parser_cocci_menhir.ml" +# 36943 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 36946 "parser_cocci_menhir.ml" +# 36949 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let x000 : 'tv_ident = Obj.magic x000 in let s00 : 'tv_struct_or_union = Obj.magic s00 in @@ -36966,7 +36969,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36970 "parser_cocci_menhir.ml" +# 36973 "parser_cocci_menhir.ml" in @@ -36976,13 +36979,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), P.clt2mcode "{" l, d, P.clt2mcode "}" r)) ) -# 36980 "parser_cocci_menhir.ml" +# 36983 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 36986 "parser_cocci_menhir.ml" +# 36989 "parser_cocci_menhir.ml" in let cv = @@ -36990,13 +36993,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 36994 "parser_cocci_menhir.ml" +# 36997 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 37000 "parser_cocci_menhir.ml" +# 37003 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37043,18 +37046,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let r00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 37047 "parser_cocci_menhir.ml" +# 37050 "parser_cocci_menhir.ml" ) = Obj.magic r00 in let d00 : 'tv_struct_decl_list = Obj.magic d00 in let l00 : ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 37053 "parser_cocci_menhir.ml" +# 37056 "parser_cocci_menhir.ml" ) = Obj.magic l00 in let s00 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 37058 "parser_cocci_menhir.ml" +# 37061 "parser_cocci_menhir.ml" ) = Obj.magic s00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -37074,13 +37077,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( 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)) ) -# 37078 "parser_cocci_menhir.ml" +# 37081 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 37084 "parser_cocci_menhir.ml" +# 37087 "parser_cocci_menhir.ml" in let cv = @@ -37088,13 +37091,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 37092 "parser_cocci_menhir.ml" +# 37095 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 37098 "parser_cocci_menhir.ml" +# 37101 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37126,7 +37129,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let p00 : ( # 61 "parser_cocci_menhir.mly" (string * Data.clt) -# 37130 "parser_cocci_menhir.ml" +# 37133 "parser_cocci_menhir.ml" ) = Obj.magic p00 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in @@ -37138,13 +37141,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 556 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 37142 "parser_cocci_menhir.ml" +# 37145 "parser_cocci_menhir.ml" in # 565 "parser_cocci_menhir.mly" ( ty ) -# 37148 "parser_cocci_menhir.ml" +# 37151 "parser_cocci_menhir.ml" in let cv = @@ -37152,13 +37155,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 41 "standard.mly" ( Some x ) -# 37156 "parser_cocci_menhir.ml" +# 37159 "parser_cocci_menhir.ml" in # 582 "parser_cocci_menhir.mly" ( P.pointerify (P.make_cv cv ty) m ) -# 37162 "parser_cocci_menhir.ml" +# 37165 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37189,13 +37192,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 37193 "parser_cocci_menhir.ml" +# 37196 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in let lp : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 37199 "parser_cocci_menhir.ml" +# 37202 "parser_cocci_menhir.ml" ) = Obj.magic lp in let _startpos = _startpos_lp_ in let _endpos = _endpos_rp_ in @@ -37204,7 +37207,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( let (mids,code) = t in Ast0.wrap (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 37208 "parser_cocci_menhir.ml" +# 37211 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37228,7 +37231,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_typedef_ident = # 1694 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode _1)) ) -# 37232 "parser_cocci_menhir.ml" +# 37235 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37249,7 +37252,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 67 "parser_cocci_menhir.mly" (Parse_aux.info) -# 37253 "parser_cocci_menhir.ml" +# 37256 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in @@ -37257,7 +37260,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 1696 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = _1 in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 37261 "parser_cocci_menhir.ml" +# 37264 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37281,7 +37284,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_eexpr_dot_expressions_ = # 1332 "parser_cocci_menhir.mly" ( _1 ) -# 37285 "parser_cocci_menhir.ml" +# 37288 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37308,14 +37311,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 37312 "parser_cocci_menhir.ml" +# 37315 "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_ = # 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 37319 "parser_cocci_menhir.ml" +# 37322 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37342,14 +37345,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 37346 "parser_cocci_menhir.ml" +# 37349 "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_ = # 1336 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 37353 "parser_cocci_menhir.ml" +# 37356 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37379,7 +37382,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_eexpr_dot_expressions_ = # 1338 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37383 "parser_cocci_menhir.ml" +# 37386 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37406,7 +37409,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 37410 "parser_cocci_menhir.ml" +# 37413 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in @@ -37414,7 +37417,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 1340 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37418 "parser_cocci_menhir.ml" +# 37421 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37441,14 +37444,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 37445 "parser_cocci_menhir.ml" +# 37448 "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_ = # 1343 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 37452 "parser_cocci_menhir.ml" +# 37455 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37484,18 +37487,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 37488 "parser_cocci_menhir.ml" +# 37491 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 37494 "parser_cocci_menhir.ml" +# 37497 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 37499 "parser_cocci_menhir.ml" +# 37502 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in @@ -37504,7 +37507,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 37508 "parser_cocci_menhir.ml" +# 37511 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37528,7 +37531,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_eexpr_invalid_ = # 1332 "parser_cocci_menhir.mly" ( _1 ) -# 37532 "parser_cocci_menhir.ml" +# 37535 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37555,14 +37558,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 37559 "parser_cocci_menhir.ml" +# 37562 "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_ = # 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 37566 "parser_cocci_menhir.ml" +# 37569 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37589,14 +37592,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 37593 "parser_cocci_menhir.ml" +# 37596 "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_ = # 1336 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 37600 "parser_cocci_menhir.ml" +# 37603 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37626,7 +37629,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_eexpr_invalid_ = # 1338 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37630 "parser_cocci_menhir.ml" +# 37633 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37653,7 +37656,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 37657 "parser_cocci_menhir.ml" +# 37660 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in @@ -37661,7 +37664,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 1340 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37665 "parser_cocci_menhir.ml" +# 37668 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37688,14 +37691,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 37692 "parser_cocci_menhir.ml" +# 37695 "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_ = # 1343 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 37699 "parser_cocci_menhir.ml" +# 37702 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37731,18 +37734,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 37735 "parser_cocci_menhir.ml" +# 37738 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 37741 "parser_cocci_menhir.ml" +# 37744 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 37746 "parser_cocci_menhir.ml" +# 37749 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in @@ -37751,7 +37754,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 37755 "parser_cocci_menhir.ml" +# 37758 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37775,7 +37778,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_eexpr_nest_expressions_ = # 1332 "parser_cocci_menhir.mly" ( _1 ) -# 37779 "parser_cocci_menhir.ml" +# 37782 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37802,14 +37805,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 37806 "parser_cocci_menhir.ml" +# 37809 "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_ = # 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 37813 "parser_cocci_menhir.ml" +# 37816 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37836,14 +37839,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 37840 "parser_cocci_menhir.ml" +# 37843 "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_ = # 1336 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 37847 "parser_cocci_menhir.ml" +# 37850 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37873,7 +37876,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_eexpr_nest_expressions_ = # 1338 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37877 "parser_cocci_menhir.ml" +# 37880 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37900,7 +37903,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 37904 "parser_cocci_menhir.ml" +# 37907 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in @@ -37908,7 +37911,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 1340 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 37912 "parser_cocci_menhir.ml" +# 37915 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37935,14 +37938,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 37939 "parser_cocci_menhir.ml" +# 37942 "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_ = # 1343 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 37946 "parser_cocci_menhir.ml" +# 37949 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -37978,18 +37981,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 37982 "parser_cocci_menhir.ml" +# 37985 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 37988 "parser_cocci_menhir.ml" +# 37991 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 37993 "parser_cocci_menhir.ml" +# 37996 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in @@ -37998,7 +38001,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 38002 "parser_cocci_menhir.ml" +# 38005 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38022,7 +38025,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_expr_invalid_ = # 1332 "parser_cocci_menhir.mly" ( _1 ) -# 38026 "parser_cocci_menhir.ml" +# 38029 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38049,14 +38052,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 38053 "parser_cocci_menhir.ml" +# 38056 "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_ = # 1334 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 38060 "parser_cocci_menhir.ml" +# 38063 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38083,14 +38086,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 88 "parser_cocci_menhir.mly" (Data.clt) -# 38087 "parser_cocci_menhir.ml" +# 38090 "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_ = # 1336 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 38094 "parser_cocci_menhir.ml" +# 38097 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38120,7 +38123,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_unary_expr_expr_invalid_ = # 1338 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 38124 "parser_cocci_menhir.ml" +# 38127 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38147,7 +38150,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 38151 "parser_cocci_menhir.ml" +# 38154 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in @@ -38155,7 +38158,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct # 1340 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 38159 "parser_cocci_menhir.ml" +# 38162 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38182,14 +38185,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 38186 "parser_cocci_menhir.ml" +# 38189 "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_ = # 1343 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 38193 "parser_cocci_menhir.ml" +# 38196 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38225,18 +38228,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 80 "parser_cocci_menhir.mly" (Data.clt) -# 38229 "parser_cocci_menhir.ml" +# 38232 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 79 "parser_cocci_menhir.mly" (Data.clt) -# 38235 "parser_cocci_menhir.ml" +# 38238 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 60 "parser_cocci_menhir.mly" (Data.clt) -# 38240 "parser_cocci_menhir.ml" +# 38243 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in @@ -38245,7 +38248,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 38249 "parser_cocci_menhir.ml" +# 38252 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38266,14 +38269,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 96 "parser_cocci_menhir.mly" (Data.clt) -# 38270 "parser_cocci_menhir.ml" +# 38273 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = # 1349 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.GetRef _1 ) -# 38277 "parser_cocci_menhir.ml" +# 38280 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38294,14 +38297,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 38298 "parser_cocci_menhir.ml" +# 38301 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = # 1350 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.DeRef _1 ) -# 38305 "parser_cocci_menhir.ml" +# 38308 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38322,14 +38325,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 38326 "parser_cocci_menhir.ml" +# 38329 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = # 1351 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnPlus _1 ) -# 38333 "parser_cocci_menhir.ml" +# 38336 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38350,14 +38353,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 38354 "parser_cocci_menhir.ml" +# 38357 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = # 1352 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnMinus _1 ) -# 38361 "parser_cocci_menhir.ml" +# 38364 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38378,14 +38381,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 38382 "parser_cocci_menhir.ml" +# 38385 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = # 1353 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Tilde _1 ) -# 38389 "parser_cocci_menhir.ml" +# 38392 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38415,7 +38418,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_when_start = # 1914 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS((Ast0.wrap(Ast0.Exp(_1)))::_2)) ) -# 38419 "parser_cocci_menhir.ml" +# 38422 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38445,7 +38448,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_when_start = # 1916 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1@_2)) ) -# 38449 "parser_cocci_menhir.ml" +# 38452 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38469,7 +38472,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_whenppdecs = # 931 "parser_cocci_menhir.mly" ( w ) -# 38473 "parser_cocci_menhir.ml" +# 38476 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38505,7 +38508,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = # 1982 "parser_cocci_menhir.mly" ( [Ast0.WhenNot w] ) -# 38509 "parser_cocci_menhir.ml" +# 38512 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38541,7 +38544,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = # 1983 "parser_cocci_menhir.mly" ( [Ast0.WhenAlways w] ) -# 38545 "parser_cocci_menhir.ml" +# 38548 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38573,7 +38576,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = # 1985 "parser_cocci_menhir.mly" ( List.map (function x -> Ast0.WhenModifier(x)) _2 ) -# 38577 "parser_cocci_menhir.ml" +# 38580 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38609,7 +38612,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = # 1986 "parser_cocci_menhir.mly" ( [Ast0.WhenNotTrue e] ) -# 38613 "parser_cocci_menhir.ml" +# 38616 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38645,7 +38648,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = # 1987 "parser_cocci_menhir.mly" ( [Ast0.WhenNotFalse e] ) -# 38649 "parser_cocci_menhir.ml" +# 38652 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -38668,8 +38671,8 @@ let rec script_meta_main = fun lexer lexbuf -> (Obj.magic (MenhirInterpreter.entry 1826 lexer lexbuf) : ( # 162 "parser_cocci_menhir.mly" - (string * Ast_cocci.meta_name) -# 38673 "parser_cocci_menhir.ml" + (string * Ast_cocci.meta_name * Ast_cocci.metavar) +# 38676 "parser_cocci_menhir.ml" )) and rule_name = @@ -38677,7 +38680,7 @@ and rule_name = (Obj.magic (MenhirInterpreter.entry 1754 lexer lexbuf) : ( # 156 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 38681 "parser_cocci_menhir.ml" +# 38684 "parser_cocci_menhir.ml" )) and reinit = @@ -38685,7 +38688,7 @@ and reinit = (Obj.magic (MenhirInterpreter.entry 1752 lexer lexbuf) : ( # 134 "parser_cocci_menhir.mly" (unit) -# 38689 "parser_cocci_menhir.ml" +# 38692 "parser_cocci_menhir.ml" )) and plus_main = @@ -38693,7 +38696,7 @@ and plus_main = (Obj.magic (MenhirInterpreter.entry 1716 lexer lexbuf) : ( # 143 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 38697 "parser_cocci_menhir.ml" +# 38700 "parser_cocci_menhir.ml" )) and plus_exp_main = @@ -38701,7 +38704,7 @@ and plus_exp_main = (Obj.magic (MenhirInterpreter.entry 1708 lexer lexbuf) : ( # 146 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 38705 "parser_cocci_menhir.ml" +# 38708 "parser_cocci_menhir.ml" )) and never_used = @@ -38709,7 +38712,7 @@ and never_used = (Obj.magic (MenhirInterpreter.entry 1702 lexer lexbuf) : ( # 171 "parser_cocci_menhir.mly" (unit) -# 38713 "parser_cocci_menhir.ml" +# 38716 "parser_cocci_menhir.ml" )) and minus_main = @@ -38717,7 +38720,7 @@ and minus_main = (Obj.magic (MenhirInterpreter.entry 1622 lexer lexbuf) : ( # 137 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 38721 "parser_cocci_menhir.ml" +# 38724 "parser_cocci_menhir.ml" )) and minus_exp_main = @@ -38725,7 +38728,7 @@ and minus_exp_main = (Obj.magic (MenhirInterpreter.entry 1610 lexer lexbuf) : ( # 140 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 38729 "parser_cocci_menhir.ml" +# 38732 "parser_cocci_menhir.ml" )) and meta_main = @@ -38733,7 +38736,7 @@ and meta_main = (Obj.magic (MenhirInterpreter.entry 1607 lexer lexbuf) : ( # 160 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 38737 "parser_cocci_menhir.ml" +# 38740 "parser_cocci_menhir.ml" )) and iso_rule_name = @@ -38741,7 +38744,7 @@ and iso_rule_name = (Obj.magic (MenhirInterpreter.entry 1603 lexer lexbuf) : ( # 152 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 38745 "parser_cocci_menhir.ml" +# 38748 "parser_cocci_menhir.ml" )) and iso_meta_main = @@ -38749,7 +38752,7 @@ and iso_meta_main = (Obj.magic (MenhirInterpreter.entry 1349 lexer lexbuf) : ( # 168 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 38753 "parser_cocci_menhir.ml" +# 38756 "parser_cocci_menhir.ml" )) and iso_main = @@ -38757,7 +38760,7 @@ and iso_main = (Obj.magic (MenhirInterpreter.entry 18 lexer lexbuf) : ( # 165 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 38761 "parser_cocci_menhir.ml" +# 38764 "parser_cocci_menhir.ml" )) and include_main = @@ -38765,7 +38768,7 @@ and include_main = (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : ( # 149 "parser_cocci_menhir.mly" (Data.incl_iso list) -# 38769 "parser_cocci_menhir.ml" +# 38772 "parser_cocci_menhir.ml" )) diff --git a/parsing_cocci/parser_cocci_menhir.mli b/parsing_cocci/parser_cocci_menhir.mli index c6d8f57..bb19612 100644 --- a/parsing_cocci/parser_cocci_menhir.mli +++ b/parsing_cocci/parser_cocci_menhir.mli @@ -180,7 +180,7 @@ type token = | EOF -val script_meta_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (string * Ast_cocci.meta_name) +val script_meta_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (string * Ast_cocci.meta_name * Ast_cocci.metavar) val rule_name: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_cocci.rulename) val reinit: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (unit) val plus_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast0_cocci.rule) diff --git a/parsing_cocci/parser_cocci_menhir.mly b/parsing_cocci/parser_cocci_menhir.mly index b081347..f12389e 100644 --- a/parsing_cocci/parser_cocci_menhir.mly +++ b/parsing_cocci/parser_cocci_menhir.mly @@ -159,7 +159,7 @@ rule_name %start meta_main %type <(Ast_cocci.metavar,Ast_cocci.metavar) Common.either list> meta_main -%start script_meta_main +%start script_meta_main %start iso_main %type iso_main @@ -2045,6 +2045,9 @@ never_used: TPragma { () } script_meta_main: py=pure_ident TShOp TRuleName TDot cocci=pure_ident TMPtVirg - { (P.id2name py, ($3, P.id2name cocci)) } + { let mv = Parse_aux.lookup $3 (P.id2name cocci) in + (P.id2name py, ($3, P.id2name cocci), mv) } | py=pure_ident TShOp TVirtual TDot cocci=pure_ident TMPtVirg - { (P.id2name py, ("virtual", P.id2name cocci)) } + { let name = ("virtual", P.id2name cocci) in + let mv = Ast.MetaIdDecl(Ast.NONE,name) in + (P.id2name py, name, mv) } diff --git a/parsing_cocci/pretty_print_cocci.ml b/parsing_cocci/pretty_print_cocci.ml index d669192..f8f6a13 100644 --- a/parsing_cocci/pretty_print_cocci.ml +++ b/parsing_cocci/pretty_print_cocci.ml @@ -841,11 +841,11 @@ let script_header str lang deps code = let unparse z = match z with - Ast.InitialScriptRule (lang,deps,code) -> + Ast.InitialScriptRule (name,lang,deps,code) -> script_header "initialize" lang deps code - | Ast.FinalScriptRule (lang,deps,code) -> + | Ast.FinalScriptRule (name,lang,deps,code) -> script_header "finalize" lang deps code - | Ast.ScriptRule (lang,deps,bindings,code) -> + | Ast.ScriptRule (name,lang,deps,bindings,code) -> script_header "script" lang deps code | Ast.CocciRule (nm, (deps, drops, exists), x, _, _) -> print_string "@@"; diff --git a/parsing_cocci/unitary_ast0.ml b/parsing_cocci/unitary_ast0.ml index 35e9261..99e4132 100644 --- a/parsing_cocci/unitary_ast0.ml +++ b/parsing_cocci/unitary_ast0.ml @@ -243,8 +243,8 @@ let do_unitary rules = [] -> ([],[]) | (r::rules) -> match r with - Ast0.ScriptRule (_,_,_,_) - | Ast0.InitialScriptRule (_,_,_) | Ast0.FinalScriptRule (_,_,_) -> + Ast0.ScriptRule (_,_,_,_,_) + | Ast0.InitialScriptRule (_,_,_,_) | Ast0.FinalScriptRule (_,_,_,_) -> let (x,rules) = loop rules in (x, r::rules) | Ast0.CocciRule ((minus,metavars,chosen_isos),((plus,_) as plusz),rt) -> diff --git a/pycaml/Makefile b/pycaml/Makefile index aa0a21b..1032941 100644 --- a/pycaml/Makefile +++ b/pycaml/Makefile @@ -25,6 +25,7 @@ pycaml.customtop: byte-code-library clean:: rm -f pycaml.customtop + rm -f *.cm[aiox] *.a distclean:: clean diff --git a/python/no_pycocci.ml b/python/no_pycocci.ml index 6aa57a8..8658272 100644 --- a/python/no_pycocci.ml +++ b/python/no_pycocci.ml @@ -78,7 +78,7 @@ let build_classes env = failwith "no python" let build_variable name value = failwith "no python" -let contains_binding e (_,(r,m)) = failwith "no python" +let contains_binding e (_,(r,m),_) = failwith "no python" let construct_variables mv e = failwith "no python" diff --git a/python/yes_pycocci.ml b/python/yes_pycocci.ml index fa753e9..f47db46 100644 --- a/python/yes_pycocci.ml +++ b/python/yes_pycocci.ml @@ -224,7 +224,7 @@ let build_variable name value = check_int_return_value (pydict_setitemstring(pymodule_getdict mx, name, value)) -let contains_binding e (_,(r,m)) = +let contains_binding e (_,(r,m),_) = try let _ = List.find (function ((re, rm), _) -> r =*= re && m =$= rm) e in true @@ -250,7 +250,7 @@ let construct_variables mv e = (pytuple_fromsingle (str)) in - List.iter (function (py,(r,m)) -> + List.iter (function (py,(r,m),_) -> match find_binding (r,m) with None -> () | Some (_, Ast_c.MetaExprVal (expr,_)) -> diff --git a/readme.txt b/readme.txt index 55809b3..8a50449 100644 --- a/readme.txt +++ b/readme.txt @@ -38,3 +38,8 @@ files in the docs/ directory. You may need to install the texlive-fonts-extra packages from your distribution to compile some of the LaTeX documentation files. + ** Runtime dependencies under Debian/Ubuntu** + + - For the OCaml scripting feature in SmPL + ocaml-native-compilers + or ocaml-nox diff --git a/scripts/spatch.bash_completion b/scripts/spatch.bash_completion new file mode 100644 index 0000000..9a0254b --- /dev/null +++ b/scripts/spatch.bash_completion @@ -0,0 +1,99 @@ +# Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. +# Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. +# Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. +# 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. +# +# http://coccinelle.lip6.fr/ + + +# From bash completion of git: __gitcomp_1 +__spatchcomp_1 () +{ + local c IFS=' '$'\t'$'\n' + for c in $1; do + case "$c" in + -*) printf %s$'\n' "$c " ;; + */) printf %s$'\n' "$c" ;; + *) printf %s$'\n' "$c " ;; + esac + done +} + +have spatch && +_spatch() +{ + local cur prev xspec + + COMPREPLY=() + cur=${COMP_WORDS[COMP_CWORD]} + prev=${COMP_WORDS[COMP_CWORD-1]} + _spatch_options="-parse_cocci -sp_file -I -dir -patch + -iso_file -macro_file -macro_file_builtins + -inplace -outplace -use_glimpse -help -o -ignore_unknown_options + -include_headers -no_includes -all_includes -local_includes + -quiet -very_quiet -debug -timeout -test" + + if [[ $COMP_CWORD -eq 1 ]]; then + local IFS=$'\n' + COMPREPLY=( $(compgen -W "$(__spatchcomp_1 "${_spatch_options}")" -- $cur) ) + return 0 + fi + case "$prev" in + -parse_cocci|-sp_file) + xspec="!*.cocci" + ;; + -iso_file) + xspec="!*.iso" + ;; + -macro_file|-macro_file_builtins) + xspec="!*.h" + ;; + -I|-dir|-patch) + xspec="" + ;; + *) + xspec="!*.c" + ;; + esac + if [[ "$xspec" == "" ]]; then + COMPREPLY=( $( compgen -d -o nospace -S '/' -- "$cur" ) ) + elif [[ "$cur" == -* ]]; then + local IFS=$'\n' + COMPREPLY=( $(compgen -W "$(__spatchcomp_1 "${_spatch_options}")" -- $cur) ) + elif [[ "$xspec" == "!*.c" ]]; then + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -o nospace -S '/' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -f -X "$xspec" -- "$cur" ) \ + $( compgen -d -o nospace -S '/' -- "$cur" ) ) + fi + return 0 +} + +complete -F _spatch -o bashdefault -o default -o nospace spatch \ + || complete -F _spatch -o default -o nospace spatch + +complete -F _spatch -o bashdefault -o default -o nospace spatch.opt \ + || complete -F _spatch -o default -o nospace spatch.opt + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/test.ml b/test.ml index a10fce0..fad1e1e 100644 --- a/test.ml +++ b/test.ml @@ -22,6 +22,78 @@ *) +(* + * Copyright 2010, 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. + *) + + +(* + * Copyright 2010, 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. + *) + + +(* + * Copyright 2010, 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. + *) + + (* * Copyright 2005-2010, Ecole des Mines de Nantes, University of Copenhagen * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix diff --git a/testing.ml b/testing.ml index a224807..dee8ff1 100644 --- a/testing.ml +++ b/testing.ml @@ -460,6 +460,17 @@ let test_parse_cocci file = let (_,xs,_,_,_,_,grep_tokens,query) = Parse_cocci.process file (Some !Config.std_iso) false in xs +> List.iter Pretty_print_cocci.unparse; + Format.print_newline(); + (* compile ocaml script code *) + (match Prepare_ocamlcocci.prepare file xs with + None -> () + | Some ocaml_script_file -> + (* compile file *) + Prepare_ocamlcocci.load_file ocaml_script_file; + (* remove file *) + Prepare_ocamlcocci.clean_file ocaml_script_file; + (* Print the list of registered functions *) + Prepare_ocamlcocci.test ()); Printf.printf "grep tokens\n"; (match grep_tokens with None -> pr "No query" diff --git a/tests/condexp.c b/tests/condexp.c new file mode 100644 index 0000000..e881bbf --- /dev/null +++ b/tests/condexp.c @@ -0,0 +1,13 @@ +int +main(int argc, char *argv[]) +{ +// ... + dpy = XOpenDisplay (displayname); + if (!dpy) { + fprintf (stderr, "%s: unable to open display \"%s\"\n", + ProgramName, XDisplayName (displayname)); + Exit (1); + } + screenno = DefaultScreen (dpy); +// ... +} diff --git a/tests/condexp.cocci b/tests/condexp.cocci new file mode 100644 index 0000000..191b1df --- /dev/null +++ b/tests/condexp.cocci @@ -0,0 +1,10 @@ +@@ +identifier displayname; +@@ +( +-XDisplayName(NULL) ++getenv("DISPLAY") +| +-XDisplayName(displayname) ++displayname ? displayname : getenv("DISPLAY") +) diff --git a/tests/condexp.res b/tests/condexp.res new file mode 100644 index 0000000..7689337 --- /dev/null +++ b/tests/condexp.res @@ -0,0 +1,13 @@ +int +main(int argc, char *argv[]) +{ +// ... + dpy = XOpenDisplay (displayname); + if (!dpy) { + fprintf (stderr, "%s: unable to open display \"%s\"\n", + ProgramName, displayname ? displayname : getenv("DISPLAY")); + Exit (1); + } + screenno = DefaultScreen (dpy); +// ... +} -- 2.20.1