//
// Log all aprint_*() functions that could potentially be replaced
// by aprint_*_dev().
//

@ initialize:python @
"""
Prepare format string regexp for later pattern matching
Declare the TODO function for logging
"""
import re

regex = re.compile("^\"%s: ")

def warn_aprint_fmt(string, p):
    file = p[0].file
    line = p[0].line
    if regex.match(string.expr):
        print "%s:%s (aprint => aprint_*_dev. TODO -- fix format string)" % (file, line)
    else:
	print "%s:%s (XXX -- suspicious format string)" % (file, line)

@ aprint1 @
type T;
position p;
identifier name, virtual.aprint, virtual.aprint_dev;
expression device;
expression string;
@@

-	T name;
	...
-	name = device_xname(device);
	...
-	aprint@p(
+	aprint_dev(device,
		string,
-		name,
		...
	)

@ aprint2 @
type T;
position p;
identifier name, virtual.aprint, virtual.aprint_dev;
expression device;
expression string;
@@

-	T name = device_xname(device);
	...
-	aprint@p(
+	aprint_dev(device,
		string,
-		name,
		...
	)

@ aprint3 @
position p;
identifier virtual.aprint, virtual.aprint_dev;
expression device;
expression string;
@@

-	aprint@p(
+	aprint_dev(device,
		string,
-		device_xname(device),
		...
	)

@ script:python @
string << aprint1.string;
p << aprint1.p;
@@

warn_aprint_fmt(string, p)

@ script:python @
string << aprint2.string;
p << aprint2.p;
@@

warn_aprint_fmt(string, p)

@ script:python @
string << aprint3.string;
p << aprint3.p;
@@

warn_aprint_fmt(string, p)