X-Git-Url: http://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/413ffc021412f98847aeb825928e9e0e79dd2648..f537ebc4bbd27866c9ac3e1198b6756ebab7f2ba:/parsing_cocci/disjdistr.ml diff --git a/parsing_cocci/disjdistr.ml b/parsing_cocci/disjdistr.ml index 00349ee..4fb19e1 100644 --- a/parsing_cocci/disjdistr.ml +++ b/parsing_cocci/disjdistr.ml @@ -95,15 +95,30 @@ 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 -> Ast.rewrap bty (Ast.StructUnionDef(ty,lb,decls,rb))) | Ast.TypeName(_) | Ast.MetaType(_,_,_) -> [bty] +and disjident e = + match Ast.unwrap e with + Ast.DisjId(id_list) -> List.concat (List.map disjident id_list) + | Ast.OptIdent(id) -> + let id = disjident id in + List.map (function id -> Ast.rewrap e (Ast.OptIdent(id))) id + | Ast.UniqueIdent(id) -> + let id = disjident id in + List.map (function id -> Ast.rewrap e (Ast.UniqueIdent(id))) id + | _ -> [e] + and disjexp e = match Ast.unwrap e with - Ast.Ident(_) | Ast.Constant(_) -> [e] + Ast.Ident(_) | Ast.Constant(_) -> [e] (* even Ident can't contain disj *) | Ast.FunCall(fn,lp,args,rp) -> disjmult2 (disjexp fn) (disjdots disjexp args) (function fn -> function args -> @@ -171,8 +186,7 @@ and disjexp e = List.map (function ty -> Ast.rewrap e (Ast.TypeExp(ty))) ty | Ast.MetaErr(_,_,_,_) | Ast.MetaExpr(_,_,_,_,_,_) | Ast.MetaExprList(_,_,_,_) | Ast.EComma(_) -> [e] - | Ast.DisjExpr(exp_list) -> - List.concat (List.map disjexp exp_list) + | Ast.DisjExpr(exp_list) -> List.concat (List.map disjexp exp_list) | Ast.NestExpr(starter,expr_dots,ender,whencode,multi) -> (* not sure what to do here, so ambiguities still possible *) [e] @@ -205,10 +219,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(allminus,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(allminus,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 @@ -222,6 +241,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 @@ -241,7 +261,8 @@ and designator = function and disjdecl d = match Ast.unwrap d with - Ast.MetaDecl(_,_,_) | Ast.MetaField(_,_,_) -> [d] + Ast.MetaDecl(_,_,_) | Ast.MetaField(_,_,_) + | Ast.MetaFieldList(_,_,_,_) -> [d] | Ast.Init(stg,ty,id,eq,ini,sem) -> disjmult2 (disjty ty) (disjini ini) (function ty -> function ini -> @@ -336,6 +357,7 @@ let rec disj_rule_elem r k re = orify_rule_elem_ini re init (function init -> Ast.rewrap init (Ast.TopInit(init))) | Ast.Include(inc,s) -> re + | Ast.Undef(def,id) -> re | Ast.DefineHeader(def,id,params) -> re | Ast.Default(def,colon) -> re | Ast.Case(case,exp,colon) -> @@ -350,7 +372,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 @@ -367,7 +389,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 @@ -381,6 +403,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