mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""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",
 | 
						|
    "barry_as_FLUFL",
 | 
						|
]
 | 
						|
 | 
						|
__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
 | 
						|
CO_FUTURE_BARRY_AS_BDFL = 0x40000
 | 
						|
 | 
						|
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),
 | 
						|
                           (2, 7, 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)
 | 
						|
 | 
						|
barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2),
 | 
						|
                         (3, 9, 0, "alpha", 0),
 | 
						|
                         CO_FUTURE_BARRY_AS_BDFL)
 |