| [3225] | 1 |
|
|---|
| 2 | """
|
|---|
| 3 | opcode module - potentially shared between dis and other modules which
|
|---|
| 4 | operate on bytecodes (e.g. peephole optimizers).
|
|---|
| 5 | """
|
|---|
| 6 |
|
|---|
| 7 | __all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs",
|
|---|
| 8 | "haslocal", "hascompare", "hasfree", "opname", "opmap",
|
|---|
| 9 | "HAVE_ARGUMENT", "EXTENDED_ARG"]
|
|---|
| 10 |
|
|---|
| 11 | cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
|---|
| 12 | 'is not', 'exception match', 'BAD')
|
|---|
| 13 |
|
|---|
| 14 | hasconst = []
|
|---|
| 15 | hasname = []
|
|---|
| 16 | hasjrel = []
|
|---|
| 17 | hasjabs = []
|
|---|
| 18 | haslocal = []
|
|---|
| 19 | hascompare = []
|
|---|
| 20 | hasfree = []
|
|---|
| 21 |
|
|---|
| 22 | opmap = {}
|
|---|
| 23 | opname = [''] * 256
|
|---|
| 24 | for op in range(256): opname[op] = '<%r>' % (op,)
|
|---|
| 25 | del op
|
|---|
| 26 |
|
|---|
| 27 | def def_op(name, op):
|
|---|
| 28 | opname[op] = name
|
|---|
| 29 | opmap[name] = op
|
|---|
| 30 |
|
|---|
| 31 | def name_op(name, op):
|
|---|
| 32 | def_op(name, op)
|
|---|
| 33 | hasname.append(op)
|
|---|
| 34 |
|
|---|
| 35 | def jrel_op(name, op):
|
|---|
| 36 | def_op(name, op)
|
|---|
| 37 | hasjrel.append(op)
|
|---|
| 38 |
|
|---|
| 39 | def jabs_op(name, op):
|
|---|
| 40 | def_op(name, op)
|
|---|
| 41 | hasjabs.append(op)
|
|---|
| 42 |
|
|---|
| 43 | # Instruction opcodes for compiled code
|
|---|
| 44 | # Blank lines correspond to available opcodes
|
|---|
| 45 |
|
|---|
| 46 | def_op('STOP_CODE', 0)
|
|---|
| 47 | def_op('POP_TOP', 1)
|
|---|
| 48 | def_op('ROT_TWO', 2)
|
|---|
| 49 | def_op('ROT_THREE', 3)
|
|---|
| 50 | def_op('DUP_TOP', 4)
|
|---|
| 51 | def_op('ROT_FOUR', 5)
|
|---|
| 52 |
|
|---|
| 53 | def_op('NOP', 9)
|
|---|
| 54 | def_op('UNARY_POSITIVE', 10)
|
|---|
| 55 | def_op('UNARY_NEGATIVE', 11)
|
|---|
| 56 | def_op('UNARY_NOT', 12)
|
|---|
| 57 | def_op('UNARY_CONVERT', 13)
|
|---|
| 58 |
|
|---|
| 59 | def_op('UNARY_INVERT', 15)
|
|---|
| 60 |
|
|---|
| 61 | def_op('LIST_APPEND', 18)
|
|---|
| 62 | def_op('BINARY_POWER', 19)
|
|---|
| 63 | def_op('BINARY_MULTIPLY', 20)
|
|---|
| 64 | def_op('BINARY_DIVIDE', 21)
|
|---|
| 65 | def_op('BINARY_MODULO', 22)
|
|---|
| 66 | def_op('BINARY_ADD', 23)
|
|---|
| 67 | def_op('BINARY_SUBTRACT', 24)
|
|---|
| 68 | def_op('BINARY_SUBSCR', 25)
|
|---|
| 69 | def_op('BINARY_FLOOR_DIVIDE', 26)
|
|---|
| 70 | def_op('BINARY_TRUE_DIVIDE', 27)
|
|---|
| 71 | def_op('INPLACE_FLOOR_DIVIDE', 28)
|
|---|
| 72 | def_op('INPLACE_TRUE_DIVIDE', 29)
|
|---|
| 73 | def_op('SLICE+0', 30)
|
|---|
| 74 | def_op('SLICE+1', 31)
|
|---|
| 75 | def_op('SLICE+2', 32)
|
|---|
| 76 | def_op('SLICE+3', 33)
|
|---|
| 77 |
|
|---|
| 78 | def_op('STORE_SLICE+0', 40)
|
|---|
| 79 | def_op('STORE_SLICE+1', 41)
|
|---|
| 80 | def_op('STORE_SLICE+2', 42)
|
|---|
| 81 | def_op('STORE_SLICE+3', 43)
|
|---|
| 82 |
|
|---|
| 83 | def_op('DELETE_SLICE+0', 50)
|
|---|
| 84 | def_op('DELETE_SLICE+1', 51)
|
|---|
| 85 | def_op('DELETE_SLICE+2', 52)
|
|---|
| 86 | def_op('DELETE_SLICE+3', 53)
|
|---|
| 87 |
|
|---|
| 88 | def_op('INPLACE_ADD', 55)
|
|---|
| 89 | def_op('INPLACE_SUBTRACT', 56)
|
|---|
| 90 | def_op('INPLACE_MULTIPLY', 57)
|
|---|
| 91 | def_op('INPLACE_DIVIDE', 58)
|
|---|
| 92 | def_op('INPLACE_MODULO', 59)
|
|---|
| 93 | def_op('STORE_SUBSCR', 60)
|
|---|
| 94 | def_op('DELETE_SUBSCR', 61)
|
|---|
| 95 | def_op('BINARY_LSHIFT', 62)
|
|---|
| 96 | def_op('BINARY_RSHIFT', 63)
|
|---|
| 97 | def_op('BINARY_AND', 64)
|
|---|
| |
|---|