mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
repr's converted to using PyString_FromFormat() instead of sprintf'ing
into a hardcoded char* buffer. Closes patch #454743.
This commit is contained in:
parent
dadace004b
commit
7ce3694a52
11 changed files with 95 additions and 136 deletions
|
@ -184,28 +184,22 @@ buffer_compare(PyBufferObject *self, PyBufferObject *other)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
buffer_repr(PyBufferObject *self)
|
buffer_repr(PyBufferObject *self)
|
||||||
{
|
{
|
||||||
char buf[300];
|
|
||||||
char *status = self->b_readonly ? "read-only" : "read-write";
|
char *status = self->b_readonly ? "read-only" : "read-write";
|
||||||
|
|
||||||
if ( self->b_base == NULL )
|
if ( self->b_base == NULL )
|
||||||
{
|
return PyString_FromFormat("<%s buffer ptr %p, size %d at %p>",
|
||||||
sprintf(buf, "<%s buffer ptr %p, size %d at %p>",
|
status,
|
||||||
status,
|
self->b_ptr,
|
||||||
self->b_ptr,
|
self->b_size,
|
||||||
self->b_size,
|
self);
|
||||||
self);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
return PyString_FromFormat(
|
||||||
sprintf(buf, "<%s buffer for %p, ptr %p, size %d at %p>",
|
"<%s buffer for %p, ptr %p, size %d at %p>",
|
||||||
status,
|
status,
|
||||||
self->b_base,
|
self->b_base,
|
||||||
self->b_ptr,
|
self->b_ptr,
|
||||||
self->b_size,
|
self->b_size,
|
||||||
self);
|
self);
|
||||||
}
|
|
||||||
|
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static long
|
static long
|
||||||
|
|
|
@ -62,14 +62,12 @@ cell_compare(PyCellObject *a, PyCellObject *b)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
cell_repr(PyCellObject *op)
|
cell_repr(PyCellObject *op)
|
||||||
{
|
{
|
||||||
char buf[256];
|
|
||||||
|
|
||||||
if (op->ob_ref == NULL)
|
if (op->ob_ref == NULL)
|
||||||
sprintf(buf, "<cell at %p: empty>", op);
|
return PyString_FromFormat("<cell at %p: empty>", op);
|
||||||
else
|
|
||||||
sprintf(buf, "<cell at %p: %.80s object at %p>",
|
return PyString_FromFormat("<cell at %p: %.80s object at %p>",
|
||||||
op, op->ob_ref->ob_type->tp_name, op->ob_ref);
|
op, op->ob_ref->ob_type->tp_name,
|
||||||
return PyString_FromString(buf);
|
op->ob_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -313,19 +313,17 @@ static PyObject *
|
||||||
class_repr(PyClassObject *op)
|
class_repr(PyClassObject *op)
|
||||||
{
|
{
|
||||||
PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__");
|
PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__");
|
||||||
char buf[140];
|
|
||||||
char *name;
|
char *name;
|
||||||
if (op->cl_name == NULL || !PyString_Check(op->cl_name))
|
if (op->cl_name == NULL || !PyString_Check(op->cl_name))
|
||||||
name = "?";
|
name = "?";
|
||||||
else
|
else
|
||||||
name = PyString_AsString(op->cl_name);
|
name = PyString_AsString(op->cl_name);
|
||||||
if (mod == NULL || !PyString_Check(mod))
|
if (mod == NULL || !PyString_Check(mod))
|
||||||
sprintf(buf, "<class ?.%.100s at %p>", name, op);
|
return PyString_FromFormat("<class ?.s at %p>", name, op);
|
||||||
else
|
else
|
||||||
sprintf(buf, "<class %.50s.%.50s at %p>",
|
return PyString_FromFormat("<class %s.%s at %p>",
|
||||||
PyString_AsString(mod),
|
PyString_AsString(mod),
|
||||||
name, op);
|
name, op);
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -776,7 +774,6 @@ instance_repr(PyInstanceObject *inst)
|
||||||
reprstr = PyString_InternFromString("__repr__");
|
reprstr = PyString_InternFromString("__repr__");
|
||||||
func = instance_getattr(inst, reprstr);
|
func = instance_getattr(inst, reprstr);
|
||||||
if (func == NULL) {
|
if (func == NULL) {
|
||||||
char buf[140];
|
|
||||||
PyObject *classname = inst->in_class->cl_name;
|
PyObject *classname = inst->in_class->cl_name;
|
||||||
PyObject *mod = PyDict_GetItemString(
|
PyObject *mod = PyDict_GetItemString(
|
||||||
inst->in_class->cl_dict, "__module__");
|
inst->in_class->cl_dict, "__module__");
|
||||||
|
@ -787,13 +784,12 @@ instance_repr(PyInstanceObject *inst)
|
||||||
cname = "?";
|
cname = "?";
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
if (mod == NULL || !PyString_Check(mod))
|
if (mod == NULL || !PyString_Check(mod))
|
||||||
sprintf(buf, "<?.%.100s instance at %p>",
|
return PyString_FromFormat("<?.%s instance at %p>",
|
||||||
cname, inst);
|
cname, inst);
|
||||||
else
|
else
|
||||||
sprintf(buf, "<%.50s.%.50s instance at %p>",
|
return PyString_FromFormat("<%s.%s instance at %p>",
|
||||||
PyString_AsString(mod),
|
PyString_AsString(mod),
|
||||||
cname, inst);
|
cname, inst);
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
}
|
||||||
res = PyEval_CallObject(func, (PyObject *)NULL);
|
res = PyEval_CallObject(func, (PyObject *)NULL);
|
||||||
Py_DECREF(func);
|
Py_DECREF(func);
|
||||||
|
@ -2042,7 +2038,6 @@ instancemethod_compare(PyMethodObject *a, PyMethodObject *b)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
instancemethod_repr(PyMethodObject *a)
|
instancemethod_repr(PyMethodObject *a)
|
||||||
{
|
{
|
||||||
char buffer[240];
|
|
||||||
PyObject *self = a->im_self;
|
PyObject *self = a->im_self;
|
||||||
PyObject *func = a->im_func;
|
PyObject *func = a->im_func;
|
||||||
PyObject *klass = a->im_class;
|
PyObject *klass = a->im_class;
|
||||||
|
@ -2072,8 +2067,8 @@ instancemethod_repr(PyMethodObject *a)
|
||||||
sklassname = PyString_AS_STRING(klassname);
|
sklassname = PyString_AS_STRING(klassname);
|
||||||
}
|
}
|
||||||
if (self == NULL)
|
if (self == NULL)
|
||||||
sprintf(buffer, "<unbound method %.100s.%.100s>",
|
result = PyString_FromFormat("<unbound method %s.%s>",
|
||||||
sklassname, sfuncname);
|
sklassname, sfuncname);
|
||||||
else {
|
else {
|
||||||
/* XXX Shouldn't use repr() here! */
|
/* XXX Shouldn't use repr() here! */
|
||||||
PyObject *selfrepr = PyObject_Repr(self);
|
PyObject *selfrepr = PyObject_Repr(self);
|
||||||
|
@ -2083,11 +2078,11 @@ instancemethod_repr(PyMethodObject *a)
|
||||||
Py_DECREF(selfrepr);
|
Py_DECREF(selfrepr);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
sprintf(buffer, "<bound method %.60s.%.60s of %.60s>",
|
result = PyString_FromFormat("<bound method %s.%s of %s>",
|
||||||
sklassname, sfuncname, PyString_AS_STRING(selfrepr));
|
sklassname, sfuncname,
|
||||||
|
PyString_AS_STRING(selfrepr));
|
||||||
Py_DECREF(selfrepr);
|
Py_DECREF(selfrepr);
|
||||||
}
|
}
|
||||||
result = PyString_FromString(buffer);
|
|
||||||
fail:
|
fail:
|
||||||
Py_XDECREF(funcname);
|
Py_XDECREF(funcname);
|
||||||
Py_XDECREF(klassname);
|
Py_XDECREF(klassname);
|
||||||
|
|
|
@ -55,38 +55,36 @@ descr_name(PyDescrObject *descr)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
descr_repr(PyDescrObject *descr, char *format)
|
descr_repr(PyDescrObject *descr, char *format)
|
||||||
{
|
{
|
||||||
char buffer[500];
|
return PyString_FromFormat(format, descr_name(descr),
|
||||||
|
descr->d_type->tp_name);
|
||||||
sprintf(buffer, format, descr_name(descr), descr->d_type->tp_name);
|
|
||||||
return PyString_FromString(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
method_repr(PyMethodDescrObject *descr)
|
method_repr(PyMethodDescrObject *descr)
|
||||||
{
|
{
|
||||||
return descr_repr((PyDescrObject *)descr,
|
return descr_repr((PyDescrObject *)descr,
|
||||||
"<method '%.300s' of '%.100s' objects>");
|
"<method '%s' of '%s' objects>");
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
member_repr(PyMemberDescrObject *descr)
|
member_repr(PyMemberDescrObject *descr)
|
||||||
{
|
{
|
||||||
return descr_repr((PyDescrObject *)descr,
|
return descr_repr((PyDescrObject *)descr,
|
||||||
"<member '%.300s' of '%.100s' objects>");
|
"<member '%s' of '%s' objects>");
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
getset_repr(PyGetSetDescrObject *descr)
|
getset_repr(PyGetSetDescrObject *descr)
|
||||||
{
|
{
|
||||||
return descr_repr((PyDescrObject *)descr,
|
return descr_repr((PyDescrObject *)descr,
|
||||||
"<attribute '%.300s' of '%.100s' objects>");
|
"<attribute '%s' of '%s' objects>");
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrapper_repr(PyWrapperDescrObject *descr)
|
wrapper_repr(PyWrapperDescrObject *descr)
|
||||||
{
|
{
|
||||||
return descr_repr((PyDescrObject *)descr,
|
return descr_repr((PyDescrObject *)descr,
|
||||||
"<slot wrapper '%.300s' of '%.100s' objects>");
|
"<slot wrapper '%s' of '%s' objects>");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -100,8 +98,8 @@ descr_check(PyDescrObject *descr, PyObject *obj, PyTypeObject *type,
|
||||||
}
|
}
|
||||||
if (!PyObject_IsInstance(obj, (PyObject *)(descr->d_type))) {
|
if (!PyObject_IsInstance(obj, (PyObject *)(descr->d_type))) {
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"descriptor '%.200s' for '%.100s' objects "
|
"descriptor '%s' for '%s' objects "
|
||||||
"doesn't apply to '%.100s' object",
|
"doesn't apply to '%s' object",
|
||||||
descr_name((PyDescrObject *)descr),
|
descr_name((PyDescrObject *)descr),
|
||||||
descr->d_type->tp_name,
|
descr->d_type->tp_name,
|
||||||
obj->ob_type->tp_name);
|
obj->ob_type->tp_name);
|
||||||
|
|
|
@ -179,13 +179,11 @@ file_dealloc(PyFileObject *f)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
file_repr(PyFileObject *f)
|
file_repr(PyFileObject *f)
|
||||||
{
|
{
|
||||||
char buf[300];
|
return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
|
||||||
sprintf(buf, "<%s file '%.256s', mode '%.10s' at %p>",
|
f->f_fp == NULL ? "closed" : "open",
|
||||||
f->f_fp == NULL ? "closed" : "open",
|
PyString_AsString(f->f_name),
|
||||||
PyString_AsString(f->f_name),
|
PyString_AsString(f->f_mode),
|
||||||
PyString_AsString(f->f_mode),
|
f);
|
||||||
f);
|
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
|
@ -239,14 +239,11 @@ func_dealloc(PyFunctionObject *op)
|
||||||
static PyObject*
|
static PyObject*
|
||||||
func_repr(PyFunctionObject *op)
|
func_repr(PyFunctionObject *op)
|
||||||
{
|
{
|
||||||
char buf[140];
|
|
||||||
if (op->func_name == Py_None)
|
if (op->func_name == Py_None)
|
||||||
sprintf(buf, "<anonymous function at %p>", op);
|
return PyString_FromFormat("<anonymous function at %p>", op);
|
||||||
else
|
return PyString_FromFormat("<function %s at %p>",
|
||||||
sprintf(buf, "<function %.100s at %p>",
|
PyString_AsString(op->func_name),
|
||||||
PyString_AsString(op->func_name),
|
op);
|
||||||
op);
|
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -172,15 +172,13 @@ static struct getsetlist meth_getsets [] = {
|
||||||
static PyObject *
|
static PyObject *
|
||||||
meth_repr(PyCFunctionObject *m)
|
meth_repr(PyCFunctionObject *m)
|
||||||
{
|
{
|
||||||
char buf[200];
|
|
||||||
if (m->m_self == NULL)
|
if (m->m_self == NULL)
|
||||||
sprintf(buf, "<built-in function %.80s>", m->m_ml->ml_name);
|
return PyString_FromFormat("<built-in function %s>",
|
||||||
else
|
m->m_ml->ml_name);
|
||||||
sprintf(buf,
|
return PyString_FromFormat("<built-in method %s of %s object at %p>",
|
||||||
"<built-in method %.80s of %.80s object at %p>",
|
m->m_ml->ml_name,
|
||||||
m->m_ml->ml_name, m->m_self->ob_type->tp_name,
|
m->m_self->ob_type->tp_name,
|
||||||
m->m_self);
|
m->m_self);
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -157,13 +157,8 @@ module_dealloc(PyModuleObject *m)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
module_repr(PyModuleObject *m)
|
module_repr(PyModuleObject *m)
|
||||||
{
|
{
|
||||||
static int template1len = sizeof("<module '' (built-in)>") + 1;
|
|
||||||
static int template2len = sizeof("<module '' from ''>") + 1;
|
|
||||||
|
|
||||||
char *buf;
|
|
||||||
char *name;
|
char *name;
|
||||||
char *filename;
|
char *filename;
|
||||||
PyObject *rtn;
|
|
||||||
|
|
||||||
name = PyModule_GetName((PyObject *)m);
|
name = PyModule_GetName((PyObject *)m);
|
||||||
if (name == NULL) {
|
if (name == NULL) {
|
||||||
|
@ -173,19 +168,9 @@ module_repr(PyModuleObject *m)
|
||||||
filename = PyModule_GetFilename((PyObject *)m);
|
filename = PyModule_GetFilename((PyObject *)m);
|
||||||
if (filename == NULL) {
|
if (filename == NULL) {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
buf = PyObject_MALLOC(
|
return PyString_FromFormat("<module '%s' (built-in)>", name);
|
||||||
sizeof(char) * (strlen(name) + template1len));
|
|
||||||
sprintf(buf, "<module '%s' (built-in)>", name);
|
|
||||||
}
|
}
|
||||||
else {
|
return PyString_FromFormat("<module '%s' from '%s'>", name, filename);
|
||||||
buf = PyObject_MALLOC(
|
|
||||||
sizeof(char) * (strlen(name) + strlen(filename) +
|
|
||||||
template2len));
|
|
||||||
sprintf(buf, "<module '%s' from '%s'>", name, filename);
|
|
||||||
}
|
|
||||||
rtn = PyString_FromString(buf);
|
|
||||||
PyObject_FREE(buf);
|
|
||||||
return rtn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We only need a traverse function, no clear function: If the module
|
/* We only need a traverse function, no clear function: If the module
|
||||||
|
|
|
@ -222,6 +222,7 @@ void _PyGC_Dump(PyGC_Head* op)
|
||||||
}
|
}
|
||||||
#endif /* WITH_CYCLE_GC */
|
#endif /* WITH_CYCLE_GC */
|
||||||
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyObject_Repr(PyObject *v)
|
PyObject_Repr(PyObject *v)
|
||||||
{
|
{
|
||||||
|
@ -235,12 +236,9 @@ PyObject_Repr(PyObject *v)
|
||||||
#endif
|
#endif
|
||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
return PyString_FromString("<NULL>");
|
return PyString_FromString("<NULL>");
|
||||||
else if (v->ob_type->tp_repr == NULL) {
|
else if (v->ob_type->tp_repr == NULL)
|
||||||
char buf[120];
|
return PyString_FromFormat("<%s object at %p",
|
||||||
sprintf(buf, "<%.80s object at %p>",
|
v->ob_type->tp_name, v);
|
||||||
v->ob_type->tp_name, v);
|
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
res = (*v->ob_type->tp_repr)(v);
|
res = (*v->ob_type->tp_repr)(v);
|
||||||
|
|
|
@ -126,30 +126,30 @@ range_length(rangeobject *r)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
range_repr(rangeobject *r)
|
range_repr(rangeobject *r)
|
||||||
{
|
{
|
||||||
/* buffers must be big enough to hold 3 longs + an int +
|
PyObject *rtn;
|
||||||
* a bit of "(xrange(...) * ...)" text.
|
|
||||||
*/
|
|
||||||
char buf1[250];
|
|
||||||
char buf2[250];
|
|
||||||
|
|
||||||
if (r->start == 0 && r->step == 1)
|
if (r->start == 0 && r->step == 1)
|
||||||
sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
|
rtn = PyString_FromFormat("xrange(%ld)",
|
||||||
|
r->start + r->len * r->step);
|
||||||
|
|
||||||
else if (r->step == 1)
|
else if (r->step == 1)
|
||||||
sprintf(buf1, "xrange(%ld, %ld)",
|
rtn = PyString_FromFormat("xrange(%ld, %ld)",
|
||||||
r->start,
|
r->start,
|
||||||
r->start + r->len * r->step);
|
r->start + r->len * r->step);
|
||||||
|
|
||||||
else
|
else
|
||||||
sprintf(buf1, "xrange(%ld, %ld, %ld)",
|
rtn = PyString_FromFormat("xrange(%ld, %ld, %ld)",
|
||||||
r->start,
|
r->start,
|
||||||
r->start + r->len * r->step,
|
r->start + r->len * r->step,
|
||||||
r->step);
|
r->step);
|
||||||
|
if (r->reps != 1) {
|
||||||
if (r->reps != 1)
|
PyObject *extra = PyString_FromFormat(
|
||||||
sprintf(buf2, "(%s * %d)", buf1, r->reps);
|
"(%s * %d)",
|
||||||
|
PyString_AS_STRING(rtn), r->reps);
|
||||||
return PyString_FromString(r->reps == 1 ? buf1 : buf2);
|
Py_DECREF(rtn);
|
||||||
|
rtn = extra;
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
|
@ -113,8 +113,7 @@ type_compare(PyObject *v, PyObject *w)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
type_repr(PyTypeObject *type)
|
type_repr(PyTypeObject *type)
|
||||||
{
|
{
|
||||||
PyObject *mod, *name;
|
PyObject *mod, *name, *rtn;
|
||||||
char buf[200];
|
|
||||||
|
|
||||||
mod = type_module(type, NULL);
|
mod = type_module(type, NULL);
|
||||||
if (mod == NULL)
|
if (mod == NULL)
|
||||||
|
@ -126,15 +125,18 @@ type_repr(PyTypeObject *type)
|
||||||
name = type_name(type, NULL);
|
name = type_name(type, NULL);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
|
|
||||||
sprintf(buf, "<type '%.80s.%.80s'>",
|
if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__")) {
|
||||||
PyString_AS_STRING(mod),
|
rtn = PyString_FromFormat("<type '%s.%s'>",
|
||||||
PyString_AS_STRING(name));
|
PyString_AS_STRING(mod),
|
||||||
|
PyString_AS_STRING(name));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
sprintf(buf, "<type '%.80s'>", type->tp_name);
|
rtn = PyString_FromFormat("<type '%s'>", type->tp_name);
|
||||||
|
|
||||||
Py_XDECREF(mod);
|
Py_XDECREF(mod);
|
||||||
Py_DECREF(name);
|
Py_DECREF(name);
|
||||||
return PyString_FromString(buf);
|
return rtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -968,8 +970,7 @@ static PyObject *
|
||||||
object_repr(PyObject *self)
|
object_repr(PyObject *self)
|
||||||
{
|
{
|
||||||
PyTypeObject *type;
|
PyTypeObject *type;
|
||||||
PyObject *mod, *name;
|
PyObject *mod, *name, *rtn;
|
||||||
char buf[200];
|
|
||||||
|
|
||||||
type = self->ob_type;
|
type = self->ob_type;
|
||||||
mod = type_module(type, NULL);
|
mod = type_module(type, NULL);
|
||||||
|
@ -983,15 +984,16 @@ object_repr(PyObject *self)
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
|
if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
|
||||||
sprintf(buf, "<%.80s.%.80s instance at %p>",
|
rtn = PyString_FromFormat("<%s.%s instance at %p>",
|
||||||
PyString_AS_STRING(mod),
|
PyString_AS_STRING(mod),
|
||||||
PyString_AS_STRING(name),
|
PyString_AS_STRING(name),
|
||||||
self);
|
self);
|
||||||
else
|
else
|
||||||
sprintf(buf, "<%.80s instance at %p>", type->tp_name, self);
|
rtn = PyString_FromFormat("<%s instance at %p>",
|
||||||
|
type->tp_name, self);
|
||||||
Py_XDECREF(mod);
|
Py_XDECREF(mod);
|
||||||
Py_DECREF(name);
|
Py_DECREF(name);
|
||||||
return PyString_FromString(buf);
|
return rtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -2590,13 +2592,9 @@ slot_tp_repr(PyObject *self)
|
||||||
Py_DECREF(func);
|
Py_DECREF(func);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
else {
|
PyErr_Clear();
|
||||||
char buf[120];
|
return PyString_FromFormat("<%s object at %p>",
|
||||||
PyErr_Clear();
|
self->ob_type->tp_name, self);
|
||||||
sprintf(buf, "<%.80s object at %p>",
|
|
||||||
self->ob_type->tp_name, self);
|
|
||||||
return PyString_FromString(buf);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue