[pypy-commit] pypy py3k: bah, we need to recursively convert strings to unicode also inside constant tuples
antocuni
noreply at buildbot.pypy.org
Wed Jul 18 23:17:03 CEST 2012
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: py3k
Changeset: r56202:658eb1045b20
Date: 2012-07-18 23:16 +0200
http://bitbucket.org/pypy/pypy/changeset/658eb1045b20/
Log: bah, we need to recursively convert strings to unicode also inside
constant tuples
diff --git a/pypy/tool/sourcetools.py b/pypy/tool/sourcetools.py
--- a/pypy/tool/sourcetools.py
+++ b/pypy/tool/sourcetools.py
@@ -270,6 +270,15 @@
firstlineno = -1
return "(%s:%d)%s" % (mod or '?', firstlineno, name or 'UNKNOWN')
+
+def _convert_const_maybe(x, encoding):
+ if isinstance(x, str):
+ return x.decode(encoding)
+ elif isinstance(x, tuple):
+ items = [_convert_const_maybe(item, encoding) for item in x]
+ return tuple(items)
+ return x
+
def with_unicode_literals(fn=None, **kwds):
encoding = kwds.pop('encoding', 'ascii')
if kwds:
@@ -278,9 +287,7 @@
co = fn.func_code
new_consts = []
for const in co.co_consts:
- if isinstance(const, str):
- const = const.decode(encoding)
- new_consts.append(const)
+ new_consts.append(_convert_const_maybe(const, encoding))
new_consts = tuple(new_consts)
new_code = types.CodeType(co.co_argcount, co.co_nlocals, co.co_stacksize,
co.co_flags, co.co_code, new_consts, co.co_names,
diff --git a/pypy/tool/test/test_sourcetools.py b/pypy/tool/test/test_sourcetools.py
--- a/pypy/tool/test/test_sourcetools.py
+++ b/pypy/tool/test/test_sourcetools.py
@@ -57,3 +57,9 @@
def foo():
return 'hello àèì'
assert foo() == u'hello àèì'
+ #
+ @with_unicode_literals
+ def foo():
+ return ('a', 'b')
+ assert type(foo()[0]) is unicode
+
More information about the pypy-commit
mailing list