Release coccinelle-0.1.1
[bpt/coccinelle.git] / parsing_cocci / iso_pattern.ml
index 6bbf1a7..f7975b8 100644 (file)
@@ -100,6 +100,10 @@ let anything_equal = function
   | (Ast0.TopTag(d1),Ast0.TopTag(d2)) ->
       (strip_info.V0.rebuilder_top_level d1) =
       (strip_info.V0.rebuilder_top_level d2)
+  | (Ast0.IsoWhenTTag(_),_) | (_,Ast0.IsoWhenTTag(_)) ->
+      failwith "only for isos within iso phase"
+  | (Ast0.IsoWhenFTag(_),_) | (_,Ast0.IsoWhenFTag(_)) ->
+      failwith "only for isos within iso phase"
   | (Ast0.IsoWhenTag(_),_) | (_,Ast0.IsoWhenTag(_)) ->
       failwith "only for isos within iso phase"
   | _ -> false
@@ -1020,6 +1024,7 @@ let match_maker checks_needed context_required whencode_allowed =
          | (Ast0.Exp(expa),Ast0.Exp(expb)) -> match_expr expa expb
          | (Ast0.TopExp(expa),Ast0.TopExp(expb)) -> match_expr expa expb
          | (Ast0.Exp(expa),Ast0.TopExp(expb)) -> match_expr expa expb
+         | (Ast0.TopInit(inita),Ast0.TopInit(initb)) -> match_init inita initb
          | (Ast0.Ty(tya),Ast0.Ty(tyb)) -> match_typeC tya tyb
          | (Ast0.Dots(d,[]),Ast0.Dots(d1,wc))
          | (Ast0.Circles(d,[]),Ast0.Circles(d1,wc))
@@ -1041,6 +1046,14 @@ let match_maker checks_needed context_required whencode_allowed =
                             | Ast0.WhenAlways wc ->
                                 conjunct_bindings prev
                                   (add_multi_dot_binding d (Ast0.StmtTag wc))
+                            | Ast0.WhenNotTrue wc ->
+                                conjunct_bindings prev
+                                  (add_multi_dot_binding d
+                                     (Ast0.IsoWhenTTag wc))
+                            | Ast0.WhenNotFalse wc ->
+                                conjunct_bindings prev
+                                  (add_multi_dot_binding d
+                                     (Ast0.IsoWhenFTag wc))
                             | Ast0.WhenModifier(x) ->
                                 conjunct_bindings prev
                                   (add_multi_dot_binding d
@@ -1663,6 +1676,15 @@ let instantiate bindings mv_bindings =
        failwith "metaparamlist not supported"
     | _ -> e in
 
+  let whenfn (_,v) =
+    match v with
+      Ast0.DotsStmtTag(stms) -> Ast0.WhenNot stms
+    | Ast0.StmtTag(stm) -> Ast0.WhenAlways stm
+    | Ast0.IsoWhenTTag(stm) -> Ast0.WhenNotTrue stm
+    | Ast0.IsoWhenFTag(stm) -> Ast0.WhenNotFalse stm
+    | Ast0.IsoWhenTag(x) -> Ast0.WhenModifier(x)
+    | _ -> failwith "unexpected binding" in
+
   let stmtfn r k e =
     let e = k e in
     match Ast0.unwrap e with
@@ -1679,37 +1701,19 @@ let instantiate bindings mv_bindings =
        Ast0.rewrap e
          (Ast0.Dots
             (d,
-             List.map
-               (function (_,v) ->
-                 match v with
-                   Ast0.DotsStmtTag(stms) -> Ast0.WhenNot stms
-                 | Ast0.StmtTag(stm) -> Ast0.WhenAlways stm
-                 | Ast0.IsoWhenTag(x) -> Ast0.WhenModifier(x)
-                 | _ -> failwith "unexpected binding")
+             List.map whenfn
                (List.filter (function (x,v) -> x = (dot_term d)) bindings)))
     | Ast0.Circles(d,_) ->
        Ast0.rewrap e
          (Ast0.Circles
             (d,
-             List.map
-               (function (_,v) ->
-                 match v with
-                   Ast0.DotsStmtTag(stms) -> Ast0.WhenNot stms
-                 | Ast0.StmtTag(stm) -> Ast0.WhenAlways stm
-                 | Ast0.IsoWhenTag(x) -> Ast0.WhenModifier(x)
-                 | _ -> failwith "unexpected binding")
+             List.map whenfn
                (List.filter (function (x,v) -> x = (dot_term d)) bindings)))
     | Ast0.Stars(d,_) ->
        Ast0.rewrap e
          (Ast0.Stars
             (d,
-             List.map
-               (function (_,v) ->
-                 match v with
-                   Ast0.DotsStmtTag(stms) -> Ast0.WhenNot stms
-                 | Ast0.StmtTag(stm) -> Ast0.WhenAlways stm
-                 | Ast0.IsoWhenTag(x) -> Ast0.WhenModifier(x)
-                 | _ -> failwith "unexpected binding")
+             List.map whenfn
                (List.filter (function (x,v) -> x = (dot_term d)) bindings)))
     | _ -> e in
 
@@ -2276,7 +2280,8 @@ let rewrap_anything = function
   | Ast0.StmtTag(d) -> Ast0.StmtTag(rewrap.V0.rebuilder_statement d)
   | Ast0.CaseLineTag(d) -> Ast0.CaseLineTag(rewrap.V0.rebuilder_case_line d)
   | Ast0.TopTag(d) -> Ast0.TopTag(rewrap.V0.rebuilder_top_level d)
-  | Ast0.IsoWhenTag(_) -> failwith "only for isos within iso phase"
+  | Ast0.IsoWhenTag(_) | Ast0.IsoWhenTTag(_) | Ast0.IsoWhenFTag(_) ->
+      failwith "only for isos within iso phase"
   | Ast0.MetaPosTag(p) -> Ast0.MetaPosTag(p)
 
 (* --------------------------------------------------------------------- *)