On Wednesday 30 June 2010 14:49:04 Julia Lawall wrote:
> On Wed, 30 Jun 2010, Lucas De Marchi wrote:
> 
> > Hi, I'm a developer of EFL libraries and recently we changed our API
> > in a way that I think could be automated by Coccinelle. So, I started
> > looking on this software yesterday.
> > 
> > What we did is changing the signature of some callback functions to
> > return Eina_Bool instead of int. Eina_Bool is a typedef for unsigned
> > char that is declared in a header included by Eina.h. I'm making some
> > tests with the following snippet:
> > 
> > --------------
> > #include <Eina.h>
> > #include <Ecore.h>
> > 
> > static int test_func(void *data) {
> >     if (data == NULL) {
> >     ecore_main_loop_quit();
> >         return 0;
> >     }
> > 
> >     return 1;
> > }
> > 
> > int main(void) {
> >     ecore_init();
> >     ecore_timer_add(1, test_func, 1);
> >     ecore_main_loop_begin();
> >     ecore_shutdown();
> >     return 0;
> > }
> > ------------------------------
> > 
> > Applying the following semantic patch:
> > 
> > ------------------------------
> > @r1@
> > identifier fn;
> > @@
> > ecore_timer_add(..., fn, ...);
> > 
> > @r2@
> > identifier r1.fn;
> > identifier data;
> > @@
> > - int
> > + Eina_Bool
> > fn(void *data) {
> > ...
> > (
> > - return 0;
> > + return EINA_FALSE;
> > |
> > - return 1;
> > + return EINA_TRUE;
> > )
> > ...
> > }
> > ---------------------------------
> > 
> > However it's not working because of that Eina_Bool. If I change
> > Eina_Bool to char, it works as expected. I tried playing with the
> > -all_includes and -I options but it doesn't work either. What am I
> > doing wrong?
> 
> -all_includes and -I are for the .c file, but your problem is for the 
> semantic patch.  In a semantic patch, you can declare new type names using 
> typedef, among the metavariables.  So you should put:
> 
> @r2@
> identifier r1.fn;
> identifier data;
> typedef Eina_bool;
> @@
> 
> The declaration is taken into account for the entire rest of the semantic 
> patch, not just the current rule.
> 

I think you will also have to use <+... ...+> in r2 instead of ...
to match any returns.

> julia
> 
> _______________________________________________
> Cocci mailing list
> [email protected]
> http://lists.diku.dk/mailman/listinfo/cocci
> (Web access from inside DIKUs LAN only)
> 

-- 
Nicolas Palix
Tel: (+33) 1 44 27 87 25
Tel: (+33) 6 81 07 91 72
Web: http://www.diku.dk/~npalix/
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to