Coccinelle archive on lore.kernel.org
 help / Atom feed
* [Cocci] Strange behavior with replacing multiple typedefs
@ 2018-09-16 14:58 moustafa
  2018-09-16 15:07 ` julia.lawall
  0 siblings, 1 reply; 2+ messages in thread
From: moustafa @ 2018-09-16 14:58 UTC (permalink / raw)
  To: cocci

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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://systeme.lip6.fr/pipermail/cocci/attachments/20180916/4f7fbf15/attachment.html>

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Cocci] Strange behavior with replacing multiple typedefs
  2018-09-16 14:58 [Cocci] Strange behavior with replacing multiple typedefs moustafa
@ 2018-09-16 15:07 ` julia.lawall
  0 siblings, 0 replies; 2+ messages in thread
From: julia.lawall @ 2018-09-16 15:07 UTC (permalink / raw)
  To: cocci



On Sun, 16 Sep 2018, Moustafa Mahmoud wrote:

> 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 ?

Wow, I'm thrilled that it worked at all :)  I knew that that would work
for eg int x,y,z;, but I didn't realize that it would work for typedefs
too.

I have the impression that it is pulling out the individual typedefs like
you asked, but then it is not actually deleting the typedef t ; part.
That is, it is not adding typedef int; it is just not removing the
original typedef after pulling out eg mr and e4.  I will see if I can fix
it.  In the short term , I don't see any workaround, unfortunately.

julia

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, back to index

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-16 14:58 [Cocci] Strange behavior with replacing multiple typedefs moustafa
2018-09-16 15:07 ` julia.lawall

Coccinelle archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/cocci/0 cocci/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 cocci cocci/ https://lore.kernel.org/cocci \
		cocci@systeme.lip6.fr cocci@archiver.kernel.org
	public-inbox-index cocci


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/fr.lip6.systeme.cocci


AGPL code for this site: git clone https://public-inbox.org/ public-inbox