bind (k ty)
(match Ast.unwrap ty with
Ast.MetaInit(name,_,_) -> [metaid name]
+ | Ast.MetaInitList(name,Ast.MetaListLen(lenname,_,_),_,_) ->
+ [metaid name;metaid lenname]
+ | Ast.MetaInitList(name,_,_,_) -> [metaid name]
| _ -> option_default) in
let astfvparam recursor k p =
let mcode r mc =
if include_constraints
then
- match Ast.get_pos_var mc with
- Ast.MetaPos(name,constraints,_,_,_) -> (metaid name)::constraints
- | _ -> option_default
+ List.concat
+ (List.map
+ (function Ast.MetaPos(name,constraints,_,_,_) ->
+ (metaid name)::constraints)
+ (Ast.get_pos_var mc))
else option_default in
V.combiner bind option_default
bind (k ty)
(match Ast.unwrap ty with
Ast.MetaInit(name,TC.Saved,_) -> [metaid name]
+ | Ast.MetaInitList(name,Ast.MetaListLen (lenname,ls,_),ns,_) ->
+ let namesaved =
+ match ns with TC.Saved -> [metaid name] | _ -> [] in
+ let lensaved =
+ match ls with TC.Saved -> [metaid lenname] | _ -> [] in
+ lensaved @ namesaved
| _ -> option_default) in
let astfvparam recursor k p =
| _ -> option_default)) in
let mcode r e =
- match Ast.get_pos_var e with
- Ast.MetaPos(name,_,_,TC.Saved,_) -> [metaid name]
- | _ -> option_default in
+ List.fold_left
+ (function acc ->
+ function
+ Ast.MetaPos(name,_,_,TC.Saved,_) -> (metaid name) :: acc
+ | _ -> acc)
+ option_default (Ast.get_pos_var e) in
V.combiner bind option_default
mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode
(check_unitary name inherited,inherited) in
let mcode mc =
- match Ast.get_pos_var mc with
- Ast.MetaPos(name,constraints,per,unitary,inherited) ->
- let (unitary,inherited) = classify name in
- Ast.set_pos_var (Ast.MetaPos(name,constraints,per,unitary,inherited))
- mc
- | _ -> mc in
+ let p =
+ List.map
+ (function Ast.MetaPos(name,constraints,per,unitary,inherited) ->
+ let (unitary,inherited) = classify name in
+ Ast.MetaPos(name,constraints,per,unitary,inherited))
+ (Ast.get_pos_var mc) in
+ Ast.set_pos_var p mc in
let ident r k e =
let e = k e in
| TC.FunctionPointer(ty) -> TC.FunctionPointer(type_infos ty)
| TC.Array(ty) -> TC.Array(type_infos ty)
| TC.EnumName(TC.MV(name,_,_)) ->
- let (unitary,inherited) = classify (name,(),(),Ast.NoMetaPos) in
+ let (unitary,inherited) = classify (name,(),(),[]) in
TC.EnumName(TC.MV(name,unitary,inherited))
| TC.StructUnionName(su,TC.MV(name,_,_)) ->
- let (unitary,inherited) = classify (name,(),(),Ast.NoMetaPos) in
+ let (unitary,inherited) = classify (name,(),(),[]) in
TC.StructUnionName(su,TC.MV(name,unitary,inherited))
| TC.MetaType(name,_,_) ->
- let (unitary,inherited) = classify (name,(),(),Ast.NoMetaPos) in
+ let (unitary,inherited) = classify (name,(),(),[]) in
Type_cocci.MetaType(name,unitary,inherited)
| TC.SignedT(sgn,Some ty) -> TC.SignedT(sgn,Some (type_infos ty))
| ty -> ty in
Ast.MetaInit(name,_,_) ->
let (unitary,inherited) = classify name in
Ast.rewrap e (Ast.MetaInit(name,unitary,inherited))
+ | Ast.MetaInitList(name,Ast.MetaListLen (lenname,_,_),_,_) ->
+ let (unitary,inherited) = classify name in
+ let (lenunitary,leninherited) = classify lenname in
+ Ast.rewrap e
+ (Ast.MetaInitList
+ (name,Ast.MetaListLen(lenname,lenunitary,leninherited),
+ unitary,inherited))
+ | Ast.MetaInitList(name,lenname,_,_) ->
+ let (unitary,inherited) = classify name in
+ Ast.rewrap e (Ast.MetaInitList(name,lenname,unitary,inherited))
| _ -> e in
let param r k e =
let option_default = ([],[]) in
let metaid (x,_,_,_) = x in
let mcode r mc =
- match Ast.get_pos_var mc with
- Ast.MetaPos(name,constraints,Ast.PER,_,_) ->
- ([metaid name],constraints)
- | Ast.MetaPos(name,constraints,Ast.ALL,_,_) ->
- ([],(metaid name)::constraints)
- | _ -> option_default in
+ List.fold_left
+ (function (a,b) ->
+ (function
+ Ast.MetaPos(name,constraints,Ast.PER,_,_) ->
+ ((metaid name)::a,constraints@b)
+ | Ast.MetaPos(name,constraints,Ast.ALL,_,_) ->
+ (a,(metaid name)::constraints@b)))
+ option_default (Ast.get_pos_var mc) in
let v =
V.combiner bind option_default
mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode