c8c0fd4ca3
This patch compresses the second part of the bytecode prelude which contains the source file name, function name, source-line-number mapping and cell closure information. This part of the prelude now begins with a single varible length unsigned integer which encodes 2 numbers, being the byte-size of the following 2 sections in the header: the "source info section" and the "closure section". After decoding this variable unsigned integer it's possible to skip over one or both of these sections very easily. This scheme saves about 2 bytes for most functions compared to the original format: one in the case that there are no closure cells, and one because padding was eliminated.
74 lines
1.5 KiB
Plaintext
74 lines
1.5 KiB
Plaintext
----------------
|
|
[ 4] rule(1) (n=9)
|
|
tok(4)
|
|
[ 4] rule(22) (n=4)
|
|
id(i)
|
|
[ 4] rule(44) (n=1)
|
|
NULL
|
|
[ 5] rule(8) (n=0)
|
|
NULL
|
|
[ 6] rule(5) (n=2)
|
|
id(a)
|
|
tok(14)
|
|
[ 7] rule(5) (n=2)
|
|
id(b)
|
|
str(str)
|
|
[ 8] rule(5) (n=2)
|
|
id(c)
|
|
[ 8] literal \.\+
|
|
[ 9] rule(5) (n=2)
|
|
id(d)
|
|
bytes(bytes)
|
|
[ 10] rule(5) (n=2)
|
|
id(e)
|
|
[ 10] literal \.\+
|
|
[ 11] rule(5) (n=2)
|
|
id(f)
|
|
[ 11] literal \.\+
|
|
[ 12] rule(5) (n=2)
|
|
id(g)
|
|
int(123)
|
|
----------------
|
|
File cmdline/cmd_parsetree.py, code block '<module>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+63
|
|
arg names:
|
|
(N_STATE 5)
|
|
(N_EXC_STACK 0)
|
|
bc=0 line=1
|
|
bc=0 line=4
|
|
bc=9 line=5
|
|
bc=12 line=6
|
|
bc=16 line=7
|
|
bc=22 line=8
|
|
bc=27 line=9
|
|
bc=32 line=10
|
|
bc=37 line=11
|
|
bc=42 line=12
|
|
00 BUILD_TUPLE 0
|
|
02 GET_ITER_STACK
|
|
03 FOR_ITER 12
|
|
06 STORE_NAME i
|
|
09 JUMP 3
|
|
12 LOAD_CONST_NONE
|
|
13 STORE_NAME a
|
|
16 LOAD_CONST_STRING 'str'
|
|
19 STORE_NAME b
|
|
22 LOAD_CONST_OBJ \.\+
|
|
24 STORE_NAME c
|
|
27 LOAD_CONST_OBJ \.\+
|
|
29 STORE_NAME d
|
|
32 LOAD_CONST_OBJ \.\+
|
|
34 STORE_NAME e
|
|
37 LOAD_CONST_OBJ \.\+
|
|
39 STORE_NAME f
|
|
42 LOAD_CONST_SMALL_INT 123
|
|
45 STORE_NAME g
|
|
48 LOAD_CONST_NONE
|
|
49 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\+, max free sz: \\d\+
|