summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Smith <eric@trueblade.com>2008-03-20 23:02:08 (GMT)
committerEric Smith <eric@trueblade.com>2008-03-20 23:02:08 (GMT)
commit87824086fa20e3f7bbb39dc8ee9d3ce70487dd98 (patch)
tree6c61ebeee2100ff264c4fd81f627fb984240d76e
parent2eb2c7c3848fdc16a2c6bad6660411d0cf1c5208 (diff)
downloadcpython-87824086fa20e3f7bbb39dc8ee9d3ce70487dd98.zip
cpython-87824086fa20e3f7bbb39dc8ee9d3ce70487dd98.tar.gz
cpython-87824086fa20e3f7bbb39dc8ee9d3ce70487dd98.tar.bz2
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.
-rw-r--r--Include/code.h1
-rw-r--r--Include/compile.h1
-rw-r--r--Lib/__future__.py6
-rw-r--r--Lib/test/test_print.py7
-rw-r--r--Python/future.c2
5 files changed, 17 insertions, 0 deletions
diff --git a/Include/code.h b/Include/code.h
index 56d6cb5..e576bbb 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 2bde6fb..391c710 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 d8e14d1..ea14bf3 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 10ef60a..4d347ed 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 80a3006..d6333ff 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");