X-Git-Url: https://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/b1b2de814d2c59af2526bc19d41bb22a0c1fd16d..90aeb998d88488b4402e7b211b064056d175fcbb:/parsing_cocci/data.ml diff --git a/parsing_cocci/data.ml b/parsing_cocci/data.ml index 98ca9fe..e1a244f 100644 --- a/parsing_cocci/data.ml +++ b/parsing_cocci/data.ml @@ -1,23 +1,25 @@ (* -* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller -* 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. + *) module Ast0 = Ast0_cocci @@ -28,10 +30,14 @@ module Ast = Ast_cocci metavariables *) type fresh = bool +type incl_iso = + Include of string | Iso of (string,string) Common.either + | Virt of string list (* virtual rules *) + type clt = line_type * int * int * int * int (* starting spaces *) * - (string * Ast0.position_info) list (* code before *) * - (string * Ast0.position_info) list (* code after *) * + (Ast_cocci.added_string * Ast0.position_info) list (* code before *) * + (Ast_cocci.added_string * Ast0.position_info) list (* code after *) * Ast0.meta_pos (* position variable, minus only *) (* ---------------------------------------------------------------------- *) @@ -40,21 +46,30 @@ type clt = and line_type = MINUS | OPTMINUS | UNIQUEMINUS - | PLUS + | PLUS | PLUSPLUS | CONTEXT | UNIQUE | OPT -type iconstraints = Ast0.ident list -type econstraints = Ast0.expression list +type iconstraints = Ast.idconstraint +type econstraints = Ast0.constraints type pconstraints = Ast.meta_name list let in_rule_name = ref false let in_meta = ref false let in_iso = ref false let in_generating = ref false +let ignore_patch_or_match = ref false let in_prolog = ref false +(* state machine for lexer..., allows smpl keywords as type names *) +let saw_struct = ref false let inheritable_positions = ref ([] : string list) (* rules from which posns can be inherited *) +let call_in_meta f = + in_meta := true; saw_struct := false; + let res = f() in + in_meta := false; + res + let all_metadecls = (Hashtbl.create(100) : (string, Ast.metavar list) Hashtbl.t) @@ -65,6 +80,13 @@ let add_id_meta: (Ast.meta_name -> iconstraints -> Ast0.pure -> unit) ref = ref (fun _ -> failwith "uninitialized add_meta") +let add_virt_id_meta_found: (string -> string -> unit) ref = + ref (fun _ -> failwith "uninitialized add_meta") + +let add_virt_id_meta_not_found: + (Ast_cocci.meta_name -> Ast0_cocci.pure -> unit) ref = + ref (fun _ -> failwith "uninitialized add_meta") + let add_fresh_id_meta: (Ast.meta_name -> unit) ref = ref (fun _ -> failwith "uninitialized add_meta")