3 let string_binding vl
= function
7 Ast_c.MetaPosValList l
->
11 (fname
,current_element
,(line
,col
),(line_end
,col_end
)) ->
12 { Coccilib.current_element
= current_element
;
13 Coccilib.file
= fname
;
16 Coccilib.line_end
= line_end
;
17 Coccilib.col_end
= col_end
}) l
in
19 | Ast_c.MetaListlenVal n
-> Coccilib.Int n
20 | _
-> Coccilib.Str
(Ocamlcocci_aux.stringrep vl
)]
22 let ast_binding vl
= function
26 Ast_c.MetaIdVal
(id
,_
) | Ast_c.MetaFuncVal id
27 | Ast_c.MetaLocalFuncVal id
->
30 | Ast_c.MetaExprVal
(expr
,_
) -> Coccilib.Expr expr
31 | Ast_c.MetaExprListVal arglist
-> Coccilib.ExprList arglist
32 | Ast_c.MetaParamVal param
-> Coccilib.Param param
33 | Ast_c.MetaParamListVal paramlist
-> Coccilib.ParamList paramlist
35 | Ast_c.MetaTypeVal ty
-> Coccilib.Type ty
36 | Ast_c.MetaInitVal init
-> Coccilib.Init init
37 | Ast_c.MetaInitListVal init
-> Coccilib.InitList init
38 | Ast_c.MetaDeclVal decl
-> Coccilib.Decl decl
39 | Ast_c.MetaFieldVal field
-> Coccilib.Field field
40 | Ast_c.MetaFieldListVal field
-> Coccilib.FieldList field
41 | Ast_c.MetaStmtVal stm
-> Coccilib.Stmt stm
43 | Ast_c.MetaPosVal _
| Ast_c.MetaPosValList _
| Ast_c.MetaListlenVal _
->
44 failwith
"not associated with a declared metavariable"]
46 let run mv ve script_vars name code
=
47 (* set up variables *)
48 let find_binding (r
,m
) =
51 List.find
(function ((re
,rm
),_
) -> r
=*= re
&& m
=$
= rm
) ve
in
53 with Not_found
-> None
in
58 (function ((str_name
,ast_name
),(r
,m
),_
) ->
59 match find_binding (r
,m
) with
62 (string_binding vl str_name
) @ (ast_binding vl ast_name
))
65 let script_args = List.map
(function _
-> ref "") script_vars
in
67 (* call the function *)
68 Coccilib.include_match
true;
70 try Hashtbl.find
Coccilib.fcts name
71 with Not_found
-> failwith
(Printf.sprintf
"%s not found" name
) in
73 List.map
(function x
-> !x
) script_args