summaryrefslogtreecommitdiffstatshomepage
path: root/tests/extmod/marshal_stress.py
blob: b52475c0361dc31a50f42d4aab24d7a32e1efae5 (plain) (blame)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Test the marshal module, stressing edge cases.

try:
    import marshal

    (lambda: 0).__code__
except (AttributeError, ImportError):
    print("SKIP")
    raise SystemExit

ftype = type(lambda: 0)

# Test a large function.


def large_function(arg0, arg1, arg2, arg3):
    # Arguments.
    print(arg0, arg1, arg2, arg3)

    # Positive medium-sized integer (still a small-int though).
    print(1234)

    # Negative small-ish integer.
    print(-20)

    # More than 64 constant objects.
    x = (0,)
    x = (1,)
    x = (2,)
    x = (3,)
    x = (4,)
    x = (5,)
    x = (6,)
    x = (7,)
    x = (8,)
    x = (9,)
    x = (10,)
    x = (11,)
    x = (12,)
    x = (13,)
    x = (14,)
    x = (15,)
    x = (16,)
    x = (17,)
    x = (18,)
    x = (19,)
    x = (20,)
    x = (21,)
    x = (22,)
    x = (23,)
    x = (24,)
    x = (25,)
    x = (26,)
    x = (27,)
    x = (28,)
    x = (29,)
    x = (30,)
    x = (31,)
    x = (32,)
    x = (33,)
    x = (34,)
    x = (35,)
    x = (36,)
    x = (37,)
    x = (38,)
    x = (39,)
    x = (40,)
    x = (41,)
    x = (42,)
    x = (43,)
    x = (44,)
    x = (45,)
    x = (46,)
    x = (47,)
    x = (48,)
    x = (49,)
    x = (50,)
    x = (51,)
    x = (52,)
    x = (53,)
    x = (54,)
    x = (55,)
    x = (56,)
    x = (57,)
    x = (58,)
    x = (59,)
    x = (60,)
    x = (61,)
    x = (62,)
    x = (63,)
    x = (64,)

    # Small jump.
    x = 0
    while x < 2:
        print("loop", x)
        x += 1

    # Large jump.
    x = 0
    while x < 2:
        try:
            try:
                try:
                    print
                except Exception as e:
                    print
                finally:
                    print
            except Exception as e:
                print
            finally:
                print
        except Exception as e:
            print
        finally:
            print("loop", x)
        x += 1


code = marshal.dumps(large_function.__code__)
ftype(marshal.loads(code), {"print": print})(0, 1, 2, 3)