Kill off softspace completely (except in formatter.py which seems to have
a different feature with the same name).
The change to test_doctest.txt reduces the doctest failures to 3.
diff --git a/Include/ceval.h b/Include/ceval.h
index f441197..9c77a85 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -40,8 +40,6 @@
flag was set, else return 0. */
PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
-PyAPI_FUNC(int) Py_FlushLine(void);
-
PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
PyAPI_FUNC(int) Py_MakePendingCalls(void);
diff --git a/Include/fileobject.h b/Include/fileobject.h
index ebbb521..ee7c4ee 100644
--- a/Include/fileobject.h
+++ b/Include/fileobject.h
@@ -13,7 +13,6 @@
PyObject *f_name;
PyObject *f_mode;
int (*f_close)(FILE *);
- int f_softspace; /* Flag used by 'print' command */
int f_binary; /* Flag which indicates whether the file is
open in binary (1) or text (0) mode */
char* f_buf; /* Allocated readahead buffer */
@@ -41,7 +40,6 @@
PyAPI_FUNC(PyObject *) PyFile_Name(PyObject *);
PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int);
PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, PyObject *, int);
-PyAPI_FUNC(int) PyFile_SoftSpace(PyObject *, int);
PyAPI_FUNC(int) PyFile_WriteString(const char *, PyObject *);
PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *);
diff --git a/Lib/StringIO.py b/Lib/StringIO.py
index a6b0ea4..189d368 100644
--- a/Lib/StringIO.py
+++ b/Lib/StringIO.py
@@ -60,7 +60,6 @@
self.buflist = []
self.pos = 0
self.closed = False
- self.softspace = 0
def __iter__(self):
return self
diff --git a/Lib/bsddb/dbrecio.py b/Lib/bsddb/dbrecio.py
index d439f32..975a2d9 100644
--- a/Lib/bsddb/dbrecio.py
+++ b/Lib/bsddb/dbrecio.py
@@ -39,7 +39,6 @@
self.len = None
self.pos = 0
self.closed = 0
- self.softspace = 0
def close(self):
if not self.closed:
diff --git a/Lib/code.py b/Lib/code.py
index 8532a2e..7182777 100644
--- a/Lib/code.py
+++ b/Lib/code.py
@@ -12,19 +12,6 @@
__all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact",
"compile_command"]
-def softspace(file, newvalue):
- oldvalue = 0
- try:
- oldvalue = file.softspace
- except AttributeError:
- pass
- try:
- file.softspace = newvalue
- except (AttributeError, TypeError):
- # "attribute-less object" or "read-only attributes"
- pass
- return oldvalue
-
class InteractiveInterpreter:
"""Base class for InteractiveConsole.
@@ -105,9 +92,6 @@
raise
except:
self.showtraceback()
- else:
- if softspace(sys.stdout, 0):
- print()
def showsyntaxerror(self, filename=None):
"""Display the syntax error that just occurred.
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 210e845..02e200d 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -240,16 +240,10 @@
# that a trailing newline is missing.
if result and not result.endswith("\n"):
result += "\n"
- # Prevent softspace from screwing up the next test case, in
- # case they used print with a trailing comma in an example.
- if hasattr(self, "softspace"):
- del self.softspace
return result
- def truncate(self, size=None):
+ def truncate(self, size=None):
StringIO.truncate(self, size)
- if hasattr(self, "softspace"):
- del self.softspace
# Worst-case linear-time ellipsis matching.
def _ellipsis_match(want, got):
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index e8284d8..4c16db9 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -1223,7 +1223,6 @@
self.text.insert("end-1c", "\n")
self.text.mark_set("iomark", "end-1c")
self.set_line_and_column()
- sys.stdout.softspace = 0
def write(self, s, tags=()):
try:
@@ -1242,7 +1241,6 @@
def __init__(self, shell, tags, encoding=None):
self.shell = shell
self.tags = tags
- self.softspace = 0
self.encoding = encoding
def write(self, s):
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index fa201a8..8a0b926 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -190,12 +190,7 @@
tb[i] = fn, ln, nm, line
def flush_stdout():
- try:
- if sys.stdout.softspace:
- sys.stdout.softspace = 0
- sys.stdout.write("\n")
- except (AttributeError, EOFError):
- pass
+ """XXX How to do this now?"""
def exit():
"""Exit subprocess, possibly after first deleting sys.exitfunc
diff --git a/Lib/socket.py b/Lib/socket.py
index eff47d2..2222600 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -202,7 +202,7 @@
default_bufsize = 8192
name = "<socket>"
- __slots__ = ["mode", "bufsize", "softspace",
+ __slots__ = ["mode", "bufsize",
# "closed" is a property, see below
"_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf",
"_close"]
@@ -213,7 +213,6 @@
if bufsize < 0:
bufsize = self.default_bufsize
self.bufsize = bufsize
- self.softspace = False
if bufsize == 0:
self._rbufsize = 1
elif bufsize == 1:
diff --git a/Lib/test/test_doctest.txt b/Lib/test/test_doctest.txt
index f8e851e..23446d1 100644
--- a/Lib/test/test_doctest.txt
+++ b/Lib/test/test_doctest.txt
@@ -9,9 +9,9 @@
We can make this fail by disabling the blank-line feature.
>>> if 1:
- ... print 'a'
- ... print
- ... print 'b'
+ ... print('a')
+ ... print()
+ ... print('b')
a
<BLANKLINE>
b
diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py
index 91f6e76..7eb052b 100644
--- a/Lib/test/test_file.py
+++ b/Lib/test/test_file.py
@@ -30,14 +30,10 @@
def testAttributes(self):
# verify expected attributes exist
f = self.f
- softspace = f.softspace
f.name # merely shouldn't blow up
f.mode # ditto
f.closed # ditto
- # verify softspace is writable
- f.softspace = softspace # merely shouldn't blow up
-
# verify the others aren't
for attr in 'name', 'mode', 'closed':
self.assertRaises((AttributeError, TypeError), setattr, f, attr, 'oops')
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 071e521..296e259 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -61,7 +61,6 @@
self.istest(inspect.ismodule, 'mod')
self.istest(inspect.istraceback, 'tb')
self.istest(inspect.isdatadescriptor, '__builtin__.file.closed')
- self.istest(inspect.isdatadescriptor, '__builtin__.file.softspace')
if hasattr(types, 'GetSetDescriptorType'):
self.istest(inspect.isgetsetdescriptor,
'type(tb.tb_frame).f_locals')
diff --git a/Lib/test/test_softspace.py b/Lib/test/test_softspace.py
deleted file mode 100644
index c0b4e8f..0000000
--- a/Lib/test/test_softspace.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from test import test_support
-import StringIO
-
-# SF bug 480215: softspace confused in nested print
-f = StringIO.StringIO()
-class C:
- def __str__(self):
- print('a', file=f)
- return 'b'
-
-print(C(), 'c ', 'd\t', 'e', file=f)
-print('f', 'g', file=f)
-# In 2.2 & earlier, this printed ' a\nbc d\te\nf g\n'
-test_support.vereq(f.getvalue(), 'a\nb c d\te\nf g\n')
diff --git a/Modules/bz2module.c b/Modules/bz2module.c
index 3c6daa9..9b39442 100644
--- a/Modules/bz2module.c
+++ b/Modules/bz2module.c
@@ -102,8 +102,6 @@
char* f_bufend; /* Points after last occupied position */
char* f_bufptr; /* Current buffer position */
- int f_softspace; /* Flag used by 'print' command */
-
int f_univ_newline; /* Handle any newline convention */
int f_newlinetypes; /* Types of newlines seen */
int f_skipnextlf; /* Skip next \n */
@@ -813,8 +811,6 @@
goto cleanup;
}
- self->f_softspace = 0;
-
Py_BEGIN_ALLOW_THREADS
BZ2_bzWrite (&bzerror, self->fp, buf, len);
self->pos += len;
@@ -934,8 +930,6 @@
}
}
- self->f_softspace = 0;
-
/* Since we are releasing the global lock, the
following code may *not* execute Python code. */
Py_BEGIN_ALLOW_THREADS
@@ -1265,18 +1259,6 @@
/* ===================================================================== */
-/* Members of BZ2File_Type. */
-
-#undef OFF
-#define OFF(x) offsetof(BZ2FileObject, x)
-
-static PyMemberDef BZ2File_members[] = {
- {"softspace", T_INT, OFF(f_softspace), 0,
- "flag indicating that a space needs to be printed; used by print"},
- {NULL} /* Sentinel */
-};
-
-/* ===================================================================== */
/* Slot definitions for BZ2File_Type. */
static int
@@ -1501,7 +1483,7 @@
(getiterfunc)BZ2File_getiter, /*tp_iter*/
(iternextfunc)BZ2File_iternext, /*tp_iternext*/
BZ2File_methods, /*tp_methods*/
- BZ2File_members, /*tp_members*/
+ 0, /*tp_members*/
BZ2File_getset, /*tp_getset*/
0, /*tp_base*/
0, /*tp_dict*/
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 3f762b0..2ed1485 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -57,7 +57,6 @@
Py_ssize_t pos, string_size;
Py_ssize_t buf_size;
- int softspace;
} Oobject;
/* Declarations for objects of type StringI */
@@ -489,13 +488,6 @@
{NULL, NULL} /* sentinel */
};
-static PyMemberDef O_memberlist[] = {
- {"softspace", T_INT, offsetof(Oobject, softspace), 0,
- "flag indicating that a space needs to be printed; used by print"},
- /* getattr(f, "closed") is implemented without this table */
- {NULL} /* Sentinel */
-};
-
static void
O_dealloc(Oobject *self) {
if (self->buf != NULL)
@@ -536,7 +528,7 @@
PyObject_SelfIter, /*tp_iter */
(iternextfunc)IO_iternext, /*tp_iternext */
O_methods, /*tp_methods */
- O_memberlist, /*tp_members */
+ 0, /*tp_members */
file_getsetlist, /*tp_getset */
};
@@ -549,7 +541,6 @@
return NULL;
self->pos=0;
self->string_size = 0;
- self->softspace = 0;
self->buf = (char *)malloc(size);
if (!self->buf) {
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 1e3e57c..13f64fb 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -118,7 +118,6 @@
f->f_mode = PyString_FromString(mode);
f->f_close = close;
- f->f_softspace = 0;
f->f_binary = strchr(mode,'b') != NULL;
f->f_buf = NULL;
f->f_univ_newline = (strchr(mode, 'U') != NULL);
@@ -1523,7 +1522,6 @@
return err_closed();
if (!PyArg_ParseTuple(args, f->f_binary ? "s#" : "t#", &s, &n))
return NULL;
- f->f_softspace = 0;
Py_BEGIN_ALLOW_THREADS
errno = 0;
n2 = fwrite(s, 1, n, f->f_fp);
@@ -1626,7 +1624,6 @@
/* Since we are releasing the global lock, the
following code may *not* execute Python code. */
Py_BEGIN_ALLOW_THREADS
- f->f_softspace = 0;
errno = 0;
for (i = 0; i < j; i++) {
line = PyList_GET_ITEM(list, i);
@@ -1786,8 +1783,6 @@
#define OFF(x) offsetof(PyFileObject, x)
static PyMemberDef file_memberlist[] = {
- {"softspace", T_INT, OFF(f_softspace), 0,
- "flag indicating that a space needs to be printed; used by print"},
{"mode", T_OBJECT, OFF(f_mode), RO,
"file mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)"},
{"name", T_OBJECT, OFF(f_name), RO,
@@ -2094,8 +2089,7 @@
0, /* tp_call */
0, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */
- /* softspace is writable: we must supply tp_setattro */
- PyObject_GenericSetAttr, /* tp_setattro */
+ 0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
file_doc, /* tp_doc */
@@ -2119,42 +2113,6 @@
PyObject_Del, /* tp_free */
};
-/* Interface for the 'soft space' between print items. */
-
-int
-PyFile_SoftSpace(PyObject *f, int newflag)
-{
- long oldflag = 0;
- if (f == NULL) {
- /* Do nothing */
- }
- else if (PyFile_Check(f)) {
- oldflag = ((PyFileObject *)f)->f_softspace;
- ((PyFileObject *)f)->f_softspace = newflag;
- }
- else {
- PyObject *v;
- v = PyObject_GetAttrString(f, "softspace");
- if (v == NULL)
- PyErr_Clear();
- else {
- if (PyInt_CheckExact(v))
- oldflag = PyInt_AsLong(v);
- assert(oldflag < INT_MAX);
- Py_DECREF(v);
- }
- v = PyInt_FromLong((long)newflag);
- if (v == NULL)
- PyErr_Clear();
- else {
- if (PyObject_SetAttrString(f, "softspace", v) != 0)
- PyErr_Clear();
- Py_DECREF(v);
- }
- }
- return (int)oldflag;
-}
-
/* Interfaces to write objects/strings to file-like objects */
int
diff --git a/Python/ceval.c b/Python/ceval.c
index 7511bb6..0194687 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3349,17 +3349,6 @@
return result;
}
-int
-Py_FlushLine(void)
-{
- PyObject *f = PySys_GetObject("stdout");
- if (f == NULL)
- return 0;
- if (!PyFile_SoftSpace(f, 0))
- return 0;
- return PyFile_WriteString("\n", f);
-}
-
/* External interface to call any callable object.
The arg must be a tuple or NULL. */
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 3aa1295..ec1bc42 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -795,8 +795,6 @@
return -1;
}
Py_DECREF(v);
- if (Py_FlushLine())
- PyErr_Clear();
return 0;
}
@@ -883,8 +881,6 @@
return -1;
}
Py_DECREF(v);
- if (Py_FlushLine())
- PyErr_Clear();
return 0;
}
@@ -902,8 +898,6 @@
return -1;
}
Py_DECREF(v);
- if (Py_FlushLine())
- PyErr_Clear();
return 0;
}
@@ -1018,8 +1012,6 @@
int exitcode = 0;
PyErr_Fetch(&exception, &value, &tb);
- if (Py_FlushLine())
- PyErr_Clear();
fflush(stdout);
if (value == NULL || value == Py_None)
goto done;
@@ -1097,8 +1089,6 @@
v2 = Py_None;
Py_INCREF(v2);
}
- if (Py_FlushLine())
- PyErr_Clear();
fflush(stdout);
PySys_WriteStderr("Error in sys.excepthook:\n");
PyErr_Display(exception2, v2, tb2);
@@ -1128,8 +1118,6 @@
if (f == NULL)
fprintf(stderr, "lost sys.stderr\n");
else {
- if (Py_FlushLine())
- PyErr_Clear();
fflush(stdout);
if (tb && tb != Py_None)
err = PyTraceBack_Print(tb, f);
@@ -1597,8 +1585,6 @@
Py_DECREF(exitfunc);
}
- if (Py_FlushLine())
- PyErr_Clear();
}
static void
@@ -1855,4 +1841,3 @@
#ifdef __cplusplus
}
#endif
-
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 3f2d5b7..c7d85933 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -104,8 +104,6 @@
}
if (PyObject_SetAttrString(builtins, "_", Py_None) != 0)
return NULL;
- if (Py_FlushLine() != 0)
- return NULL;
outf = PySys_GetObject("stdout");
if (outf == NULL) {
PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
@@ -113,8 +111,7 @@
}
if (PyFile_WriteObject(o, outf, 0) != 0)
return NULL;
- PyFile_SoftSpace(outf, 1);
- if (Py_FlushLine() != 0)
+ if (PyFile_WriteString("\n", outf) != 0)
return NULL;
if (PyObject_SetAttrString(builtins, "_", o) != 0)
return NULL;