History

add hg and python

cinap_lenrek committed 15 years ago

Commit 4bb9e221 parent 987265c3706 files · +1228772 −-233Browse files

Showing the changes to sys/src/cmd/python/Tools/compiler/stacktest.py (1 of 3706 files). Show all

Unified · Split

sys/src/cmd/python/Tools/compiler/stacktest.py+43−0
@@ -0,0 +1,43 @@
1+import compiler
2+import dis
3+import types
4+
5+def extract_code_objects(co):
6+ l = [co]
7+ for const in co.co_consts:
8+ if type(const) == types.CodeType:
9+ l.append(const)
10+ return l
11+
12+def compare(a, b):
13+ if not (a.co_name == "?" or a.co_name.startswith('<lambda')):
14+ assert a.co_name == b.co_name, (a, b)
15+ if a.co_stacksize != b.co_stacksize:
16+ print "stack mismatch %s: %d vs. %d" % (a.co_name,
17+ a.co_stacksize,
18+ b.co_stacksize)
19+ if a.co_stacksize > b.co_stacksize:
20+ print "good code"
21+ dis.dis(a)
22+ print "bad code"
23+ dis.dis(b)
24+ assert 0
25+
26+def main(files):
27+ for file in files:
28+ print file
29+ buf = open(file).read()
30+ try:
31+ co1 = compile(buf, file, "exec")
32+ except SyntaxError:
33+ print "skipped"
34+ continue
35+ co2 = compiler.compile(buf, file, "exec")
36+ co1l = extract_code_objects(co1)
37+ co2l = extract_code_objects(co2)
38+ for a, b in zip(co1l, co2l):
39+ compare(a, b)
40+
41+if __name__ == "__main__":
42+ import sys
43+ main(sys.argv[1:])