Mercurial > cpython-lru_cache-weakref
view Tools/compiler/stacktest.py @ 70161:1bd697cdd210 2.7
Issue #12057: Convert CJK encoding testcase BLOB into multiple text files
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Mon, 16 May 2011 17:16:18 +0200 |
| parents | 7cbd2887f60f |
| children |
line wrap: on
line source
import compiler import dis import types def extract_code_objects(co): l = [co] for const in co.co_consts: if type(const) == types.CodeType: l.append(const) return l def compare(a, b): if not (a.co_name == "?" or a.co_name.startswith('<lambda')): assert a.co_name == b.co_name, (a, b) if a.co_stacksize != b.co_stacksize: print "stack mismatch %s: %d vs. %d" % (a.co_name, a.co_stacksize, b.co_stacksize) if a.co_stacksize > b.co_stacksize: print "good code" dis.dis(a) print "bad code" dis.dis(b) assert 0 def main(files): for file in files: print file buf = open(file).read() try: co1 = compile(buf, file, "exec") except SyntaxError: print "skipped" continue co2 = compiler.compile(buf, file, "exec") co1l = extract_code_objects(co1) co2l = extract_code_objects(co2) for a, b in zip(co1l, co2l): compare(a, b) if __name__ == "__main__": import sys main(sys.argv[1:])
