Plan 9 from Bell Labs’s /usr/web/sources/contrib/bichued/root/sys/src/cmd/python/Tools/compiler/stacktest.py

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


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:])

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.