cinap_lenrekadd hg and python4bb9e2215 years agoHistory
43 lines · 1.2 KB · Python
RawDownload
import compilerimport disimport 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:])