[Cocci] Change function invocations argument
eliseomarmol at gmail.com
Sat Dec 20 21:45:58 CET 2014
Great. That worked. Just one more thing, please.
Some of the replacements done by the rule before leave literals of the form “(uintmax_t)34”.
I would like to use an unsigned constant in those cases. This is, something like “34u”.
So I add the following rule:
@@ expression e1, e3; constant c2; @@
31 - put_bytes(e1, (uintmax_t)c2, e3)
32 + put_bytes(e1, c2, e3)
That does the work, except adding the “u”. How could I do that?
Is it possible adding something literally in the output?
Is it possible to somehow say in line 32 “render c2 but with u suffix”?
> On 20 Dec 2014, at 21:32, Julia Lawall <julia.lawall at lip6.fr> wrote:
> On Sat, 20 Dec 2014, Eliseo Martínez wrote:
>> For a given function, I want to change all invocations in this way:
>> Turn the second argument of the form “(long_u)(expression)” into “(uintmax_t)expression”.
>> I’ve done a patch for that but is failing with a not very much informative message error.
>> Here is it:
>> eliseo at ubuntu:~/projects/os/neovim/neovim$ cat sample.cocci
>> @@ expression e1, e2, e3; @@
>> - (long_u)(e2),
>> + (uintmax_t)e2,
> long_u and uintmax_t are not part of the C language, and Coccinelle is not
> always able to infer typedefs. Just add:
> typedef long_u, uintmax_t;
> in your metavariable list. This should only be done in the first rule in
> which the typename is relevant.
More information about the Cocci