On Wed, 13 Jun 2012, yafo lee wrote:

> Hi Julia,
>    I've try to use "declarer name", but nothing  has changed.
>    Nothing happen to the code.
>    I don't understand the meaning of "You are missing struct here".
>    What should I do with these?

Sorry, I thought you had static, not struct.

In any case, I am looking into the problem.

julia

> Thanks.
>
>
> --------------------------------------------------------------------------------------
> From: Julia Lawall
> Sent: Wednesday, June 13, 2012 6:52 PM
> To: yafo lee
> Cc: [email protected]
> Subject: Re: [Cocci] How can I replace a structure name in a C file
>
>
>
> On Wed, 13 Jun 2012, yafo lee wrote:
>
> > Here is another form of variable definition in C:
> >
> > static DEFINE_PCI_DEVICE_TABLE(alx_pci_tbl) = {
> >    ALX_ETHER_DEVICE(ALX_DEV_ID_AR8131),
> >    ALX_ETHER_DEVICE(ALX_DEV_ID_AR8132),
> >    {0,}
> > };
> >
> > How can I convert it to :
> >
> > static struct alx_vendor_info alx_pci_tbl[] = {
> >    ALX_ETHER_DEVICE(ALX_DEV_ID_AR8131),
> >    ALX_ETHER_DEVICE(ALX_DEV_ID_AR8132),
> >    {0,}
> > };
> >
> > I've tried the following code, but it does not work as I expected:
> >
> > @@
> > declarer DEFINE_PCI_DEVICE_TABLE;
>
> Now you do want declarer name.
>
> > identifier  aaa;
> > @@
> >
> > - DEFINE_PCI_DEVICE_TABLE(aaa)
> > + struct alx_vendor_info aaa[]
>
> You are missing struct here.
>
> julia
>
> > = ...;
> >
> >
> >
> >
> >
> > --------------------------------------------------------------------------------
> > From: Julia Lawall
> > Sent: Tuesday, June 12, 2012 5:39 PM
> > To: yafo lee
> > Cc: Michael Stefaniuc ; [email protected]
> > Subject: Re: [Cocci] How can I replace a structure name in a C file
> >
> >
> >
> > On Tue, 12 Jun 2012, yafo lee wrote:
> >
> > > thanks Julia, after removing  "declarer name DEVMETHOD;",  it works.
> > >
> > > Now I write 3 rules to remove the "MODULE" relative macros.
> > > @@
> > > declarer name MODULE_AUTHOR;
> > > expression e;
> > > @@
> > >
> > > - MODULE_AUTHOR(e);
> > >
> > > @@
> > > declarer name MODULE_DESCRIPTION;
> > > expression e;
> > > @@
> > >
> > > - MODULE_DESCRIPTION(e);
> > >
> > > @@
> > > declarer name MODULE_LICENSE;
> > > expression e;
> > > @@
> > >
> > > - MODULE_LICENSE(e);
> > >
> > >
> > > Is there any possobility that I can combile these rules  into a single >
> > one?
> >
> > Try
> >
> > (
> > - MODULE_AUTHOR(...);
> > |
> > - MODULE_DESCRIPTION(...);
> > |
> > - MODULE_LICENSE(...)
> > )
> >
> > The ... is on purpose.  You don't need to declare a metavariable if you
> > aren't going to use the value for anything.  Of course, it is OK to do so.
> >
> > julia
> >
> >
> >
> >
> > >
> > > Thanks
> > >
> > >
> > >
> > --------------------------------------------------------------------------------
> > > From: Julia Lawall
> > > Sent: Saturday, June 09, 2012 3:58 PM
> > > To: yafo lee
> > > Cc: Michael Stefaniuc ; [email protected]
> > > Subject: Re: [Cocci] How can I replace a structure name in a C file
> > >
> > > You can make just one file with two rules.
> > >
> > > You should be able to make a pattern that has the form of the entire
> > > initialization that changes the fields as you like.  That is, after the
> > > rules you have now, make a new rule that is like the following:
> > >
> > > @@
> > > identifier abc,i;
> > > expression e;
> > > fresh identifier newi = "device_" # i;
> > > declarer name DEVMETHOD;
> > > @@
> > >
> > > device_method_t abc[]
> > > = { ...,
> > > - .i = e,
> > > +  DEVMETHOD(newi, e),
> > >  ...};
> > >
> > > I'm not able to test this now, so there nay be some problems eg with the
> > > fresh identifier syntax.  Maybe there are some examples in teh demos
> > > directory.
> > >
> > > julia
> > >
> > > On  Sat, 9 Jun 2012, yafo lee
> > > wrote:
> > >
> > > > Hi guys,
> > > > Thanks for your advises.
> > > > I write 2 cocci files to make this convert happened.
> > > > c1.cocci:
> > > > @@
> > > > typedef device_method_t;
> > > > @convert type@
> > > > - struct pci_driver
> > > > + device_method_t
> > > >
> > > > c2.cocci:
> > > > @convert name@
> > > > identifier abc;
> > > > @@
> > > >
> > > > - device_method_t abc
> > > > + device_method_t abc[]
> > > > = ...;
> > > >
> > > > After spacthing these 2 coccis sequentially,   I can get:
> > > >   static device_method_t xxx[] = {
> > > > from:
> > > >   static struct pci_driver xxx = {
> > > >
> > > > Then comes the more complicated problem:
> > > > How can I convert the initialization part of the valuable definition > >
> > after
> > > > converting it's type?
> > > >
> > > > the original code:
> > > > static device_method_t alx_driver[] = {
> > > >       .suspend        = alx_suspend,
> > > >       .resume         = alx_resume,
> > > > };
> > > >
> > > > the code I expect:
> > > > static device_method_t alx_methods[] = {
> > > >    /* Device interface */
> > > >    DEVMETHOD(device_suspend, alx_suspend),
> > > >    DEVMETHOD(device_resume, alx_resume),
> > > >    {0, 0}
> > > > };
> > > >
> > > > Can somebody give me some advise?
> > > >
> > > > Thanks.
> > > >
> > > > To julia:
> > > >   I just start it now, no sure whether I can make it,  maybe we can do >
> > > it
> > > > together o(∩_∩)o
> > > >
> > > >
> > > > -----Original Message----- From: Julia Lawall
> > > > Sent: Friday, June 08, 2012 5:37 PM
> > > > To: Michael Stefaniuc
> > > > Cc: leeyafo ; [email protected]
> > > > Subject: Re: [Cocci] How can I replace a structure name in a C file
> > > >
> > > >
> > > >
> > > > On Fri, 8 Jun 2012, Michael Stefaniuc wrote:
> > > >
> > > > > Hello,
> > > > >
> > > > > On 06/08/2012 10:33 AM, leeyafo wrote:
> > > > > > Hello guys:
> > > > > >    I'm new to Coccinelle, And now I wanna to develop a tool to
> > > > > > translate
> > > > > > Linux ethernet driver to freebsd.
> > > > > >   the first problem is to convert an instance of "struct > > > >
> > pci_driver"
> > > > > > to
> > > > > > "device_method_t".
> > > > > >   Can anybody give me some sample cocci code?
> > > > > >  I have try the following code, but it does not work as expect.
> > > > > >
> > > > > >
> > > > > > @@
> > > > > > @@
> > > > > >
> > > > > > - static struct pci_driver alx_driver = {
> > > > > > + static device_method_t alx_methods[] = {
> > > > > coccinelle is not line base like diff but knows C so you need to > > >
> > replace
> > > > > full C entities.
> > > > >
> > > > > @@
> > > > > typedef device_method_t;
> > > > > @@
> > > > > - struct pci_driver alx_driver
> > > > > + device_method_t alx_methods[]
> > > > >  = ...;
> > > > >
> > > > > If you would have changed just the type it would have been even > > >
> > simpler:
> > > > > @@
> > > > > typedef device_method_t;
> > > > > @@
> > > > > - struct pci_driver
> > > > > + device_method_t
> > > >
> > > > I guess that if the introduction of an array is wanted, the more > >
> > complex
> > > > rule will be needed.
> > > >
> > > > Thanks,
> > > > julia
> > > >
> > >
> > >
> >
> > _______________________________________________
> > Cocci mailing list
> > [email protected]
> > http://lists.diku.dk/mailman/listinfo/cocci
> > (Web access from inside DIKUs LAN only)
> >
>
>
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to