mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	* Fix some docstrings and one Print -> print.
* Fix test_{class,code,descrtut,dis,extcall,parser,popen,pkg,subprocess,syntax,traceback}.
  These were the ones that generated code with a print statement.
  In most remaining failing tests there's an issue with the soft space.
		
	
			
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""This module includes tests of the code object representation.
 | 
						|
 | 
						|
>>> def f(x):
 | 
						|
...     def g(y):
 | 
						|
...         return x + y
 | 
						|
...     return g
 | 
						|
...
 | 
						|
 | 
						|
>>> dump(f.func_code)
 | 
						|
name: f
 | 
						|
argcount: 1
 | 
						|
kwonlyargcount: 0
 | 
						|
names: ()
 | 
						|
varnames: ('x', 'g')
 | 
						|
cellvars: ('x',)
 | 
						|
freevars: ()
 | 
						|
nlocals: 2
 | 
						|
flags: 3
 | 
						|
consts: ('None', '<code object g>')
 | 
						|
 | 
						|
>>> dump(f(4).func_code)
 | 
						|
name: g
 | 
						|
argcount: 1
 | 
						|
kwonlyargcount: 0
 | 
						|
names: ()
 | 
						|
varnames: ('y',)
 | 
						|
cellvars: ()
 | 
						|
freevars: ('x',)
 | 
						|
nlocals: 1
 | 
						|
flags: 19
 | 
						|
consts: ('None',)
 | 
						|
 | 
						|
>>> def h(x, y):
 | 
						|
...     a = x + y
 | 
						|
...     b = x - y
 | 
						|
...     c = a * b
 | 
						|
...     return c
 | 
						|
...
 | 
						|
 | 
						|
>>> dump(h.func_code)
 | 
						|
name: h
 | 
						|
argcount: 2
 | 
						|
kwonlyargcount: 0
 | 
						|
names: ()
 | 
						|
varnames: ('x', 'y', 'a', 'b', 'c')
 | 
						|
cellvars: ()
 | 
						|
freevars: ()
 | 
						|
nlocals: 5
 | 
						|
flags: 67
 | 
						|
consts: ('None',)
 | 
						|
 | 
						|
>>> def attrs(obj):
 | 
						|
...     print(obj.attr1)
 | 
						|
...     print(obj.attr2)
 | 
						|
...     print(obj.attr3)
 | 
						|
 | 
						|
>>> dump(attrs.func_code)
 | 
						|
name: attrs
 | 
						|
argcount: 1
 | 
						|
kwonlyargcount: 0
 | 
						|
names: ('print', 'attr1', 'attr2', 'attr3')
 | 
						|
varnames: ('obj',)
 | 
						|
cellvars: ()
 | 
						|
freevars: ()
 | 
						|
nlocals: 1
 | 
						|
flags: 67
 | 
						|
consts: ('None',)
 | 
						|
 | 
						|
>>> def optimize_away():
 | 
						|
...     'doc string'
 | 
						|
...     'not a docstring'
 | 
						|
...     53
 | 
						|
...     0x53
 | 
						|
 | 
						|
>>> dump(optimize_away.func_code)
 | 
						|
name: optimize_away
 | 
						|
argcount: 0
 | 
						|
kwonlyargcount: 0
 | 
						|
names: ()
 | 
						|
varnames: ()
 | 
						|
cellvars: ()
 | 
						|
freevars: ()
 | 
						|
nlocals: 0
 | 
						|
flags: 67
 | 
						|
consts: ("'doc string'", 'None')
 | 
						|
 | 
						|
>>> def keywordonly_args(a,b,*,k1):
 | 
						|
...     return a,b,k1
 | 
						|
...
 | 
						|
 | 
						|
>>> dump(keywordonly_args.func_code)
 | 
						|
name: keywordonly_args
 | 
						|
argcount: 2
 | 
						|
kwonlyargcount: 1
 | 
						|
names: ()
 | 
						|
varnames: ('a', 'b', 'k1')
 | 
						|
cellvars: ()
 | 
						|
freevars: ()
 | 
						|
nlocals: 3
 | 
						|
flags: 67
 | 
						|
consts: ('None',)
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
def consts(t):
 | 
						|
    """Yield a doctest-safe sequence of object reprs."""
 | 
						|
    for elt in t:
 | 
						|
        r = repr(elt)
 | 
						|
        if r.startswith("<code object"):
 | 
						|
            yield "<code object %s>" % elt.co_name
 | 
						|
        else:
 | 
						|
            yield r
 | 
						|
 | 
						|
def dump(co):
 | 
						|
    """Print out a text representation of a code object."""
 | 
						|
    for attr in ["name", "argcount", "kwonlyargcount", "names", "varnames",
 | 
						|
                 "cellvars", "freevars", "nlocals", "flags"]:
 | 
						|
        print("%s: %s" % (attr, getattr(co, "co_" + attr)))
 | 
						|
    print("consts:", tuple(consts(co.co_consts)))
 | 
						|
 | 
						|
def test_main(verbose=None):
 | 
						|
    from test.test_support import run_doctest
 | 
						|
    from test import test_code
 | 
						|
    run_doctest(test_code, verbose)
 |