]> granicus.if.org Git - python/commitdiff
Inline call to _PyObject_GetDictPtr() in PyObject_GenericGetAttr().
authorGuido van Rossum <guido@python.org>
Mon, 19 Aug 2002 16:50:48 +0000 (16:50 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 19 Aug 2002 16:50:48 +0000 (16:50 +0000)
This causes a modest speedup.

Objects/object.c

index 70ff3eda0417530dce8feb9c217eaceb50855160..5120eb52f688755e88fdf746f28d312b827783d4 100644 (file)
@@ -1292,6 +1292,7 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
        PyObject *descr;
        PyObject *res = NULL;
        descrgetfunc f;
+       long dictoffset;
        PyObject **dictptr;
 
        if (!PyString_Check(name)){
@@ -1330,9 +1331,25 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
                }
        }
 
-       dictptr = _PyObject_GetDictPtr(obj);
-       if (dictptr != NULL) {
-               PyObject *dict = *dictptr;
+       /* Inline _PyObject_GetDictPtr */
+       dictoffset = tp->tp_dictoffset;
+       if (dictoffset != 0) {
+               PyObject *dict;
+               if (dictoffset < 0) {
+                       int tsize;
+                       size_t size;
+
+                       tsize = ((PyVarObject *)obj)->ob_size;
+                       if (tsize < 0)
+                               tsize = -tsize;
+                       size = _PyObject_VAR_SIZE(tp, tsize);
+
+                       dictoffset += (long)size;
+                       assert(dictoffset > 0);
+                       assert(dictoffset % SIZEOF_VOID_P == 0);
+               }
+               dictptr = (PyObject **) ((char *)obj + dictoffset);
+               dict = *dictptr;
                if (dict != NULL) {
                        res = PyDict_GetItem(dict, name);
                        if (res != NULL) {