NAME=pyc load version313
FILE=bins/pyc/pyc313.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.13.0 VM (rev 3f27099d916c7b885e3daf1fabedcc119462014d)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version312
FILE=bins/pyc/pyc312.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.12.0 VM (rev 0fb6e700c2f94ae0717ee1be7d4e50b2dd480d14)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version311
FILE=bins/pyc/py311.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.11.0 VM (rev 968953dcd8930880a3e9c5302b6892a5a0836c14)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version310
FILE=bins/pyc/py310.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.10.0 VM (rev bfb376ffcc4260feb9bf1b9a110559b1ff31da80)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version39
FILE=bins/pyc/py39.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.9.0 VM (rev 3a819e5c9d3feae85762ae87cebf55f9c8d2b526)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version38
FILE=bins/pyc/py38.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.8.0 VM (rev 5d714034866ce1e9f89dc141fe4cc0b50cf20a8e)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version37
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.7.0 VM (rev ae1f6af15f3e4110616801e235873e47fd7d1977)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version36
FILE=bins/pyc/py36.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python v3.6.0 VM (rev 5c4568a05a0a62b5947c55f68f9f2ecfb90a4f12)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc load version27
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine  Python 2.7a2+ VM (rev edfed0e32cedf3b84c6e999052486a750a3f5bee)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.7 symbols
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
is~?Human
EOF
EXPECT=<<EOF
9
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.13 sections
FILE=bins/pyc/pyc313.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
0x00002dcc   0x2e 0x00002dcc   0x2e   0x0 ---- module_.Bat                     
0x00002e26   0x10 0x00002e26   0x10   0x0 ---- module_.Bat.__init              
0x00002ea0    0xa 0x00002ea0    0xa   0x0 ---- module_.Bat.say                 
0x00002f12    0x4 0x00002f12    0x4   0x0 ---- module_.Bat.sonar               
0x00003002   0x20 0x00003002   0x20   0x0 ---- module_.Batman                  
0x0000304b   0x88 0x0000304b   0x88   0x0 ---- module_.Batman.__init           
0x000031d4    0x4 0x000031d4    0x4   0x0 ---- module_.Batman.sing             
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.12 sections
FILE=bins/pyc/pyc312.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
0x00002d01   0x24 0x00002d01   0x24   0x0 ---- module_.Bat                     
0x00002d4c   0x12 0x00002d4c   0x12   0x0 ---- module_.Bat.__init              
0x00002dca    0xa 0x00002dca    0xa   0x0 ---- module_.Bat.say                 
0x00002e3c    0x4 0x00002e3c    0x4   0x0 ---- module_.Bat.sonar               
0x00002f1d   0x18 0x00002f1d   0x18   0x0 ---- module_.Batman                  
0x00002f59   0x84 0x00002f59   0x84   0x0 ---- module_.Batman.__init           
0x000030de    0x4 0x000030de    0x4   0x0 ---- module_.Batman.sing             
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.11 sections
FILE=bins/pyc/py311.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
0x0000354b   0x26 0x0000354b   0x26   0x0 ---- module_.Bat                     
0x00003599   0x14 0x00003599   0x14   0x0 ---- module_.Bat.__init              
0x0000361d    0xa 0x0000361d    0xa   0x0 ---- module_.Bat.say                 
0x0000368f    0x6 0x0000368f    0x6   0x0 ---- module_.Bat.sonar               
0x000037a9   0x1a 0x000037a9   0x1a   0x0 ---- module_.Batman                  
0x000037e7   0x76 0x000037e7   0x76   0x0 ---- module_.Batman.__init           
0x00003981    0x6 0x00003981    0x6   0x0 ---- module_.Batman.sing             
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.10 sections
FILE=bins/pyc/py310.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
0x0000201d  0x2a 0x0000201d  0x2a   0x0 ---- module_.Bat                     
0x00002073   0x0 0x00002073   0x0   0x0 ---- module_.Bat.__init              
0x000020da   0x8 0x000020da   0x8   0x0 ---- module_.Bat.say                 
0x00002144   0x0 0x00002144   0x0   0x0 ---- module_.Bat.sonar               
0x0000220e  0x1c 0x0000220e  0x1c   0x0 ---- module_.Batman                  
0x00002252  0x48 0x00002252  0x48   0x0 ---- module_.Batman.__init           
0x00002356   0x0 0x00002356   0x0   0x0 ---- module_.Batman.sing             
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.9 sections
FILE=bins/pyc/py39.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
0x00001fdf  0x2a 0x00001fdf  0x2a   0x0 ---- module_.Bat                     
0x00002035   0xa 0x00002035   0xa   0x0 ---- module_.Bat.__init              
0x000020a6   0x8 0x000020a6   0x8   0x0 ---- module_.Bat.say                 
0x00002110   0x4 0x00002110   0x4   0x0 ---- module_.Bat.sonar               
0x000021de  0x1c 0x000021de  0x1c   0x0 ---- module_.Batman                  
0x00002222  0x48 0x00002222  0x48   0x0 ---- module_.Batman.__init           
0x00002326   0x4 0x00002326   0x4   0x0 ---- module_.Batman.sing             
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.7 sections
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
0x00001f0d  0x2a 0x00001f0d  0x2a   0x0 ---- module_.Bat                     
0x00001f5f   0xa 0x00001f5f   0xa   0x0 ---- module_.Bat.__init              
0x00001fca   0x8 0x00001fca   0x8   0x0 ---- module_.Bat.say                 
0x00002037   0x4 0x00002037   0x4   0x0 ---- module_.Bat.sonar               
0x00002103  0x1c 0x00002103  0x1c   0x0 ---- module_.Batman                  
0x00002143  0x44 0x00002143  0x44   0x0 ---- module_.Batman.__init           
0x00002235   0x4 0x00002235   0x4   0x0 ---- module_.Batman.sing             
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.7 maps
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
oml
EOF
EXPECT=<<EOF
 1 fd: 3 +0x00000000 0x00000000 * 0x00002be5 r-x 
EOF
RUN

NAME=pyc 3.7 entry
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
ie~program
EOF
EXPECT=<<EOF
0x0000002a 0x0000002a ---------- ---------- program
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.13 disasm
FILE=bins/pyc/pyc313.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000002a      RESUME                                     ; [00] ---- section size 6372 named module
            0x0000002c      LOAD_CONST            Multiline strings can be written
using three "s, and are often used
as documentation.
            0x0000002e      STORE_NAME            __doc__
            0x00000030      NOP
            0x00000032      NOP
            0x00000034      NOP
            0x00000036      NOP
            0x00000038      NOP
            0x0000003a      NOP
            0x0000003c      NOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.12 disasm
FILE=bins/pyc/pyc312.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000002a      RESUME                0                    ; [00] ---- section size 6216 named module
            0x0000002c      LOAD_CONST             Multiline strings can be written
    using three "s, and are often used
    as documentation.
            0x0000002e      STORE_NAME            __doc__
            0x00000030      NOP
            0x00000032      NOP
            0x00000034      NOP
            0x00000036      NOP
            0x00000038      NOP
            0x0000003a      NOP
            0x0000003c      NOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.11 disasm
FILE=bins/pyc/py311.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000002a      RESUME                0                    ; [00] ---- section size 7316 named module
            0x0000002c      LOAD_CONST             Multiline strings can be written
    using three "s, and are often used
    as documentation.
            0x0000002e      STORE_NAME            __doc__
            0x00000030      NOP
            0x00000032      NOP
            0x00000034      NOP
            0x00000036      NOP
            0x00000038      NOP
            0x0000003a      NOP
            0x0000003c      NOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.10 disasm
FILE=bins/pyc/py310.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000002e      LOAD_CONST             Multiline strings can be written
    using three "s, and are often used
    as documentation. ; [00] ---- section size 3292 named module
            0x00000030      STORE_NAME            __doc__
            0x00000032      NOP
            0x00000034      NOP
            0x00000036      NOP
            0x00000038      NOP
            0x0000003a      NOP
            0x0000003c      NOP
            0x0000003e      NOP
            0x00000040      NOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.13 disasm
FILE=bins/pyc/pyc313.pyc
CMDS=<<EOF
s 0x00002bc4
pd 45
EOF
EXPECT=<<EOF
            ;-- section.module_.Superhero.boast:
            ;-- <module>.Superhero.boast:
            0x00002bc4      RESUME                                     ; [25] ---- section size 90 named module_.Superhero.boast
            0x00002bc6      LOAD_FAST             self
            0x00002bc8      LOAD_ATTR             superpowers
            0x00002bca      CACHE
            0x00002bcc      CACHE
            0x00002bce      CACHE
            0x00002bd0      CACHE
            0x00002bd2      CACHE
            0x00002bd4      CACHE
            0x00002bd6      CACHE
            0x00002bd8      CACHE
            0x00002bda      CACHE
        .-> 0x00002bdc      GET_ITER
      ,,==< 0x00002bde      FOR_ITER              27
      `---> 0x00002be0      CACHE
       |:   0x00002be2      STORE_FAST            power
       |:   0x00002be4      LOAD_GLOBAL
       |:   0x00002be6      CACHE
       |:   0x00002be8      CACHE
       |:   0x00002bea      CACHE
       |:   0x00002bec      CACHE
       |:   0x00002bee      LOAD_CONST            I wield the power of {pow}!
       |:   0x00002bf0      LOAD_ATTR
       |:   0x00002bf2      CACHE
       |:   0x00002bf4      CACHE
       |:   0x00002bf6      CACHE
       |:   0x00002bf8      CACHE
       |:   0x00002bfa      CACHE
       |:   0x00002bfc      CACHE
       |:   0x00002bfe      CACHE
       |:   0x00002c00      CACHE
       |:   0x00002c02      CACHE
       |:   0x00002c04      LOAD_FAST             power
       |:   0x00002c06      LOAD_CONST            (pow)
       |:   0x00002c08      CALL_KW
       |:   0x00002c0a      CALL                   1
       |:   0x00002c0c      CACHE
       |:   0x00002c0e      CACHE
       |:   0x00002c10      CACHE
       |:   0x00002c12      POP_TOP
       |`=< 0x00002c14      JUMP_BACKWARD         29
       `--> 0x00002c16      CACHE
            0x00002c18      END_FOR
            0x00002c1a      POP_TOP
            0x00002c1c      RETURN_CONST
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.12 disasm
FILE=bins/pyc/pyc312.pyc
CMDS=<<EOF
s 0x00002b11
pd 46
EOF
EXPECT=<<EOF
            ;-- section.module_.Superhero.boast:
            ;-- <module>.Superhero.boast:
            0x00002b11      RESUME                0                    ; [25] ---- section size 92 named module_.Superhero.boast
            0x00002b13      LOAD_FAST             self
            0x00002b15      LOAD_ATTR             superpowers
            0x00002b17      CACHE
            0x00002b19      CACHE
            0x00002b1b      CACHE
            0x00002b1d      CACHE
            0x00002b1f      CACHE
            0x00002b21      CACHE
            0x00002b23      CACHE
            0x00002b25      CACHE
            0x00002b27      CACHE
            0x00002b29      GET_ITER
      ,,.-> 0x00002b2b      FOR_ITER              29
      `---> 0x00002b2d      CACHE
       |:   0x00002b2f      STORE_FAST            power
       |:   0x00002b31      LOAD_GLOBAL
       |:   0x00002b33      CACHE
       |:   0x00002b35      CACHE
       |:   0x00002b37      CACHE
       |:   0x00002b39      CACHE
       |:   0x00002b3b      LOAD_CONST            I wield the power of {pow}!
       |:   0x00002b3d      LOAD_ATTR
       |:   0x00002b3f      CACHE
       |:   0x00002b41      CACHE
       |:   0x00002b43      CACHE
       |:   0x00002b45      CACHE
       |:   0x00002b47      CACHE
       |:   0x00002b49      CACHE
       |:   0x00002b4b      CACHE
       |:   0x00002b4d      CACHE
       |:   0x00002b4f      CACHE
       |:   0x00002b51      LOAD_FAST             power
       |:   0x00002b53      KW_NAMES              2
       |:   0x00002b55      CALL                   1
       |:   0x00002b57      CACHE
       |:   0x00002b59      CACHE
       |:   0x00002b5b      CACHE
       |:   0x00002b5d      CALL                   1
       |:   0x00002b5f      CACHE
       |:   0x00002b61      CACHE
       |:   0x00002b63      CACHE
       |:   0x00002b65      POP_TOP
       ``=< 0x00002b67      JUMP_BACKWARD         31
            0x00002b69      END_FOR
            0x00002b6b      RETURN_CONST
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.11 disasm
FILE=bins/pyc/py311.pyc
CMDS=<<EOF
s 0x000032f3
pd 48
EOF
EXPECT=<<EOF
            ;-- section.module_.Superhero.boast:
            ;-- <module>.Superhero.boast:
            0x000032f3      RESUME                0                    ; [29] ---- section size 96 named module_.Superhero.boast
            0x000032f5      LOAD_FAST             self
            0x000032f7      LOAD_ATTR             superpowers
            0x000032f9      CACHE
            0x000032fb      CACHE
            0x000032fd      CACHE
            0x000032ff      CACHE
            0x00003301      GET_ITER
      ,,.-> 0x00003303      FOR_ITER              37
      `---> 0x00003305      STORE_FAST            power
       |:   0x00003307      LOAD_GLOBAL
       |:   0x00003309      CACHE
       |:   0x0000330b      CACHE
       |:   0x0000330d      CACHE
       |:   0x0000330f      CACHE
       |:   0x00003311      CACHE
       |:   0x00003313      LOAD_CONST            I wield the power of {pow}!
       |:   0x00003315      LOAD_METHOD           format
       |:   0x00003317      CACHE
       |:   0x00003319      CACHE
       |:   0x0000331b      CACHE
       |:   0x0000331d      CACHE
       |:   0x0000331f      CACHE
       |:   0x00003321      CACHE
       |:   0x00003323      CACHE
       |:   0x00003325      CACHE
       |:   0x00003327      CACHE
       |:   0x00003329      CACHE
       |:   0x0000332b      LOAD_FAST             power
       |:   0x0000332d      KW_NAMES              2
       |:   0x0000332f      PRECALL               1
       |:   0x00003331      CACHE
       |:   0x00003333      CALL                   1
       |:   0x00003335      CACHE
       |:   0x00003337      CACHE
       |:   0x00003339      CACHE
       |:   0x0000333b      CACHE
       |:   0x0000333d      PRECALL               1
       |:   0x0000333f      CACHE
       |:   0x00003341      CALL                   1
       |:   0x00003343      CACHE
       |:   0x00003345      CACHE
       |:   0x00003347      CACHE
       |:   0x00003349      CACHE
       |:   0x0000334b      POP_TOP
       |`=< 0x0000334d      JUMP_BACKWARD         38
       `--> 0x0000334f      LOAD_CONST            None
            0x00003351      RETURN_VALUE
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.10 disasm
FILE=bins/pyc/py310.pyc
CMDS=<<EOF
s 0x00001eb3
pd 16
EOF
EXPECT=<<EOF
            ;-- section.module_.Superhero.boast:
            ;-- <module>.Superhero.boast:
            0x00001eb3      LOAD_FAST             self                 ; [29] ---- section size 32 named module_.Superhero.boast
            0x00001eb5      LOAD_ATTR             superpowers
            0x00001eb7      GET_ITER
      ,,.-> 0x00001eb9      FOR_ITER              10
      `---> 0x00001ebb      STORE_FAST            power
       |:   0x00001ebd      LOAD_GLOBAL           print
       |:   0x00001ebf      LOAD_CONST            I wield the power of {pow}!
       |:   0x00001ec1      LOAD_ATTR             format
       |:   0x00001ec3      LOAD_FAST             power
       |:   0x00001ec5      LOAD_CONST            (pow)
       |:   0x00001ec7      CALL_FUNCTION_KW      1 total positional and keyword args
       |:   0x00001ec9      CALL_FUNCTION         1
       |:   0x00001ecb      POP_TOP
       |`=< 0x00001ecd      JUMP_ABSOLUTE         3
       `--> 0x00001ecf      LOAD_CONST            None
            0x00001ed1      RETURN_VALUE
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.9 disasm
FILE=bins/pyc/py39.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000002e      LOAD_CONST             Multiline strings can be written
    using three "s, and are often used
    as documentation. ; [00] ---- section size 3248 named module
            0x00000030      STORE_NAME            __doc__
            0x00000032      LOAD_CONST            True
        ,=< 0x00000034      JUMP_IF_FALSE_OR_POP  10
        |   0x00000036      LOAD_CONST            False
        `-> 0x00000038      POP_TOP
            0x0000003a      LOAD_CONST            False
        ,=< 0x0000003c      JUMP_IF_TRUE_OR_POP   18
        |   0x0000003e      LOAD_CONST            True
        `-> 0x00000040      POP_TOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.9 disasm
FILE=bins/pyc/py39.pyc
CMDS=<<EOF
s 0x00001e79
pd 16
EOF
EXPECT=<<EOF
            ;-- section.module_.Superhero.boast:
            ;-- <module>.Superhero.boast:
            0x00001e79      LOAD_FAST             self                 ; [29] ---- section size 32 named module_.Superhero.boast
            0x00001e7b      LOAD_ATTR             superpowers
            0x00001e7d      GET_ITER
      ,,.-> 0x00001e7f      FOR_ITER              20
      `---> 0x00001e81      STORE_FAST            power
       |:   0x00001e83      LOAD_GLOBAL           print
       |:   0x00001e85      LOAD_CONST            I wield the power of {pow}!
       |:   0x00001e87      LOAD_ATTR             format
       |:   0x00001e89      LOAD_FAST             power
       |:   0x00001e8b      LOAD_CONST            (pow)
       |:   0x00001e8d      CALL_FUNCTION_KW      1 total positional and keyword args
       |:   0x00001e8f      CALL_FUNCTION         1
       |:   0x00001e91      POP_TOP
       |`=< 0x00001e93      JUMP_ABSOLUTE         6
       `--> 0x00001e95      LOAD_CONST            None
            0x00001e97      RETURN_VALUE
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc 3.7 disasm
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000002a      LOAD_CONST             Multiline strings can be written
    using three "s, and are often used
    as documentation. ; [00] ---- section size 3218 named module
            0x0000002c      STORE_NAME            __doc__
            0x0000002e      LOAD_CONST            True
        ,=< 0x00000030      JUMP_IF_FALSE_OR_POP  10
        |   0x00000032      LOAD_CONST            False
        `-> 0x00000034      POP_TOP
            0x00000036      LOAD_CONST            False
        ,=< 0x00000038      JUMP_IF_TRUE_OR_POP   18
        |   0x0000003a      LOAD_CONST            True
        `-> 0x0000003c      POP_TOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc symbols for pyc2.7
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
is~hello_world
EOF
EXPECT=<<EOF
  1 0x00000052 0x00000052 NONE FUNC    9     <module>.hello_world
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc disasm for 2.7
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
            ;-- entry0:
            ;-- section.module:
            ;-- <module>:
            0x0000001e      LOAD_CONST            CodeObject(hello_world) from hello.py ; [00] ---- section size 25 named module
            0x00000021      MAKE_FUNCTION
            0x00000024      STORE_NAME            hello_world
            0x00000027      LOAD_CONST            'world'
            0x0000002a      PRINT_ITEM
            0x0000002b      PRINT_NEWLINE
            0x0000002c      LOAD_NAME             hello_world
            0x0000002f      CALL_FUNCTION         0 positional, 0 named
            0x00000032      POP_TOP
            0x00000033      LOAD_CONST            None
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN

NAME=pyc function
FILE=bins/pyc/py27.pyc
CMDS=<<EOF
aa
e scr.utf8=false
pdf
EOF
EXPECT=<<EOF
            ;-- section.module:
            ;-- <module>:
/ entry0();
|           0x0000001e      LOAD_CONST            CodeObject(hello_world) from hello.py ; [00] ---- section size 25 named module
|           0x00000021      MAKE_FUNCTION
|           0x00000024      STORE_NAME            hello_world
|           0x00000027      LOAD_CONST            'world'
|           0x0000002a      PRINT_ITEM
|           0x0000002b      PRINT_NEWLINE
|           0x0000002c      LOAD_NAME             hello_world
|           0x0000002f      CALL_FUNCTION         0 positional, 0 named
|           0x00000032      POP_TOP
|           0x00000033      LOAD_CONST            None
\           0x00000036      RETURN_VALUE
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\s\(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN
