File: bytecode_limit.py

package info (click to toggle)
micropython 1.26.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 50,196 kB
  • sloc: ansic: 324,551; python: 63,215; xml: 4,241; makefile: 3,618; sh: 1,586; javascript: 754; asm: 723; cpp: 83; exp: 11; pascal: 6
file content (40 lines) | stat: -rw-r--r-- 1,009 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Test the limits of bytecode generation.

body = " with f()()() as a:\n  try:\n   f()()()\n  except Exception:\n   pass\n"

# Test overflow of jump offset.
# Print results at the end in case an intermediate value of n fails with MemoryError.
results = []
for n in (433, 432, 431, 430):
    try:
        exec("cond = 0\nif cond:\n" + body * n + "else:\n print('cond false')\n")
        results.append((n, "ok"))
    except MemoryError:
        print("SKIP")
        raise SystemExit
    except RuntimeError:
        results.append((n, "RuntimeError"))
print(results)

# Test changing size of code info (source line/bytecode mapping) due to changing
# bytecode size in the final passes.  This test is very specific to how the
# code info is encoded, and how jump offsets shrink in the final passes.  This
# test should fail if the bytecode emitter doesn't correctly handle shrinking of
# the code info section.
exec(
    """
x = 0
if x:
"""
    + body * 13
    + """
x = [1 if x else 123]






print(x)
"""
)