mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
Kill all uses and definitions of tp_print under Objects/. (Others will follow.)
Finally kill intobject.c, which was #ifdef'ed out a long time ago.
This commit is contained in:
parent
d474ce8c7a
commit
04dbf3b5ec
11 changed files with 11 additions and 1470 deletions
|
@ -3,15 +3,6 @@
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
#include "longintrepr.h"
|
#include "longintrepr.h"
|
||||||
|
|
||||||
/* We need to define bool_print to override int_print */
|
|
||||||
|
|
||||||
static int
|
|
||||||
bool_print(PyObject *self, FILE *fp, int flags)
|
|
||||||
{
|
|
||||||
fputs(self == Py_False ? "False" : "True", fp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We define bool_repr to return "False" or "True" */
|
/* We define bool_repr to return "False" or "True" */
|
||||||
|
|
||||||
static PyObject *false_str = NULL;
|
static PyObject *false_str = NULL;
|
||||||
|
@ -148,7 +139,7 @@ PyTypeObject PyBool_Type = {
|
||||||
sizeof(struct _longobject),
|
sizeof(struct _longobject),
|
||||||
0,
|
0,
|
||||||
0, /* tp_dealloc */
|
0, /* tp_dealloc */
|
||||||
bool_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
0, /* tp_compare */
|
0, /* tp_compare */
|
||||||
|
|
|
@ -327,16 +327,6 @@ complex_to_buf(char *buf, int bufsz, PyComplexObject *v, int precision)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
complex_print(PyComplexObject *v, FILE *fp, int flags)
|
|
||||||
{
|
|
||||||
char buf[100];
|
|
||||||
complex_to_buf(buf, sizeof(buf), v,
|
|
||||||
(flags & Py_PRINT_RAW) ? PREC_STR : PREC_REPR);
|
|
||||||
fputs(buf, fp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
complex_repr(PyComplexObject *v)
|
complex_repr(PyComplexObject *v)
|
||||||
{
|
{
|
||||||
|
@ -1005,7 +995,7 @@ PyTypeObject PyComplex_Type = {
|
||||||
sizeof(PyComplexObject),
|
sizeof(PyComplexObject),
|
||||||
0,
|
0,
|
||||||
complex_dealloc, /* tp_dealloc */
|
complex_dealloc, /* tp_dealloc */
|
||||||
(printfunc)complex_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
0, /* tp_compare */
|
0, /* tp_compare */
|
||||||
|
|
|
@ -886,51 +886,6 @@ dict_dealloc(register dictobject *mp)
|
||||||
Py_TRASHCAN_SAFE_END(mp)
|
Py_TRASHCAN_SAFE_END(mp)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
dict_print(register dictobject *mp, register FILE *fp, register int flags)
|
|
||||||
{
|
|
||||||
register Py_ssize_t i;
|
|
||||||
register Py_ssize_t any;
|
|
||||||
int status;
|
|
||||||
|
|
||||||
status = Py_ReprEnter((PyObject*)mp);
|
|
||||||
if (status != 0) {
|
|
||||||
if (status < 0)
|
|
||||||
return status;
|
|
||||||
fprintf(fp, "{...}");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fp, "{");
|
|
||||||
any = 0;
|
|
||||||
for (i = 0; i <= mp->ma_mask; i++) {
|
|
||||||
dictentry *ep = mp->ma_table + i;
|
|
||||||
PyObject *pvalue = ep->me_value;
|
|
||||||
if (pvalue != NULL) {
|
|
||||||
/* Prevent PyObject_Repr from deleting value during
|
|
||||||
key format */
|
|
||||||
Py_INCREF(pvalue);
|
|
||||||
if (any++ > 0)
|
|
||||||
fprintf(fp, ", ");
|
|
||||||
if (PyObject_Print((PyObject *)ep->me_key, fp, 0)!=0) {
|
|
||||||
Py_DECREF(pvalue);
|
|
||||||
Py_ReprLeave((PyObject*)mp);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
fprintf(fp, ": ");
|
|
||||||
if (PyObject_Print(pvalue, fp, 0) != 0) {
|
|
||||||
Py_DECREF(pvalue);
|
|
||||||
Py_ReprLeave((PyObject*)mp);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
Py_DECREF(pvalue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fprintf(fp, "}");
|
|
||||||
Py_ReprLeave((PyObject*)mp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
dict_repr(dictobject *mp)
|
dict_repr(dictobject *mp)
|
||||||
{
|
{
|
||||||
|
@ -1974,7 +1929,7 @@ PyTypeObject PyDict_Type = {
|
||||||
sizeof(dictobject),
|
sizeof(dictobject),
|
||||||
0,
|
0,
|
||||||
(destructor)dict_dealloc, /* tp_dealloc */
|
(destructor)dict_dealloc, /* tp_dealloc */
|
||||||
(printfunc)dict_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
0, /* tp_compare */
|
0, /* tp_compare */
|
||||||
|
|
|
@ -205,7 +205,7 @@ format_double(char *buf, size_t buflen, double ob_fval, int precision)
|
||||||
{
|
{
|
||||||
register char *cp;
|
register char *cp;
|
||||||
char format[32];
|
char format[32];
|
||||||
/* Subroutine for float_repr, float_str, float_print and others.
|
/* Subroutine for float_repr, float_str, and others.
|
||||||
We want float numbers to be recognizable as such,
|
We want float numbers to be recognizable as such,
|
||||||
i.e., they should contain a decimal point or an exponent.
|
i.e., they should contain a decimal point or an exponent.
|
||||||
However, %g may print the number as an integer;
|
However, %g may print the number as an integer;
|
||||||
|
@ -286,17 +286,6 @@ convert_to_double(PyObject **v, double *dbl)
|
||||||
#define PREC_REPR 17
|
#define PREC_REPR 17
|
||||||
#define PREC_STR 12
|
#define PREC_STR 12
|
||||||
|
|
||||||
/* ARGSUSED */
|
|
||||||
static int
|
|
||||||
float_print(PyFloatObject *v, FILE *fp, int flags)
|
|
||||||
{
|
|
||||||
char buf[100];
|
|
||||||
format_float(buf, sizeof(buf), v,
|
|
||||||
(flags & Py_PRINT_RAW) ? PREC_STR : PREC_REPR);
|
|
||||||
fputs(buf, fp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
float_repr(PyFloatObject *v)
|
float_repr(PyFloatObject *v)
|
||||||
{
|
{
|
||||||
|
@ -1058,7 +1047,7 @@ PyTypeObject PyFloat_Type = {
|
||||||
sizeof(PyFloatObject),
|
sizeof(PyFloatObject),
|
||||||
0,
|
0,
|
||||||
(destructor)float_dealloc, /* tp_dealloc */
|
(destructor)float_dealloc, /* tp_dealloc */
|
||||||
(printfunc)float_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
0, /* tp_compare */
|
0, /* tp_compare */
|
||||||
|
|
1226
Objects/intobject.c
1226
Objects/intobject.c
File diff suppressed because it is too large
Load diff
|
@ -272,33 +272,6 @@ list_dealloc(PyListObject *op)
|
||||||
Py_TRASHCAN_SAFE_END(op)
|
Py_TRASHCAN_SAFE_END(op)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
list_print(PyListObject *op, FILE *fp, int flags)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
Py_ssize_t i;
|
|
||||||
|
|
||||||
rc = Py_ReprEnter((PyObject*)op);
|
|
||||||
if (rc != 0) {
|
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
fprintf(fp, "[...]");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
fprintf(fp, "[");
|
|
||||||
for (i = 0; i < Py_Size(op); i++) {
|
|
||||||
if (i > 0)
|
|
||||||
fprintf(fp, ", ");
|
|
||||||
if (PyObject_Print(op->ob_item[i], fp, 0) != 0) {
|
|
||||||
Py_ReprLeave((PyObject *)op);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fprintf(fp, "]");
|
|
||||||
Py_ReprLeave((PyObject *)op);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_repr(PyListObject *v)
|
list_repr(PyListObject *v)
|
||||||
{
|
{
|
||||||
|
@ -2665,7 +2638,7 @@ PyTypeObject PyList_Type = {
|
||||||
sizeof(PyListObject),
|
sizeof(PyListObject),
|
||||||
0,
|
0,
|
||||||
(destructor)list_dealloc, /* tp_dealloc */
|
(destructor)list_dealloc, /* tp_dealloc */
|
||||||
(printfunc)list_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
0, /* tp_compare */
|
0, /* tp_compare */
|
||||||
|
|
|
@ -279,7 +279,7 @@ internal_print(PyObject *op, FILE *fp, int flags, int nesting)
|
||||||
universally available */
|
universally available */
|
||||||
fprintf(fp, "<refcnt %ld at %p>",
|
fprintf(fp, "<refcnt %ld at %p>",
|
||||||
(long)op->ob_refcnt, op);
|
(long)op->ob_refcnt, op);
|
||||||
else if (Py_Type(op)->tp_print == NULL) {
|
else {
|
||||||
PyObject *s;
|
PyObject *s;
|
||||||
if (flags & Py_PRINT_RAW)
|
if (flags & Py_PRINT_RAW)
|
||||||
s = PyObject_Str(op);
|
s = PyObject_Str(op);
|
||||||
|
@ -293,8 +293,6 @@ internal_print(PyObject *op, FILE *fp, int flags, int nesting)
|
||||||
}
|
}
|
||||||
Py_XDECREF(s);
|
Py_XDECREF(s);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
ret = (*Py_Type(op)->tp_print)(op, fp, flags);
|
|
||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
if (ferror(fp)) {
|
if (ferror(fp)) {
|
||||||
|
|
|
@ -565,50 +565,6 @@ set_dealloc(PySetObject *so)
|
||||||
Py_TRASHCAN_SAFE_END(so)
|
Py_TRASHCAN_SAFE_END(so)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
set_tp_print(PySetObject *so, FILE *fp, int flags)
|
|
||||||
{
|
|
||||||
setentry *entry;
|
|
||||||
Py_ssize_t pos=0;
|
|
||||||
char *emit = ""; /* No separator emitted on first pass */
|
|
||||||
char *separator = ", ";
|
|
||||||
int literalform = 0;
|
|
||||||
int status = Py_ReprEnter((PyObject*)so);
|
|
||||||
|
|
||||||
if (status != 0) {
|
|
||||||
if (status < 0)
|
|
||||||
return status;
|
|
||||||
fprintf(fp, "%s(...)", Py_Type(so)->tp_name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!so->used) {
|
|
||||||
Py_ReprLeave((PyObject*)so);
|
|
||||||
fprintf(fp, "%s()", Py_Type(so)->tp_name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Py_Type(so) == &PySet_Type) {
|
|
||||||
literalform = 1;
|
|
||||||
fprintf(fp, "{");
|
|
||||||
} else
|
|
||||||
fprintf(fp, "%s([", Py_Type(so)->tp_name);
|
|
||||||
while (set_next(so, &pos, &entry)) {
|
|
||||||
fputs(emit, fp);
|
|
||||||
emit = separator;
|
|
||||||
if (PyObject_Print(entry->key, fp, 0) != 0) {
|
|
||||||
Py_ReprLeave((PyObject*)so);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (literalform)
|
|
||||||
fputs("}", fp);
|
|
||||||
else
|
|
||||||
fputs("])", fp);
|
|
||||||
Py_ReprLeave((PyObject*)so);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
set_repr(PySetObject *so)
|
set_repr(PySetObject *so)
|
||||||
{
|
{
|
||||||
|
@ -1957,7 +1913,7 @@ PyTypeObject PySet_Type = {
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor)set_dealloc, /* tp_dealloc */
|
(destructor)set_dealloc, /* tp_dealloc */
|
||||||
(printfunc)set_tp_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
set_nocmp, /* tp_compare */
|
set_nocmp, /* tp_compare */
|
||||||
|
@ -2050,7 +2006,7 @@ PyTypeObject PyFrozenSet_Type = {
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor)set_dealloc, /* tp_dealloc */
|
(destructor)set_dealloc, /* tp_dealloc */
|
||||||
(printfunc)set_tp_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
set_nocmp, /* tp_compare */
|
set_nocmp, /* tp_compare */
|
||||||
|
|
|
@ -764,71 +764,6 @@ PyString_AsStringAndSize(register PyObject *obj,
|
||||||
#include "stringlib/partition.h"
|
#include "stringlib/partition.h"
|
||||||
|
|
||||||
|
|
||||||
static int
|
|
||||||
string_print(PyStringObject *op, FILE *fp, int flags)
|
|
||||||
{
|
|
||||||
Py_ssize_t i;
|
|
||||||
char c;
|
|
||||||
int quote;
|
|
||||||
|
|
||||||
/* XXX Ought to check for interrupts when writing long strings */
|
|
||||||
if (! PyString_CheckExact(op)) {
|
|
||||||
int ret;
|
|
||||||
/* A str subclass may have its own __str__ method. */
|
|
||||||
op = (PyStringObject *) PyObject_Str((PyObject *)op);
|
|
||||||
if (op == NULL)
|
|
||||||
return -1;
|
|
||||||
ret = string_print(op, fp, flags);
|
|
||||||
Py_DECREF(op);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
if (flags & Py_PRINT_RAW) {
|
|
||||||
char *data = op->ob_sval;
|
|
||||||
Py_ssize_t size = Py_Size(op);
|
|
||||||
while (size > INT_MAX) {
|
|
||||||
/* Very long strings cannot be written atomically.
|
|
||||||
* But don't write exactly INT_MAX bytes at a time
|
|
||||||
* to avoid memory aligment issues.
|
|
||||||
*/
|
|
||||||
const int chunk_size = INT_MAX & ~0x3FFF;
|
|
||||||
fwrite(data, 1, chunk_size, fp);
|
|
||||||
data += chunk_size;
|
|
||||||
size -= chunk_size;
|
|
||||||
}
|
|
||||||
#ifdef __VMS
|
|
||||||
if (size) fwrite(data, (int)size, 1, fp);
|
|
||||||
#else
|
|
||||||
fwrite(data, 1, (int)size, fp);
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* figure out which quote to use; single is preferred */
|
|
||||||
quote = '\'';
|
|
||||||
if (memchr(op->ob_sval, '\'', Py_Size(op)) &&
|
|
||||||
!memchr(op->ob_sval, '"', Py_Size(op)))
|
|
||||||
quote = '"';
|
|
||||||
|
|
||||||
fputc(quote, fp);
|
|
||||||
for (i = 0; i < Py_Size(op); i++) {
|
|
||||||
c = op->ob_sval[i];
|
|
||||||
if (c == quote || c == '\\')
|
|
||||||
fprintf(fp, "\\%c", c);
|
|
||||||
else if (c == '\t')
|
|
||||||
fprintf(fp, "\\t");
|
|
||||||
else if (c == '\n')
|
|
||||||
fprintf(fp, "\\n");
|
|
||||||
else if (c == '\r')
|
|
||||||
fprintf(fp, "\\r");
|
|
||||||
else if (c < ' ' || c >= 0x7f)
|
|
||||||
fprintf(fp, "\\x%02x", c & 0xff);
|
|
||||||
else
|
|
||||||
fputc(c, fp);
|
|
||||||
}
|
|
||||||
fputc(quote, fp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyString_Repr(PyObject *obj, int smartquotes)
|
PyString_Repr(PyObject *obj, int smartquotes)
|
||||||
{
|
{
|
||||||
|
@ -3983,7 +3918,7 @@ PyTypeObject PyString_Type = {
|
||||||
sizeof(PyStringObject),
|
sizeof(PyStringObject),
|
||||||
sizeof(char),
|
sizeof(char),
|
||||||
string_dealloc, /* tp_dealloc */
|
string_dealloc, /* tp_dealloc */
|
||||||
(printfunc)string_print, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
0, /* tp_compare */
|
0, /* tp_compare */
|
||||||
|
|
|
@ -184,23 +184,6 @@ done:
|
||||||
Py_TRASHCAN_SAFE_END(op)
|
Py_TRASHCAN_SAFE_END(op)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
tupleprint(PyTupleObject *op, FILE *fp, int flags)
|
|
||||||
{
|
|
||||||
Py_ssize_t i;
|
|
||||||
fprintf(fp, "(");
|
|
||||||
for (i = 0; i < Py_Size(op); i++) {
|
|
||||||
if (i > 0)
|
|
||||||
fprintf(fp, ", ");
|
|
||||||
if (PyObject_Print(op->ob_item[i], fp, 0) != 0)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (Py_Size(op) == 1)
|
|
||||||
fprintf(fp, ",");
|
|
||||||
fprintf(fp, ")");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tuplerepr(PyTupleObject *v)
|
tuplerepr(PyTupleObject *v)
|
||||||
{
|
{
|
||||||
|
@ -653,7 +636,7 @@ PyTypeObject PyTuple_Type = {
|
||||||
sizeof(PyTupleObject) - sizeof(PyObject *),
|
sizeof(PyTupleObject) - sizeof(PyObject *),
|
||||||
sizeof(PyObject *),
|
sizeof(PyObject *),
|
||||||
(destructor)tupledealloc, /* tp_dealloc */
|
(destructor)tupledealloc, /* tp_dealloc */
|
||||||
(printfunc)tupleprint, /* tp_print */
|
0, /* tp_print */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
0, /* tp_compare */
|
0, /* tp_compare */
|
||||||
|
|
|
@ -3260,7 +3260,6 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base)
|
||||||
basebase = base->tp_base;
|
basebase = base->tp_base;
|
||||||
|
|
||||||
COPYSLOT(tp_dealloc);
|
COPYSLOT(tp_dealloc);
|
||||||
COPYSLOT(tp_print);
|
|
||||||
if (type->tp_getattr == NULL && type->tp_getattro == NULL) {
|
if (type->tp_getattr == NULL && type->tp_getattro == NULL) {
|
||||||
type->tp_getattr = base->tp_getattr;
|
type->tp_getattr = base->tp_getattr;
|
||||||
type->tp_getattro = base->tp_getattro;
|
type->tp_getattro = base->tp_getattro;
|
||||||
|
@ -5212,10 +5211,8 @@ static slotdef slotdefs[] = {
|
||||||
|
|
||||||
TPSLOT("__str__", tp_str, slot_tp_str, wrap_unaryfunc,
|
TPSLOT("__str__", tp_str, slot_tp_str, wrap_unaryfunc,
|
||||||
"x.__str__() <==> str(x)"),
|
"x.__str__() <==> str(x)"),
|
||||||
TPSLOT("__str__", tp_print, NULL, NULL, ""),
|
|
||||||
TPSLOT("__repr__", tp_repr, slot_tp_repr, wrap_unaryfunc,
|
TPSLOT("__repr__", tp_repr, slot_tp_repr, wrap_unaryfunc,
|
||||||
"x.__repr__() <==> repr(x)"),
|
"x.__repr__() <==> repr(x)"),
|
||||||
TPSLOT("__repr__", tp_print, NULL, NULL, ""),
|
|
||||||
TPSLOT("__cmp__", tp_compare, _PyObject_SlotCompare, wrap_cmpfunc,
|
TPSLOT("__cmp__", tp_compare, _PyObject_SlotCompare, wrap_cmpfunc,
|
||||||
"x.__cmp__(y) <==> cmp(x,y)"),
|
"x.__cmp__(y) <==> cmp(x,y)"),
|
||||||
TPSLOT("__hash__", tp_hash, slot_tp_hash, wrap_hashfunc,
|
TPSLOT("__hash__", tp_hash, slot_tp_hash, wrap_hashfunc,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue