X-Git-Url: https://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/e6509c05b4c77bb8fcffa7f454c1412fcc0c3a15..190f1acf3b0fa9403bea541654465a6a00bf3693:/parsing_cocci/free_vars.ml diff --git a/parsing_cocci/free_vars.ml b/parsing_cocci/free_vars.ml index 1659686..9313c3a 100644 --- a/parsing_cocci/free_vars.ml +++ b/parsing_cocci/free_vars.ml @@ -98,6 +98,7 @@ let collect_refs include_constraints = | _ -> [] else [] in bind (List.rev metas) [metaid name] + | Ast.DisjId(ids) -> bind_disj (List.map k ids) | _ -> option_default) in let rec type_collect res = function @@ -145,6 +146,10 @@ let collect_refs include_constraints = bind (k d) (match Ast.unwrap d with Ast.MetaDecl(name,_,_) | Ast.MetaField(name,_,_) -> [metaid name] + | Ast.MetaFieldList(name,Ast.MetaListLen(lenname,_,_),_,_) -> + [metaid name;metaid lenname] + | Ast.MetaFieldList(name,_,_,_) -> + [metaid name] | Ast.DisjDecl(decls) -> bind_disj (List.map k decls) | _ -> option_default) in @@ -230,8 +235,7 @@ let collect_saved = (match Ast.unwrap i with Ast.MetaId(name,_,TC.Saved,_) | Ast.MetaFunc(name,_,TC.Saved,_) - | Ast.MetaLocalFunc(name,_,TC.Saved,_) -> - [metaid name] + | Ast.MetaLocalFunc(name,_,TC.Saved,_) -> [metaid name] | _ -> option_default) in let rec type_collect res = function @@ -289,7 +293,7 @@ let collect_saved = let lensaved = match ls with TC.Saved -> [metaid lenname] | _ -> [] in lensaved @ namesaved - | Ast.MetaParamList(name,_,_,_) -> [metaid name] + | Ast.MetaParamList(name,_,TC.Saved,_) -> [metaid name] | _ -> option_default) in let astfvdecls recursor k d = @@ -297,6 +301,13 @@ let collect_saved = (match Ast.unwrap d with Ast.MetaDecl(name,TC.Saved,_) | Ast.MetaField(name,TC.Saved,_) -> [metaid name] + | Ast.MetaFieldList(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 + | Ast.MetaFieldList(name,_,TC.Saved,_) -> [metaid name] | _ -> option_default) in let astfvrule_elem recursor k re = @@ -581,6 +592,16 @@ let classify_variables metavar_decls minirules used_after = | Ast.MetaField(name,_,_) -> let (unitary,inherited) = classify name in Ast.rewrap e (Ast.MetaField(name,unitary,inherited)) + | Ast.MetaFieldList(name,Ast.MetaListLen (lenname,_,_),_,_) -> + let (unitary,inherited) = classify name in + let (lenunitary,leninherited) = classify lenname in + Ast.rewrap e + (Ast.MetaFieldList + (name,Ast.MetaListLen(lenname,lenunitary,leninherited), + unitary,inherited)) + | Ast.MetaFieldList(name,lenname,_,_) -> + let (unitary,inherited) = classify name in + Ast.rewrap e (Ast.MetaFieldList(name,lenname,unitary,inherited)) | _ -> e in let rule_elem r k e =