diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/Makefile.am | 7 | ||||
| -rwxr-xr-x | python/lvalue_cast_post_process.py | 80 | 
2 files changed, 85 insertions, 2 deletions
diff --git a/python/Makefile.am b/python/Makefile.am index 25191630..3fd678b3 100644 --- a/python/Makefile.am +++ b/python/Makefile.am @@ -16,7 +16,8 @@ nodist_dbus_bindings_la_SOURCES = dbus_bindings.c  EXTRA_DIST = 			\  	dbus_h_wrapper.h	\  	dbus_bindings.pyx.in	\ -	extract.py +	extract.py		\ +	lvalue_cast_post_process.py	  CLEANFILES =			\  	dbus_bindings.pyx	\ @@ -26,5 +27,7 @@ CLEANFILES =			\  dbus_bindings.pyx: dbus_bindings.pyx.in extract.py  	-$(PYTHON) extract.py dbus_bindings.pyx.in -I$(top_builddir)  > dbus_bindings.pyx -dbus_bindings.c: dbus_bindings.pyx +dbus_bindings.c: dbus_bindings.pyx lvalue_cast_post_process.py  	-pyrexc dbus_bindings.pyx +	-$(PYTHON) lvalue_cast_post_process.py dbus_bindings.c +	-mv dbus_bindings.c.gcc4fix dbus_bindings.c diff --git a/python/lvalue_cast_post_process.py b/python/lvalue_cast_post_process.py new file mode 100755 index 00000000..66129004 --- /dev/null +++ b/python/lvalue_cast_post_process.py @@ -0,0 +1,80 @@ +#!/bin/env python + +import re +import sys + +exp_pattern = re.compile('(.*)=(.*);') +lval_pyobject_pattern = re.compile('\s*\(\((PyObject[ ]?\*)\)([A-Za-z0-9_ ]+)\)') +lval_structcast_pattern = re.compile('\s*\((struct [A-Za-z0-9_]+ \*)\)([A-Za-z0-9_]+)\-\>([A-Za-z0-9_]+)') + +def parse_expression(exp): +	exp_match = exp_pattern.match(exp) +	if exp_match: +		lvalue = exp_match.group(1) +		rvalue = exp_match.group(2) + +		lval_match = lval_pyobject_pattern.match(lvalue) + +		if lval_match: +			cast = lval_match.group(1) +			lvar = lval_match.group(2) + +			return "%s = (%s)(%s);" % (lvar, cast, rvalue) +		else: +			lval_match = lval_structcast_pattern.match(lvalue) +			if lval_match: +				cast = lval_match.group(1) +				casted_var = lval_match.group(2) +				member_var = lval_match.group(3) + +				result = "%s->%s = ((%s)%s);" % ( +					    casted_var,  +					    member_var,  +					    cast, +					    rvalue) + +				return result + +	return None + +def main(): +	if len(sys.argv) != 2: +		print "USAGE: " + sys.argv[0] + " <file name>"  +		return(-1)	 + +	file = sys.argv[1] +	f = open(file) +	gcc4fix_filename = file + ".gcc4fix" +	outputf = open(gcc4fix_filename, 'w') + +	lines = f.readlines() +	f.close() +	for line in lines: +		c = line.count(";") +		if c == 0: +			outputf.write(line) +			continue + +		exprs = line.split(';') +		line = "" +		last = exprs.pop() +		for expr in exprs: +			expr = expr + ";" + +			result = parse_expression(expr) +			if result: +				line = line + result +			else: +				line = line + expr + +		if (last.strip()!=''): +			line = line + last +		else: +			line = line + "\n" +			 +		outputf.write(line) +	 +	outputf.close() + +if __name__ == "__main__": +	sys.exit(main())  | 
