All of lore.kernel.org
 help / color / mirror / Atom feed
From: wagi@monom.org (Daniel Wagner)
To: cocci@systeme.lip6.fr
Subject: [Cocci] gboolean -> bool conversion
Date: Thu, 11 Jul 2013 13:17:35 +0200	[thread overview]
Message-ID: <51DE944F.1000903@monom.org> (raw)
In-Reply-To: <alpine.DEB.2.02.1307111221320.2253@hadrien>

On 07/11/2013 12:24 PM, Julia Lawall wrote:
> How is the following:
>
> @@
> gboolean x;
> @@
>
> x =
> (
> - TRUE
> + true
> |
> - FALSE
> + false
> )
>
> @@
> typedef bool;
> @@
>
> - gboolean
> + bool
>
> Note that the order of the rules is important.

Yeah, I should have noted that.

> In your rules, you
> converted gboolean to bool first, so the second rule would not find any
> gbooleans.

Yep, that works better, though now I hit the 'already tagged' problem.
Changing the second rule to

-gboolean
++ bool

Let's coccinelle run but the result is not perfect.

> Another problem with your rules was that it thought that gboolean and bool
> were expressions.  So the first rule needed typedef declaration. In my
> rule, I use gboolean as the type of a metavariable in the first rule, so
> Coccinelle considers it to be a type thereafter.  But I need the typedef
> on bool in the second rule.

Thanks for the explanation. It really helps!

> Is that good enough for your purpose, or are too many values and
> declarations being converted?

I have updated my sample program, which contains all our usage pattern 
of gboolean.

struct info {
	gboolean data;
};

static gboolean timer_cb(gpointer user_data)
{
	struct info *info = user_data;

	info->data = FALSE;

	return FALSE;
}

static gboolean is_enabled(gboolean flag)
{
	return flag != TRUE;
}

int main(int argc, char *argv[])
{
	gboolean b = TRUE;
	gboolean c, d;
	gboolean e = FALSE, g, f = TRUE;
	gboolean h = is_ensbled(b);
	struct info *info;

	info = g_new0(struct info, 1);
	info->data = TRUE;

	g_timeout(delay, timer_cb, &info);

	return 0;
}


The resulting patch (with the ++bool version) is:

--- test.c
+++ /tmp/cocci-output-21088-1cd7bc-test.c
@@ -1,31 +1,31 @@
  struct info {
-       gboolean data;
+       bool data;
  };

-static gboolean timer_cb(gpointer user_data)
+static bool timer_cb(gpointer user_data)
  {
         struct info *info = user_data;

-       info->data = FALSE;
+       info->data = false;

         return FALSE;
  }

-static gboolean is_enabled(gboolean flag)
+static bool is_enabled(bool flag)
  {
         return !flag;
  }

  int main(int argc, char *argv[])
  {
-       gboolean b = TRUE;
-       gboolean c, d;
-       gboolean e = FALSE, g, f = TRUE;
-       gboolean h = is_ensbled(b);
+       bool b = true;
+       bool bool c, d;
+       bool bool bool e = false, g, f = true;
+       bool h = is_ensbled(b);
         struct info *info;

         info = g_new0(struct info, 1);
-       info->data = TRUE;
+       info->data = true;

         g_timeout(delay, timer_cb, &info);


Obviously, the 'bool bool bool' stuff is not correct, but I can catch 
that via the compiler.

timer_cb() should not be changed. Is there maybe a way of blacklisting 
certain matches? I see there are some 'when' examples but I do not 
really growk them right now. Sorry for beeing so noobish...

cheers,
daniel

  reply	other threads:[~2013-07-11 11:17 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-11  8:17 [Cocci] gboolean -> bool conversion Daniel Wagner
2013-07-11  8:29 ` Julia Lawall
2013-07-11  9:07   ` Daniel Wagner
2013-07-11  9:57     ` Julia Lawall
2013-07-11  9:58     ` Daniel Wagner
2013-07-11 10:24       ` Julia Lawall
2013-07-11 11:17         ` Daniel Wagner [this message]
2013-07-11 12:17           ` Julia Lawall
2013-07-11 12:38             ` Daniel Wagner
2013-07-11 13:07               ` Julia Lawall
2013-07-12  6:55                 ` Daniel Wagner
2013-07-12  7:00                   ` Julia Lawall
2013-07-12  9:08                     ` Daniel Wagner
2013-07-16 14:21                     ` Daniel Wagner
2013-07-16 16:22                       ` Julia Lawall
2013-07-17  8:47                         ` Daniel Wagner
2013-07-17  9:01                           ` Julia Lawall
2013-07-17 14:58                             ` Daniel Wagner
2013-07-17 15:11                               ` Julia Lawall
2013-07-17 15:40                                 ` Daniel Wagner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51DE944F.1000903@monom.org \
    --to=wagi@monom.org \
    --cc=cocci@systeme.lip6.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.