Another attempt to fix the problem is below.  This applies on top of the
previous patch.

julia

diff --git a/parsing_cocci/iso_pattern.ml b/parsing_cocci/iso_pattern.ml
index 5967039..44442d4 100644
--- a/parsing_cocci/iso_pattern.ml
+++ b/parsing_cocci/iso_pattern.ml
@@ -2084,9 +2084,9 @@ let merge_plus model_mcode e_mcode =
             |  ((x,_),(Ast.NOREPLACEMENT,t)) -> (x,t)
             |  _ -> failwith "how can we combine minuses?")
       |         _ -> failwith "not possible 6")
-  |  Ast0.CONTEXT(mc) ->
+  | Ast0.CONTEXT(mc) ->
       (match e_mcode with
-        Ast0.CONTEXT(emc) ->
+        Ast0.CONTEXT(emc) | Ast0.MIXED(emc) ->
           (* keep the logical line info as in the model *)
           let (mba,tb,ta) = !mc in
           let (eba,_,_) = !emc in
@@ -2094,48 +2094,49 @@ let merge_plus model_mcode e_mcode =
           let merged =
             match (mba,eba) with
               (x,Ast.NOTHING) | (Ast.NOTHING,x) -> x
-            |  (Ast.BEFORE(b1,it1),Ast.BEFORE(b2,it2)) ->
+            | (Ast.BEFORE(b1,it1),Ast.BEFORE(b2,it2)) ->
                 Ast.BEFORE(b1@b2,Ast.lub_count it1 it2)
-            |  (Ast.BEFORE(b,it1),Ast.AFTER(a,it2)) ->
+            | (Ast.BEFORE(b,it1),Ast.AFTER(a,it2)) ->
                 Ast.BEFOREAFTER(b,a,Ast.lub_count it1 it2)
-            |  (Ast.BEFORE(b1,it1),Ast.BEFOREAFTER(b2,a,it2)) ->
+            | (Ast.BEFORE(b1,it1),Ast.BEFOREAFTER(b2,a,it2)) ->
                 Ast.BEFOREAFTER(b1@b2,a,Ast.lub_count it1 it2)
-            |  (Ast.AFTER(a,it1),Ast.BEFORE(b,it2)) ->
+            | (Ast.AFTER(a,it1),Ast.BEFORE(b,it2)) ->
                 Ast.BEFOREAFTER(b,a,Ast.lub_count it1 it2)
-            |  (Ast.AFTER(a1,it1),Ast.AFTER(a2,it2)) ->
+            | (Ast.AFTER(a1,it1),Ast.AFTER(a2,it2)) ->
                 Ast.AFTER(a2@a1,Ast.lub_count it1 it2)
-            |  (Ast.AFTER(a1,it1),Ast.BEFOREAFTER(b,a2,it2)) ->
+            | (Ast.AFTER(a1,it1),Ast.BEFOREAFTER(b,a2,it2)) ->
                 Ast.BEFOREAFTER(b,a2@a1,Ast.lub_count it1 it2)
-            |  (Ast.BEFOREAFTER(b1,a,it1),Ast.BEFORE(b2,it2)) ->
+            | (Ast.BEFOREAFTER(b1,a,it1),Ast.BEFORE(b2,it2)) ->
                 Ast.BEFOREAFTER(b1@b2,a,Ast.lub_count it1 it2)
-            |  (Ast.BEFOREAFTER(b,a1,it1),Ast.AFTER(a2,it2)) ->
+            | (Ast.BEFOREAFTER(b,a1,it1),Ast.AFTER(a2,it2)) ->
                 Ast.BEFOREAFTER(b,a2@a1,Ast.lub_count it1 it2)
-            |  (Ast.BEFOREAFTER(b1,a1,it1),Ast.BEFOREAFTER(b2,a2,it2)) ->
+            | (Ast.BEFOREAFTER(b1,a1,it1),Ast.BEFOREAFTER(b2,a2,it2)) ->
                 Ast.BEFOREAFTER(b1@b2,a2@a1,Ast.lub_count it1 it2) in
           emc := (merged,tb,ta)
-      |         Ast0.MINUS(emc) ->
+      |        Ast0.MINUS(emc) ->
           let (anything_bef_aft,_,_) = !mc in
           let (anythings,t) = !emc in
           (match (anything_bef_aft,anythings) with
             (Ast.BEFORE(b1,it1),Ast.NOREPLACEMENT) ->
               emc := (Ast.REPLACEMENT(b1,it1),t)
-          |  (Ast.AFTER(a1,it1),Ast.NOREPLACEMENT) ->
+          | (Ast.AFTER(a1,it1),Ast.NOREPLACEMENT) ->
               emc := (Ast.REPLACEMENT(a1,it1),t)
-          |  (Ast.BEFOREAFTER(b1,a1,it1),Ast.NOREPLACEMENT) ->
+          | (Ast.BEFOREAFTER(b1,a1,it1),Ast.NOREPLACEMENT) ->
               emc := (Ast.REPLACEMENT(b1@a1,it1),t)
-          |  (Ast.NOTHING,Ast.NOREPLACEMENT) ->
+          | (Ast.NOTHING,Ast.NOREPLACEMENT) ->
               emc := (Ast.NOREPLACEMENT,t)
-          |  (Ast.BEFORE(b1,it1),Ast.REPLACEMENT(a2,it2)) ->
+          | (Ast.BEFORE(b1,it1),Ast.REPLACEMENT(a2,it2)) ->
               emc := (Ast.REPLACEMENT(b1@a2,Ast.lub_count it1 it2),t)
-          |  (Ast.AFTER(a1,it1),Ast.REPLACEMENT(a2,it2)) ->
+          | (Ast.AFTER(a1,it1),Ast.REPLACEMENT(a2,it2)) ->
               emc := (Ast.REPLACEMENT(a2@a1,Ast.lub_count it1 it2),t)
-          |  (Ast.BEFOREAFTER(b1,a1,it1),Ast.REPLACEMENT(a2,it2)) ->
+          | (Ast.BEFOREAFTER(b1,a1,it1),Ast.REPLACEMENT(a2,it2)) ->
               emc := (Ast.REPLACEMENT(b1@a2@a1,Ast.lub_count it1 it2),t)
-          |  (Ast.NOTHING,Ast.REPLACEMENT(a2,it2)) -> ()) (* no change *)
-      |         Ast0.MIXED(_) -> failwith "how did this become mixed?"
+          | (Ast.NOTHING,Ast.REPLACEMENT(a2,it2)) -> ()) (* no change *)
+      (* Allowed because of possibility of metavar as model of macro
+        | Ast0.MIXED(_) -> failwith "how did this become mixed?" *)
       |         _ -> failwith "not possible 7")
-  |  Ast0.MIXED(_) -> failwith "not possible 8"
-  |  Ast0.PLUS _ -> failwith "not possible 9"
+  | Ast0.MIXED(_) -> failwith "not possible 8"
+  | Ast0.PLUS _ -> failwith "not possible 9"

 let merge_plus_before model_mcode e_mcode =
   match model_mcode with
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to