Fix docstring bug..

small sync with python 2.4 branch
This commit is contained in:
rocky
2017-12-02 21:11:19 -05:00
parent f7abc69861
commit e172a8f3c0
6 changed files with 51 additions and 16 deletions

View File

@@ -182,19 +182,19 @@ check-bytecode-2.7:
#: Check deparsing Python 3.0 #: Check deparsing Python 3.0
check-bytecode-3.0: check-bytecode-3.0:
$(PYTHON) test_pythonlib.py --bytecode-3.0 $(PYTHON) test_pythonlib.py --bytecode-3.0 --weak-verify
#: Check deparsing Python 3.1 #: Check deparsing Python 3.1
check-bytecode-3.1: check-bytecode-3.1:
$(PYTHON) test_pythonlib.py --bytecode-3.1 $(PYTHON) test_pythonlib.py --bytecode-3.1 --weak-verify
#: Check deparsing Python 3.2 #: Check deparsing Python 3.2
check-bytecode-3.2: check-bytecode-3.2:
$(PYTHON) test_pythonlib.py --bytecode-3.2 $(PYTHON) test_pythonlib.py --bytecode-3.2 --weak-verify
#: Check deparsing Python 3.3 #: Check deparsing Python 3.3
check-bytecode-3.3: check-bytecode-3.3:
$(PYTHON) test_pythonlib.py --bytecode-3.3 $(PYTHON) test_pythonlib.py --bytecode-3.3 --weak-verify
#: Check deparsing Python 3.4 #: Check deparsing Python 3.4
check-bytecode-3.4: check-bytecode-3.4:
@@ -202,11 +202,11 @@ check-bytecode-3.4:
#: Check deparsing Python 3.5 #: Check deparsing Python 3.5
check-bytecode-3.5: check-bytecode-3.5:
$(PYTHON) test_pythonlib.py --bytecode-3.5 $(PYTHON) test_pythonlib.py --bytecode-3.5 --weak-verify
#: Check deparsing Python 3.6 #: Check deparsing Python 3.6
check-bytecode-3.6: check-bytecode-3.6:
$(PYTHON) test_pythonlib.py --bytecode-3.6 $(PYTHON) test_pythonlib.py --bytecode-3.6 --weak-verify
#: short tests for bytecodes only for this version of Python #: short tests for bytecodes only for this version of Python
check-native-short: check-native-short:

Binary file not shown.

Binary file not shown.

View File

@@ -5,3 +5,18 @@ def foo():
def bar(): def bar():
r"""func placeholder - ' and with ('''\nstring\n''') and \"\"\"\nstring\n\"\"\" """ r"""func placeholder - ' and with ('''\nstring\n''') and \"\"\"\nstring\n\"\"\" """
def baz():
"""
... '''>>> assert 1 == 1
... '''
... \"""
>>> exec test_data in m1.__dict__
>>> exec test_data in m2.__dict__
>>> m1.__dict__.update({"f2": m2._f, "g2": m2.g, "h2": m2.H})
Tests that objects outside m1 are excluded:
\"""
>>> t.rundict(m1.__dict__, 'rundict_test_pvt') # None are skipped.
TestResults(failed=0, attempted=8)
"""

View File

@@ -13,6 +13,7 @@ def print_docstring(self, indent, docstring):
quote = '"""' quote = '"""'
else: else:
quote = "'''" quote = "'''"
docstring = docstring.replace("'''", "\\'''")
except: except:
return False return False
self.write(indent) self.write(indent)

View File

@@ -110,8 +110,6 @@ Python.
# brackets, which makes the template_engine walk down to N[C] before # brackets, which makes the template_engine walk down to N[C] before
# evaluating the escape code. # evaluating the escape code.
from __future__ import print_function
import sys import sys
from uncompyle6 import PYTHON3 from uncompyle6 import PYTHON3
@@ -1075,7 +1073,10 @@ class SourceWalker(GenericASTTraversal, object):
return return
n = node[-1] n = node[-1]
elif node[-1] == 'del_stmt': elif node[-1] == 'del_stmt':
n = node[-3] if node[-2] == 'JUMP_BACK' else node[-2] if node[-2] == 'JUMP_BACK':
n = node[-3]
else:
n = node[-2]
assert n == 'list_iter' assert n == 'list_iter'
@@ -1093,7 +1094,10 @@ class SourceWalker(GenericASTTraversal, object):
list_iter = node[-1] list_iter = node[-1]
else: else:
expr = n[1] expr = n[1]
list_iter = node[-3] if node[-2] == 'JUMP_BACK' else node[-2] if node[-2] == 'JUMP_BACK':
list_iter = node[-3]
else:
list_iter = node[-2]
assert expr == 'expr' assert expr == 'expr'
assert list_iter == 'list_iter' assert list_iter == 'list_iter'
@@ -1144,7 +1148,10 @@ class SourceWalker(GenericASTTraversal, object):
self.write( '[ ') self.write( '[ ')
expr = n[0] expr = n[0]
list_iter = node[-2] if self.is_pypy and node[-1] == 'JUMP_BACK' else node[-1] if self.is_pypy and node[-1] == 'JUMP_BACK':
list_iter = node[-2]
else:
list_iter = node[-1]
assert expr == 'expr' assert expr == 'expr'
assert list_iter == 'list_iter' assert list_iter == 'list_iter'
@@ -1218,7 +1225,10 @@ class SourceWalker(GenericASTTraversal, object):
self.write(' for ') self.write(' for ')
self.preorder(ast[iter_index-1]) self.preorder(ast[iter_index-1])
self.write(' in ') self.write(' in ')
iter_expr = node[2] if node[2] == 'expr' else node[-3] if node[2] == 'expr':
iter_expr = node[2]
else:
iter_expr = node[-3]
assert iter_expr == 'expr' assert iter_expr == 'expr'
self.preorder(iter_expr) self.preorder(iter_expr)
self.preorder(ast[iter_index]) self.preorder(ast[iter_index])
@@ -1226,7 +1236,10 @@ class SourceWalker(GenericASTTraversal, object):
def n_generator_exp(self, node): def n_generator_exp(self, node):
self.write('(') self.write('(')
code_index = -6 if self.version > 3.2 else -5 if self.version > 3.2:
code_index = -6
else:
code_index = -5
self.comprehension_walk(node, iter_index=3, code_index=code_index) self.comprehension_walk(node, iter_index=3, code_index=code_index)
self.write(')') self.write(')')
self.prune() self.prune()
@@ -1469,7 +1482,10 @@ class SourceWalker(GenericASTTraversal, object):
break break
pass pass
pass pass
subclass_info = node if node == 'classdefdeco2' else node[0] if node == 'classdefdeco2':
subclass_info = node
else:
subclass_info = node[0]
elif buildclass[1][0] == 'load_closure': elif buildclass[1][0] == 'load_closure':
# Python 3 with closures not functions # Python 3 with closures not functions
load_closure = buildclass[1] load_closure = buildclass[1]
@@ -1496,7 +1512,10 @@ class SourceWalker(GenericASTTraversal, object):
subclass_code = buildclass[1][0].attr subclass_code = buildclass[1][0].attr
subclass_info = node[0] subclass_info = node[0]
else: else:
buildclass = node if (node == 'classdefdeco2') else node[0] if node == 'classdefdeco2':
buildclass = node
else:
buildclass = node[0]
build_list = buildclass[1][0] build_list = buildclass[1][0]
if hasattr(buildclass[-3][0], 'attr'): if hasattr(buildclass[-3][0], 'attr'):
subclass_code = buildclass[-3][0].attr subclass_code = buildclass[-3][0].attr
@@ -2338,7 +2357,7 @@ def deparse_code(version, co, out=sys.stdout, showasm=None, showast=False,
if __name__ == '__main__': if __name__ == '__main__':
def deparse_test(co): def deparse_test(co):
"This is a docstring" "This is a docstring"
sys_version = sys.version_info.major + (sys.version_info.minor / 10.0) sys_version = float(sys.version[0:3])
deparsed = deparse_code(sys_version, co, showasm='after', showast=True) deparsed = deparse_code(sys_version, co, showasm='after', showast=True)
# deparsed = deparse_code(sys_version, co, showasm=None, showast=False, # deparsed = deparse_code(sys_version, co, showasm=None, showast=False,
# showgrammar=True) # showgrammar=True)