|
1 """Record of phased-in incompatible language changes. |
|
2 |
|
3 Each line is of the form: |
|
4 |
|
5 FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," |
|
6 CompilerFlag ")" |
|
7 |
|
8 where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples |
|
9 of the same form as sys.version_info: |
|
10 |
|
11 (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int |
|
12 PY_MINOR_VERSION, # the 1; an int |
|
13 PY_MICRO_VERSION, # the 0; an int |
|
14 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string |
|
15 PY_RELEASE_SERIAL # the 3; an int |
|
16 ) |
|
17 |
|
18 OptionalRelease records the first release in which |
|
19 |
|
20 from __future__ import FeatureName |
|
21 |
|
22 was accepted. |
|
23 |
|
24 In the case of MandatoryReleases that have not yet occurred, |
|
25 MandatoryRelease predicts the release in which the feature will become part |
|
26 of the language. |
|
27 |
|
28 Else MandatoryRelease records when the feature became part of the language; |
|
29 in releases at or after that, modules no longer need |
|
30 |
|
31 from __future__ import FeatureName |
|
32 |
|
33 to use the feature in question, but may continue to use such imports. |
|
34 |
|
35 MandatoryRelease may also be None, meaning that a planned feature got |
|
36 dropped. |
|
37 |
|
38 Instances of class _Feature have two corresponding methods, |
|
39 .getOptionalRelease() and .getMandatoryRelease(). |
|
40 |
|
41 CompilerFlag is the (bitfield) flag that should be passed in the fourth |
|
42 argument to the builtin function compile() to enable the feature in |
|
43 dynamically compiled code. This flag is stored in the .compiler_flag |
|
44 attribute on _Future instances. These values must match the appropriate |
|
45 #defines of CO_xxx flags in Include/compile.h. |
|
46 |
|
47 No feature line is ever to be deleted from this file. |
|
48 """ |
|
49 |
|
50 all_feature_names = [ |
|
51 "nested_scopes", |
|
52 "generators", |
|
53 "division", |
|
54 "absolute_import", |
|
55 "with_statement", |
|
56 ] |
|
57 |
|
58 __all__ = ["all_feature_names"] + all_feature_names |
|
59 |
|
60 # The CO_xxx symbols are defined here under the same names used by |
|
61 # compile.h, so that an editor search will find them here. However, |
|
62 # they're not exported in __all__, because they don't really belong to |
|
63 # this module. |
|
64 CO_NESTED = 0x0010 # nested_scopes |
|
65 CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000) |
|
66 CO_FUTURE_DIVISION = 0x2000 # division |
|
67 CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default |
|
68 CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement |
|
69 |
|
70 class _Feature: |
|
71 def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): |
|
72 self.optional = optionalRelease |
|
73 self.mandatory = mandatoryRelease |
|
74 self.compiler_flag = compiler_flag |
|
75 |
|
76 def getOptionalRelease(self): |
|
77 """Return first release in which this feature was recognized. |
|
78 |
|
79 This is a 5-tuple, of the same form as sys.version_info. |
|
80 """ |
|
81 |
|
82 return self.optional |
|
83 |
|
84 def getMandatoryRelease(self): |
|
85 """Return release in which this feature will become mandatory. |
|
86 |
|
87 This is a 5-tuple, of the same form as sys.version_info, or, if |
|
88 the feature was dropped, is None. |
|
89 """ |
|
90 |
|
91 return self.mandatory |
|
92 |
|
93 def __repr__(self): |
|
94 return "_Feature" + repr((self.optional, |
|
95 self.mandatory, |
|
96 self.compiler_flag)) |
|
97 |
|
98 nested_scopes = _Feature((2, 1, 0, "beta", 1), |
|
99 (2, 2, 0, "alpha", 0), |
|
100 CO_NESTED) |
|
101 |
|
102 generators = _Feature((2, 2, 0, "alpha", 1), |
|
103 (2, 3, 0, "final", 0), |
|
104 CO_GENERATOR_ALLOWED) |
|
105 |
|
106 division = _Feature((2, 2, 0, "alpha", 2), |
|
107 (3, 0, 0, "alpha", 0), |
|
108 CO_FUTURE_DIVISION) |
|
109 |
|
110 absolute_import = _Feature((2, 5, 0, "alpha", 1), |
|
111 (2, 7, 0, "alpha", 0), |
|
112 CO_FUTURE_ABSOLUTE_IMPORT) |
|
113 |
|
114 with_statement = _Feature((2, 5, 0, "alpha", 1), |
|
115 (2, 6, 0, "alpha", 0), |
|
116 CO_FUTURE_WITH_STATEMENT) |