*)
+(*
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ * The authors reserve the right to distribute this or future versions of
+ * Coccinelle under other licenses.
+ *)
+
+
(* --------------------------------------------------------------------- *)
(* Modified code *)
(* int list is the match instances, which are only meaningful in annotated
C code *)
(* int is the adjacency index, which is incremented on context dots *)
-(* iteration is only allowed on contect code, the intuition vaguely being
+(* iteration is only allowed on context code, the intuition vaguely being
that there is no way to replace something more than once. Actually,
allowing iterated additions on minus code would cause problems with some
heuristics for adding braces, because one couldn't identify simple
| MetaLocalIdExpDecl of
arity * meta_name (* name *) * Type_cocci.typeC list option
| MetaExpListDecl of arity * meta_name (*name*) * list_len (*len*)
+ | MetaDeclDecl of arity * meta_name (* name *)
+ | MetaFieldDecl of arity * meta_name (* name *)
| MetaStmDecl of arity * meta_name (* name *)
| MetaStmListDecl of arity * meta_name (* name *)
| MetaFuncDecl of arity * meta_name (* name *)
| Array of fullType * string mcode (* [ *) *
expression option * string mcode (* ] *)
- | EnumName of string mcode (*enum*) * ident (* name *)
+ | EnumName of string mcode (*enum*) * ident option (* name *)
+ | EnumDef of fullType (* either EnumName or metavar *) *
+ string mcode (* { *) * expression dots * string mcode (* } *)
| StructUnionName of structUnion mcode * ident option (* name *)
| StructUnionDef of fullType (* either StructUnionName or metavar *) *
string mcode (* { *) * declaration dots * string mcode (* } *)
and typeC = base_typeC wrap
and baseType = VoidType | CharType | ShortType | IntType | DoubleType
- | FloatType | LongType | LongLongType
+ | FloatType | LongType | LongLongType | SizeType | SSizeType | PtrDiffType
and structUnion = Struct | Union
| Ddots of string mcode (* ... *) * declaration option (* whencode *)
| MetaDecl of meta_name mcode * keep_binding * inherited
+ | MetaField of meta_name mcode * keep_binding * inherited
| OptDecl of declaration
| UniqueDecl of declaration
and base_initialiser =
MetaInit of meta_name mcode * keep_binding * inherited
| InitExpr of expression
- | InitList of bool (* true if all are - *) *
+ | ArInitList of string mcode (*{*) * initialiser dots * string mcode (*}*)
+ | StrInitList of bool (* true if all are - *) *
string mcode (*{*) * initialiser list * string mcode (*}*) *
initialiser list (* whencode: elements that shouldn't appear in init *)
| InitGccExt of
| InitGccName of ident (* name *) * string mcode (*:*) *
initialiser
| IComma of string mcode (* , *)
+ | Idots of string mcode (* ... *) * initialiser option (* whencode *)
| OptIni of initialiser
| UniqueIni of initialiser
| ScriptRule of string (* name *) *
(* metaname for python (untyped), metavar for ocaml (typed) *)
string * dependency *
- (script_meta_name * meta_name * metavar) list * string
+ (script_meta_name * meta_name * metavar) list (*inherited vars*) *
+ meta_name list (*script vars*) * string
| InitialScriptRule of string (* name *) *
string (*language*) * dependency * string (*code*)
| FinalScriptRule of string (* name *) *
| MetaIdExpDecl(ar,nm,ty) -> nm
| MetaLocalIdExpDecl(ar,nm,ty) -> nm
| MetaExpListDecl(ar,nm,nm1) -> nm
+ | MetaDeclDecl(ar,nm) -> nm
+ | MetaFieldDecl(ar,nm) -> nm
| MetaStmDecl(ar,nm) -> nm
| MetaStmListDecl(ar,nm) -> nm
| MetaFuncDecl(ar,nm) -> nm