mirror of
https://github.com/python/cpython.git
synced 2025-10-10 00:43:41 +00:00
Add __future__ import for print_function. It's a no-op in 3.0, but it needs to not be a syntax error.
Closes issue 2436.
This commit is contained in:
parent
2eb2c7c384
commit
87824086fa
5 changed files with 17 additions and 0 deletions
|
@ -48,6 +48,7 @@ typedef struct {
|
||||||
#define CO_FUTURE_DIVISION 0x2000
|
#define CO_FUTURE_DIVISION 0x2000
|
||||||
#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
|
#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
|
||||||
#define CO_FUTURE_WITH_STATEMENT 0x8000
|
#define CO_FUTURE_WITH_STATEMENT 0x8000
|
||||||
|
#define CO_FUTURE_PRINT_FUNCTION 0x10000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This should be defined if a future statement modifies the syntax.
|
/* This should be defined if a future statement modifies the syntax.
|
||||||
|
|
|
@ -24,6 +24,7 @@ typedef struct {
|
||||||
#define FUTURE_DIVISION "division"
|
#define FUTURE_DIVISION "division"
|
||||||
#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
|
#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
|
||||||
#define FUTURE_WITH_STATEMENT "with_statement"
|
#define FUTURE_WITH_STATEMENT "with_statement"
|
||||||
|
#define FUTURE_PRINT_FUNCTION "print_function"
|
||||||
|
|
||||||
struct _mod; /* Declare the existence of this type */
|
struct _mod; /* Declare the existence of this type */
|
||||||
PyAPI_FUNC(PyCodeObject *) PyAST_Compile(struct _mod *, const char *,
|
PyAPI_FUNC(PyCodeObject *) PyAST_Compile(struct _mod *, const char *,
|
||||||
|
|
|
@ -53,6 +53,7 @@ all_feature_names = [
|
||||||
"division",
|
"division",
|
||||||
"absolute_import",
|
"absolute_import",
|
||||||
"with_statement",
|
"with_statement",
|
||||||
|
"print_function",
|
||||||
]
|
]
|
||||||
|
|
||||||
__all__ = ["all_feature_names"] + all_feature_names
|
__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_DIVISION = 0x2000 # division
|
||||||
CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default
|
CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default
|
||||||
CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement
|
CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement
|
||||||
|
CO_FUTURE_PRINT_FUNCTION = 0x10000 # print function
|
||||||
|
|
||||||
class _Feature:
|
class _Feature:
|
||||||
def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
|
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),
|
with_statement = _Feature((2, 5, 0, "alpha", 1),
|
||||||
(2, 6, 0, "alpha", 0),
|
(2, 6, 0, "alpha", 0),
|
||||||
CO_FUTURE_WITH_STATEMENT)
|
CO_FUTURE_WITH_STATEMENT)
|
||||||
|
|
||||||
|
print_function = _Feature((2, 6, 0, "alpha", 2),
|
||||||
|
(3, 0, 0, "alpha", 0),
|
||||||
|
CO_FUTURE_PRINT_FUNCTION)
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
"""Test correct operation of the print function.
|
"""Test correct operation of the print function.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from test import test_support
|
from test import test_support
|
||||||
|
|
||||||
|
@ -98,6 +100,11 @@ class TestPrint(unittest.TestCase):
|
||||||
x('*\n', (ClassWith__str__('*'),))
|
x('*\n', (ClassWith__str__('*'),))
|
||||||
x('abc 1\n', (ClassWith__str__('abc'), 1))
|
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
|
# errors
|
||||||
self.assertRaises(TypeError, print, '', sep=3)
|
self.assertRaises(TypeError, print, '', sep=3)
|
||||||
self.assertRaises(TypeError, print, '', end=3)
|
self.assertRaises(TypeError, print, '', end=3)
|
||||||
|
|
|
@ -33,6 +33,8 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename)
|
||||||
continue;
|
continue;
|
||||||
} else if (strcmp(feature, FUTURE_WITH_STATEMENT) == 0) {
|
} else if (strcmp(feature, FUTURE_WITH_STATEMENT) == 0) {
|
||||||
continue;
|
continue;
|
||||||
|
} else if (strcmp(feature, FUTURE_PRINT_FUNCTION) == 0) {
|
||||||
|
continue;
|
||||||
} else if (strcmp(feature, "braces") == 0) {
|
} else if (strcmp(feature, "braces") == 0) {
|
||||||
PyErr_SetString(PyExc_SyntaxError,
|
PyErr_SetString(PyExc_SyntaxError,
|
||||||
"not a chance");
|
"not a chance");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue