Ka-Ping Yee | 3bda4f0 | 2001-03-15 10:45:44 +0000 | [diff] [blame] | 1 | """Record of phased-in incompatible language changes. |
Tim Peters | ffc215a | 2001-02-26 21:14:49 +0000 | [diff] [blame] | 2 | |
| 3 | Each line is of the form: |
| 4 | |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 5 | FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," |
| 6 | CompilerFlag ")" |
Tim Peters | ffc215a | 2001-02-26 21:14:49 +0000 | [diff] [blame] | 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 | |
Tim Peters | 85ba673 | 2001-02-28 08:26:44 +0000 | [diff] [blame] | 24 | In the case of MandatoryReleases that have not yet occurred, |
| 25 | MandatoryRelease predicts the release in which the feature will become part |
Tim Peters | ffc215a | 2001-02-26 21:14:49 +0000 | [diff] [blame] | 26 | of the language. |
| 27 | |
Tim Peters | 85ba673 | 2001-02-28 08:26:44 +0000 | [diff] [blame] | 28 | Else MandatoryRelease records when the feature became part of the language; |
Tim Peters | ffc215a | 2001-02-26 21:14:49 +0000 | [diff] [blame] | 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 | |
Tim Peters | 85ba673 | 2001-02-28 08:26:44 +0000 | [diff] [blame] | 35 | MandatoryRelease may also be None, meaning that a planned feature got |
Tim Peters | ffc215a | 2001-02-26 21:14:49 +0000 | [diff] [blame] | 36 | dropped. |
| 37 | |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 38 | Instances of class _Feature have two corresponding methods, |
| 39 | .getOptionalRelease() and .getMandatoryRelease(). |
| 40 | |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 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 | |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 47 | No feature line is ever to be deleted from this file. |
Tim Peters | ffc215a | 2001-02-26 21:14:49 +0000 | [diff] [blame] | 48 | """ |
| 49 | |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 50 | all_feature_names = [ |
| 51 | "nested_scopes", |
| 52 | "generators", |
| 53 | "division", |
Thomas Wouters | f7f438b | 2006-02-28 16:09:29 +0000 | [diff] [blame] | 54 | "absolute_import", |
Thomas Wouters | 34aa7ba | 2006-02-28 19:02:24 +0000 | [diff] [blame] | 55 | "with_statement", |
Eric Smith | 8782408 | 2008-03-20 23:02:08 +0000 | [diff] [blame] | 56 | "print_function", |
Christian Heimes | 4d6ec85 | 2008-03-26 22:34:47 +0000 | [diff] [blame] | 57 | "unicode_literals", |
Benjamin Peterson | 91d7dfd | 2009-04-01 20:38:13 +0000 | [diff] [blame] | 58 | "barry_as_FLUFL", |
Yury Selivanov | 8170e8c | 2015-05-09 11:44:30 -0400 | [diff] [blame] | 59 | "generator_stop", |
Guido van Rossum | 95e4d58 | 2018-01-26 08:20:18 -0800 | [diff] [blame] | 60 | "annotations", |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 61 | ] |
| 62 | |
| 63 | __all__ = ["all_feature_names"] + all_feature_names |
| 64 | |
Guido van Rossum | 95e4d58 | 2018-01-26 08:20:18 -0800 | [diff] [blame] | 65 | # The CO_xxx symbols are defined here under the same names defined in |
| 66 | # code.h and used by compile.h, so that an editor search will find them here. |
| 67 | # However, they're not exported in __all__, because they don't really belong to |
Tim Peters | 8967507 | 2001-08-24 06:29:12 +0000 | [diff] [blame] | 68 | # this module. |
YoSTEALTH | 0028c14 | 2020-07-25 15:42:49 -0600 | [diff] [blame] | 69 | CO_NESTED = 0x0010 # nested_scopes |
| 70 | CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000) |
| 71 | CO_FUTURE_DIVISION = 0x20000 # division |
| 72 | CO_FUTURE_ABSOLUTE_IMPORT = 0x40000 # perform absolute imports by default |
| 73 | CO_FUTURE_WITH_STATEMENT = 0x80000 # with statement |
| 74 | CO_FUTURE_PRINT_FUNCTION = 0x100000 # print function |
| 75 | CO_FUTURE_UNICODE_LITERALS = 0x200000 # unicode string literals |
Batuhan Taşkaya | 4454057 | 2020-04-22 19:09:03 +0300 | [diff] [blame] | 76 | CO_FUTURE_BARRY_AS_BDFL = 0x400000 |
YoSTEALTH | 0028c14 | 2020-07-25 15:42:49 -0600 | [diff] [blame] | 77 | CO_FUTURE_GENERATOR_STOP = 0x800000 # StopIteration becomes RuntimeError in generators |
| 78 | CO_FUTURE_ANNOTATIONS = 0x1000000 # annotations become strings at runtime |
| 79 | |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 80 | |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 81 | class _Feature: |
YoSTEALTH | 0028c14 | 2020-07-25 15:42:49 -0600 | [diff] [blame] | 82 | |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 83 | def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 84 | self.optional = optionalRelease |
| 85 | self.mandatory = mandatoryRelease |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 86 | self.compiler_flag = compiler_flag |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 87 | |
| 88 | def getOptionalRelease(self): |
| 89 | """Return first release in which this feature was recognized. |
| 90 | |
| 91 | This is a 5-tuple, of the same form as sys.version_info. |
| 92 | """ |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 93 | return self.optional |
| 94 | |
| 95 | def getMandatoryRelease(self): |
| 96 | """Return release in which this feature will become mandatory. |
| 97 | |
| 98 | This is a 5-tuple, of the same form as sys.version_info, or, if |
| 99 | the feature was dropped, is None. |
| 100 | """ |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 101 | return self.mandatory |
| 102 | |
| 103 | def __repr__(self): |
Tim Peters | 16c018d | 2001-08-24 17:13:54 +0000 | [diff] [blame] | 104 | return "_Feature" + repr((self.optional, |
| 105 | self.mandatory, |
| 106 | self.compiler_flag)) |
Tim Peters | d74bc43 | 2001-03-02 02:53:08 +0000 | [diff] [blame] | 107 | |
YoSTEALTH | 0028c14 | 2020-07-25 15:42:49 -0600 | [diff] [blame] | 108 | |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 109 | nested_scopes = _Feature((2, 1, 0, "beta", 1), |
| 110 | (2, 2, 0, "alpha", 0), |
Tim Peters | 8967507 | 2001-08-24 06:29:12 +0000 | [diff] [blame] | 111 | CO_NESTED) |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 112 | |
| 113 | generators = _Feature((2, 2, 0, "alpha", 1), |
| 114 | (2, 3, 0, "final", 0), |
Tim Peters | 8967507 | 2001-08-24 06:29:12 +0000 | [diff] [blame] | 115 | CO_GENERATOR_ALLOWED) |
Tim Peters | de642bd | 2001-08-17 19:49:02 +0000 | [diff] [blame] | 116 | |
| 117 | division = _Feature((2, 2, 0, "alpha", 2), |
| 118 | (3, 0, 0, "alpha", 0), |
Tim Peters | 8967507 | 2001-08-24 06:29:12 +0000 | [diff] [blame] | 119 | CO_FUTURE_DIVISION) |
Thomas Wouters | f7f438b | 2006-02-28 16:09:29 +0000 | [diff] [blame] | 120 | |
| 121 | absolute_import = _Feature((2, 5, 0, "alpha", 1), |
Petri Lehtinen | 079bfc9 | 2012-05-19 18:34:06 +0300 | [diff] [blame] | 122 | (3, 0, 0, "alpha", 0), |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 123 | CO_FUTURE_ABSOLUTE_IMPORT) |
Thomas Wouters | 34aa7ba | 2006-02-28 19:02:24 +0000 | [diff] [blame] | 124 | |
Neal Norwitz | 9193491 | 2006-02-28 20:02:42 +0000 | [diff] [blame] | 125 | with_statement = _Feature((2, 5, 0, "alpha", 1), |
Thomas Wouters | 34aa7ba | 2006-02-28 19:02:24 +0000 | [diff] [blame] | 126 | (2, 6, 0, "alpha", 0), |
| 127 | CO_FUTURE_WITH_STATEMENT) |
Eric Smith | 8782408 | 2008-03-20 23:02:08 +0000 | [diff] [blame] | 128 | |
| 129 | print_function = _Feature((2, 6, 0, "alpha", 2), |
| 130 | (3, 0, 0, "alpha", 0), |
| 131 | CO_FUTURE_PRINT_FUNCTION) |
Christian Heimes | 4d6ec85 | 2008-03-26 22:34:47 +0000 | [diff] [blame] | 132 | |
| 133 | unicode_literals = _Feature((2, 6, 0, "alpha", 2), |
| 134 | (3, 0, 0, "alpha", 0), |
| 135 | CO_FUTURE_UNICODE_LITERALS) |
Brett Cannon | e3944a5 | 2009-04-01 05:08:41 +0000 | [diff] [blame] | 136 | |
| 137 | barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2), |
Chris Rands | 55cc345 | 2018-12-19 17:19:39 +0100 | [diff] [blame] | 138 | (4, 0, 0, "alpha", 0), |
Guido van Rossum | 95e4d58 | 2018-01-26 08:20:18 -0800 | [diff] [blame] | 139 | CO_FUTURE_BARRY_AS_BDFL) |
Yury Selivanov | 8170e8c | 2015-05-09 11:44:30 -0400 | [diff] [blame] | 140 | |
| 141 | generator_stop = _Feature((3, 5, 0, "beta", 1), |
Guido van Rossum | 95e4d58 | 2018-01-26 08:20:18 -0800 | [diff] [blame] | 142 | (3, 7, 0, "alpha", 0), |
| 143 | CO_FUTURE_GENERATOR_STOP) |
| 144 | |
| 145 | annotations = _Feature((3, 7, 0, "beta", 1), |
YoSTEALTH | 0028c14 | 2020-07-25 15:42:49 -0600 | [diff] [blame] | 146 | (3, 10, 0, "alpha", 0), |
Guido van Rossum | 95e4d58 | 2018-01-26 08:20:18 -0800 | [diff] [blame] | 147 | CO_FUTURE_ANNOTATIONS) |