FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Tools/scripts/generate_opcode_h.py at pythoncore_fix · ammaraskar/cpython · GitHub
ammaraskar
cpython
Repository navigation
Code
Pull requests
6
(6)
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Tools
/
scripts
/
generate_opcode_h.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
58 lines (46 loc) · 1.52 KB
Breadcrumbs
cpython
/
Tools
/
scripts
/
generate_opcode_h.py
Copy path
File metadata and controls
58 lines (46 loc) · 1.52 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# This script generates the opcode.h header file.
import
sys
import
tokenize
header
=
"""
/* Auto-generated by Tools/scripts/generate_opcode_h.py from Lib/opcode.py */
#ifndef Py_OPCODE_H
#define Py_OPCODE_H
#ifdef __cplusplus
extern "C" {
#endif
/* Instruction opcodes for compiled code */
"""
.
lstrip
()
footer
=
"""
/* EXCEPT_HANDLER is a special, implicit block type which is created when
entering an except handler. It is not an opcode but we define it here
as we want it to be available to both frameobject.c and ceval.c, while
remaining private.*/
#define EXCEPT_HANDLER 257
#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
#ifdef __cplusplus
}
#endif
#endif /* !Py_OPCODE_H */
"""
def
main
(
opcode_py
,
outfile
=
'Include/opcode.h'
):
opcode
=
{}
if
hasattr
(
tokenize
,
'open'
):
fp
=
tokenize
.
open
(
opcode_py
)
# Python 3.2+
else
:
fp
=
open
(
opcode_py
)
# Python 2.7
with
fp
:
code
=
fp
.
read
()
exec
(
code
,
opcode
)
opmap
=
opcode
[
'opmap'
]
with
open
(
outfile
,
'w'
)
as
fobj
:
fobj
.
write
(
header
)
for
name
in
opcode
[
'opname'
]:
if
name
in
opmap
:
fobj
.
write
(
"#define %-23s %3s
\n
"
%
(
name
,
opmap
[
name
]))
if
name
==
'POP_EXCEPT'
:
# Special entry for HAVE_ARGUMENT
fobj
.
write
(
"#define %-23s %3d
\n
"
%
(
'HAVE_ARGUMENT'
,
opcode
[
'HAVE_ARGUMENT'
]))
fobj
.
write
(
footer
)
print
(
"%s regenerated from %s"
%
(
outfile
,
opcode_py
))
if
__name__
==
'__main__'
:
main
(
sys
.
argv
[
1
],
sys
.
argv
[
2
])
Back
|
FazBrowse Home
|
New Git URL