diff --git a/Include/code.h b/Include/code.h index 56d6cb50eec..e576bbb14f3 100644 --- a/Include/code.h +++ b/Include/code.h @@ -48,6 +48,7 @@ typedef struct { #define CO_FUTURE_DIVISION 0x2000 #define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */ #define CO_FUTURE_WITH_STATEMENT 0x8000 +#define CO_FUTURE_PRINT_FUNCTION 0x10000 #endif /* This should be defined if a future statement modifies the syntax. diff --git a/Include/compile.h b/Include/compile.h index 2bde6fb56f6..391c7104fbf 100644 --- a/Include/compile.h +++ b/Include/compile.h @@ -24,6 +24,7 @@ typedef struct { #define FUTURE_DIVISION "division" #define FUTURE_ABSOLUTE_IMPORT "absolute_import" #define FUTURE_WITH_STATEMENT "with_statement" +#define FUTURE_PRINT_FUNCTION "print_function" struct _mod; /* Declare the existence of this type */ PyAPI_FUNC(PyCodeObject *) PyAST_Compile(struct _mod *, const char *, diff --git a/Lib/__future__.py b/Lib/__future__.py index d8e14d15731..ea14bf39ab1 100644 --- a/Lib/__future__.py +++ b/Lib/__future__.py @@ -53,6 +53,7 @@ all_feature_names = [ "division", "absolute_import", "with_statement", + "print_function", ] __all__ = ["all_feature_names"] + all_feature_names @@ -66,6 +67,7 @@ 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 class _Feature: def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): @@ -114,3 +116,7 @@ absolute_import = _Feature((2, 5, 0, "alpha", 1), 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) diff --git a/Lib/test/test_print.py b/Lib/test/test_print.py index 10ef60a7efe..4d347ed0fca 100644 --- a/Lib/test/test_print.py +++ b/Lib/test/test_print.py @@ -1,6 +1,8 @@ """Test correct operation of the print function. """ +from __future__ import print_function + import unittest from test import test_support @@ -98,6 +100,11 @@ class TestPrint(unittest.TestCase): x('*\n', (ClassWith__str__('*'),)) x('abc 1\n', (ClassWith__str__('abc'), 1)) +# # 2.x unicode tests +# x(u'1 2\n', ('1', u'2')) +# x(u'u\1234\n', (u'u\1234',)) +# x(u' abc 1\n', (' ', ClassWith__str__(u'abc'), 1)) + # errors self.assertRaises(TypeError, print, '', sep=3) self.assertRaises(TypeError, print, '', end=3) diff --git a/Python/future.c b/Python/future.c index 80a3006a3d8..d6333ff63e6 100644 --- a/Python/future.c +++ b/Python/future.c @@ -33,6 +33,8 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) continue; } else if (strcmp(feature, FUTURE_WITH_STATEMENT) == 0) { continue; + } else if (strcmp(feature, FUTURE_PRINT_FUNCTION) == 0) { + continue; } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance");