1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

(*
* This file is part of Coccinelle, licensed under the terms of the GPL v2.
* See copyright.txt in the Coccinelle source code for more information.
* The Coccinelle source code can be obtained at http://coccinelle.lip6.fr
*)
open Common
(* When in a semantic patch there is f(X) ... f(X) we want to force
* the two X to be equal in the concrete code, but we would like that
* there be equal modulo some isomorphisms, so that the following
* concrete code also match: f(a && b) g(); f(b && a)
* Maybe would be easier to transform ast_c in ast_cocci and call the
* iso engine of julia. *)
open Ast_c
let (iso_e_e: expression > expression > bool) = fun a b >
raise Todo
(*
let rec (=~=) a b =
match (a, b) with
 (Ident a, typa, iia), (Ident b, typb, iib) > a = b
 (Constant a, typa, iia), (Constant b, typb, iib) > a = b
 (FunCall (ea, eas), typa, iia), (FunCall (eb, ebs), typb, iib) >
ea =~= eb &&
List.length eas = List.length ebs &&
List.for_all (fun (a, b) >
match (a, b) with
 (Left ea, iia), (Left eb, iib) > ea =~= eb
 _ > raise Todo
)
(zip eas ebs)
 (Binary (ea1,Logical AndLog,ea2),typa, iia), (Binary (eb1,Logical AndLog, eb2), typb, iib) >
(ea1 =~= eb1 && ea2 =~= eb2)

(ea1 =~= eb2 && ea2 =~= eb1)
 _ > raise Todo
in
a =~= b
*)
and (iso_st_st: statement > statement > bool) = fun a b >
raise Todo
and (iso_t_t: fullType > fullType > bool) = fun a b >
raise Todo
(*
let _ = assert (iso_e_e
(cexpression_of_string "a&&b")
(cexpression_of_string "b&&a")
*)
