FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Python/future.c at main · python/cpython · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
python
/
cpython
Public
Uh oh!
There was an error while loading.
Please reload this page
.
Notifications
You must be signed in to change notification settings
Fork
35.3k
Star
74.9k
Code
Issues
5k+
Pull requests
2.5k
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Python
/
future.c
Copy path
More file actions
More file actions
Latest commit
History
History
History
119 lines (106 loc) · 3.9 KB
Breadcrumbs
cpython
/
Python
/
future.c
Copy path
File metadata and controls
119 lines (106 loc) · 3.9 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include
"Python.h"
#include
"pycore_ast.h"
// _PyAST_GetDocString()
#include
"pycore_symtable.h"
// _PyFutureFeatures
#include
"pycore_unicodeobject.h"
// _PyUnicode_EqualToASCIIString()
#define
UNDEFINED_FUTURE_FEATURE
"future feature %.100s is not defined"
static
int
future_check_features
(
_PyFutureFeatures
*
ff
,
stmt_ty
s
,
PyObject
*
filename
)
{
Py_ssize_t
i
;
assert
(
s
->
kind
==
ImportFrom_kind
);
asdl_alias_seq
*
names
=
s
->
v
.
ImportFrom
.
names
;
for
(
i
=
0
;
i
<
asdl_seq_LEN
(
names
);
i
++
) {
alias_ty
name
=
(
alias_ty
)
asdl_seq_GET
(
names
,
i
);
const
char
*
feature
=
PyUnicode_AsUTF8
(
name
->
name
);
if
(!
feature
)
return
0
;
if
(
strcmp
(
feature
,
FUTURE_NESTED_SCOPES
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_GENERATORS
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_DIVISION
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_ABSOLUTE_IMPORT
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_WITH_STATEMENT
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_PRINT_FUNCTION
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_UNICODE_LITERALS
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_BARRY_AS_BDFL
)
==
0
) {
ff
->
ff_features
|=
CO_FUTURE_BARRY_AS_BDFL
;
}
else
if
(
strcmp
(
feature
,
FUTURE_GENERATOR_STOP
)
==
0
) {
continue
;
}
else
if
(
strcmp
(
feature
,
FUTURE_ANNOTATIONS
)
==
0
) {
ff
->
ff_features
|=
CO_FUTURE_ANNOTATIONS
;
}
else
if
(
strcmp
(
feature
,
"braces"
)
==
0
) {
PyErr_SetString
(
PyExc_SyntaxError
,
"not a chance"
);
PyErr_RangedSyntaxLocationObject
(
filename
,
name
->
lineno
,
name
->
col_offset
+
1
,
name
->
end_lineno
,
name
->
end_col_offset
+
1
);
return
0
;
}
else
{
PyErr_Format
(
PyExc_SyntaxError
,
UNDEFINED_FUTURE_FEATURE
,
feature
);
PyErr_RangedSyntaxLocationObject
(
filename
,
name
->
lineno
,
name
->
col_offset
+
1
,
name
->
end_lineno
,
name
->
end_col_offset
+
1
);
return
0
;
}
}
return
1
;
}
static
int
future_parse
(
_PyFutureFeatures
*
ff
,
mod_ty
mod
,
PyObject
*
filename
)
{
if
(!(
mod
->
kind
==
Module_kind
||
mod
->
kind
==
Interactive_kind
)) {
return
1
;
}
Py_ssize_t
n
=
asdl_seq_LEN
(
mod
->
v
.
Module
.
body
);
if
(
n
==
0
) {
return
1
;
}
Py_ssize_t
i
=
0
;
if
(
_PyAST_GetDocString
(
mod
->
v
.
Module
.
body
)
!=
NULL
) {
i
++
;
}
for
(;
i
<
n
;
i
++
) {
stmt_ty
s
=
(
stmt_ty
)
asdl_seq_GET
(
mod
->
v
.
Module
.
body
,
i
);
/* The only things that can precede a future statement
* are another future statement and a doc string.
*/
if
(
s
->
kind
==
ImportFrom_kind
&&
s
->
v
.
ImportFrom
.
level
==
0
) {
identifier
modname
=
s
->
v
.
ImportFrom
.
module
;
if
(
modname
&&
_PyUnicode_EqualToASCIIString
(
modname
,
"__future__"
)) {
if
(!
future_check_features
(
ff
,
s
,
filename
)) {
return
0
;
}
ff
->
ff_location
=
SRC_LOCATION_FROM_AST
(
s
);
}
else
{
return
1
;
}
}
else
{
return
1
;
}
}
return
1
;
}
int
_PyFuture_FromAST
(
mod_ty
mod
,
PyObject
*
filename
,
_PyFutureFeatures
*
ff
)
{
ff
->
ff_features
=
0
;
ff
->
ff_location
=
(
_Py_SourceLocation
){
-1
,
-1
,
-1
,
-1
};
if
(!
future_parse
(
ff
,
mod
,
filename
)) {
return
0
;
}
return
1
;
}
Back
|
FazBrowse Home
|
New Git URL