Hashing is now done using mp_unary_op function with MP_UNARY_OP_HASH as the operator argument. Hashing for int, str and bytes still go via fast-path in mp_unary_op since they are the most common objects which need to be hashed. This lead to quite a bit of code cleanup, and should be more efficient if anything. It saves 176 bytes code space on Thumb2, and 360 bytes on x86. The only loss is that the error message "unhashable type" is now the more generic "unsupported type for __hash__".
447 lines
9.1 KiB
Plaintext
447 lines
9.1 KiB
Plaintext
File cmdline/cmd_showbc.py, code block '<module>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 3)
|
|
(N_EXC_STACK 0)
|
|
bc=-3 line=1
|
|
########
|
|
bc=\\d\+ line=134
|
|
00 MAKE_FUNCTION \.\+
|
|
\\d\+ STORE_NAME f
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ BUILD_TUPLE 1
|
|
\\d\+ LOAD_NULL
|
|
\\d\+ MAKE_FUNCTION_DEFARGS \.\+
|
|
\\d\+ STORE_NAME f
|
|
\\d\+ MAKE_FUNCTION \.\+
|
|
\\d\+ STORE_NAME f
|
|
\\d\+ LOAD_BUILD_CLASS
|
|
\\d\+ MAKE_FUNCTION \.\+
|
|
\\d\+ LOAD_CONST_STRING 'Class'
|
|
\\d\+ CALL_FUNCTION n=2 nkw=0
|
|
\\d\+ STORE_NAME Class
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 22)
|
|
(N_EXC_STACK 2)
|
|
(INIT_CELL 14)
|
|
(INIT_CELL 15)
|
|
(INIT_CELL 16)
|
|
bc=-6 line=1
|
|
########
|
|
bc=\\d\+ line=118
|
|
00 LOAD_CONST_NONE
|
|
01 LOAD_CONST_FALSE
|
|
02 BINARY_OP 5 __add__
|
|
03 LOAD_CONST_TRUE
|
|
04 BINARY_OP 5 __add__
|
|
05 STORE_FAST 0
|
|
06 LOAD_CONST_SMALL_INT 0
|
|
07 STORE_FAST 0
|
|
08 LOAD_CONST_SMALL_INT 1000
|
|
11 STORE_FAST 0
|
|
12 LOAD_CONST_SMALL_INT -1000
|
|
15 STORE_FAST 0
|
|
16 LOAD_CONST_SMALL_INT 1
|
|
17 STORE_FAST 0
|
|
18 LOAD_CONST_SMALL_INT 1
|
|
19 LOAD_CONST_SMALL_INT 2
|
|
20 BUILD_TUPLE 2
|
|
22 STORE_DEREF 14
|
|
24 LOAD_CONST_SMALL_INT 1
|
|
25 LOAD_CONST_SMALL_INT 2
|
|
26 BUILD_LIST 2
|
|
28 STORE_FAST 1
|
|
29 LOAD_CONST_SMALL_INT 1
|
|
30 LOAD_CONST_SMALL_INT 2
|
|
31 BUILD_SET 2
|
|
33 STORE_FAST 2
|
|
34 BUILD_MAP 0
|
|
36 STORE_DEREF 15
|
|
38 BUILD_MAP 1
|
|
40 LOAD_CONST_SMALL_INT 2
|
|
41 LOAD_CONST_SMALL_INT 1
|
|
42 STORE_MAP
|
|
43 STORE_FAST 3
|
|
44 LOAD_CONST_STRING 'a'
|
|
47 STORE_FAST 4
|
|
48 LOAD_CONST_BYTES a
|
|
51 STORE_FAST 5
|
|
52 LOAD_CONST_SMALL_INT 1
|
|
53 STORE_FAST 6
|
|
54 LOAD_CONST_SMALL_INT 2
|
|
55 STORE_FAST 7
|
|
56 LOAD_FAST 0
|
|
57 LOAD_DEREF 14
|
|
59 BINARY_OP 5 __add__
|
|
60 STORE_FAST 8
|
|
61 LOAD_FAST 0
|
|
62 UNARY_OP 4
|
|
63 STORE_FAST 9
|
|
64 LOAD_FAST 0
|
|
65 UNARY_OP 0
|
|
66 NOT
|
|
67 STORE_FAST 10
|
|
68 LOAD_FAST 0
|
|
69 LOAD_DEREF 14
|
|
71 DUP_TOP
|
|
72 ROT_THREE
|
|
73 BINARY_OP 26 __eq__
|
|
74 JUMP_IF_FALSE_OR_POP 82
|
|
77 LOAD_FAST 1
|
|
78 BINARY_OP 26 __eq__
|
|
79 JUMP 84
|
|
82 ROT_TWO
|
|
83 POP_TOP
|
|
84 STORE_FAST 10
|
|
85 LOAD_FAST 0
|
|
86 LOAD_DEREF 14
|
|
88 BINARY_OP 26 __eq__
|
|
89 JUMP_IF_FALSE_OR_POP 96
|
|
92 LOAD_DEREF 14
|
|
94 LOAD_FAST 1
|
|
95 BINARY_OP 26 __eq__
|
|
96 UNARY_OP 0
|
|
97 NOT
|
|
98 STORE_FAST 10
|
|
99 LOAD_DEREF 14
|
|
101 LOAD_ATTR c (cache=0)
|
|
105 STORE_FAST 11
|
|
106 LOAD_FAST 11
|
|
107 LOAD_DEREF 14
|
|
109 STORE_ATTR c (cache=0)
|
|
113 LOAD_DEREF 14
|
|
115 LOAD_CONST_SMALL_INT 0
|
|
116 LOAD_SUBSCR
|
|
117 STORE_FAST 12
|
|
118 LOAD_FAST 12
|
|
119 LOAD_DEREF 14
|
|
121 LOAD_CONST_SMALL_INT 0
|
|
122 STORE_SUBSCR
|
|
123 LOAD_DEREF 14
|
|
125 LOAD_CONST_NONE
|
|
126 LOAD_CONST_NONE
|
|
127 BUILD_SLICE 2
|
|
129 LOAD_SUBSCR
|
|
130 STORE_FAST 0
|
|
131 LOAD_FAST 1
|
|
132 UNPACK_SEQUENCE 2
|
|
134 STORE_FAST 0
|
|
135 STORE_DEREF 14
|
|
137 LOAD_DEREF 14
|
|
139 LOAD_FAST 0
|
|
140 ROT_TWO
|
|
141 STORE_FAST 0
|
|
142 STORE_DEREF 14
|
|
144 LOAD_FAST 1
|
|
145 LOAD_DEREF 14
|
|
147 LOAD_FAST 0
|
|
148 ROT_THREE
|
|
149 ROT_TWO
|
|
150 STORE_FAST 0
|
|
151 STORE_DEREF 14
|
|
153 STORE_FAST 1
|
|
154 DELETE_FAST 0
|
|
156 LOAD_FAST 0
|
|
157 STORE_GLOBAL gl
|
|
160 DELETE_GLOBAL gl
|
|
163 LOAD_FAST 14
|
|
164 LOAD_FAST 15
|
|
165 MAKE_CLOSURE \.\+ 2
|
|
\\d\+ LOAD_FAST 2
|
|
\\d\+ GET_ITER
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 14
|
|
\\d\+ LOAD_FAST 15
|
|
\\d\+ MAKE_CLOSURE \.\+ 2
|
|
\\d\+ LOAD_FAST 2
|
|
\\d\+ GET_ITER
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 14
|
|
\\d\+ LOAD_FAST 15
|
|
\\d\+ MAKE_CLOSURE \.\+ 2
|
|
\\d\+ LOAD_FAST 2
|
|
\\d\+ GET_ITER
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ CALL_FUNCTION n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_CONST_STRING 'b'
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_FUNCTION n=0 nkw=1
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_NULL
|
|
\\d\+ CALL_FUNCTION_VAR_KW n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ CALL_METHOD n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_METHOD n=1 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ LOAD_CONST_STRING 'c'
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_METHOD n=0 nkw=1
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ LOAD_NULL
|
|
\\d\+ CALL_METHOD_VAR_KW n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_FALSE \\d\+
|
|
\\d\+ LOAD_DEREF 16
|
|
\\d\+ POP_TOP
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_GLOBAL y (cache=0)
|
|
\\d\+ POP_TOP
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_TRUE \\d\+
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_FALSE \\d\+
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ GET_ITER
|
|
\\d\+ FOR_ITER \\d\+
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ POP_TOP
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ SETUP_FINALLY \\d\+
|
|
\\d\+ SETUP_EXCEPT \\d\+
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_TRUE \\d\+
|
|
\\d\+ POP_BLOCK
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_EXCEPT
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ END_FINALLY
|
|
\\d\+ POP_BLOCK
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ POP_TOP
|
|
\\d\+ END_FINALLY
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ SETUP_WITH \\d\+
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_BLOCK
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ WITH_CLEANUP
|
|
\\d\+ END_FINALLY
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ STORE_DEREF 16
|
|
\\d\+ LOAD_FAST_N 16
|
|
\\d\+ MAKE_CLOSURE \.\+ 1
|
|
\\d\+ STORE_FAST 13
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ IMPORT_NAME 'a'
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ LOAD_CONST_STRING 'b'
|
|
\\d\+ BUILD_TUPLE 1
|
|
\\d\+ IMPORT_NAME 'a'
|
|
\\d\+ IMPORT_FROM 'b'
|
|
\\d\+ STORE_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ LOAD_CONST_STRING '*'
|
|
\\d\+ BUILD_TUPLE 1
|
|
\\d\+ IMPORT_NAME 'a'
|
|
\\d\+ IMPORT_STAR
|
|
\\d\+ RAISE_VARARGS 0
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ RAISE_VARARGS 1
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ RETURN_VALUE
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: a
|
|
(N_STATE 5)
|
|
(N_EXC_STACK 0)
|
|
(INIT_CELL 0)
|
|
########
|
|
bc=\\d\+ line=124
|
|
00 LOAD_CONST_SMALL_INT 2
|
|
01 BUILD_TUPLE 1
|
|
03 LOAD_NULL
|
|
04 LOAD_FAST 0
|
|
05 MAKE_CLOSURE_DEFARGS \.\+ 1
|
|
\\d\+ STORE_FAST 1
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 2)
|
|
(N_EXC_STACK 0)
|
|
bc=-3 line=1
|
|
bc=0 line=129
|
|
bc=3 line=130
|
|
bc=6 line=131
|
|
00 LOAD_CONST_NONE
|
|
01 YIELD_VALUE
|
|
02 POP_TOP
|
|
03 LOAD_CONST_SMALL_INT 1
|
|
04 YIELD_VALUE
|
|
05 POP_TOP
|
|
06 LOAD_CONST_SMALL_INT 1
|
|
07 GET_ITER
|
|
08 LOAD_CONST_NONE
|
|
09 YIELD_FROM
|
|
10 POP_TOP
|
|
11 LOAD_CONST_NONE
|
|
12 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'Class' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 1)
|
|
(N_EXC_STACK 0)
|
|
bc=-3 line=1
|
|
bc=10 line=135
|
|
00 LOAD_NAME __name__ (cache=0)
|
|
03 STORE_NAME __module__
|
|
05 LOAD_CONST_STRING 'Class'
|
|
08 STORE_NAME __qualname__
|
|
10 LOAD_CONST_NONE
|
|
11 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block '<genexpr>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * * *
|
|
(N_STATE 6)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
00 LOAD_FAST 2
|
|
01 FOR_ITER 17
|
|
04 STORE_FAST 3
|
|
05 LOAD_DEREF 1
|
|
07 POP_JUMP_IF_FALSE 1
|
|
10 LOAD_DEREF 0
|
|
12 YIELD_VALUE
|
|
13 POP_TOP
|
|
14 JUMP 1
|
|
17 LOAD_CONST_NONE
|
|
18 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block '<listcomp>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * * *
|
|
(N_STATE 7)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
00 BUILD_LIST 0
|
|
02 LOAD_FAST 2
|
|
03 FOR_ITER 19
|
|
06 STORE_FAST 3
|
|
07 LOAD_DEREF 1
|
|
09 POP_JUMP_IF_FALSE 3
|
|
12 LOAD_DEREF 0
|
|
14 LIST_APPEND 2
|
|
16 JUMP 3
|
|
19 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block '<dictcomp>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * * *
|
|
(N_STATE 8)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
########
|
|
00 BUILD_MAP 0
|
|
02 LOAD_FAST 2
|
|
03 FOR_ITER 21
|
|
06 STORE_FAST 3
|
|
07 LOAD_DEREF 1
|
|
09 POP_JUMP_IF_FALSE 3
|
|
12 LOAD_DEREF 0
|
|
14 LOAD_DEREF 0
|
|
16 MAP_ADD 2
|
|
18 JUMP 3
|
|
21 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'closure' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: *
|
|
(N_STATE 4)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
########
|
|
bc=\\d\+ line=105
|
|
00 LOAD_DEREF 0
|
|
02 LOAD_CONST_SMALL_INT 1
|
|
03 BINARY_OP 5 __add__
|
|
04 STORE_FAST 1
|
|
05 LOAD_CONST_SMALL_INT 1
|
|
06 STORE_DEREF 0
|
|
08 DELETE_DEREF 0
|
|
10 LOAD_CONST_NONE
|
|
11 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * b
|
|
(N_STATE 4)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
########
|
|
bc=\\d\+ line=125
|
|
00 LOAD_FAST 1
|
|
01 LOAD_DEREF 0
|
|
03 BINARY_OP 5 __add__
|
|
04 RETURN_VALUE
|
|
mem: total=\\d\+, current=\\d\+, peak=\\d\+
|
|
stack: \\d\+ out of \\d\+
|
|
GC: total: \\d\+, used: \\d\+, free: \\d\+
|
|
No. of 1-blocks: \\d\+, 2-blocks: \\d\+, max blk sz: \\d\+
|