-
-
Notifications
You must be signed in to change notification settings - Fork 32.1k
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
…e.py with the functions in _opcode.py
- Loading branch information
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.
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 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is that separate from Larry's limerick at the top? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's the same thing. I'm planning to try and get rid of this issue - figure out what is needed in the build and separate it out somehow. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bot we've gotta keep a limerick in. :-) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is it in the stable ABI? |
||
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.