181 lines
3.2 KiB
Plaintext
181 lines
3.2 KiB
Plaintext
/// Simplify a trivial if-return sequence. Possibly combine with a
|
|
/// preceding function call.
|
|
//
|
|
// Confidence: High
|
|
// Copyright: (C) 2014 Julia Lawall, INRIA/LIP6. GPLv2.
|
|
// Copyright: (C) 2014 Gilles Muller, INRIA/LiP6. GPLv2.
|
|
// URL: http://coccinelle.lip6.fr/
|
|
// Comments:
|
|
// Options: --no-includes --include-headers
|
|
|
|
virtual patch
|
|
virtual context
|
|
virtual org
|
|
virtual report
|
|
|
|
@r depends on patch@
|
|
local idexpression e;
|
|
identifier i,f,fn;
|
|
@@
|
|
|
|
fn(...) { <...
|
|
- e@i =
|
|
+ return
|
|
f(...);
|
|
-if (i != 0) return i;
|
|
-return 0;
|
|
...> }
|
|
|
|
@depends on patch@
|
|
identifier r.i;
|
|
type t;
|
|
@@
|
|
|
|
-t i;
|
|
... when != i
|
|
|
|
@depends on patch@
|
|
expression e;
|
|
@@
|
|
|
|
-if (e != 0)
|
|
return e;
|
|
-return 0;
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
@s1 depends on context || org || report@
|
|
local idexpression e;
|
|
identifier i,f,fn;
|
|
position p,p1,p2;
|
|
@@
|
|
|
|
fn(...) { <...
|
|
* e@i@p = f(...);
|
|
if (\(i@p1 != 0\|i@p2 < 0\))
|
|
return i;
|
|
return 0;
|
|
...> }
|
|
|
|
@s2 depends on context || org || report forall@
|
|
identifier s1.i;
|
|
type t;
|
|
position q,s1.p;
|
|
expression e,f;
|
|
@@
|
|
|
|
* t i@q;
|
|
... when != i
|
|
e@p = f(...);
|
|
|
|
@s3 depends on context || org || report@
|
|
expression e;
|
|
position p1!=s1.p1;
|
|
position p2!=s1.p2;
|
|
@@
|
|
|
|
*if (\(e@p1 != 0\|e@p2 < 0\))
|
|
return e;
|
|
return 0;
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
@script:python depends on org@
|
|
p << s1.p;
|
|
p1 << s1.p1;
|
|
q << s2.q;
|
|
@@
|
|
|
|
cocci.print_main("decl",q)
|
|
cocci.print_secs("use",p)
|
|
cocci.include_match(False)
|
|
|
|
@script:python depends on org@
|
|
p << s1.p;
|
|
p2 << s1.p2;
|
|
q << s2.q;
|
|
@@
|
|
|
|
cocci.print_main("decl",q)
|
|
cocci.print_secs("use with questionable test",p)
|
|
cocci.include_match(False)
|
|
|
|
@script:python depends on org@
|
|
p << s1.p;
|
|
p1 << s1.p1;
|
|
@@
|
|
|
|
cocci.print_main("use",p)
|
|
|
|
@script:python depends on org@
|
|
p << s1.p;
|
|
p2 << s1.p2;
|
|
@@
|
|
|
|
cocci.print_main("use with questionable test",p)
|
|
|
|
@script:python depends on org@
|
|
p << s3.p1;
|
|
@@
|
|
|
|
cocci.print_main("test",p)
|
|
|
|
@script:python depends on org@
|
|
p << s3.p2;
|
|
@@
|
|
|
|
cocci.print_main("questionable test",p)
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
@script:python depends on report@
|
|
p << s1.p;
|
|
p1 << s1.p1;
|
|
q << s2.q;
|
|
@@
|
|
|
|
msg = "WARNING: end returns can be simpified and declaration on line %s can be dropped" % (q[0].line)
|
|
coccilib.report.print_report(p[0],msg)
|
|
cocci.include_match(False)
|
|
|
|
@script:python depends on report@
|
|
p << s1.p;
|
|
p1 << s1.p1;
|
|
q << s2.q
|
|
;
|
|
@@
|
|
|
|
msg = "WARNING: end returns may be simpified if negative or 0 value and declaration on line %s can be dropped" % (q[0].line)
|
|
coccilib.report.print_report(p[0],msg)
|
|
cocci.include_match(False)
|
|
|
|
@script:python depends on report@
|
|
p << s1.p;
|
|
p1 << s1.p1;
|
|
@@
|
|
|
|
msg = "WARNING: end returns can be simpified"
|
|
coccilib.report.print_report(p[0],msg)
|
|
|
|
@script:python depends on report@
|
|
p << s1.p;
|
|
p2 << s1.p2;
|
|
@@
|
|
|
|
msg = "WARNING: end returns can be simpified if negative or 0 value"
|
|
coccilib.report.print_report(p[0],msg)
|
|
|
|
@script:python depends on report@
|
|
p << s3.p1;
|
|
@@
|
|
|
|
msg = "WARNING: end returns can be simpified"
|
|
coccilib.report.print_report(p[0],msg)
|
|
|
|
@script:python depends on report@
|
|
p << s3.p2;
|
|
@@
|
|
|
|
msg = "WARNING: end returns can be simpified if tested value is negative or 0"
|
|
coccilib.report.print_report(p[0],msg)
|