(*
-* 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 <http://www.gnu.org/licenses/>.
-*
-* The authors reserve the right to distribute this or future versions of
-* Coccinelle under other licenses.
-*)
-
-
+ * 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.
+ *)
+
+
+module Ast0 = Ast0_cocci
module Ast = Ast_cocci
(* --------------------------------------------------------------------- *)
and ident i =
let k i =
match Ast.unwrap i with
- Ast.Id(name) -> string_mcode name
- | Ast.MetaId(name,_,_,_) -> meta_mcode name
- | Ast.MetaFunc(name,_,_,_) -> meta_mcode name
- | Ast.MetaLocalFunc(name,_,_,_) -> meta_mcode name
- | Ast.OptIdent(id) -> ident id
- | Ast.UniqueIdent(id) -> ident id in
- identfn all_functions k i
+ Ast.Id(name) -> string_mcode name
+ | Ast.MetaId(name,_,_,_) -> meta_mcode name
+ | Ast.MetaFunc(name,_,_,_) -> meta_mcode name
+ | Ast.MetaLocalFunc(name,_,_,_) -> meta_mcode name
+ | Ast.OptIdent(id) -> ident id
+ | Ast.UniqueIdent(id) -> ident id in
+ identfn all_functions k i
and expression e =
let k e =
and initialiser i =
let k i =
match Ast.unwrap i with
- Ast.InitExpr(exp) -> expression exp
+ Ast.MetaInit(name,_,_) -> meta_mcode name
+ | Ast.InitExpr(exp) -> expression exp
| Ast.InitList(lb,initlist,rb,whencode) ->
multibind
[string_mcode lb;
multibind (List.map initialiser initlist);
string_mcode rb;
multibind (List.map initialiser whencode)]
- | Ast.InitGccDotName(dot,name,eq,ini) ->
- multibind
- [string_mcode dot; ident name; string_mcode eq; initialiser ini]
| Ast.InitGccName(name,eq,ini) ->
multibind [ident name; string_mcode eq; initialiser ini]
- | Ast.InitGccIndex(lb,exp,rb,eq,ini) ->
+ | Ast.InitGccExt(designators,eq,ini) ->
multibind
- [string_mcode lb; expression exp; string_mcode rb;
- string_mcode eq; initialiser ini]
- | Ast.InitGccRange(lb,exp1,dots,exp2,rb,eq,ini) ->
- multibind
- [string_mcode lb; expression exp1; string_mcode dots;
- expression exp2; string_mcode rb; string_mcode eq;
- initialiser ini]
+ ((List.map designator designators) @
+ [string_mcode eq; initialiser ini])
| Ast.IComma(cm) -> string_mcode cm
| Ast.OptIni(i) -> initialiser i
| Ast.UniqueIni(i) -> initialiser i in
initfn all_functions k i
+ and designator = function
+ Ast.DesignatorField(dot,id) -> bind (string_mcode dot) (ident id)
+ | Ast.DesignatorIndex(lb,exp,rb) ->
+ bind (string_mcode lb) (bind (expression exp) (string_mcode rb))
+ | Ast.DesignatorRange(lb,min,dots,max,rb) ->
+ multibind
+ [string_mcode lb; expression min; string_mcode dots;
+ expression max; string_mcode rb]
+
and parameterTypeDef p =
let k p =
match Ast.unwrap p with
process_bef_aft s;
let k s =
match Ast.unwrap s with
- Ast.Seq(lbrace,decls,body,rbrace) ->
- multibind [rule_elem lbrace; statement_dots decls;
+ Ast.Seq(lbrace,body,rbrace) ->
+ multibind [rule_elem lbrace;
statement_dots body; rule_elem rbrace]
| Ast.IfThen(header,branch,_) ->
multibind [rule_elem header; statement branch]
| Ast.For(header,body,_) -> multibind [rule_elem header; statement body]
| Ast.Iterator(header,body,_) ->
multibind [rule_elem header; statement body]
- | Ast.Switch(header,lb,cases,rb) ->
+ | Ast.Switch(header,lb,decls,cases,rb) ->
multibind [rule_elem header;rule_elem lb;
+ statement_dots decls;
multibind (List.map case_line cases);
rule_elem rb]
| Ast.Atomic(re) -> rule_elem re
| Ast.Nest(stmt_dots,whn,_,_,_) ->
bind (statement_dots stmt_dots)
(multibind (List.map (whencode statement_dots statement) whn))
- | Ast.FunDecl(header,lbrace,decls,body,rbrace) ->
+ | Ast.FunDecl(header,lbrace,body,rbrace) ->
multibind [rule_elem header; rule_elem lbrace;
- statement_dots decls; statement_dots body;
- rule_elem rbrace]
+ statement_dots body; rule_elem rbrace]
| Ast.Define(header,body) ->
bind (rule_elem header) (statement_dots body)
| Ast.Dots(d,whn,_,_) | Ast.Circles(d,whn,_,_) | Ast.Stars(d,whn,_,_) ->
| Ast.CaseLineTag(case) -> case_line case
| Ast.ConstVolTag(cv) -> option_default
| Ast.Token(tok,info) -> option_default
+ | Ast.Pragma(str) -> option_default
| Ast.Code(cd) -> top_level cd
| Ast.ExprDotsTag(ed) -> expression_dots ed
| Ast.ParamDotsTag(pd) -> parameter_dots pd
let k i =
Ast.rewrap i
(match Ast.unwrap i with
- Ast.InitExpr(exp) -> Ast.InitExpr(expression exp)
+ Ast.MetaInit(name,keep,inherited) ->
+ Ast.MetaInit(meta_mcode name,keep,inherited)
+ | Ast.InitExpr(exp) -> Ast.InitExpr(expression exp)
| Ast.InitList(lb,initlist,rb,whencode) ->
Ast.InitList(string_mcode lb, List.map initialiser initlist,
string_mcode rb, List.map initialiser whencode)
- | Ast.InitGccDotName(dot,name,eq,ini) ->
- Ast.InitGccDotName
- (string_mcode dot, ident name, string_mcode eq, initialiser ini)
| Ast.InitGccName(name,eq,ini) ->
Ast.InitGccName(ident name, string_mcode eq, initialiser ini)
- | Ast.InitGccIndex(lb,exp,rb,eq,ini) ->
- Ast.InitGccIndex
- (string_mcode lb, expression exp, string_mcode rb,
- string_mcode eq, initialiser ini)
- | Ast.InitGccRange(lb,exp1,dots,exp2,rb,eq,ini) ->
- Ast.InitGccRange
- (string_mcode lb, expression exp1, string_mcode dots,
- expression exp2, string_mcode rb, string_mcode eq,
+ | Ast.InitGccExt(designators,eq,ini) ->
+ Ast.InitGccExt
+ (List.map designator designators, string_mcode eq,
initialiser ini)
| Ast.IComma(cm) -> Ast.IComma(string_mcode cm)
| Ast.OptIni(i) -> Ast.OptIni(initialiser i)
| Ast.UniqueIni(i) -> Ast.UniqueIni(initialiser i)) in
initfn all_functions k i
+ and designator = function
+ Ast.DesignatorField(dot,id) ->
+ Ast.DesignatorField(string_mcode dot,ident id)
+ | Ast.DesignatorIndex(lb,exp,rb) ->
+ Ast.DesignatorIndex(string_mcode lb,expression exp,string_mcode rb)
+ | Ast.DesignatorRange(lb,min,dots,max,rb) ->
+ Ast.DesignatorRange(string_mcode lb,expression min,string_mcode dots,
+ expression max,string_mcode rb)
+
and parameterTypeDef p =
let k p =
Ast.rewrap p
let k s =
Ast.rewrap s
(match Ast.unwrap s with
- Ast.Seq(lbrace,decls,body,rbrace) ->
- Ast.Seq(rule_elem lbrace, statement_dots decls,
+ Ast.Seq(lbrace,body,rbrace) ->
+ Ast.Seq(rule_elem lbrace,
statement_dots body, rule_elem rbrace)
| Ast.IfThen(header,branch,aft) ->
Ast.IfThen(rule_elem header, statement branch,aft)
Ast.For(rule_elem header, statement body, aft)
| Ast.Iterator(header,body,aft) ->
Ast.Iterator(rule_elem header, statement body, aft)
- | Ast.Switch(header,lb,cases,rb) ->
+ | Ast.Switch(header,lb,decls,cases,rb) ->
Ast.Switch(rule_elem header,rule_elem lb,
+ statement_dots decls,
List.map case_line cases,rule_elem rb)
| Ast.Atomic(re) -> Ast.Atomic(rule_elem re)
| Ast.Disj(stmt_dots_list) ->
Ast.Nest(statement_dots stmt_dots,
List.map (whencode statement_dots statement) whn,
multi,bef,aft)
- | Ast.FunDecl(header,lbrace,decls,body,rbrace) ->
+ | Ast.FunDecl(header,lbrace,body,rbrace) ->
Ast.FunDecl(rule_elem header,rule_elem lbrace,
- statement_dots decls,
statement_dots body, rule_elem rbrace)
| Ast.Define(header,body) ->
Ast.Define(rule_elem header,statement_dots body)
| Ast.CaseLineTag(case) -> Ast.CaseLineTag(case_line case)
| Ast.ConstVolTag(cv) as x -> x
| Ast.Token(tok,info) as x -> x
+ | Ast.Pragma(str) as x -> x
| Ast.Code(cd) -> Ast.Code(top_level cd)
| Ast.ExprDotsTag(ed) -> Ast.ExprDotsTag(expression_dots ed)
| Ast.ParamDotsTag(pd) -> Ast.ParamDotsTag(parameter_dots pd)