[Zope-Checkins] SVN: Zope/branches/philikon-aq/lib/python/Acquisition/_Acquisition.c Factor actual implementation of Wrapper_inContextOf out to a reusable

Philipp von Weitershausen philikon at philikon.de
Fri Jul 27 21:09:31 EDT 2007


Log message for revision 78407:
  Factor actual implementation of Wrapper_inContextOf out to a reusable
  function so that we can write a module-level function for that functionality
  as well.
  

Changed:
  U   Zope/branches/philikon-aq/lib/python/Acquisition/_Acquisition.c

-=-
Modified: Zope/branches/philikon-aq/lib/python/Acquisition/_Acquisition.c
===================================================================
--- Zope/branches/philikon-aq/lib/python/Acquisition/_Acquisition.c	2007-07-28 00:50:00 UTC (rev 78406)
+++ Zope/branches/philikon-aq/lib/python/Acquisition/_Acquisition.c	2007-07-28 01:09:30 UTC (rev 78407)
@@ -1190,49 +1190,45 @@
 # endif
 }
 
-
 static PyObject *
-Wrapper_inContextOf(Wrapper *self, PyObject *args)
+capi_aq_inContextOf(PyObject *self, PyObject *o, int inner)
 {
-  PyObject *subob, *o, *c;
-  int inner=1;
+  PyObject *next, *c;
 
-  UNLESS(PyArg_ParseTuple(args,"O|i",&o,&inner)) return NULL;
-
   if (inner) {
-    /* subob = self */
-    subob = OBJECT(self);
+    /* next = self
+       o = aq_base(o) */
+    next = self;
+    while (isWrapper(o) && WRAPPER(o)->obj)
+      o=WRAPPER(o)->obj;
 
-    /* o = aq_base(o) */
-    while (isWrapper(o) && WRAPPER(o)->obj) o=WRAPPER(o)->obj;
-
     /* while 1: */
     while (1) {
 
-      /*   if aq_base(subob) is o: return 1 */
-      c = subob;
+      /*   if aq_base(next) is o: return 1 */
+      c = next;
       while (isWrapper(c) && WRAPPER(c)->obj) c = WRAPPER(c)->obj;
       if (c == o) return PyInt_FromLong(1);
 
-      /*   self = aq_inner(subob) */
+      /*   self = aq_inner(next) */
       /*   if self is None: break */
-      if (isWrapper(subob)) {
-        self = WRAPPER(subob);
-        while (self->obj && isWrapper(self->obj))
-          self = WRAPPER(self->obj);
+      if (isWrapper(next)) {
+        self = next;
+        while (WRAPPER(self)->obj && isWrapper(WRAPPER(self)->obj))
+          self = WRAPPER(self)->obj;
       }
       else break;
 
-      /*   subob = aq_parent(self) */
-      /*   if subob is None: break */
-      if (self->container)
-        subob = self->container;
+      /*   next = aq_parent(self) */
+      /*   if next is None: break */
+      if (WRAPPER(self)->container)
+        next = WRAPPER(self)->container;
       else break;
     }
   }
   else {
     /* Follow wrappers instead. */
-    c = OBJECT(self);
+    c = (PyObject*)self;
     while (1) {
       if (c==o) return PyInt_FromLong(1);
       if (c && isWrapper(c)) c=WRAPPER(c)->container;
@@ -1243,6 +1239,18 @@
   return PyInt_FromLong(0);
 }
 
+
+static PyObject *
+Wrapper_inContextOf(Wrapper *self, PyObject *args)
+{
+  PyObject *o;
+
+  int inner=1;
+  UNLESS(PyArg_ParseTuple(args,"O|i",&o,&inner)) return NULL;
+
+  return capi_aq_inContextOf((PyObject*)self, o, inner);
+}
+
 PyObject *
 Wrappers_are_not_picklable(PyObject *wrapper, PyObject *args)
 {



More information about the Zope-Checkins mailing list