| 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 | "print_function",
|
| 57 | "unicode_literals",
|
| 58 | ]
|
| 59 |
|
| 60 | __all__ = ["all_feature_names"] + all_feature_names
|
| 61 |
|
| 62 | # The CO_xxx symbols are defined here under the same names used by
|
| 63 | # compile.h, so that an editor search will find them here. However,
|
| 64 | # they're not exported in __all__, because they don't really belong to
|
| 65 | # this module.
|
| 66 | CO_NESTED = 0x0010 # nested_scopes
|
| 67 | CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000)
|
| 68 | CO_FUTURE_DIVISION = 0x2000 # division
|
| 69 | CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default
|
| 70 | CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement
|
| 71 | CO_FUTURE_PRINT_FUNCTION = 0x10000 # print function
|
| 72 | CO_FUTURE_UNICODE_LITERALS = 0x20000 # unicode string literals
|
| 73 |
|
| 74 | class _Feature:
|
| 75 | def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
|
| 76 | self.optional = optionalRelease
|
| 77 | self.mandatory = mandatoryRelease
|
| 78 | self.compiler_flag = compiler_flag
|
| 79 |
|
| 80 | def getOptionalRelease(self):
|
| 81 | """Return first release in which this feature was recognized.
|
| 82 |
|
| 83 | This is a 5-tuple, of the same form as sys.version_info.
|
| 84 | """
|
| 85 |
|
| 86 | return self.optional
|
| 87 |
|
| 88 | def getMandatoryRelease(self):
|
| 89 | """Return release in which this feature will become mandatory.
|
| 90 |
|
| 91 | This is a 5-tuple, of the same form as sys.version_info, or, if
|
| 92 | the feature was dropped, is None.
|
| 93 | """
|
| 94 |
|
| 95 | return self.mandatory
|
| 96 |
|
| 97 | def __repr__(self):
|
| 98 | return "_Feature" + repr((self.optional,
|
| 99 | self.mandatory,
|
| 100 | self.compiler_flag))
|
| 101 |
|
| 102 | nested_scopes = _Feature((2, 1, 0, "beta", 1),
|
| 103 | (2, 2, 0, "alpha", 0),
|
| 104 | CO_NESTED)
|
| 105 |
|
| 106 | generators = _Feature((2, 2, 0, "alpha", 1),
|
| 107 | (2, 3, 0, "final", 0),
|
| 108 | CO_GENERATOR_ALLOWED)
|
| 109 |
|
| 110 | division = _Feature((2, 2, 0, "alpha", 2),
|
| 111 | (3, 0, 0, "alpha", 0),
|
| 112 | CO_FUTURE_DIVISION)
|
| 113 |
|
| 114 | absolute_import = _Feature((2, 5, 0, "alpha", 1),
|
| 115 | (3, 0, 0, "alpha", 0),
|
| 116 | CO_FUTURE_ABSOLUTE_IMPORT)
|
| 117 |
|
| 118 | with_statement = _Feature((2, 5, 0, "alpha", 1),
|
| 119 | (2, 6, 0, "alpha", 0),
|
| 120 | CO_FUTURE_WITH_STATEMENT)
|
| 121 |
|
| 122 | print_function = _Feature((2, 6, 0, "alpha", 2),
|
| 123 | (3, 0, 0, "alpha", 0),
|
| 124 | CO_FUTURE_PRINT_FUNCTION)
|
| 125 |
|
| 126 | unicode_literals = _Feature((2, 6, 0, "alpha", 2),
|
| 127 | (3, 0, 0, "alpha", 0),
|
| 128 | CO_FUTURE_UNICODE_LITERALS)
|