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
120
121
122
123
124
125
126
127
128
| """Record of phased-in incompatible language changes.
|
| Each line is of the form:
|
| FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease ","
| CompilerFlag ")"
|
| where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples
| of the same form as sys.version_info:
|
| (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
| PY_MINOR_VERSION, # the 1; an int
| PY_MICRO_VERSION, # the 0; an int
| PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
| PY_RELEASE_SERIAL # the 3; an int
| )
|
| OptionalRelease records the first release in which
|
| from __future__ import FeatureName
|
| was accepted.
|
| In the case of MandatoryReleases that have not yet occurred,
| MandatoryRelease predicts the release in which the feature will become part
| of the language.
|
| Else MandatoryRelease records when the feature became part of the language;
| in releases at or after that, modules no longer need
|
| from __future__ import FeatureName
|
| to use the feature in question, but may continue to use such imports.
|
| MandatoryRelease may also be None, meaning that a planned feature got
| dropped.
|
| Instances of class _Feature have two corresponding methods,
| .getOptionalRelease() and .getMandatoryRelease().
|
| CompilerFlag is the (bitfield) flag that should be passed in the fourth
| argument to the builtin function compile() to enable the feature in
| dynamically compiled code. This flag is stored in the .compiler_flag
| attribute on _Future instances. These values must match the appropriate
| #defines of CO_xxx flags in Include/compile.h.
|
| No feature line is ever to be deleted from this file.
| """
|
| all_feature_names = [
| "nested_scopes",
| "generators",
| "division",
| "absolute_import",
| "with_statement",
| "print_function",
| "unicode_literals",
| ]
|
| __all__ = ["all_feature_names"] + all_feature_names
|
| # The CO_xxx symbols are defined here under the same names used by
| # compile.h, so that an editor search will find them here. However,
| # they're not exported in __all__, because they don't really belong to
| # this module.
| CO_NESTED = 0x0010 # nested_scopes
| CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000)
| CO_FUTURE_DIVISION = 0x2000 # division
| CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default
| CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement
| CO_FUTURE_PRINT_FUNCTION = 0x10000 # print function
| CO_FUTURE_UNICODE_LITERALS = 0x20000 # unicode string literals
|
| class _Feature:
| def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
| self.optional = optionalRelease
| self.mandatory = mandatoryRelease
| self.compiler_flag = compiler_flag
|
| def getOptionalRelease(self):
| """Return first release in which this feature was recognized.
|
| This is a 5-tuple, of the same form as sys.version_info.
| """
|
| return self.optional
|
| def getMandatoryRelease(self):
| """Return release in which this feature will become mandatory.
|
| This is a 5-tuple, of the same form as sys.version_info, or, if
| the feature was dropped, is None.
| """
|
| return self.mandatory
|
| def __repr__(self):
| return "_Feature" + repr((self.optional,
| self.mandatory,
| self.compiler_flag))
|
| nested_scopes = _Feature((2, 1, 0, "beta", 1),
| (2, 2, 0, "alpha", 0),
| CO_NESTED)
|
| generators = _Feature((2, 2, 0, "alpha", 1),
| (2, 3, 0, "final", 0),
| CO_GENERATOR_ALLOWED)
|
| division = _Feature((2, 2, 0, "alpha", 2),
| (3, 0, 0, "alpha", 0),
| CO_FUTURE_DIVISION)
|
| absolute_import = _Feature((2, 5, 0, "alpha", 1),
| (3, 0, 0, "alpha", 0),
| CO_FUTURE_ABSOLUTE_IMPORT)
|
| with_statement = _Feature((2, 5, 0, "alpha", 1),
| (2, 6, 0, "alpha", 0),
| CO_FUTURE_WITH_STATEMENT)
|
| print_function = _Feature((2, 6, 0, "alpha", 2),
| (3, 0, 0, "alpha", 0),
| CO_FUTURE_PRINT_FUNCTION)
|
| unicode_literals = _Feature((2, 6, 0, "alpha", 2),
| (3, 0, 0, "alpha", 0),
| CO_FUTURE_UNICODE_LITERALS)
|
|