Mercurial > cpython-lru_cache-weakref
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 |
| 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:]) |
