-
-
Notifications
You must be signed in to change notification settings - Fork 33.9k
gh-105481: Generate the opcode lists in dis from data extracted from bytecodes.c #106758
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
36a7d56
75019ca
494680a
24786fb
563b431
227756f
1b13b96
0f5ae32
289fad1
598ba2a
d2d355e
27eb2cc
998024a
ffa4ee3
ce76a60
4194a12
6b8c46b
e15f7d5
21fe0a4
75795db
1a0a2b2
f530469
71ffe34
d525c53
5e1c4a4
6077263
98ba11f
cc8e5e1
31dbfec
1abf6ca
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -29,12 +29,6 @@ | |
|
|
||
| cmp_op = ('<', '<=', '==', '!=', '>', '>=') | ||
|
|
||
| hasarg = [] | ||
| hasconst = [] | ||
| hasname = [] | ||
| hasjrel = [] | ||
| hasjabs = [] | ||
| haslocal = [] | ||
| hascompare = [] | ||
| hasfree = [] | ||
| hasexc = [] | ||
|
|
@@ -45,8 +39,7 @@ | |
| def is_pseudo(op): | ||
| return op >= MIN_PSEUDO_OPCODE and op <= MAX_PSEUDO_OPCODE | ||
|
|
||
| oplists = [hasarg, hasconst, hasname, hasjrel, hasjabs, | ||
| haslocal, hascompare, hasfree, hasexc] | ||
| oplists = [hascompare, hasfree, hasexc] | ||
|
|
||
| opmap = {} | ||
|
|
||
|
|
@@ -57,18 +50,6 @@ def is_pseudo(op): | |
| def def_op(name, op): | ||
| opmap[name] = op | ||
|
|
||
| def name_op(name, op): | ||
| def_op(name, op) | ||
| hasname.append(op) | ||
|
|
||
| def jrel_op(name, op): | ||
| def_op(name, op) | ||
| hasjrel.append(op) | ||
|
|
||
| def jabs_op(name, op): | ||
| def_op(name, op) | ||
| hasjabs.append(op) | ||
|
|
||
| def pseudo_op(name, op, real_ops): | ||
| def_op(name, op) | ||
| _pseudo_ops[name] = real_ops | ||
|
|
@@ -149,55 +130,49 @@ def pseudo_op(name, op, real_ops): | |
|
|
||
| HAVE_ARGUMENT = 90 # real opcodes from here have an argument: | ||
|
|
||
| name_op('STORE_NAME', 90) # Index in name list | ||
| name_op('DELETE_NAME', 91) # "" | ||
| def_op('STORE_NAME', 90) # Index in name list | ||
| def_op('DELETE_NAME', 91) # "" | ||
| def_op('UNPACK_SEQUENCE', 92) # Number of tuple items | ||
| jrel_op('FOR_ITER', 93) | ||
| def_op('FOR_ITER', 93) | ||
| def_op('UNPACK_EX', 94) | ||
| name_op('STORE_ATTR', 95) # Index in name list | ||
| name_op('DELETE_ATTR', 96) # "" | ||
| name_op('STORE_GLOBAL', 97) # "" | ||
| name_op('DELETE_GLOBAL', 98) # "" | ||
| def_op('STORE_ATTR', 95) # Index in name list | ||
| def_op('DELETE_ATTR', 96) # "" | ||
| def_op('STORE_GLOBAL', 97) # "" | ||
| def_op('DELETE_GLOBAL', 98) # "" | ||
| def_op('SWAP', 99) | ||
| def_op('LOAD_CONST', 100) # Index in const list | ||
| hasconst.append(100) | ||
| name_op('LOAD_NAME', 101) # Index in name list | ||
| def_op('LOAD_NAME', 101) # Index in name list | ||
| def_op('BUILD_TUPLE', 102) # Number of tuple items | ||
| def_op('BUILD_LIST', 103) # Number of list items | ||
| def_op('BUILD_SET', 104) # Number of set items | ||
| def_op('BUILD_MAP', 105) # Number of dict entries | ||
| name_op('LOAD_ATTR', 106) # Index in name list | ||
| def_op('LOAD_ATTR', 106) # Index in name list | ||
| def_op('COMPARE_OP', 107) # Comparison operator | ||
| hascompare.append(107) | ||
| name_op('IMPORT_NAME', 108) # Index in name list | ||
| name_op('IMPORT_FROM', 109) # Index in name list | ||
| jrel_op('JUMP_FORWARD', 110) # Number of words to skip | ||
| def_op('IMPORT_NAME', 108) # Index in name list | ||
| def_op('IMPORT_FROM', 109) # Index in name list | ||
| def_op('JUMP_FORWARD', 110) # Number of words to skip | ||
|
|
||
| jrel_op('POP_JUMP_IF_FALSE', 114) | ||
| jrel_op('POP_JUMP_IF_TRUE', 115) | ||
| name_op('LOAD_GLOBAL', 116) # Index in name list | ||
| def_op('POP_JUMP_IF_FALSE', 114) | ||
| def_op('POP_JUMP_IF_TRUE', 115) | ||
| def_op('LOAD_GLOBAL', 116) # Index in name list | ||
| def_op('IS_OP', 117) | ||
| def_op('CONTAINS_OP', 118) | ||
| def_op('RERAISE', 119) | ||
| def_op('COPY', 120) | ||
| def_op('RETURN_CONST', 121) | ||
| hasconst.append(121) | ||
| def_op('BINARY_OP', 122) | ||
| jrel_op('SEND', 123) # Number of words to skip | ||
| def_op('SEND', 123) # Number of words to skip | ||
| def_op('LOAD_FAST', 124) # Local variable number, no null check | ||
| haslocal.append(124) | ||
| def_op('STORE_FAST', 125) # Local variable number | ||
| haslocal.append(125) | ||
| def_op('DELETE_FAST', 126) # Local variable number | ||
| haslocal.append(126) | ||
| def_op('LOAD_FAST_CHECK', 127) # Local variable number | ||
| haslocal.append(127) | ||
| jrel_op('POP_JUMP_IF_NOT_NONE', 128) | ||
| jrel_op('POP_JUMP_IF_NONE', 129) | ||
| def_op('POP_JUMP_IF_NOT_NONE', 128) | ||
| def_op('POP_JUMP_IF_NONE', 129) | ||
| def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3) | ||
| def_op('GET_AWAITABLE', 131) | ||
| def_op('BUILD_SLICE', 133) # Number of items | ||
| jrel_op('JUMP_BACKWARD_NO_INTERRUPT', 134) # Number of words to skip (backwards) | ||
| def_op('JUMP_BACKWARD_NO_INTERRUPT', 134) # Number of words to skip (backwards) | ||
| def_op('MAKE_CELL', 135) | ||
| hasfree.append(135) | ||
| def_op('LOAD_DEREF', 137) | ||
|
|
@@ -206,11 +181,10 @@ def pseudo_op(name, op, real_ops): | |
| hasfree.append(138) | ||
| def_op('DELETE_DEREF', 139) | ||
| hasfree.append(139) | ||
| jrel_op('JUMP_BACKWARD', 140) # Number of words to skip (backwards) | ||
| name_op('LOAD_SUPER_ATTR', 141) | ||
| def_op('JUMP_BACKWARD', 140) # Number of words to skip (backwards) | ||
| def_op('LOAD_SUPER_ATTR', 141) | ||
| def_op('CALL_FUNCTION_EX', 142) # Flags | ||
| def_op('LOAD_FAST_AND_CLEAR', 143) # Local variable number | ||
| haslocal.append(143) | ||
| def_op('EXTENDED_ARG', 144) | ||
| EXTENDED_ARG = 144 | ||
iritkatriel marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| def_op('LIST_APPEND', 145) | ||
|
|
@@ -236,10 +210,9 @@ def pseudo_op(name, op, real_ops): | |
| def_op('STORE_FAST_STORE_FAST', 170) | ||
| def_op('CALL', 171) | ||
| def_op('KW_NAMES', 172) | ||
| hasconst.append(172) | ||
| def_op('CALL_INTRINSIC_1', 173) | ||
| def_op('CALL_INTRINSIC_2', 174) | ||
| name_op('LOAD_FROM_DICT_OR_GLOBALS', 175) | ||
| def_op('LOAD_FROM_DICT_OR_GLOBALS', 175) | ||
| def_op('LOAD_FROM_DICT_OR_DEREF', 176) | ||
| hasfree.append(176) | ||
| def_op('SET_FUNCTION_ATTRIBUTE', 177) # Attribute | ||
|
|
@@ -270,7 +243,6 @@ def pseudo_op(name, op, real_ops): | |
| def_op('INSTRUMENTED_LINE', 254) | ||
| # 255 is reserved | ||
|
|
||
| hasarg.extend([op for op in opmap.values() if op >= HAVE_ARGUMENT]) | ||
|
|
||
| MIN_PSEUDO_OPCODE = 256 | ||
|
|
||
|
|
@@ -295,12 +267,29 @@ def pseudo_op(name, op, real_ops): | |
|
|
||
| MAX_PSEUDO_OPCODE = MIN_PSEUDO_OPCODE + len(_pseudo_ops) - 1 | ||
|
|
||
| del def_op, name_op, jrel_op, jabs_op, pseudo_op | ||
| del def_op, pseudo_op | ||
|
|
||
| opname = ['<%r>' % (op,) for op in range(MAX_PSEUDO_OPCODE + 1)] | ||
| for op, i in opmap.items(): | ||
| opname[i] = op | ||
|
|
||
| # _opcode may not be ready during early stages of the build | ||
|
||
| try: | ||
| import _opcode | ||
| except ImportError: | ||
| hasarg = [] | ||
| hasconst = [] | ||
| hasname = [] | ||
| hasjrel = [] | ||
| hasjabs = [] | ||
| haslocal = [] | ||
| else: | ||
| hasarg = [op for op in opmap.values() if _opcode.has_arg(op)] | ||
| hasconst = [op for op in opmap.values() if _opcode.has_const(op)] | ||
| hasname = [op for op in opmap.values() if _opcode.has_name(op)] | ||
| hasjrel = [op for op in opmap.values() if _opcode.has_jump(op)] | ||
| hasjabs = [] | ||
iritkatriel marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| haslocal = [op for op in opmap.values() if _opcode.has_local(op)] | ||
|
|
||
| _nb_ops = [ | ||
| ("NB_ADD", "+"), | ||
|
|
||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Uh oh!
There was an error while loading. Please reload this page.