annotate Tools/compiler/stacktest.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 7cbd2887f60f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20496
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
1 import compiler
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
2 import dis
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
3 import types
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
4
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
5 def extract_code_objects(co):
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
6 l = [co]
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
7 for const in co.co_consts:
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
8 if type(const) == types.CodeType:
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
9 l.append(const)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
10 return l
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
11
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
12 def compare(a, b):
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
13 if not (a.co_name == "?" or a.co_name.startswith('<lambda')):
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
14 assert a.co_name == b.co_name, (a, b)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
15 if a.co_stacksize != b.co_stacksize:
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
16 print "stack mismatch %s: %d vs. %d" % (a.co_name,
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
17 a.co_stacksize,
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
18 b.co_stacksize)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
19 if a.co_stacksize > b.co_stacksize:
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
20 print "good code"
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
21 dis.dis(a)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
22 print "bad code"
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
23 dis.dis(b)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
24 assert 0
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
25
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
26 def main(files):
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
27 for file in files:
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
28 print file
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
29 buf = open(file).read()
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
30 try:
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
31 co1 = compile(buf, file, "exec")
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
32 except SyntaxError:
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
33 print "skipped"
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
34 continue
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
35 co2 = compiler.compile(buf, file, "exec")
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
36 co1l = extract_code_objects(co1)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
37 co2l = extract_code_objects(co2)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
38 for a, b in zip(co1l, co2l):
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
39 compare(a, b)
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
40
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
41 if __name__ == "__main__":
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
42 import sys
7cbd2887f60f Test utility to look for bad stacksize calculations.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
43 main(sys.argv[1:])