On Sun, 14 Apr 2019, Markus Elfring wrote:

> > Use position variables and use a second rule that forces the positions to
> > be different.  I already explained this.
>
> I suggest to take another look at the provided information.
>
> I have extended the analysis approach like the following.
>
>
> @find@
> identifier work;
> position p1, p2;
> statement s1, s2;
> type T;
> @@
>  T work(...)
>  {
>  ... when any
>  if@p1 (...)
>  {
>     ... when any
>     s1
>     s2
>  }
>  ... when any
>  if@p2 (...)
>  {
>     ... when any
>     s1
>     s2
>  }
>  ... when any
>  }
>
> @duplicated_code@
> identifier work;
> position pos != find.p2, find.p1, find.p2;
> statement s1, s2;
> type T;
> @@
>  T work(...)
>  {
>  ... when any
> *if@p1@pos (...)
> *{
>     ... when any
> *   s1
> *   s2
> *}
>  ... when any
> *if@p2 (...)
> *{
>     ... when any
> *   s1
> *   s2
> *}
>  ... when any
>  }
>
>
> > You surely don't like it, but nothing is going to change in this direction,
> > so the discussion (at least on my side) ends here.
>
> Now I stumble on another error message.
>
>
> elfring@Sonne:~/Projekte/Coccinelle/janitor> spatch --parse-cocci 
> show_same_statements7.cocci
> …
> Variable find.p2 in duplicated_code cannot be used as both a position and a 
> constraint

I think that you have to declare find.p1 and find.p2 on a subsequent line.

julia

>
>
>
> By the way:
> Will it matter that the determined source code positions are not only 
> different
> but also that one place should be before the other?
>
> Regards,
> Markus
>
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to