On Fri, 13 Jun 2014, Daniel Vetter wrote:

> Hi all,
> 
> In our testsuite[1] we have a macro to compare 2 integers with a given
> comparison operator, print them on assert failure to stderr for
> diagnotistics and then abort our testcase.
> 
> Usage is e.g.
> 
>       igt_assert_cmpint(obj_count, ==, 0);
> 
> Now I want to add a simple igt_assert_eq(a, b) macro, so the above example
> should look like
>       
>       igt_assert_eq(obj_count, 0);
> 
> I tried to use cocci for the refactoring, but failed. I tried
> 
> @@
> expression E1, E2;
> @@
> -igt_assert_cmpint(E1, ==, E2);
> +igt_assert_eq(E1, E2);
> 
> which failed to parse as a spatch and
> 
> @@
> expression E1, E2, E;
> @@
> -igt_assert_cmpint(E1, E E2);
> +igt_assert_eq(E1, E2);
> 
> which didn't match anything. I didn't find any examples for creative macro
> abuse and using iterator metavariables which helped last time around I've
> stumbled over macros didn't work out either.
> 
> Any ideas and suggestions highly welcome, or is this simply not possible
> with cocci?

I don't think it is going to be possible.  == is not considered to be a 
valid argument by the C parser.  You can make a macro definition for this, 
but then the C parser will just skip over the whole igt_assert_cmpint 
call.  No matches will be possible on that part of the code.

julia


> Example testfile attached.
> 
> Thanks, Daniel
> 
> 1: http://cgit.freedesktop.org/xorg/app/intel-gpu-tools/ - it's for
> testing the intel gfx kernel driver.
> -- 
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
> 
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to