test_code.py revision e2a383d062434c05b73031f0da57fe82b9da8942
13e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton"""This module includes tests of the code object representation. 23e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 33e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton>>> def f(x): 43e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... def g(y): 53e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... return x + y 63e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... return g 73e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... 83e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 93e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton>>> dump(f.func_code) 103e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonname: f 113e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonargcount: 1 124f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumkwonlyargcount: 0 133e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnames: () 143e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonvarnames: ('x', 'g') 153e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltoncellvars: ('x',) 163e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonfreevars: () 173e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnlocals: 2 183e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonflags: 3 193e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonconsts: ('None', '<code object g>') 203e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 213e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton>>> dump(f(4).func_code) 223e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonname: g 233e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonargcount: 1 244f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumkwonlyargcount: 0 253e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnames: () 263e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonvarnames: ('y',) 273e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltoncellvars: () 283e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonfreevars: ('x',) 293e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnlocals: 1 303e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonflags: 19 313e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonconsts: ('None',) 323e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 333e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton>>> def h(x, y): 343e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... a = x + y 353e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... b = x - y 363e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... c = a * b 373e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... return c 38536cf99536bce562cfcb44a856fac1c84b9de4c3Tim Peters... 394f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum 403e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton>>> dump(h.func_code) 413e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonname: h 423e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonargcount: 2 434f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumkwonlyargcount: 0 443e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnames: () 453e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonvarnames: ('x', 'y', 'a', 'b', 'c') 463e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltoncellvars: () 473e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonfreevars: () 483e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnlocals: 5 493e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonflags: 67 503e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonconsts: ('None',) 513e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 523e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton>>> def attrs(obj): 533e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... print obj.attr1 543e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... print obj.attr2 553e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton... print obj.attr3 563e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 573e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton>>> dump(attrs.func_code) 583e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonname: attrs 593e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonargcount: 1 604f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumkwonlyargcount: 0 613e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnames: ('attr1', 'attr2', 'attr3') 623e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonvarnames: ('obj',) 633e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltoncellvars: () 643e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonfreevars: () 653e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonnlocals: 1 663e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonflags: 67 673e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltonconsts: ('None',) 683e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 690e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters>>> def optimize_away(): 700e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters... 'doc string' 710e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters... 'not a docstring' 720e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters... 53 73e2a383d062434c05b73031f0da57fe82b9da8942Guido van Rossum... 0x53 740e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters 750e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters>>> dump(optimize_away.func_code) 760e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersname: optimize_away 770e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersargcount: 0 784f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumkwonlyargcount: 0 790e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersnames: () 800e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersvarnames: () 810e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouterscellvars: () 820e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersfreevars: () 830e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersnlocals: 0 840e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersflags: 67 850e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Woutersconsts: ("'doc string'", 'None') 860e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters 874f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum>>> def keywordonly_args(a,b,*,k1): 884f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum... return a,b,k1 894f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum... 904f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum 914f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum>>> dump(keywordonly_args.func_code) 924f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumname: keywordonly_args 934f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumargcount: 2 944f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumkwonlyargcount: 1 954f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumnames: () 964f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumvarnames: ('a', 'b', 'k1') 974f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumcellvars: () 984f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumfreevars: () 994f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumnlocals: 3 1004f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumflags: 67 1014f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossumconsts: ('None',) 1024f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum 1033e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton""" 1043e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 1053e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltondef consts(t): 1063e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton """Yield a doctest-safe sequence of object reprs.""" 1073e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton for elt in t: 1083e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton r = repr(elt) 1093e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton if r.startswith("<code object"): 1103e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton yield "<code object %s>" % elt.co_name 1113e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton else: 1123e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton yield r 1133e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 1143e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltondef dump(co): 1153e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton """Print out a text representation of a code object.""" 1164f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum for attr in ["name", "argcount", "kwonlyargcount", "names", "varnames", 1174f72a78684bbfcdc43ceeabb240ceee54706c4b0Guido van Rossum "cellvars", "freevars", "nlocals", "flags"]: 1183e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton print "%s: %s" % (attr, getattr(co, "co_" + attr)) 1193e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton print "consts:", tuple(consts(co.co_consts)) 1203e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton 1213e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hyltondef test_main(verbose=None): 1223e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton from test.test_support import run_doctest 1233e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton from test import test_code 1243e0055f8c65c407e74ce476b8e2b1fb889723514Jeremy Hylton run_doctest(test_code, verbose) 125