]> granicus.if.org Git - python/commitdiff
Some modernization. Get rid of the redundant next() method. Always
authorGuido van Rossum <guido@python.org>
Wed, 17 Jul 2002 16:15:35 +0000 (16:15 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 17 Jul 2002 16:15:35 +0000 (16:15 +0000)
assume tp_iter and later fields exist.  Use PyObject_GenericGetAttr
instead of providing our own tp_getattr hook.

Modules/_hotshot.c

index 3426e973f287aaaade110d009194d4a578e0b9ef..4a0fbd806530c8225fa6fdac9577f465262b32c8 100644 (file)
@@ -120,18 +120,12 @@ logreader_close(LogReaderObject *self, PyObject *args)
     return result;
 }
 
-#if Py_TPFLAGS_HAVE_ITER
-/* This is only used if the interpreter has iterator support; the
- * iternext handler is also used as a helper for other functions, so
- * does not need to be included in this conditional section.
- */
 static PyObject *
 logreader_tp_iter(LogReaderObject *self)
 {
     Py_INCREF(self);
     return (PyObject *) self;
 }
-#endif
 
 
 /* Log File Format
@@ -522,27 +516,6 @@ logreader_sq_item(LogReaderObject *self, int index)
     return result;
 }
 
-PyDoc_STRVAR(next__doc__,
-"next() -> event-info\n"
-"Return the next event record from the log file.");
-
-static PyObject *
-logreader_next(LogReaderObject *self, PyObject *args)
-{
-    PyObject *result = NULL;
-
-    if (PyArg_ParseTuple(args, ":next")) {
-        result = logreader_tp_iternext(self);
-        /* XXX return None if there's nothing left */
-        /* tp_iternext does the right thing, though */
-        if (result == NULL && !PyErr_Occurred()) {
-            result = Py_None;
-            Py_INCREF(result);
-        }
-    }
-    return result;
-}
-
 static void
 do_stop(ProfilerObject *self);
 
@@ -1181,10 +1154,6 @@ profiler_dealloc(ProfilerObject *self)
     PyObject_Del((PyObject *)self);
 }
 
-/* Always use METH_VARARGS even though some of these could be METH_NOARGS;
- * this allows us to maintain compatibility with Python versions < 2.2
- * more easily, requiring only the changes to the dispatcher to be made.
- */
 static PyMethodDef profiler_methods[] = {
     {"addinfo", (PyCFunction)profiler_addinfo, METH_VARARGS, addinfo__doc__},
     {"close",   (PyCFunction)profiler_close,   METH_VARARGS, close__doc__},
@@ -1195,11 +1164,7 @@ static PyMethodDef profiler_methods[] = {
     {NULL, NULL}
 };
 
-/* Use a table even though there's only one "simple" member; this allows
- * __members__ and therefore dir() to work.
- */
-static struct memberlist profiler_members[] = {
-    {"closed",       T_INT,  -1, READONLY},
+static PyMemberDef profiler_members[] = {
     {"frametimings", T_LONG, offsetof(ProfilerObject, linetimings), READONLY},
     {"lineevents",   T_LONG, offsetof(ProfilerObject, lineevents), READONLY},
     {"linetimings",  T_LONG, offsetof(ProfilerObject, linetimings), READONLY},
@@ -1207,23 +1172,18 @@ static struct memberlist profiler_members[] = {
 };
 
 static PyObject *
-profiler_getattr(ProfilerObject *self, char *name)
+profiler_get_closed(ProfilerObject *self, void *closure)
 {
-    PyObject *result;
-    if (strcmp(name, "closed") == 0) {
-        result = (self->logfp == NULL) ? Py_True : Py_False;
-        Py_INCREF(result);
-    }
-    else {
-        result = PyMember_Get((char *)self, profiler_members, name);
-        if (result == NULL) {
-            PyErr_Clear();
-            result = Py_FindMethod(profiler_methods, (PyObject *)self, name);
-        }
-    }
+    PyObject *result = (self->logfp == NULL) ? Py_True : Py_False;
+    Py_INCREF(result);
     return result;
 }
 
+static PyGetSetDef profiler_getsets[] = {
+    {"closed", (getter)profiler_get_closed, NULL},
+    {NULL}
+};
+
 
 PyDoc_STRVAR(profiler_object__doc__,
 "High-performance profiler object.\n"
@@ -1251,7 +1211,7 @@ static PyTypeObject ProfilerType = {
     0,                                 /* tp_itemsize          */
     (destructor)profiler_dealloc,      /* tp_dealloc           */
     0,                                 /* tp_print             */
-    (getattrfunc)profiler_getattr,     /* tp_getattr           */
+    0,                                 /* tp_getattr           */
     0,                                 /* tp_setattr           */
     0,                                 /* tp_compare           */
     0,                                 /* tp_repr              */
@@ -1261,31 +1221,37 @@ static PyTypeObject ProfilerType = {
     0,                                 /* tp_hash              */
     0,                                 /* tp_call              */
     0,                                 /* tp_str               */
-    0,                                 /* tp_getattro          */
+    PyObject_GenericGetAttr,           /* tp_getattro          */
     0,                                 /* tp_setattro          */
     0,                                 /* tp_as_buffer         */
     Py_TPFLAGS_DEFAULT,                        /* tp_flags             */
     profiler_object__doc__,            /* tp_doc               */
+    0,                                 /* tp_traverse          */
+    0,                                 /* tp_clear             */
+    0,                                 /* tp_richcompare       */
+    0,                                 /* tp_weaklistoffset    */
+    0,                                 /* tp_iter              */
+    0,                                 /* tp_iternext          */
+    profiler_methods,                  /* tp_methods           */
+    profiler_members,                  /* tp_members           */
+    profiler_getsets,                  /* tp_getset            */
+    0,                                 /* tp_base              */
+    0,                                 /* tp_dict              */
+    0,                                 /* tp_descr_get         */
+    0,                                 /* tp_descr_set         */
 };
 
 
 static PyMethodDef logreader_methods[] = {
     {"close",   (PyCFunction)logreader_close,  METH_VARARGS,
      logreader_close__doc__},
-    {"next",    (PyCFunction)logreader_next,   METH_VARARGS,
-     next__doc__},
     {NULL, NULL}
 };
 
-static PyObject *
-logreader_getattr(LogReaderObject *self, char *name)
-{
-    if (strcmp(name, "info") == 0) {
-        Py_INCREF(self->info);
-        return self->info;
-    }
-    return Py_FindMethod(logreader_methods, (PyObject *)self, name);
-}
+static PyMemberDef logreader_members[] = {
+    {"info", T_OBJECT, offsetof(LogReaderObject, info), RO},
+    {NULL}
+};
 
 
 PyDoc_STRVAR(logreader__doc__,
@@ -1313,7 +1279,7 @@ static PyTypeObject LogReaderType = {
     0,                                 /* tp_itemsize          */
     (destructor)logreader_dealloc,     /* tp_dealloc           */
     0,                                 /* tp_print             */
-    (getattrfunc)logreader_getattr,    /* tp_getattr           */
+    0,                                 /* tp_getattr           */
     0,                                 /* tp_setattr           */
     0,                                 /* tp_compare           */
     0,                                 /* tp_repr              */
@@ -1323,19 +1289,24 @@ static PyTypeObject LogReaderType = {
     0,                                 /* tp_hash              */
     0,                                 /* tp_call              */
     0,                                 /* tp_str               */
-    0,                                 /* tp_getattro          */
+    PyObject_GenericGetAttr,           /* tp_getattro          */
     0,                                 /* tp_setattro          */
     0,                                 /* tp_as_buffer         */
     Py_TPFLAGS_DEFAULT,                        /* tp_flags             */
     logreader__doc__,                  /* tp_doc               */
-#if Py_TPFLAGS_HAVE_ITER
     0,                                 /* tp_traverse          */
     0,                                 /* tp_clear             */
     0,                                 /* tp_richcompare       */
     0,                                 /* tp_weaklistoffset    */
     (getiterfunc)logreader_tp_iter,    /* tp_iter              */
     (iternextfunc)logreader_tp_iternext,/* tp_iternext         */
-#endif
+    logreader_methods,                 /* tp_methods           */
+    logreader_members,                 /* tp_members           */
+    0,                                 /* tp_getset            */
+    0,                                 /* tp_base              */
+    0,                                 /* tp_dict              */
+    0,                                 /* tp_descr_get         */
+    0,                                 /* tp_descr_set         */
 };
 
 static PyObject *