mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
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.
This commit is contained in:
parent
bdc36e4d9e
commit
79139b247b
19 changed files with 10 additions and 163 deletions
|
|
@ -40,8 +40,6 @@ PyAPI_FUNC(int) PyEval_GetRestricted(void);
|
||||||
flag was set, else return 0. */
|
flag was set, else return 0. */
|
||||||
PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
|
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_AddPendingCall(int (*func)(void *), void *arg);
|
||||||
PyAPI_FUNC(int) Py_MakePendingCalls(void);
|
PyAPI_FUNC(int) Py_MakePendingCalls(void);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ typedef struct {
|
||||||
PyObject *f_name;
|
PyObject *f_name;
|
||||||
PyObject *f_mode;
|
PyObject *f_mode;
|
||||||
int (*f_close)(FILE *);
|
int (*f_close)(FILE *);
|
||||||
int f_softspace; /* Flag used by 'print' command */
|
|
||||||
int f_binary; /* Flag which indicates whether the file is
|
int f_binary; /* Flag which indicates whether the file is
|
||||||
open in binary (1) or text (0) mode */
|
open in binary (1) or text (0) mode */
|
||||||
char* f_buf; /* Allocated readahead buffer */
|
char* f_buf; /* Allocated readahead buffer */
|
||||||
|
|
@ -41,7 +40,6 @@ PyAPI_FUNC(FILE *) PyFile_AsFile(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyFile_Name(PyObject *);
|
PyAPI_FUNC(PyObject *) PyFile_Name(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int);
|
PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int);
|
||||||
PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, 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) PyFile_WriteString(const char *, PyObject *);
|
||||||
PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *);
|
PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,6 @@ class StringIO:
|
||||||
self.buflist = []
|
self.buflist = []
|
||||||
self.pos = 0
|
self.pos = 0
|
||||||
self.closed = False
|
self.closed = False
|
||||||
self.softspace = 0
|
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,6 @@ class DBRecIO:
|
||||||
self.len = None
|
self.len = None
|
||||||
self.pos = 0
|
self.pos = 0
|
||||||
self.closed = 0
|
self.closed = 0
|
||||||
self.softspace = 0
|
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if not self.closed:
|
if not self.closed:
|
||||||
|
|
|
||||||
16
Lib/code.py
16
Lib/code.py
|
|
@ -12,19 +12,6 @@ from codeop import CommandCompiler, compile_command
|
||||||
__all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact",
|
__all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact",
|
||||||
"compile_command"]
|
"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:
|
class InteractiveInterpreter:
|
||||||
"""Base class for InteractiveConsole.
|
"""Base class for InteractiveConsole.
|
||||||
|
|
||||||
|
|
@ -105,9 +92,6 @@ class InteractiveInterpreter:
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
self.showtraceback()
|
self.showtraceback()
|
||||||
else:
|
|
||||||
if softspace(sys.stdout, 0):
|
|
||||||
print()
|
|
||||||
|
|
||||||
def showsyntaxerror(self, filename=None):
|
def showsyntaxerror(self, filename=None):
|
||||||
"""Display the syntax error that just occurred.
|
"""Display the syntax error that just occurred.
|
||||||
|
|
|
||||||
|
|
@ -240,16 +240,10 @@ class _SpoofOut(StringIO):
|
||||||
# that a trailing newline is missing.
|
# that a trailing newline is missing.
|
||||||
if result and not result.endswith("\n"):
|
if result and not result.endswith("\n"):
|
||||||
result += "\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
|
return result
|
||||||
|
|
||||||
def truncate(self, size=None):
|
def truncate(self, size=None):
|
||||||
StringIO.truncate(self, size)
|
StringIO.truncate(self, size)
|
||||||
if hasattr(self, "softspace"):
|
|
||||||
del self.softspace
|
|
||||||
|
|
||||||
# Worst-case linear-time ellipsis matching.
|
# Worst-case linear-time ellipsis matching.
|
||||||
def _ellipsis_match(want, got):
|
def _ellipsis_match(want, got):
|
||||||
|
|
|
||||||
|
|
@ -1223,7 +1223,6 @@ class PyShell(OutputWindow):
|
||||||
self.text.insert("end-1c", "\n")
|
self.text.insert("end-1c", "\n")
|
||||||
self.text.mark_set("iomark", "end-1c")
|
self.text.mark_set("iomark", "end-1c")
|
||||||
self.set_line_and_column()
|
self.set_line_and_column()
|
||||||
sys.stdout.softspace = 0
|
|
||||||
|
|
||||||
def write(self, s, tags=()):
|
def write(self, s, tags=()):
|
||||||
try:
|
try:
|
||||||
|
|
@ -1242,7 +1241,6 @@ class PseudoFile(object):
|
||||||
def __init__(self, shell, tags, encoding=None):
|
def __init__(self, shell, tags, encoding=None):
|
||||||
self.shell = shell
|
self.shell = shell
|
||||||
self.tags = tags
|
self.tags = tags
|
||||||
self.softspace = 0
|
|
||||||
self.encoding = encoding
|
self.encoding = encoding
|
||||||
|
|
||||||
def write(self, s):
|
def write(self, s):
|
||||||
|
|
|
||||||
|
|
@ -190,12 +190,7 @@ def cleanup_traceback(tb, exclude):
|
||||||
tb[i] = fn, ln, nm, line
|
tb[i] = fn, ln, nm, line
|
||||||
|
|
||||||
def flush_stdout():
|
def flush_stdout():
|
||||||
try:
|
"""XXX How to do this now?"""
|
||||||
if sys.stdout.softspace:
|
|
||||||
sys.stdout.softspace = 0
|
|
||||||
sys.stdout.write("\n")
|
|
||||||
except (AttributeError, EOFError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def exit():
|
def exit():
|
||||||
"""Exit subprocess, possibly after first deleting sys.exitfunc
|
"""Exit subprocess, possibly after first deleting sys.exitfunc
|
||||||
|
|
|
||||||
|
|
@ -202,7 +202,7 @@ class _fileobject(object):
|
||||||
default_bufsize = 8192
|
default_bufsize = 8192
|
||||||
name = "<socket>"
|
name = "<socket>"
|
||||||
|
|
||||||
__slots__ = ["mode", "bufsize", "softspace",
|
__slots__ = ["mode", "bufsize",
|
||||||
# "closed" is a property, see below
|
# "closed" is a property, see below
|
||||||
"_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf",
|
"_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf",
|
||||||
"_close"]
|
"_close"]
|
||||||
|
|
@ -213,7 +213,6 @@ class _fileobject(object):
|
||||||
if bufsize < 0:
|
if bufsize < 0:
|
||||||
bufsize = self.default_bufsize
|
bufsize = self.default_bufsize
|
||||||
self.bufsize = bufsize
|
self.bufsize = bufsize
|
||||||
self.softspace = False
|
|
||||||
if bufsize == 0:
|
if bufsize == 0:
|
||||||
self._rbufsize = 1
|
self._rbufsize = 1
|
||||||
elif bufsize == 1:
|
elif bufsize == 1:
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@ already:
|
||||||
We can make this fail by disabling the blank-line feature.
|
We can make this fail by disabling the blank-line feature.
|
||||||
|
|
||||||
>>> if 1:
|
>>> if 1:
|
||||||
... print 'a'
|
... print('a')
|
||||||
... print
|
... print()
|
||||||
... print 'b'
|
... print('b')
|
||||||
a
|
a
|
||||||
<BLANKLINE>
|
<BLANKLINE>
|
||||||
b
|
b
|
||||||
|
|
|
||||||
|
|
@ -30,14 +30,10 @@ class AutoFileTests(unittest.TestCase):
|
||||||
def testAttributes(self):
|
def testAttributes(self):
|
||||||
# verify expected attributes exist
|
# verify expected attributes exist
|
||||||
f = self.f
|
f = self.f
|
||||||
softspace = f.softspace
|
|
||||||
f.name # merely shouldn't blow up
|
f.name # merely shouldn't blow up
|
||||||
f.mode # ditto
|
f.mode # ditto
|
||||||
f.closed # ditto
|
f.closed # ditto
|
||||||
|
|
||||||
# verify softspace is writable
|
|
||||||
f.softspace = softspace # merely shouldn't blow up
|
|
||||||
|
|
||||||
# verify the others aren't
|
# verify the others aren't
|
||||||
for attr in 'name', 'mode', 'closed':
|
for attr in 'name', 'mode', 'closed':
|
||||||
self.assertRaises((AttributeError, TypeError), setattr, f, attr, 'oops')
|
self.assertRaises((AttributeError, TypeError), setattr, f, attr, 'oops')
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,6 @@ class TestPredicates(IsTestBase):
|
||||||
self.istest(inspect.ismodule, 'mod')
|
self.istest(inspect.ismodule, 'mod')
|
||||||
self.istest(inspect.istraceback, 'tb')
|
self.istest(inspect.istraceback, 'tb')
|
||||||
self.istest(inspect.isdatadescriptor, '__builtin__.file.closed')
|
self.istest(inspect.isdatadescriptor, '__builtin__.file.closed')
|
||||||
self.istest(inspect.isdatadescriptor, '__builtin__.file.softspace')
|
|
||||||
if hasattr(types, 'GetSetDescriptorType'):
|
if hasattr(types, 'GetSetDescriptorType'):
|
||||||
self.istest(inspect.isgetsetdescriptor,
|
self.istest(inspect.isgetsetdescriptor,
|
||||||
'type(tb.tb_frame).f_locals')
|
'type(tb.tb_frame).f_locals')
|
||||||
|
|
|
||||||
|
|
@ -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')
|
|
||||||
|
|
@ -102,8 +102,6 @@ typedef struct {
|
||||||
char* f_bufend; /* Points after last occupied position */
|
char* f_bufend; /* Points after last occupied position */
|
||||||
char* f_bufptr; /* Current buffer 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_univ_newline; /* Handle any newline convention */
|
||||||
int f_newlinetypes; /* Types of newlines seen */
|
int f_newlinetypes; /* Types of newlines seen */
|
||||||
int f_skipnextlf; /* Skip next \n */
|
int f_skipnextlf; /* Skip next \n */
|
||||||
|
|
@ -813,8 +811,6 @@ BZ2File_write(BZ2FileObject *self, PyObject *args)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->f_softspace = 0;
|
|
||||||
|
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
BZ2_bzWrite (&bzerror, self->fp, buf, len);
|
BZ2_bzWrite (&bzerror, self->fp, buf, len);
|
||||||
self->pos += len;
|
self->pos += len;
|
||||||
|
|
@ -934,8 +930,6 @@ BZ2File_writelines(BZ2FileObject *self, PyObject *seq)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self->f_softspace = 0;
|
|
||||||
|
|
||||||
/* Since we are releasing the global lock, the
|
/* Since we are releasing the global lock, the
|
||||||
following code may *not* execute Python code. */
|
following code may *not* execute Python code. */
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
|
|
@ -1264,18 +1258,6 @@ static PyGetSetDef BZ2File_getset[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* ===================================================================== */
|
|
||||||
/* 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. */
|
/* Slot definitions for BZ2File_Type. */
|
||||||
|
|
||||||
|
|
@ -1501,7 +1483,7 @@ static PyTypeObject BZ2File_Type = {
|
||||||
(getiterfunc)BZ2File_getiter, /*tp_iter*/
|
(getiterfunc)BZ2File_getiter, /*tp_iter*/
|
||||||
(iternextfunc)BZ2File_iternext, /*tp_iternext*/
|
(iternextfunc)BZ2File_iternext, /*tp_iternext*/
|
||||||
BZ2File_methods, /*tp_methods*/
|
BZ2File_methods, /*tp_methods*/
|
||||||
BZ2File_members, /*tp_members*/
|
0, /*tp_members*/
|
||||||
BZ2File_getset, /*tp_getset*/
|
BZ2File_getset, /*tp_getset*/
|
||||||
0, /*tp_base*/
|
0, /*tp_base*/
|
||||||
0, /*tp_dict*/
|
0, /*tp_dict*/
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,6 @@ typedef struct { /* Subtype of IOobject */
|
||||||
Py_ssize_t pos, string_size;
|
Py_ssize_t pos, string_size;
|
||||||
|
|
||||||
Py_ssize_t buf_size;
|
Py_ssize_t buf_size;
|
||||||
int softspace;
|
|
||||||
} Oobject;
|
} Oobject;
|
||||||
|
|
||||||
/* Declarations for objects of type StringI */
|
/* Declarations for objects of type StringI */
|
||||||
|
|
@ -489,13 +488,6 @@ static struct PyMethodDef O_methods[] = {
|
||||||
{NULL, NULL} /* sentinel */
|
{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
|
static void
|
||||||
O_dealloc(Oobject *self) {
|
O_dealloc(Oobject *self) {
|
||||||
if (self->buf != NULL)
|
if (self->buf != NULL)
|
||||||
|
|
@ -536,7 +528,7 @@ static PyTypeObject Otype = {
|
||||||
PyObject_SelfIter, /*tp_iter */
|
PyObject_SelfIter, /*tp_iter */
|
||||||
(iternextfunc)IO_iternext, /*tp_iternext */
|
(iternextfunc)IO_iternext, /*tp_iternext */
|
||||||
O_methods, /*tp_methods */
|
O_methods, /*tp_methods */
|
||||||
O_memberlist, /*tp_members */
|
0, /*tp_members */
|
||||||
file_getsetlist, /*tp_getset */
|
file_getsetlist, /*tp_getset */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -549,7 +541,6 @@ newOobject(int size) {
|
||||||
return NULL;
|
return NULL;
|
||||||
self->pos=0;
|
self->pos=0;
|
||||||
self->string_size = 0;
|
self->string_size = 0;
|
||||||
self->softspace = 0;
|
|
||||||
|
|
||||||
self->buf = (char *)malloc(size);
|
self->buf = (char *)malloc(size);
|
||||||
if (!self->buf) {
|
if (!self->buf) {
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,6 @@ fill_file_fields(PyFileObject *f, FILE *fp, PyObject *name, char *mode,
|
||||||
f->f_mode = PyString_FromString(mode);
|
f->f_mode = PyString_FromString(mode);
|
||||||
|
|
||||||
f->f_close = close;
|
f->f_close = close;
|
||||||
f->f_softspace = 0;
|
|
||||||
f->f_binary = strchr(mode,'b') != NULL;
|
f->f_binary = strchr(mode,'b') != NULL;
|
||||||
f->f_buf = NULL;
|
f->f_buf = NULL;
|
||||||
f->f_univ_newline = (strchr(mode, 'U') != NULL);
|
f->f_univ_newline = (strchr(mode, 'U') != NULL);
|
||||||
|
|
@ -1523,7 +1522,6 @@ file_write(PyFileObject *f, PyObject *args)
|
||||||
return err_closed();
|
return err_closed();
|
||||||
if (!PyArg_ParseTuple(args, f->f_binary ? "s#" : "t#", &s, &n))
|
if (!PyArg_ParseTuple(args, f->f_binary ? "s#" : "t#", &s, &n))
|
||||||
return NULL;
|
return NULL;
|
||||||
f->f_softspace = 0;
|
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
errno = 0;
|
errno = 0;
|
||||||
n2 = fwrite(s, 1, n, f->f_fp);
|
n2 = fwrite(s, 1, n, f->f_fp);
|
||||||
|
|
@ -1626,7 +1624,6 @@ file_writelines(PyFileObject *f, PyObject *seq)
|
||||||
/* Since we are releasing the global lock, the
|
/* Since we are releasing the global lock, the
|
||||||
following code may *not* execute Python code. */
|
following code may *not* execute Python code. */
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
f->f_softspace = 0;
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
for (i = 0; i < j; i++) {
|
for (i = 0; i < j; i++) {
|
||||||
line = PyList_GET_ITEM(list, i);
|
line = PyList_GET_ITEM(list, i);
|
||||||
|
|
@ -1786,8 +1783,6 @@ static PyMethodDef file_methods[] = {
|
||||||
#define OFF(x) offsetof(PyFileObject, x)
|
#define OFF(x) offsetof(PyFileObject, x)
|
||||||
|
|
||||||
static PyMemberDef file_memberlist[] = {
|
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,
|
{"mode", T_OBJECT, OFF(f_mode), RO,
|
||||||
"file mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)"},
|
"file mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)"},
|
||||||
{"name", T_OBJECT, OFF(f_name), RO,
|
{"name", T_OBJECT, OFF(f_name), RO,
|
||||||
|
|
@ -2094,8 +2089,7 @@ PyTypeObject PyFile_Type = {
|
||||||
0, /* tp_call */
|
0, /* tp_call */
|
||||||
0, /* tp_str */
|
0, /* tp_str */
|
||||||
PyObject_GenericGetAttr, /* tp_getattro */
|
PyObject_GenericGetAttr, /* tp_getattro */
|
||||||
/* softspace is writable: we must supply tp_setattro */
|
0, /* tp_setattro */
|
||||||
PyObject_GenericSetAttr, /* tp_setattro */
|
|
||||||
0, /* tp_as_buffer */
|
0, /* tp_as_buffer */
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
|
||||||
file_doc, /* tp_doc */
|
file_doc, /* tp_doc */
|
||||||
|
|
@ -2119,42 +2113,6 @@ PyTypeObject PyFile_Type = {
|
||||||
PyObject_Del, /* tp_free */
|
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 */
|
/* Interfaces to write objects/strings to file-like objects */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
||||||
|
|
@ -3349,17 +3349,6 @@ PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
|
||||||
return result;
|
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.
|
/* External interface to call any callable object.
|
||||||
The arg must be a tuple or NULL. */
|
The arg must be a tuple or NULL. */
|
||||||
|
|
|
||||||
|
|
@ -795,8 +795,6 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -883,8 +881,6 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -902,8 +898,6 @@ PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1018,8 +1012,6 @@ handle_system_exit(void)
|
||||||
int exitcode = 0;
|
int exitcode = 0;
|
||||||
|
|
||||||
PyErr_Fetch(&exception, &value, &tb);
|
PyErr_Fetch(&exception, &value, &tb);
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
if (value == NULL || value == Py_None)
|
if (value == NULL || value == Py_None)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -1097,8 +1089,6 @@ PyErr_PrintEx(int set_sys_last_vars)
|
||||||
v2 = Py_None;
|
v2 = Py_None;
|
||||||
Py_INCREF(v2);
|
Py_INCREF(v2);
|
||||||
}
|
}
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
PySys_WriteStderr("Error in sys.excepthook:\n");
|
PySys_WriteStderr("Error in sys.excepthook:\n");
|
||||||
PyErr_Display(exception2, v2, tb2);
|
PyErr_Display(exception2, v2, tb2);
|
||||||
|
|
@ -1128,8 +1118,6 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
fprintf(stderr, "lost sys.stderr\n");
|
fprintf(stderr, "lost sys.stderr\n");
|
||||||
else {
|
else {
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
if (tb && tb != Py_None)
|
if (tb && tb != Py_None)
|
||||||
err = PyTraceBack_Print(tb, f);
|
err = PyTraceBack_Print(tb, f);
|
||||||
|
|
@ -1597,8 +1585,6 @@ call_sys_exitfunc(void)
|
||||||
Py_DECREF(exitfunc);
|
Py_DECREF(exitfunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Py_FlushLine())
|
|
||||||
PyErr_Clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -1855,4 +1841,3 @@ PyRun_InteractiveLoop(FILE *f, const char *p)
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,8 +104,6 @@ sys_displayhook(PyObject *self, PyObject *o)
|
||||||
}
|
}
|
||||||
if (PyObject_SetAttrString(builtins, "_", Py_None) != 0)
|
if (PyObject_SetAttrString(builtins, "_", Py_None) != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (Py_FlushLine() != 0)
|
|
||||||
return NULL;
|
|
||||||
outf = PySys_GetObject("stdout");
|
outf = PySys_GetObject("stdout");
|
||||||
if (outf == NULL) {
|
if (outf == NULL) {
|
||||||
PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
|
PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
|
||||||
|
|
@ -113,8 +111,7 @@ sys_displayhook(PyObject *self, PyObject *o)
|
||||||
}
|
}
|
||||||
if (PyFile_WriteObject(o, outf, 0) != 0)
|
if (PyFile_WriteObject(o, outf, 0) != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
PyFile_SoftSpace(outf, 1);
|
if (PyFile_WriteString("\n", outf) != 0)
|
||||||
if (Py_FlushLine() != 0)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
if (PyObject_SetAttrString(builtins, "_", o) != 0)
|
if (PyObject_SetAttrString(builtins, "_", o) != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue