Re: [Cocci] Adjusting replacement lists with SmPL?
On Fri, 23 Oct 2020, Markus Elfring wrote: > > I'd like to add a statement after another within a preprocessor expression, > > > > How do you think about to refer to a “#define directive”? > > > > > > > but spatch adds the line without an escape (backslash). > > > > I imagine that we stumble on another target conflict here. > > https://github.com/coccinelle/coccinelle/issues/139 > > > > Do you really want to adjust a bit of text according to a preprocessing > > definition? > > > > > > > #define X(a) x(a); > > > > > > (I know the above is not technically correct but it's super common.) > > > > I stumble on understanding difficulties for this information. > > Would you like to clarify the knowledge about correctness a bit more? > > > > > > > @@ > > > expression e; > > > @@ > > > x(e); > > > + y(e); > > > > How should the scope be specified that a change should be performed > > only for preprocessor code (replacement lists for your transformation > > approach)? I don't think he is asking that. He means, if the call to x happens to be in a macro definition, how can he ensure that the transformed code treats newlines in the right way. julia > > > > > > > I can think of two solutions, if an expression is inside a > > > preprocessor statement: add a backslash before every newline, or skip > > > the newline. > > > > Would you like to choose the preferred coding style for such an use case? > > > > Regards, > > Markus > > ___ > > Cocci mailing list > > Cocci@systeme.lip6.fr > > https://systeme.lip6.fr/mailman/listinfo/cocci > >___ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci
Re: [Cocci] Adjusting replacement lists with SmPL?
I'd like to add a statement after another within a preprocessor expression, How do you think about to refer to a “#define directive”? but spatch adds the line without an escape (backslash). I imagine that we stumble on another target conflict here. https://github.com/coccinelle/coccinelle/issues/139 Do you really want to adjust a bit of text according to a preprocessing definition? #define X(a) x(a); (I know the above is not technically correct but it's super common.) I stumble on understanding difficulties for this information. Would you like to clarify the knowledge about correctness a bit more? @@ expression e; @@ x(e); + y(e); How should the scope be specified that a change should be performed only for preprocessor code (replacement lists for your transformation approach)? I can think of two solutions, if an expression is inside a preprocessor statement: add a backslash before every newline, or skip the newline. Would you like to choose the preferred coding style for such an use case? Regards, Markus ___ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci
Re: [Cocci] Newline escape in preprocessor
On Thu, 22 Oct 2020, Mansour Moufid wrote: > Hi, > > I'd like to add a statement after another within a preprocessor > expression, but spatch adds the line without an escape (backslash). > > x.c: > > #define X(a) x(a); > > (I know the above is not technically correct but it's super common.) > > x.cocci: > > @@ > expression e; > @@ > x(e); > + y(e); > > output: > > $ spatch --sp-file x.cocci x.c > HANDLING: x.c > diff = > --- x.c > +++ /tmp/cocci-output-80658-7f90b1-x.c > @@ -1 +1,2 @@ > #define X(a) x(a); > +y(a); > > I can think of two solutions, if an expression is inside a > preprocessor statement: add a backslash before every newline, or skip > the newline. Indeed Coccinelle is not aware that the added code is within a #define. Maybe it is easy to add that. Thanks for the report. julia ___ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci