X-Git-Url: https://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/951c78018cc91c58699aef95c0ccc20f34065162..9bc82bae75129fec4d981ebf245f2f7d7ca73a41:/parsing_cocci/disjdistr.ml diff --git a/parsing_cocci/disjdistr.ml b/parsing_cocci/disjdistr.ml index 5c91ce4..ca38d9d 100644 --- a/parsing_cocci/disjdistr.ml +++ b/parsing_cocci/disjdistr.ml @@ -1,4 +1,30 @@ (* + * 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. @@ -93,6 +119,10 @@ and disjtypeC bty = (function ty -> function size -> Ast.rewrap bty (Ast.Array(ty,lb,size,rb))) | Ast.EnumName(_,_) | Ast.StructUnionName(_,_) -> [bty] + | Ast.EnumDef(ty,lb,ids,rb) -> + disjmult2 (disjty ty) (disjdots disjexp ids) + (function ty -> function ids -> + Ast.rewrap bty (Ast.EnumDef(ty,lb,ids,rb))) | Ast.StructUnionDef(ty,lb,decls,rb) -> disjmult2 (disjty ty) (disjdots disjdecl decls) (function ty -> function decls -> @@ -171,7 +201,7 @@ and disjexp e = | Ast.MetaExprList(_,_,_,_) | Ast.EComma(_) -> [e] | Ast.DisjExpr(exp_list) -> List.concat (List.map disjexp exp_list) - | Ast.NestExpr(expr_dots,whencode,multi) -> + | Ast.NestExpr(starter,expr_dots,ender,whencode,multi) -> (* not sure what to do here, so ambiguities still possible *) [e] | Ast.Edots(dots,_) | Ast.Ecircles(dots,_) | Ast.Estars(dots,_) -> [e] @@ -203,10 +233,15 @@ and disjini i = | Ast.InitExpr(exp) -> let exp = disjexp exp in List.map (function exp -> Ast.rewrap i (Ast.InitExpr(exp))) exp - | Ast.InitList(lb,initlist,rb,whencode) -> + | Ast.ArInitList(lb,initlist,rb) -> + List.map + (function initlist -> + Ast.rewrap i (Ast.ArInitList(lb,initlist,rb))) + (disjdots disjini initlist) + | Ast.StrInitList(allminus,lb,initlist,rb,whencode) -> List.map (function initlist -> - Ast.rewrap i (Ast.InitList(lb,initlist,rb,whencode))) + Ast.rewrap i (Ast.StrInitList(allminus,lb,initlist,rb,whencode))) (disjmult disjini initlist) | Ast.InitGccExt(designators,eq,ini) -> let designators = disjmult designator designators in @@ -220,6 +255,7 @@ and disjini i = (function ini -> Ast.rewrap i (Ast.InitGccName(name,eq,ini))) ini | Ast.IComma(comma) -> [i] + | Ast.Idots(dots,_) -> [i] | Ast.OptIni(ini) -> let ini = disjini ini in List.map (function ini -> Ast.rewrap i (Ast.OptIni(ini))) ini @@ -239,7 +275,8 @@ and designator = function and disjdecl d = match Ast.unwrap d with - Ast.Init(stg,ty,id,eq,ini,sem) -> + Ast.MetaDecl(_,_,_) | Ast.MetaField(_,_,_) -> [d] + | Ast.Init(stg,ty,id,eq,ini,sem) -> disjmult2 (disjty ty) (disjini ini) (function ty -> function ini -> Ast.rewrap d (Ast.Init(stg,ty,id,eq,ini,sem))) @@ -257,7 +294,7 @@ and disjdecl d = let ty = disjty ty in (* disj not allowed in id *) List.map (function ty -> Ast.rewrap d (Ast.Typedef(stg,ty,id,sem))) ty | Ast.DisjDecl(decls) -> List.concat (List.map disjdecl decls) - | Ast.Ddots(_,_) | Ast.MetaDecl(_,_,_) -> [d] + | Ast.Ddots(_,_) -> [d] | Ast.OptDecl(decl) -> let decl = disjdecl decl in List.map (function decl -> Ast.rewrap d (Ast.OptDecl(decl))) decl @@ -347,7 +384,7 @@ let disj_all = let donothing r k e = k e in V.rebuilder mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode - donothing donothing donothing donothing + donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing disj_rule_elem donothing donothing donothing donothing @@ -364,7 +401,7 @@ let collect_all_isos = mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing donothing - donothing doanything + donothing donothing doanything let collect_iso_info = let mcode x = x in @@ -378,6 +415,7 @@ let collect_iso_info = V.rebuilder mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode donothing donothing donothing donothing donothing donothing donothing + donothing donothing donothing donothing donothing rule_elem donothing donothing donothing donothing