FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python/Include/symtable.h at master · broncodans/python · GitHub
broncodans
/
python
Public
forked from
glix/python
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
python
/
Include
/
symtable.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
103 lines (85 loc) · 3.83 KB
Breadcrumbs
python
/
Include
/
symtable.h
Copy path
File metadata and controls
103 lines (85 loc) · 3.83 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#ifndef
Py_SYMTABLE_H
#define
Py_SYMTABLE_H
#ifdef
__cplusplus
extern
"C"
{
#endif
typedef
enum
_block_type
{
FunctionBlock
,
ClassBlock
,
ModuleBlock
}
_Py_block_ty
;
struct
_symtable_entry
;
struct
symtable
{
const
char
*
st_filename
;
/* name of file being compiled */
struct
_symtable_entry
*
st_cur
;
/* current symbol table entry */
struct
_symtable_entry
*
st_top
;
/* module entry */
PyObject
*
st_symbols
;
/* dictionary of symbol table entries */
PyObject
*
st_stack
;
/* stack of namespace info */
PyObject
*
st_global
;
/* borrowed ref to MODULE in st_symbols */
int
st_nblocks
;
/* number of blocks */
PyObject
*
st_private
;
/* name of current class or NULL */
int
st_tmpname
;
/* temporary name counter */
PyFutureFeatures
*
st_future
;
/* module's future features */
};
typedef
struct
_symtable_entry
{
PyObject_HEAD
PyObject
*
ste_id
;
/* int: key in st_symbols */
PyObject
*
ste_symbols
;
/* dict: name to flags */
PyObject
*
ste_name
;
/* string: name of block */
PyObject
*
ste_varnames
;
/* list of variable names */
PyObject
*
ste_children
;
/* list of child ids */
_Py_block_ty
ste_type
;
/* module, class, or function */
int
ste_unoptimized
;
/* false if namespace is optimized */
int
ste_nested
;
/* true if block is nested */
unsigned
ste_free
:
1
;
/* true if block has free variables */
unsigned
ste_child_free
:
1
;
/* true if a child block has free vars,
including free refs to globals */
unsigned
ste_generator
:
1
;
/* true if namespace is a generator */
unsigned
ste_varargs
:
1
;
/* true if block has varargs */
unsigned
ste_varkeywords
:
1
;
/* true if block has varkeywords */
unsigned
ste_returns_value
:
1
;
/* true if namespace uses return with
an argument */
int
ste_lineno
;
/* first line of block */
int
ste_opt_lineno
;
/* lineno of last exec or import * */
int
ste_tmpname
;
/* counter for listcomp temp vars */
struct
symtable
*
ste_table
;
}
PySTEntryObject
;
PyAPI_DATA
(
PyTypeObject
)
PySTEntry_Type
;
#define
PySTEntry_Check
(
op
) (Py_TYPE(op) == &PySTEntry_Type)
PyAPI_FUNC
(
int
)
PyST_GetScope
(
PySTEntryObject
*
,
PyObject
*
);
PyAPI_FUNC
(
struct
symtable
*
)
PySymtable_Build
(
mod_ty
,
const
char
*
,
PyFutureFeatures
*
);
PyAPI_FUNC
(
PySTEntryObject
*
)
PySymtable_Lookup
(
struct
symtable
*
,
void
*
);
PyAPI_FUNC
(
void
)
PySymtable_Free
(
struct
symtable
*
);
/* Flags for def-use information */
#define
DEF_GLOBAL
1
/* global stmt */
#define
DEF_LOCAL
2
/* assignment in code block */
#define
DEF_PARAM
2<<1
/* formal parameter */
#define
USE
2<<2
/* name is used */
#define
DEF_STAR
2<<3
/* parameter is star arg */
#define
DEF_DOUBLESTAR
2<<4
/* parameter is star-star arg */
#define
DEF_INTUPLE
2<<5
/* name defined in tuple in parameters */
#define
DEF_FREE
2<<6
/* name used but not defined in nested block */
#define
DEF_FREE_GLOBAL
2<<7
/* free variable is actually implicit global */
#define
DEF_FREE_CLASS
2<<8
/* free variable from class's method */
#define
DEF_IMPORT
2<<9
/* assignment occurred via import */
#define
DEF_BOUND
(DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
/* GLOBAL_EXPLICIT and GLOBAL_IMPLICIT are used internally by the symbol
table. GLOBAL is returned from PyST_GetScope() for either of them.
It is stored in ste_symbols at bits 12-14.
*/
#define
SCOPE_OFF
11
#define
SCOPE_MASK
7
#define
LOCAL
1
#define
GLOBAL_EXPLICIT
2
#define
GLOBAL_IMPLICIT
3
#define
FREE
4
#define
CELL
5
/* The following three names are used for the ste_unoptimized bit field */
#define
OPT_IMPORT_STAR
1
#define
OPT_EXEC
2
#define
OPT_BARE_EXEC
4
#define
OPT_TOPLEVEL
8
/* top-level names, including eval and exec */
#define
GENERATOR
1
#define
GENERATOR_EXPRESSION
2
#ifdef
__cplusplus
}
#endif
#endif
/* !Py_SYMTABLE_H */
Back
|
FazBrowse Home
|
New Git URL