Moustafa Mahmoud
2018-09-16 14:58:03 UTC
Hello all,
I am facing this problem with typedefs, what I am trying to achieve is
convering multiple typedefs into single ones.
typedef int x,y;
into :
typedef int x;
typedef int y;
when I try to replace them inside functions, everything works as expected\
My Rule :
@rule1@
identifier fn;
type t;
metavariable mm;
@@
++ typedef t mm;
fn(...){
<+...
- typedef t mm;
...+>
}
The C Code
typedef int;
typedef int mr,e4;
int main()
{
typedef int sss, ssd;
}
The Diff :
diff =
--- typedef.c
+++ /tmp/cocci-output-91048-e42770-typedef.c
@@ -3,7 +3,8 @@
typedef int;
typedef int mr,e4;
+typedef int ssd;
+typedef int sss;
int main()
{
- typedef int sss, ssd;
}
\ No newline at end of file
However if I try to generalize it
@rule1@
type t;
metavariable mm;
@@
++ typedef t mm;
- typedef t mm;
The C Code:
typedef int;
typedef int mr,e4;
int main()
{
typedef int sss, ssd;
}
What I get is this :
typedef int;
-typedef int mr,e4;
+typedef int e4;
+typedef int mr;
+typedef int;
int main()
{
- typedef int sss, ssd;
+ typedef int ssd;
+ typedef int sss;
+ typedef int;
}
\ No newline at end of file
You can notice the extra "+ typedef int;" , why are those produced ? is
there a way to achieve what want without them ?
Thank you very much.
I am facing this problem with typedefs, what I am trying to achieve is
convering multiple typedefs into single ones.
typedef int x,y;
into :
typedef int x;
typedef int y;
when I try to replace them inside functions, everything works as expected\
My Rule :
@rule1@
identifier fn;
type t;
metavariable mm;
@@
++ typedef t mm;
fn(...){
<+...
- typedef t mm;
...+>
}
The C Code
typedef int;
typedef int mr,e4;
int main()
{
typedef int sss, ssd;
}
The Diff :
diff =
--- typedef.c
+++ /tmp/cocci-output-91048-e42770-typedef.c
@@ -3,7 +3,8 @@
typedef int;
typedef int mr,e4;
+typedef int ssd;
+typedef int sss;
int main()
{
- typedef int sss, ssd;
}
\ No newline at end of file
However if I try to generalize it
@rule1@
type t;
metavariable mm;
@@
++ typedef t mm;
- typedef t mm;
The C Code:
typedef int;
typedef int mr,e4;
int main()
{
typedef int sss, ssd;
}
What I get is this :
typedef int;
-typedef int mr,e4;
+typedef int e4;
+typedef int mr;
+typedef int;
int main()
{
- typedef int sss, ssd;
+ typedef int ssd;
+ typedef int sss;
+ typedef int;
}
\ No newline at end of file
You can notice the extra "+ typedef int;" , why are those produced ? is
there a way to achieve what want without them ?
Thank you very much.