Clever :)

I haven't tried this, but I think you cudl do the following:

@r@
position p;
@@

seq_puts(...);
seq_puts(...);
seq_puts@p(...);

> @concat1 depends on patch@
> expression s;
> constant c1, c2;
> position p1, p2;

Now change this line to

position p1 != r.p, p2 != r.p;

Then you can either use Coccinelle to do the iteration, or just run the
semantic patch over and over on the code.

julia

> @@
>   seq_puts@p1(s, c1);
>   seq_puts@p2(s, c2);
>
> @script:python concat2@
> c1 << concat1.c1;
> c2 << concat1.c2;
> c3;
> @@
>
> // The indentation probably needs to be fixed manually
> coccinelle.c3 = c1 + "\n\t" + c2
>
> @concat3 depends on patch@
> identifier concat2.c3;
> expression concat1.s;
> constant concat1.c1, concat1.c2;
> position concat1.p1, concat1.p2;
> @@
> - seq_puts@p1(s, c1);
> - seq_puts@p2(s, c2);
> + seq_puts(s, c3);
>
>
>
> Thanks,
> Rasmus
>
> _______________________________________________
> Cocci mailing list
> [email protected]
> https://systeme.lip6.fr/mailman/listinfo/cocci
>
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to