Re: [Cocci] Adjusting replacement lists with SmPL?
On Fri, Oct 23, 2020 at 11:00 AM 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”? I mean, not specifically in the #define, but anywhere. (I don't try to patch preprocessor directives with spatch, I use sed for that.) > > #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? A trailing colon in a #define leads to code like this: { X(1) X(2) ... } ... which of course does not parse. It would be better to use a do { ... } while (0), or better yet an inline function. But unfortunately the above style is very common. On Fri, Oct 23, 2020 at 11:11 AM Julia Lawall wrote: > 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. Yes, exactly. :) ___ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci
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