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.MetaStmtVal stm
-> Coccilib.Stmt stm
39 | Ast_c.MetaPosVal _
| Ast_c.MetaPosValList _
| Ast_c.MetaListlenVal _
->
40 failwith
"not associated with a declared metavariable"]
42 let run mv ve name code
=
43 (* set up variables *)
44 let find_binding (r
,m
) =
47 List.find
(function ((re
,rm
),_
) -> r
=*= re
&& m
=$
= rm
) ve
in
49 with Not_found
-> None
in
54 (function ((str_name
,ast_name
),(r
,m
),_
) ->
55 match find_binding (r
,m
) with
58 (string_binding vl str_name
) @ (ast_binding vl ast_name
))
61 (* call the function *)
62 Coccilib.include_match
true;
64 try Hashtbl.find
Coccilib.fcts name
65 with Not_found
-> failwith
(Printf.sprintf
"%s not found" name
) in