| 57 | |
| 58 | class Scanner3(Scanner): |
| 59 | def __init__(self, version, show_asm=None, is_pypy=False): |
| 60 | super(Scanner3, self).__init__(version, show_asm, is_pypy) |
| 61 | |
| 62 | # Create opcode classification sets |
| 63 | # Note: super initialization above initializes self.opc |
| 64 | |
| 65 | # For ops that start SETUP_ ... we will add COME_FROM with these names |
| 66 | # at the their targets. |
| 67 | # Some blocks and END_ statements. And they can start |
| 68 | # a new statement |
| 69 | if self.version < (3, 8): |
| 70 | setup_ops = [ |
| 71 | self.opc.SETUP_LOOP, |
| 72 | self.opc.SETUP_EXCEPT, |
| 73 | self.opc.SETUP_FINALLY, |
| 74 | ] |
| 75 | self.setup_ops_no_loop = frozenset(setup_ops) - frozenset( |
| 76 | [self.opc.SETUP_LOOP] |
| 77 | ) |
| 78 | else: |
| 79 | setup_ops = [self.opc.SETUP_FINALLY] |
| 80 | self.setup_ops_no_loop = frozenset(setup_ops) |
| 81 | |
| 82 | if self.version >= (3, 2): |
| 83 | setup_ops.append(self.opc.SETUP_WITH) |
| 84 | self.setup_ops = frozenset(setup_ops) |
| 85 | |
| 86 | if self.version[:2] == (3, 0): |
| 87 | self.pop_jump_tf = frozenset( |
| 88 | [self.opc.JUMP_IF_FALSE, self.opc.JUMP_IF_TRUE] |
| 89 | ) |
| 90 | self.not_continue_follow = ("END_FINALLY", "POP_BLOCK", "POP_TOP") |
| 91 | else: |
| 92 | self.pop_jump_tf = frozenset([self.opc.PJIF, self.opc.PJIT]) |
| 93 | self.not_continue_follow = ("END_FINALLY", "POP_BLOCK") |
| 94 | |
| 95 | # Opcodes that can start a statement. |
| 96 | statement_opcodes = [ |
| 97 | self.opc.POP_BLOCK, |
| 98 | self.opc.STORE_FAST, |
| 99 | self.opc.DELETE_FAST, |
| 100 | self.opc.STORE_DEREF, |
| 101 | self.opc.STORE_GLOBAL, |
| 102 | self.opc.DELETE_GLOBAL, |
| 103 | self.opc.STORE_NAME, |
| 104 | self.opc.DELETE_NAME, |
| 105 | self.opc.STORE_ATTR, |
| 106 | self.opc.DELETE_ATTR, |
| 107 | self.opc.STORE_SUBSCR, |
| 108 | self.opc.POP_TOP, |
| 109 | self.opc.DELETE_SUBSCR, |
| 110 | self.opc.END_FINALLY, |
| 111 | self.opc.RETURN_VALUE, |
| 112 | self.opc.RAISE_VARARGS, |
| 113 | self.opc.PRINT_EXPR, |
| 114 | self.opc.JUMP_ABSOLUTE, |
| 115 | ] |
| 116 | |