[PATCH v2] coccinelle: boolconv: improve script to handle more cases

From: Aishwarya Pant
Date: Sun Oct 22 2017 - 08:12:34 EST


Given expressions A, B and a binary operator op, the current script checks for
cases where
A op B ? true : false can be replaced by A op B

This can be extended to handle the other case where
A op B ? false : true can be replaced by !(A op B)

Moreover we can use the binary operator type to catch all desirable comparisons
in one go instead of writing them down.

Signed-off-by: Aishwarya Pant <aishpant@xxxxxxxxx>
Acked-by: Julia Lawall <julia.lawall@xxxxxxx>
---
Changes in v2:
Re-send after addding the appropriate mailing lists

scripts/coccinelle/misc/boolconv.cocci | 43 ++++++++--------------------------
1 file changed, 10 insertions(+), 33 deletions(-)

diff --git a/scripts/coccinelle/misc/boolconv.cocci b/scripts/coccinelle/misc/boolconv.cocci
index 33c464d6bc71..9b32b5fd31d4 100644
--- a/scripts/coccinelle/misc/boolconv.cocci
+++ b/scripts/coccinelle/misc/boolconv.cocci
@@ -16,27 +16,19 @@ virtual report

@depends on patch@
expression A, B;
+binary operator op = {==,!=,>,<,>=,<=,&&,||};
symbol true, false;
@@

(
- A == B
-|
- A != B
-|
- A > B
-|
- A < B
-|
- A >= B
-|
- A <= B
-|
- A && B
+ A op B
+- ? true : false
|
- A || B
++ !(
+ A op B
++ )
+- ? false : true
)
-- ? true : false

//----------------------------------------------------------
// For context mode
@@ -44,28 +36,13 @@ symbol true, false;

@r depends on !patch@
expression A, B;
+binary operator op = {==,!=,>,<,>=,<=,&&,||};
symbol true, false;
position p;
@@

-(
- A == B
-|
- A != B
-|
- A > B
-|
- A < B
-|
- A >= B
-|
- A <= B
-|
- A && B
-|
- A || B
-)
-* ? true : false@p
+ A op B
+* ? \(true\|false\) : \(false@p\|true@p\)

//----------------------------------------------------------
// For org mode
--
2.11.0