https://github.com/python/cpython/commit/885c3d126f39711971d84a2dee04c19df8a301e4
commit: 885c3d126f39711971d84a2dee04c19df8a301e4
branch: main
author: Mark Shannon <m...@hotpy.org>
committer: markshannon <m...@hotpy.org>
date: 2025-03-04T16:43:39Z
summary:

GH-90916: Add helper function to dis.Instruction and use it to reduce churn in 
test_dis (GH-130643)

files:
M Lib/dis.py
M Lib/test/test_dis.py

diff --git a/Lib/dis.py b/Lib/dis.py
index 109c986bbe3d7d..72cc2d19456467 100644
--- a/Lib/dis.py
+++ b/Lib/dis.py
@@ -376,6 +376,14 @@ class Instruction(_Instruction):
                         entries (if any)
     """
 
+    @staticmethod
+    def make(
+        opname, arg, argval, argrepr, offset, start_offset, starts_line,
+        line_number, label=None, positions=None, cache_info=None
+    ):
+        return Instruction(opname, _all_opmap[opname], arg, argval, argrepr, 
offset,
+                           start_offset, starts_line, line_number, label, 
positions, cache_info)
+
     @property
     def oparg(self):
         """Alias for Instruction.arg."""
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
index 27350120d667c2..25e0b003172dbd 100644
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -1663,9 +1663,17 @@ def jumpy():
 # code_object_inner before rerunning the tests
 
 def _stringify_instruction(instr):
-    # Since line numbers and other offsets change a lot for these
-    # test cases, ignore them.
-    return f"  {instr._replace(positions=None)!r},"
+    # Since postions offsets change a lot for these test cases, ignore them.
+    base = (
+        f"  make_inst(opname={instr.opname!r}, arg={instr.arg!r}, 
argval={instr.argval!r}, " +
+        f"argrepr={instr.argrepr!r}, offset={instr.offset}, 
start_offset={instr.start_offset}, " +
+        f"starts_line={instr.starts_line!r}, line_number={instr.line_number}"
+    )
+    if instr.label is not None:
+        base += f", label={instr.label!r}"
+    if instr.cache_info:
+        base += f", cache_info={instr.cache_info!r}"
+    return base + "),"
 
 def _prepare_test_cases():
     ignore = io.StringIO()
@@ -1703,214 +1711,214 @@ def _prepare_test_cases():
 
 # from test.test_dis import _prepare_test_cases; _prepare_test_cases()
 
-Instruction = dis.Instruction
+make_inst = dis.Instruction.make
 
 expected_opinfo_outer = [
-  Instruction(opname='MAKE_CELL', opcode=93, arg=0, argval='a', argrepr='a', 
offset=0, start_offset=0, starts_line=True, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='MAKE_CELL', opcode=93, arg=1, argval='b', argrepr='b', 
offset=2, start_offset=2, starts_line=False, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', 
offset=4, start_offset=4, starts_line=True, line_number=1, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=3, argval=(3, 4), 
argrepr='(3, 4)', offset=6, start_offset=6, starts_line=True, line_number=2, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='a', argrepr='a', 
offset=8, start_offset=8, starts_line=False, line_number=2, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=1, argval='b', argrepr='b', 
offset=10, start_offset=10, starts_line=False, line_number=2, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='BUILD_TUPLE', opcode=50, arg=2, argval=2, argrepr='', 
offset=12, start_offset=12, starts_line=False, line_number=2, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=0, argval=code_object_f, 
argrepr=repr(code_object_f), offset=14, start_offset=14, starts_line=False, 
line_number=2, label=None, positions=None, cache_info=None),
-  Instruction(opname='MAKE_FUNCTION', opcode=23, arg=None, argval=None, 
argrepr='', offset=16, start_offset=16, starts_line=False, line_number=2, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=104, arg=8, argval=8, 
argrepr='closure', offset=18, start_offset=18, starts_line=False, 
line_number=2, label=None, positions=None, cache_info=None),
-  Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=104, arg=1, argval=1, 
argrepr='defaults', offset=20, start_offset=20, starts_line=False, 
line_number=2, label=None, positions=None, cache_info=None),
-  Instruction(opname='STORE_FAST', opcode=108, arg=2, argval='f', argrepr='f', 
offset=22, start_offset=22, starts_line=False, line_number=2, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=1, argval='print', 
argrepr='print + NULL', offset=24, start_offset=24, starts_line=True, 
line_number=7, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=0, argval='a', argrepr='a', 
offset=34, start_offset=34, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=1, argval='b', argrepr='b', 
offset=36, start_offset=36, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=1, argval='', argrepr="''", 
offset=38, start_offset=38, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=1, argval=1, argrepr='', 
offset=40, start_offset=40, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='BUILD_LIST', opcode=45, arg=0, argval=0, argrepr='', 
offset=42, start_offset=42, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='BUILD_MAP', opcode=46, arg=0, argval=0, argrepr='', 
offset=44, start_offset=44, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=2, argval='Hello world!', 
argrepr="'Hello world!'", offset=46, start_offset=46, starts_line=False, 
line_number=7, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=7, argval=7, argrepr='', 
offset=48, start_offset=48, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=56, start_offset=56, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=2, argval='f', argrepr='f', 
offset=58, start_offset=58, starts_line=True, line_number=8, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='RETURN_VALUE', opcode=35, arg=None, argval=None, 
argrepr='', offset=60, start_offset=60, starts_line=False, line_number=8, 
label=None, positions=None, cache_info=None),
+  make_inst(opname='MAKE_CELL', arg=0, argval='a', argrepr='a', offset=0, 
start_offset=0, starts_line=True, line_number=None),
+  make_inst(opname='MAKE_CELL', arg=1, argval='b', argrepr='b', offset=2, 
start_offset=2, starts_line=False, line_number=None),
+  make_inst(opname='RESUME', arg=0, argval=0, argrepr='', offset=4, 
start_offset=4, starts_line=True, line_number=1),
+  make_inst(opname='LOAD_CONST', arg=3, argval=(3, 4), argrepr='(3, 4)', 
offset=6, start_offset=6, starts_line=True, line_number=2),
+  make_inst(opname='LOAD_FAST', arg=0, argval='a', argrepr='a', offset=8, 
start_offset=8, starts_line=False, line_number=2),
+  make_inst(opname='LOAD_FAST', arg=1, argval='b', argrepr='b', offset=10, 
start_offset=10, starts_line=False, line_number=2),
+  make_inst(opname='BUILD_TUPLE', arg=2, argval=2, argrepr='', offset=12, 
start_offset=12, starts_line=False, line_number=2),
+  make_inst(opname='LOAD_CONST', arg=0, argval=code_object_f, 
argrepr=repr(code_object_f), offset=14, start_offset=14, starts_line=False, 
line_number=2),
+  make_inst(opname='MAKE_FUNCTION', arg=None, argval=None, argrepr='', 
offset=16, start_offset=16, starts_line=False, line_number=2),
+  make_inst(opname='SET_FUNCTION_ATTRIBUTE', arg=8, argval=8, 
argrepr='closure', offset=18, start_offset=18, starts_line=False, 
line_number=2),
+  make_inst(opname='SET_FUNCTION_ATTRIBUTE', arg=1, argval=1, 
argrepr='defaults', offset=20, start_offset=20, starts_line=False, 
line_number=2),
+  make_inst(opname='STORE_FAST', arg=2, argval='f', argrepr='f', offset=22, 
start_offset=22, starts_line=False, line_number=2),
+  make_inst(opname='LOAD_GLOBAL', arg=1, argval='print', argrepr='print + 
NULL', offset=24, start_offset=24, starts_line=True, line_number=7, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_DEREF', arg=0, argval='a', argrepr='a', offset=34, 
start_offset=34, starts_line=False, line_number=7),
+  make_inst(opname='LOAD_DEREF', arg=1, argval='b', argrepr='b', offset=36, 
start_offset=36, starts_line=False, line_number=7),
+  make_inst(opname='LOAD_CONST', arg=1, argval='', argrepr="''", offset=38, 
start_offset=38, starts_line=False, line_number=7),
+  make_inst(opname='LOAD_SMALL_INT', arg=1, argval=1, argrepr='', offset=40, 
start_offset=40, starts_line=False, line_number=7),
+  make_inst(opname='BUILD_LIST', arg=0, argval=0, argrepr='', offset=42, 
start_offset=42, starts_line=False, line_number=7),
+  make_inst(opname='BUILD_MAP', arg=0, argval=0, argrepr='', offset=44, 
start_offset=44, starts_line=False, line_number=7),
+  make_inst(opname='LOAD_CONST', arg=2, argval='Hello world!', argrepr="'Hello 
world!'", offset=46, start_offset=46, starts_line=False, line_number=7),
+  make_inst(opname='CALL', arg=7, argval=7, argrepr='', offset=48, 
start_offset=48, starts_line=False, line_number=7, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=56, 
start_offset=56, starts_line=False, line_number=7),
+  make_inst(opname='LOAD_FAST', arg=2, argval='f', argrepr='f', offset=58, 
start_offset=58, starts_line=True, line_number=8),
+  make_inst(opname='RETURN_VALUE', arg=None, argval=None, argrepr='', 
offset=60, start_offset=60, starts_line=False, line_number=8),
 ]
 
 expected_opinfo_f = [
-  Instruction(opname='COPY_FREE_VARS', opcode=59, arg=2, argval=2, argrepr='', 
offset=0, start_offset=0, starts_line=True, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='MAKE_CELL', opcode=93, arg=0, argval='c', argrepr='c', 
offset=2, start_offset=2, starts_line=False, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='MAKE_CELL', opcode=93, arg=1, argval='d', argrepr='d', 
offset=4, start_offset=4, starts_line=False, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', 
offset=6, start_offset=6, starts_line=True, line_number=2, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=1, argval=(5, 6), 
argrepr='(5, 6)', offset=8, start_offset=8, starts_line=True, line_number=3, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=3, argval='a', argrepr='a', 
offset=10, start_offset=10, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=4, argval='b', argrepr='b', 
offset=12, start_offset=12, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='c', argrepr='c', 
offset=14, start_offset=14, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=1, argval='d', argrepr='d', 
offset=16, start_offset=16, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='BUILD_TUPLE', opcode=50, arg=4, argval=4, argrepr='', 
offset=18, start_offset=18, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=0, argval=code_object_inner, 
argrepr=repr(code_object_inner), offset=20, start_offset=20, starts_line=False, 
line_number=3, label=None, positions=None, cache_info=None),
-  Instruction(opname='MAKE_FUNCTION', opcode=23, arg=None, argval=None, 
argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=104, arg=8, argval=8, 
argrepr='closure', offset=24, start_offset=24, starts_line=False, 
line_number=3, label=None, positions=None, cache_info=None),
-  Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=104, arg=1, argval=1, 
argrepr='defaults', offset=26, start_offset=26, starts_line=False, 
line_number=3, label=None, positions=None, cache_info=None),
-  Instruction(opname='STORE_FAST', opcode=108, arg=2, argval='inner', 
argrepr='inner', offset=28, start_offset=28, starts_line=False, line_number=3, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=1, argval='print', 
argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, 
line_number=5, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=3, argval='a', argrepr='a', 
offset=40, start_offset=40, starts_line=False, line_number=5, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=4, argval='b', argrepr='b', 
offset=42, start_offset=42, starts_line=False, line_number=5, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=0, argval='c', argrepr='c', 
offset=44, start_offset=44, starts_line=False, line_number=5, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=1, argval='d', argrepr='d', 
offset=46, start_offset=46, starts_line=False, line_number=5, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=4, argval=4, argrepr='', 
offset=48, start_offset=48, starts_line=False, line_number=5, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=56, start_offset=56, starts_line=False, line_number=5, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=2, argval='inner', 
argrepr='inner', offset=58, start_offset=58, starts_line=True, line_number=6, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='RETURN_VALUE', opcode=35, arg=None, argval=None, 
argrepr='', offset=60, start_offset=60, starts_line=False, line_number=6, 
label=None, positions=None, cache_info=None),
+  make_inst(opname='COPY_FREE_VARS', arg=2, argval=2, argrepr='', offset=0, 
start_offset=0, starts_line=True, line_number=None),
+  make_inst(opname='MAKE_CELL', arg=0, argval='c', argrepr='c', offset=2, 
start_offset=2, starts_line=False, line_number=None),
+  make_inst(opname='MAKE_CELL', arg=1, argval='d', argrepr='d', offset=4, 
start_offset=4, starts_line=False, line_number=None),
+  make_inst(opname='RESUME', arg=0, argval=0, argrepr='', offset=6, 
start_offset=6, starts_line=True, line_number=2),
+  make_inst(opname='LOAD_CONST', arg=1, argval=(5, 6), argrepr='(5, 6)', 
offset=8, start_offset=8, starts_line=True, line_number=3),
+  make_inst(opname='LOAD_FAST', arg=3, argval='a', argrepr='a', offset=10, 
start_offset=10, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_FAST', arg=4, argval='b', argrepr='b', offset=12, 
start_offset=12, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_FAST', arg=0, argval='c', argrepr='c', offset=14, 
start_offset=14, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_FAST', arg=1, argval='d', argrepr='d', offset=16, 
start_offset=16, starts_line=False, line_number=3),
+  make_inst(opname='BUILD_TUPLE', arg=4, argval=4, argrepr='', offset=18, 
start_offset=18, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_CONST', arg=0, argval=code_object_inner, 
argrepr=repr(code_object_inner), offset=20, start_offset=20, starts_line=False, 
line_number=3),
+  make_inst(opname='MAKE_FUNCTION', arg=None, argval=None, argrepr='', 
offset=22, start_offset=22, starts_line=False, line_number=3),
+  make_inst(opname='SET_FUNCTION_ATTRIBUTE', arg=8, argval=8, 
argrepr='closure', offset=24, start_offset=24, starts_line=False, 
line_number=3),
+  make_inst(opname='SET_FUNCTION_ATTRIBUTE', arg=1, argval=1, 
argrepr='defaults', offset=26, start_offset=26, starts_line=False, 
line_number=3),
+  make_inst(opname='STORE_FAST', arg=2, argval='inner', argrepr='inner', 
offset=28, start_offset=28, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_GLOBAL', arg=1, argval='print', argrepr='print + 
NULL', offset=30, start_offset=30, starts_line=True, line_number=5, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_DEREF', arg=3, argval='a', argrepr='a', offset=40, 
start_offset=40, starts_line=False, line_number=5),
+  make_inst(opname='LOAD_DEREF', arg=4, argval='b', argrepr='b', offset=42, 
start_offset=42, starts_line=False, line_number=5),
+  make_inst(opname='LOAD_DEREF', arg=0, argval='c', argrepr='c', offset=44, 
start_offset=44, starts_line=False, line_number=5),
+  make_inst(opname='LOAD_DEREF', arg=1, argval='d', argrepr='d', offset=46, 
start_offset=46, starts_line=False, line_number=5),
+  make_inst(opname='CALL', arg=4, argval=4, argrepr='', offset=48, 
start_offset=48, starts_line=False, line_number=5, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=56, 
start_offset=56, starts_line=False, line_number=5),
+  make_inst(opname='LOAD_FAST', arg=2, argval='inner', argrepr='inner', 
offset=58, start_offset=58, starts_line=True, line_number=6),
+  make_inst(opname='RETURN_VALUE', arg=None, argval=None, argrepr='', 
offset=60, start_offset=60, starts_line=False, line_number=6),
 ]
 
 expected_opinfo_inner = [
-  Instruction(opname='COPY_FREE_VARS', opcode=59, arg=4, argval=4, argrepr='', 
offset=0, start_offset=0, starts_line=True, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', 
offset=2, start_offset=2, starts_line=True, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=1, argval='print', 
argrepr='print + NULL', offset=4, start_offset=4, starts_line=True, 
line_number=4, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=2, argval='a', argrepr='a', 
offset=14, start_offset=14, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=3, argval='b', argrepr='b', 
offset=16, start_offset=16, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=4, argval='c', argrepr='c', 
offset=18, start_offset=18, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_DEREF', opcode=81, arg=5, argval='d', argrepr='d', 
offset=20, start_offset=20, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST_LOAD_FAST', opcode=85, arg=1, argval=('e', 
'f'), argrepr='e, f', offset=22, start_offset=22, starts_line=False, 
line_number=4, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=6, argval=6, argrepr='', 
offset=24, start_offset=24, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=32, start_offset=32, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=0, argval=None, 
argrepr='None', offset=34, start_offset=34, starts_line=False, line_number=4, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='RETURN_VALUE', opcode=35, arg=None, argval=None, 
argrepr='', offset=36, start_offset=36, starts_line=False, line_number=4, 
label=None, positions=None, cache_info=None),
+  make_inst(opname='COPY_FREE_VARS', arg=4, argval=4, argrepr='', offset=0, 
start_offset=0, starts_line=True, line_number=None),
+  make_inst(opname='RESUME', arg=0, argval=0, argrepr='', offset=2, 
start_offset=2, starts_line=True, line_number=3),
+  make_inst(opname='LOAD_GLOBAL', arg=1, argval='print', argrepr='print + 
NULL', offset=4, start_offset=4, starts_line=True, line_number=4, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_DEREF', arg=2, argval='a', argrepr='a', offset=14, 
start_offset=14, starts_line=False, line_number=4),
+  make_inst(opname='LOAD_DEREF', arg=3, argval='b', argrepr='b', offset=16, 
start_offset=16, starts_line=False, line_number=4),
+  make_inst(opname='LOAD_DEREF', arg=4, argval='c', argrepr='c', offset=18, 
start_offset=18, starts_line=False, line_number=4),
+  make_inst(opname='LOAD_DEREF', arg=5, argval='d', argrepr='d', offset=20, 
start_offset=20, starts_line=False, line_number=4),
+  make_inst(opname='LOAD_FAST_LOAD_FAST', arg=1, argval=('e', 'f'), 
argrepr='e, f', offset=22, start_offset=22, starts_line=False, line_number=4),
+  make_inst(opname='CALL', arg=6, argval=6, argrepr='', offset=24, 
start_offset=24, starts_line=False, line_number=4, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=32, 
start_offset=32, starts_line=False, line_number=4),
+  make_inst(opname='LOAD_CONST', arg=0, argval=None, argrepr='None', 
offset=34, start_offset=34, starts_line=False, line_number=4),
+  make_inst(opname='RETURN_VALUE', arg=None, argval=None, argrepr='', 
offset=36, start_offset=36, starts_line=False, line_number=4),
 ]
 
 expected_opinfo_jumpy = [
-  Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', 
offset=0, start_offset=0, starts_line=True, line_number=1, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=1, argval='range', 
argrepr='range + NULL', offset=2, start_offset=2, starts_line=True, 
line_number=3, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=10, argval=10, 
argrepr='', offset=12, start_offset=12, starts_line=False, line_number=3, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=14, start_offset=14, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='GET_ITER', opcode=16, arg=None, argval=None, argrepr='', 
offset=22, start_offset=22, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='FOR_ITER', opcode=68, arg=32, argval=92, argrepr='to 
L4', offset=24, start_offset=24, starts_line=False, line_number=3, label=1, 
positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
-  Instruction(opname='STORE_FAST', opcode=108, arg=0, argval='i', argrepr='i', 
offset=28, start_offset=28, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, 
line_number=4, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=40, start_offset=40, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=42, start_offset=42, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=50, start_offset=50, starts_line=False, line_number=4, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=52, start_offset=52, starts_line=True, line_number=5, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=4, argval=4, argrepr='', 
offset=54, start_offset=54, starts_line=False, line_number=5, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='COMPARE_OP', opcode=55, arg=18, argval='<', 
argrepr='bool(<)', offset=56, start_offset=56, starts_line=False, 
line_number=5, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='POP_JUMP_IF_FALSE', opcode=96, arg=3, argval=70, 
argrepr='to L2', offset=60, start_offset=60, starts_line=False, line_number=5, 
label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
-  Instruction(opname='NOT_TAKEN', opcode=28, arg=None, argval=None, 
argrepr='', offset=64, start_offset=64, starts_line=False, line_number=5, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='JUMP_BACKWARD', opcode=73, arg=23, argval=24, 
argrepr='to L1', offset=66, start_offset=66, starts_line=True, line_number=6, 
label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=70, start_offset=70, starts_line=True, line_number=7, label=2, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=6, argval=6, argrepr='', 
offset=72, start_offset=72, starts_line=False, line_number=7, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='COMPARE_OP', opcode=55, arg=148, argval='>', 
argrepr='bool(>)', offset=74, start_offset=74, starts_line=False, 
line_number=7, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='POP_JUMP_IF_TRUE', opcode=99, arg=3, argval=88, 
argrepr='to L3', offset=78, start_offset=78, starts_line=False, line_number=7, 
label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
-  Instruction(opname='NOT_TAKEN', opcode=28, arg=None, argval=None, 
argrepr='', offset=82, start_offset=82, starts_line=False, line_number=7, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='JUMP_BACKWARD', opcode=73, arg=32, argval=24, 
argrepr='to L1', offset=84, start_offset=84, starts_line=False, line_number=7, 
label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=88, start_offset=88, starts_line=True, line_number=8, label=3, 
positions=None, cache_info=None),
-  Instruction(opname='JUMP_FORWARD', opcode=75, arg=13, argval=118, 
argrepr='to L5', offset=90, start_offset=90, starts_line=False, line_number=8, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='END_FOR', opcode=9, arg=None, argval=None, argrepr='', 
offset=92, start_offset=92, starts_line=True, line_number=3, label=4, 
positions=None, cache_info=None),
-  Instruction(opname='POP_ITER', opcode=30, arg=None, argval=None, argrepr='', 
offset=94, start_offset=94, starts_line=False, line_number=3, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=96, start_offset=96, starts_line=True, 
line_number=10, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=0, argval='I can haz else 
clause?', argrepr="'I can haz else clause?'", offset=106, start_offset=106, 
starts_line=False, line_number=10, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=108, start_offset=108, starts_line=False, line_number=10, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=116, start_offset=116, starts_line=False, line_number=10, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST_CHECK', opcode=84, arg=0, argval='i', 
argrepr='i', offset=118, start_offset=118, starts_line=True, line_number=11, 
label=5, positions=None, cache_info=None),
-  Instruction(opname='TO_BOOL', opcode=39, arg=None, argval=None, argrepr='', 
offset=120, start_offset=120, starts_line=False, line_number=11, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_JUMP_IF_FALSE', opcode=96, arg=40, argval=212, 
argrepr='to L8', offset=128, start_offset=128, starts_line=False, 
line_number=11, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='NOT_TAKEN', opcode=28, arg=None, argval=None, 
argrepr='', offset=132, start_offset=132, starts_line=False, line_number=11, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=134, start_offset=134, starts_line=True, 
line_number=12, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=144, start_offset=144, starts_line=False, line_number=12, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=146, start_offset=146, starts_line=False, line_number=12, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=154, start_offset=154, starts_line=False, line_number=12, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=156, start_offset=156, starts_line=True, line_number=13, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=1, argval=1, argrepr='', 
offset=158, start_offset=158, starts_line=False, line_number=13, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='BINARY_OP', opcode=44, arg=23, argval=23, argrepr='-=', 
offset=160, start_offset=160, starts_line=False, line_number=13, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('descr', 4, 
b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
-  Instruction(opname='STORE_FAST', opcode=108, arg=0, argval='i', argrepr='i', 
offset=172, start_offset=172, starts_line=False, line_number=13, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=174, start_offset=174, starts_line=True, line_number=14, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=6, argval=6, argrepr='', 
offset=176, start_offset=176, starts_line=False, line_number=14, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='COMPARE_OP', opcode=55, arg=148, argval='>', 
argrepr='bool(>)', offset=178, start_offset=178, starts_line=False, 
line_number=14, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='POP_JUMP_IF_FALSE', opcode=96, arg=3, argval=192, 
argrepr='to L6', offset=182, start_offset=182, starts_line=False, 
line_number=14, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='NOT_TAKEN', opcode=28, arg=None, argval=None, 
argrepr='', offset=186, start_offset=186, starts_line=False, line_number=14, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='JUMP_BACKWARD', opcode=73, arg=37, argval=118, 
argrepr='to L5', offset=188, start_offset=188, starts_line=True, 
line_number=15, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=192, start_offset=192, starts_line=True, line_number=16, label=6, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=4, argval=4, argrepr='', 
offset=194, start_offset=194, starts_line=False, line_number=16, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='COMPARE_OP', opcode=55, arg=18, argval='<', 
argrepr='bool(<)', offset=196, start_offset=196, starts_line=False, 
line_number=16, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='POP_JUMP_IF_TRUE', opcode=99, arg=3, argval=210, 
argrepr='to L7', offset=200, start_offset=200, starts_line=False, 
line_number=16, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='NOT_TAKEN', opcode=28, arg=None, argval=None, 
argrepr='', offset=204, start_offset=204, starts_line=False, line_number=16, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='JUMP_BACKWARD', opcode=73, arg=46, argval=118, 
argrepr='to L5', offset=206, start_offset=206, starts_line=False, 
line_number=16, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='JUMP_FORWARD', opcode=75, arg=11, argval=234, 
argrepr='to L9', offset=210, start_offset=210, starts_line=True, 
line_number=17, label=7, positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=212, start_offset=212, starts_line=True, 
line_number=19, label=8, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=1, argval='Who let lolcatz 
into this test suite?', argrepr="'Who let lolcatz into this test suite?'", 
offset=222, start_offset=222, starts_line=False, line_number=19, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=224, start_offset=224, starts_line=False, line_number=19, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=232, start_offset=232, starts_line=False, line_number=19, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='NOP', opcode=27, arg=None, argval=None, argrepr='', 
offset=234, start_offset=234, starts_line=True, line_number=20, label=9, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=1, argval=1, argrepr='', 
offset=236, start_offset=236, starts_line=True, line_number=21, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=0, argval=0, argrepr='', 
offset=238, start_offset=238, starts_line=False, line_number=21, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='BINARY_OP', opcode=44, arg=11, argval=11, argrepr='/', 
offset=240, start_offset=240, starts_line=False, line_number=21, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('descr', 4, 
b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=252, start_offset=252, starts_line=False, line_number=21, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='i', argrepr='i', 
offset=254, start_offset=254, starts_line=True, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='COPY', opcode=58, arg=1, argval=1, argrepr='', 
offset=256, start_offset=256, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SPECIAL', opcode=91, arg=1, argval=1, 
argrepr='__exit__', offset=258, start_offset=258, starts_line=False, 
line_number=25, label=None, positions=None, cache_info=None),
-  Instruction(opname='SWAP', opcode=113, arg=2, argval=2, argrepr='', 
offset=260, start_offset=260, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='SWAP', opcode=113, arg=3, argval=3, argrepr='', 
offset=262, start_offset=262, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_SPECIAL', opcode=91, arg=0, argval=0, 
argrepr='__enter__', offset=264, start_offset=264, starts_line=False, 
line_number=25, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=0, argval=0, argrepr='', 
offset=266, start_offset=266, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='STORE_FAST', opcode=108, arg=1, argval='dodgy', 
argrepr='dodgy', offset=274, start_offset=274, starts_line=False, 
line_number=25, label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=276, start_offset=276, starts_line=True, 
line_number=26, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=2, argval='Never reach 
this', argrepr="'Never reach this'", offset=286, start_offset=286, 
starts_line=False, line_number=26, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=288, start_offset=288, starts_line=False, line_number=26, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=296, start_offset=296, starts_line=False, line_number=26, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=3, argval=None, 
argrepr='None', offset=298, start_offset=298, starts_line=True, line_number=25, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=3, argval=None, 
argrepr='None', offset=300, start_offset=300, starts_line=False, 
line_number=25, label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=3, argval=None, 
argrepr='None', offset=302, start_offset=302, starts_line=False, 
line_number=25, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=3, argval=3, argrepr='', 
offset=304, start_offset=304, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=312, start_offset=312, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=314, start_offset=314, starts_line=True, 
line_number=28, label=10, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=5, argval="OK, now we're 
done", argrepr='"OK, now we\'re done"', offset=324, start_offset=324, 
starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=326, start_offset=326, starts_line=False, line_number=28, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=334, start_offset=334, starts_line=False, line_number=28, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=3, argval=None, 
argrepr='None', offset=336, start_offset=336, starts_line=False, 
line_number=28, label=None, positions=None, cache_info=None),
-  Instruction(opname='RETURN_VALUE', opcode=35, arg=None, argval=None, 
argrepr='', offset=338, start_offset=338, starts_line=False, line_number=28, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='PUSH_EXC_INFO', opcode=32, arg=None, argval=None, 
argrepr='', offset=340, start_offset=340, starts_line=True, line_number=25, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='WITH_EXCEPT_START', opcode=43, arg=None, argval=None, 
argrepr='', offset=342, start_offset=342, starts_line=False, line_number=25, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='TO_BOOL', opcode=39, arg=None, argval=None, argrepr='', 
offset=344, start_offset=344, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_JUMP_IF_TRUE', opcode=99, arg=2, argval=360, 
argrepr='to L11', offset=352, start_offset=352, starts_line=False, 
line_number=25, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='NOT_TAKEN', opcode=28, arg=None, argval=None, 
argrepr='', offset=356, start_offset=356, starts_line=False, line_number=25, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='RERAISE', opcode=101, arg=2, argval=2, argrepr='', 
offset=358, start_offset=358, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=360, start_offset=360, starts_line=False, line_number=25, label=11, 
positions=None, cache_info=None),
-  Instruction(opname='POP_EXCEPT', opcode=29, arg=None, argval=None, 
argrepr='', offset=362, start_offset=362, starts_line=False, line_number=25, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=364, start_offset=364, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=366, start_offset=366, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=368, start_offset=368, starts_line=False, line_number=25, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='JUMP_BACKWARD_NO_INTERRUPT', opcode=74, arg=29, 
argval=314, argrepr='to L10', offset=370, start_offset=370, starts_line=False, 
line_number=25, label=None, positions=None, cache_info=None),
-  Instruction(opname='COPY', opcode=58, arg=3, argval=3, argrepr='', 
offset=372, start_offset=372, starts_line=True, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='POP_EXCEPT', opcode=29, arg=None, argval=None, 
argrepr='', offset=374, start_offset=374, starts_line=False, line_number=None, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='RERAISE', opcode=101, arg=1, argval=1, argrepr='', 
offset=376, start_offset=376, starts_line=False, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='PUSH_EXC_INFO', opcode=32, arg=None, argval=None, 
argrepr='', offset=378, start_offset=378, starts_line=False, line_number=None, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=4, 
argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=380, 
start_offset=380, starts_line=True, line_number=22, label=None, positions=None, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
-  Instruction(opname='CHECK_EXC_MATCH', opcode=5, arg=None, argval=None, 
argrepr='', offset=390, start_offset=390, starts_line=False, line_number=22, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='POP_JUMP_IF_FALSE', opcode=96, arg=15, argval=426, 
argrepr='to L12', offset=392, start_offset=392, starts_line=False, 
line_number=22, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00')]),
-  Instruction(opname='NOT_TAKEN', opcode=28, arg=None, argval=None, 
argrepr='', offset=396, start_offset=396, starts_line=False, line_number=22, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=398, start_offset=398, starts_line=False, line_number=22, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=400, start_offset=400, starts_line=True, 
line_number=23, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=4, argval='Here we go, here 
we go, here we go...', argrepr="'Here we go, here we go, here we go...'", 
offset=410, start_offset=410, starts_line=False, line_number=23, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=412, start_offset=412, starts_line=False, line_number=23, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=420, start_offset=420, starts_line=False, line_number=23, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='POP_EXCEPT', opcode=29, arg=None, argval=None, 
argrepr='', offset=422, start_offset=422, starts_line=False, line_number=23, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='JUMP_BACKWARD_NO_INTERRUPT', opcode=74, arg=56, 
argval=314, argrepr='to L10', offset=424, start_offset=424, starts_line=False, 
line_number=23, label=None, positions=None, cache_info=None),
-  Instruction(opname='RERAISE', opcode=101, arg=0, argval=0, argrepr='', 
offset=426, start_offset=426, starts_line=True, line_number=22, label=12, 
positions=None, cache_info=None),
-  Instruction(opname='COPY', opcode=58, arg=3, argval=3, argrepr='', 
offset=428, start_offset=428, starts_line=True, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='POP_EXCEPT', opcode=29, arg=None, argval=None, 
argrepr='', offset=430, start_offset=430, starts_line=False, line_number=None, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='RERAISE', opcode=101, arg=1, argval=1, argrepr='', 
offset=432, start_offset=432, starts_line=False, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='PUSH_EXC_INFO', opcode=32, arg=None, argval=None, 
argrepr='', offset=434, start_offset=434, starts_line=False, line_number=None, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='LOAD_GLOBAL', opcode=88, arg=3, argval='print', 
argrepr='print + NULL', offset=436, start_offset=436, starts_line=True, 
line_number=28, label=None, positions=None, cache_info=[('counter', 1, 
b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, 
b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=5, argval="OK, now we're 
done", argrepr='"OK, now we\'re done"', offset=446, start_offset=446, 
starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
-  Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', 
offset=448, start_offset=448, starts_line=False, line_number=28, label=None, 
positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, 
b'\x00\x00\x00\x00')]),
-  Instruction(opname='POP_TOP', opcode=31, arg=None, argval=None, argrepr='', 
offset=456, start_offset=456, starts_line=False, line_number=28, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='RERAISE', opcode=101, arg=0, argval=0, argrepr='', 
offset=458, start_offset=458, starts_line=False, line_number=28, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='COPY', opcode=58, arg=3, argval=3, argrepr='', 
offset=460, start_offset=460, starts_line=True, line_number=None, label=None, 
positions=None, cache_info=None),
-  Instruction(opname='POP_EXCEPT', opcode=29, arg=None, argval=None, 
argrepr='', offset=462, start_offset=462, starts_line=False, line_number=None, 
label=None, positions=None, cache_info=None),
-  Instruction(opname='RERAISE', opcode=101, arg=1, argval=1, argrepr='', 
offset=464, start_offset=464, starts_line=False, line_number=None, label=None, 
positions=None, cache_info=None),
+  make_inst(opname='RESUME', arg=0, argval=0, argrepr='', offset=0, 
start_offset=0, starts_line=True, line_number=1),
+  make_inst(opname='LOAD_GLOBAL', arg=1, argval='range', argrepr='range + 
NULL', offset=2, start_offset=2, starts_line=True, line_number=3, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_SMALL_INT', arg=10, argval=10, argrepr='', offset=12, 
start_offset=12, starts_line=False, line_number=3),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=14, 
start_offset=14, starts_line=False, line_number=3, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='GET_ITER', arg=None, argval=None, argrepr='', offset=22, 
start_offset=22, starts_line=False, line_number=3),
+  make_inst(opname='FOR_ITER', arg=32, argval=92, argrepr='to L4', offset=24, 
start_offset=24, starts_line=False, line_number=3, label=1, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='STORE_FAST', arg=0, argval='i', argrepr='i', offset=28, 
start_offset=28, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=30, start_offset=30, starts_line=True, line_number=4, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=40, 
start_offset=40, starts_line=False, line_number=4),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=42, 
start_offset=42, starts_line=False, line_number=4, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=50, 
start_offset=50, starts_line=False, line_number=4),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=52, 
start_offset=52, starts_line=True, line_number=5),
+  make_inst(opname='LOAD_SMALL_INT', arg=4, argval=4, argrepr='', offset=54, 
start_offset=54, starts_line=False, line_number=5),
+  make_inst(opname='COMPARE_OP', arg=18, argval='<', argrepr='bool(<)', 
offset=56, start_offset=56, starts_line=False, line_number=5, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=3, argval=70, argrepr='to L2', 
offset=60, start_offset=60, starts_line=False, line_number=5, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=64, 
start_offset=64, starts_line=False, line_number=5),
+  make_inst(opname='JUMP_BACKWARD', arg=23, argval=24, argrepr='to L1', 
offset=66, start_offset=66, starts_line=True, line_number=6, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=70, 
start_offset=70, starts_line=True, line_number=7, label=2),
+  make_inst(opname='LOAD_SMALL_INT', arg=6, argval=6, argrepr='', offset=72, 
start_offset=72, starts_line=False, line_number=7),
+  make_inst(opname='COMPARE_OP', arg=148, argval='>', argrepr='bool(>)', 
offset=74, start_offset=74, starts_line=False, line_number=7, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_TRUE', arg=3, argval=88, argrepr='to L3', 
offset=78, start_offset=78, starts_line=False, line_number=7, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=82, 
start_offset=82, starts_line=False, line_number=7),
+  make_inst(opname='JUMP_BACKWARD', arg=32, argval=24, argrepr='to L1', 
offset=84, start_offset=84, starts_line=False, line_number=7, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=88, 
start_offset=88, starts_line=True, line_number=8, label=3),
+  make_inst(opname='JUMP_FORWARD', arg=13, argval=118, argrepr='to L5', 
offset=90, start_offset=90, starts_line=False, line_number=8),
+  make_inst(opname='END_FOR', arg=None, argval=None, argrepr='', offset=92, 
start_offset=92, starts_line=True, line_number=3, label=4),
+  make_inst(opname='POP_ITER', arg=None, argval=None, argrepr='', offset=94, 
start_offset=94, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=96, start_offset=96, starts_line=True, line_number=10, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_CONST', arg=0, argval='I can haz else clause?', 
argrepr="'I can haz else clause?'", offset=106, start_offset=106, 
starts_line=False, line_number=10),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=108, 
start_offset=108, starts_line=False, line_number=10, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=116, 
start_offset=116, starts_line=False, line_number=10),
+  make_inst(opname='LOAD_FAST_CHECK', arg=0, argval='i', argrepr='i', 
offset=118, start_offset=118, starts_line=True, line_number=11, label=5),
+  make_inst(opname='TO_BOOL', arg=None, argval=None, argrepr='', offset=120, 
start_offset=120, starts_line=False, line_number=11, cache_info=[('counter', 1, 
b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=40, argval=212, argrepr='to L8', 
offset=128, start_offset=128, starts_line=False, line_number=11, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=132, 
start_offset=132, starts_line=False, line_number=11),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=134, start_offset=134, starts_line=True, line_number=12, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=144, 
start_offset=144, starts_line=False, line_number=12),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=146, 
start_offset=146, starts_line=False, line_number=12, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=154, 
start_offset=154, starts_line=False, line_number=12),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=156, 
start_offset=156, starts_line=True, line_number=13),
+  make_inst(opname='LOAD_SMALL_INT', arg=1, argval=1, argrepr='', offset=158, 
start_offset=158, starts_line=False, line_number=13),
+  make_inst(opname='BINARY_OP', arg=23, argval=23, argrepr='-=', offset=160, 
start_offset=160, starts_line=False, line_number=13, cache_info=[('counter', 1, 
b'\x00\x00'), ('descr', 4, b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
+  make_inst(opname='STORE_FAST', arg=0, argval='i', argrepr='i', offset=172, 
start_offset=172, starts_line=False, line_number=13),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=174, 
start_offset=174, starts_line=True, line_number=14),
+  make_inst(opname='LOAD_SMALL_INT', arg=6, argval=6, argrepr='', offset=176, 
start_offset=176, starts_line=False, line_number=14),
+  make_inst(opname='COMPARE_OP', arg=148, argval='>', argrepr='bool(>)', 
offset=178, start_offset=178, starts_line=False, line_number=14, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=3, argval=192, argrepr='to L6', 
offset=182, start_offset=182, starts_line=False, line_number=14, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=186, 
start_offset=186, starts_line=False, line_number=14),
+  make_inst(opname='JUMP_BACKWARD', arg=37, argval=118, argrepr='to L5', 
offset=188, start_offset=188, starts_line=True, line_number=15, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=192, 
start_offset=192, starts_line=True, line_number=16, label=6),
+  make_inst(opname='LOAD_SMALL_INT', arg=4, argval=4, argrepr='', offset=194, 
start_offset=194, starts_line=False, line_number=16),
+  make_inst(opname='COMPARE_OP', arg=18, argval='<', argrepr='bool(<)', 
offset=196, start_offset=196, starts_line=False, line_number=16, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_TRUE', arg=3, argval=210, argrepr='to L7', 
offset=200, start_offset=200, starts_line=False, line_number=16, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=204, 
start_offset=204, starts_line=False, line_number=16),
+  make_inst(opname='JUMP_BACKWARD', arg=46, argval=118, argrepr='to L5', 
offset=206, start_offset=206, starts_line=False, line_number=16, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='JUMP_FORWARD', arg=11, argval=234, argrepr='to L9', 
offset=210, start_offset=210, starts_line=True, line_number=17, label=7),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=212, start_offset=212, starts_line=True, line_number=19, label=8, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_CONST', arg=1, argval='Who let lolcatz into this test 
suite?', argrepr="'Who let lolcatz into this test suite?'", offset=222, 
start_offset=222, starts_line=False, line_number=19),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=224, 
start_offset=224, starts_line=False, line_number=19, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=232, 
start_offset=232, starts_line=False, line_number=19),
+  make_inst(opname='NOP', arg=None, argval=None, argrepr='', offset=234, 
start_offset=234, starts_line=True, line_number=20, label=9),
+  make_inst(opname='LOAD_SMALL_INT', arg=1, argval=1, argrepr='', offset=236, 
start_offset=236, starts_line=True, line_number=21),
+  make_inst(opname='LOAD_SMALL_INT', arg=0, argval=0, argrepr='', offset=238, 
start_offset=238, starts_line=False, line_number=21),
+  make_inst(opname='BINARY_OP', arg=11, argval=11, argrepr='/', offset=240, 
start_offset=240, starts_line=False, line_number=21, cache_info=[('counter', 1, 
b'\x00\x00'), ('descr', 4, b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=252, 
start_offset=252, starts_line=False, line_number=21),
+  make_inst(opname='LOAD_FAST', arg=0, argval='i', argrepr='i', offset=254, 
start_offset=254, starts_line=True, line_number=25),
+  make_inst(opname='COPY', arg=1, argval=1, argrepr='', offset=256, 
start_offset=256, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_SPECIAL', arg=1, argval=1, argrepr='__exit__', 
offset=258, start_offset=258, starts_line=False, line_number=25),
+  make_inst(opname='SWAP', arg=2, argval=2, argrepr='', offset=260, 
start_offset=260, starts_line=False, line_number=25),
+  make_inst(opname='SWAP', arg=3, argval=3, argrepr='', offset=262, 
start_offset=262, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_SPECIAL', arg=0, argval=0, argrepr='__enter__', 
offset=264, start_offset=264, starts_line=False, line_number=25),
+  make_inst(opname='CALL', arg=0, argval=0, argrepr='', offset=266, 
start_offset=266, starts_line=False, line_number=25, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='STORE_FAST', arg=1, argval='dodgy', argrepr='dodgy', 
offset=274, start_offset=274, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=276, start_offset=276, starts_line=True, line_number=26, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_CONST', arg=2, argval='Never reach this', 
argrepr="'Never reach this'", offset=286, start_offset=286, starts_line=False, 
line_number=26),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=288, 
start_offset=288, starts_line=False, line_number=26, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=296, 
start_offset=296, starts_line=False, line_number=26),
+  make_inst(opname='LOAD_CONST', arg=3, argval=None, argrepr='None', 
offset=298, start_offset=298, starts_line=True, line_number=25),
+  make_inst(opname='LOAD_CONST', arg=3, argval=None, argrepr='None', 
offset=300, start_offset=300, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_CONST', arg=3, argval=None, argrepr='None', 
offset=302, start_offset=302, starts_line=False, line_number=25),
+  make_inst(opname='CALL', arg=3, argval=3, argrepr='', offset=304, 
start_offset=304, starts_line=False, line_number=25, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=312, 
start_offset=312, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=314, start_offset=314, starts_line=True, line_number=28, 
label=10, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_CONST', arg=5, argval="OK, now we're done", 
argrepr='"OK, now we\'re done"', offset=324, start_offset=324, 
starts_line=False, line_number=28),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=326, 
start_offset=326, starts_line=False, line_number=28, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=334, 
start_offset=334, starts_line=False, line_number=28),
+  make_inst(opname='LOAD_CONST', arg=3, argval=None, argrepr='None', 
offset=336, start_offset=336, starts_line=False, line_number=28),
+  make_inst(opname='RETURN_VALUE', arg=None, argval=None, argrepr='', 
offset=338, start_offset=338, starts_line=False, line_number=28),
+  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', 
offset=340, start_offset=340, starts_line=True, line_number=25),
+  make_inst(opname='WITH_EXCEPT_START', arg=None, argval=None, argrepr='', 
offset=342, start_offset=342, starts_line=False, line_number=25),
+  make_inst(opname='TO_BOOL', arg=None, argval=None, argrepr='', offset=344, 
start_offset=344, starts_line=False, line_number=25, cache_info=[('counter', 1, 
b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_TRUE', arg=2, argval=360, argrepr='to L11', 
offset=352, start_offset=352, starts_line=False, line_number=25, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=356, 
start_offset=356, starts_line=False, line_number=25),
+  make_inst(opname='RERAISE', arg=2, argval=2, argrepr='', offset=358, 
start_offset=358, starts_line=False, line_number=25),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=360, 
start_offset=360, starts_line=False, line_number=25, label=11),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', 
offset=362, start_offset=362, starts_line=False, line_number=25),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=364, 
start_offset=364, starts_line=False, line_number=25),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=366, 
start_offset=366, starts_line=False, line_number=25),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=368, 
start_offset=368, starts_line=False, line_number=25),
+  make_inst(opname='JUMP_BACKWARD_NO_INTERRUPT', arg=29, argval=314, 
argrepr='to L10', offset=370, start_offset=370, starts_line=False, 
line_number=25),
+  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=372, 
start_offset=372, starts_line=True, line_number=None),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', 
offset=374, start_offset=374, starts_line=False, line_number=None),
+  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=376, 
start_offset=376, starts_line=False, line_number=None),
+  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', 
offset=378, start_offset=378, starts_line=False, line_number=None),
+  make_inst(opname='LOAD_GLOBAL', arg=4, argval='ZeroDivisionError', 
argrepr='ZeroDivisionError', offset=380, start_offset=380, starts_line=True, 
line_number=22, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, 
b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 
1, b'\x00\x00')]),
+  make_inst(opname='CHECK_EXC_MATCH', arg=None, argval=None, argrepr='', 
offset=390, start_offset=390, starts_line=False, line_number=22),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=15, argval=426, argrepr='to L12', 
offset=392, start_offset=392, starts_line=False, line_number=22, 
cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=396, 
start_offset=396, starts_line=False, line_number=22),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=398, 
start_offset=398, starts_line=False, line_number=22),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=400, start_offset=400, starts_line=True, line_number=23, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_CONST', arg=4, argval='Here we go, here we go, here 
we go...', argrepr="'Here we go, here we go, here we go...'", offset=410, 
start_offset=410, starts_line=False, line_number=23),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=412, 
start_offset=412, starts_line=False, line_number=23, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=420, 
start_offset=420, starts_line=False, line_number=23),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', 
offset=422, start_offset=422, starts_line=False, line_number=23),
+  make_inst(opname='JUMP_BACKWARD_NO_INTERRUPT', arg=56, argval=314, 
argrepr='to L10', offset=424, start_offset=424, starts_line=False, 
line_number=23),
+  make_inst(opname='RERAISE', arg=0, argval=0, argrepr='', offset=426, 
start_offset=426, starts_line=True, line_number=22, label=12),
+  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=428, 
start_offset=428, starts_line=True, line_number=None),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', 
offset=430, start_offset=430, starts_line=False, line_number=None),
+  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=432, 
start_offset=432, starts_line=False, line_number=None),
+  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', 
offset=434, start_offset=434, starts_line=False, line_number=None),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + 
NULL', offset=436, start_offset=436, starts_line=True, line_number=28, 
cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), 
('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, 
b'\x00\x00')]),
+  make_inst(opname='LOAD_CONST', arg=5, argval="OK, now we're done", 
argrepr='"OK, now we\'re done"', offset=446, start_offset=446, 
starts_line=False, line_number=28),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=448, 
start_offset=448, starts_line=False, line_number=28, cache_info=[('counter', 1, 
b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=456, 
start_offset=456, starts_line=False, line_number=28),
+  make_inst(opname='RERAISE', arg=0, argval=0, argrepr='', offset=458, 
start_offset=458, starts_line=False, line_number=28),
+  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=460, 
start_offset=460, starts_line=True, line_number=None),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', 
offset=462, start_offset=462, starts_line=False, line_number=None),
+  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=464, 
start_offset=464, starts_line=False, line_number=None),
 ]
 
 # One last piece of inspect fodder to check the default line number handling
 def simple(): pass
 expected_opinfo_simple = [
-  Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', 
offset=0, start_offset=0, starts_line=True, 
line_number=simple.__code__.co_firstlineno, label=None, positions=None),
-  Instruction(opname='LOAD_CONST', opcode=80, arg=0, argval=None, 
argrepr='None', offset=2, start_offset=2, starts_line=False, 
line_number=simple.__code__.co_firstlineno, label=None),
-  Instruction(opname='RETURN_VALUE', opcode=35, arg=None, argval=None, 
argrepr='', offset=4, start_offset=4, starts_line=False, 
line_number=simple.__code__.co_firstlineno, label=None),
+  make_inst(opname='RESUME', arg=0, argval=0, argrepr='', offset=0, 
start_offset=0, starts_line=True, line_number=simple.__code__.co_firstlineno),
+  make_inst(opname='LOAD_CONST', arg=0, argval=None, argrepr='None', offset=2, 
start_offset=2, starts_line=False, line_number=simple.__code__.co_firstlineno),
+  make_inst(opname='RETURN_VALUE', arg=None, argval=None, argrepr='', 
offset=4, start_offset=4, starts_line=False, 
line_number=simple.__code__.co_firstlineno),
 ]
 
 
@@ -2040,7 +2048,7 @@ def roots(a, b, c):
                     self.assertEqual(co_positions, dis_positions)
 
     def test_oparg_alias(self):
-        instruction = Instruction(opname="NOP", opcode=dis.opmap["NOP"], 
arg=None, argval=None,
+        instruction = make_inst(opname="NOP", arg=None, argval=None,
                                   argrepr='', offset=10, start_offset=10, 
starts_line=True, line_number=1, label=None,
                                   positions=None)
         self.assertEqual(instruction.arg, instruction.oparg)
@@ -2077,20 +2085,20 @@ def test_contains_op_format(self):
 
     def test_baseopname_and_baseopcode(self):
         # Standard instructions
-        for name, code in dis.opmap.items():
-            instruction = Instruction(opname=name, opcode=code, arg=None, 
argval=None, argrepr='', offset=0,
-                                      start_offset=0, starts_line=True, 
line_number=1, label=None, positions=None)
+        for name in dis.opmap:
+            instruction = make_inst(opname=name, arg=None, argval=None, 
argrepr='', offset=0,
+                                    start_offset=0, starts_line=True, 
line_number=1, label=None, positions=None)
             baseopname = instruction.baseopname
             baseopcode = instruction.baseopcode
             self.assertIsNotNone(baseopname)
             self.assertIsNotNone(baseopcode)
             self.assertEqual(name, baseopname)
-            self.assertEqual(code, baseopcode)
+            self.assertEqual(instruction.opcode, baseopcode)
 
         # Specialized instructions
         for name in opcode._specialized_opmap:
-            instruction = Instruction(opname=name, 
opcode=dis._all_opmap[name], arg=None, argval=None, argrepr='',
-                                      offset=0, start_offset=0, 
starts_line=True, line_number=1, label=None, positions=None)
+            instruction = make_inst(opname=name, arg=None, argval=None, 
argrepr='',
+                                    offset=0, start_offset=0, 
starts_line=True, line_number=1, label=None, positions=None)
             baseopname = instruction.baseopname
             baseopcode = instruction.baseopcode
             self.assertIn(name, opcode._specializations[baseopname])
@@ -2098,25 +2106,25 @@ def test_baseopname_and_baseopcode(self):
 
     def test_jump_target(self):
         # Non-jump instructions should return None
-        instruction = Instruction(opname="NOP", opcode=dis.opmap["NOP"], 
arg=None, argval=None,
+        instruction = make_inst(opname="NOP", arg=None, argval=None,
                                   argrepr='', offset=10, start_offset=10, 
starts_line=True, line_number=1, label=None,
                                   positions=None)
         self.assertIsNone(instruction.jump_target)
 
         delta = 100
-        instruction = Instruction(opname="JUMP_FORWARD", 
opcode=dis.opmap["JUMP_FORWARD"], arg=delta, argval=delta,
+        instruction = make_inst(opname="JUMP_FORWARD", arg=delta, argval=delta,
                                   argrepr='', offset=10, start_offset=10, 
starts_line=True, line_number=1, label=None,
                                   positions=None)
         self.assertEqual(10 + 2 + 100*2, instruction.jump_target)
 
         # Test negative deltas
-        instruction = Instruction(opname="JUMP_BACKWARD", 
opcode=dis.opmap["JUMP_BACKWARD"], arg=delta, argval=delta,
+        instruction = make_inst(opname="JUMP_BACKWARD", arg=delta, 
argval=delta,
                                   argrepr='', offset=200, start_offset=200, 
starts_line=True, line_number=1, label=None,
                                   positions=None)
         self.assertEqual(200 + 2 - 100*2 + 2*1, instruction.jump_target)
 
         # Make sure cache entries are handled
-        instruction = Instruction(opname="SEND", opcode=dis.opmap["SEND"], 
arg=delta, argval=delta,
+        instruction = make_inst(opname="SEND", arg=delta, argval=delta,
                                   argrepr='', offset=10, start_offset=10, 
starts_line=True, line_number=1, label=None,
                                   positions=None)
         self.assertEqual(10 + 2 + 1*2 + 100*2, instruction.jump_target)
@@ -2440,8 +2448,8 @@ def _unroll_caches_as_Instructions(instrs, 
show_caches=False):
                 else:
                     argrepr = ""
 
-                yield Instruction("CACHE", CACHE, 0, None, argrepr, offset, 
offset,
-                                  False, None, None, instr.positions)
+                yield make_inst("CACHE", 0, None, argrepr, offset, offset,
+                                False, None, None, instr.positions)
 
 
 class TestDisCLI(unittest.TestCase):

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to