Commit 841db065 authored by Jim Fulton's avatar Jim Fulton

Extended compile option to implicitly acquire __roles__ to

implicitly acquire roles even for explicit acquirers.
parent 679fc2e8
/* /*
$Id: Acquisition.c,v 1.12 1997/11/19 13:39:32 jim Exp $ $Id: Acquisition.c,v 1.13 1997/11/19 13:51:14 jim Exp $
Acquisition Wrappers -- Implementation of acquisition through wrappers Acquisition Wrappers -- Implementation of acquisition through wrappers
...@@ -168,7 +168,7 @@ Wrapper__init__(Wrapper *self, PyObject *args) ...@@ -168,7 +168,7 @@ Wrapper__init__(Wrapper *self, PyObject *args)
/* ---------- */ /* ---------- */
static Wrapper * static PyObject *
newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype) newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype)
{ {
Wrapper *self; Wrapper *self;
...@@ -178,7 +178,7 @@ newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype) ...@@ -178,7 +178,7 @@ newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype)
Py_INCREF(container); Py_INCREF(container);
self->obj=obj; self->obj=obj;
self->container=container; self->container=container;
return self; return OBJECT(self);
} }
...@@ -203,14 +203,14 @@ Wrapper_getattro(Wrapper *self, PyObject *oname) ...@@ -203,14 +203,14 @@ Wrapper_getattro(Wrapper *self, PyObject *oname)
if(r->ob_refcnt==1) if(r->ob_refcnt==1)
{ {
Py_INCREF(self); Py_INCREF(self);
ASSIGN(((Wrapper*)r)->container,(PyObject*)self); ASSIGN(((Wrapper*)r)->container,OBJECT(self));
} }
else else
ASSIGN(r,(PyObject*)newWrapper(((Wrapper*)r)->obj, ASSIGN(r, newWrapper(((Wrapper*)r)->obj,
(PyObject*)self,self->ob_type)); OBJECT(self),self->ob_type));
} }
else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj) else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj)
ASSIGN(r,PyECMethod_New(r,(PyObject*)self)); ASSIGN(r,PyECMethod_New(r,OBJECT(self)));
else if(has__of__(r)) else if(has__of__(r))
ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL)); ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL));
return r; return r;
...@@ -228,7 +228,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname) ...@@ -228,7 +228,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname)
{ {
if(strcmp(name,"acquire")==0) if(strcmp(name,"acquire")==0)
{ {
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
} }
if(strcmp(name,"parent")==0) if(strcmp(name,"parent")==0)
{ {
...@@ -255,7 +255,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname) ...@@ -255,7 +255,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname)
} }
if(*name++=='_' && strcmp(name,"_init__")==0) if(*name++=='_' && strcmp(name,"_init__")==0)
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
PyErr_SetObject(PyExc_AttributeError,oname); PyErr_SetObject(PyExc_AttributeError,oname);
return NULL; return NULL;
...@@ -274,14 +274,14 @@ Xaq_getattro(Wrapper *self, PyObject *oname) ...@@ -274,14 +274,14 @@ Xaq_getattro(Wrapper *self, PyObject *oname)
if(r->ob_refcnt==1) if(r->ob_refcnt==1)
{ {
Py_INCREF(self); Py_INCREF(self);
ASSIGN(((Wrapper*)r)->container,(PyObject*)self); ASSIGN(((Wrapper*)r)->container,OBJECT(self));
} }
else else
ASSIGN(r,(PyObject*)newWrapper(((Wrapper*)r)->obj, ASSIGN(r, newWrapper(((Wrapper*)r)->obj,
(PyObject*)self, self->ob_type)); OBJECT(self), self->ob_type));
} }
else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj) else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj)
ASSIGN(r,PyECMethod_New(r,(PyObject*)self)); ASSIGN(r,PyECMethod_New(r,OBJECT(self)));
else if(has__of__(r)) else if(has__of__(r))
ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL)); ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL));
return r; return r;
...@@ -291,16 +291,21 @@ Xaq_getattro(Wrapper *self, PyObject *oname) ...@@ -291,16 +291,21 @@ Xaq_getattro(Wrapper *self, PyObject *oname)
name=PyString_AsString(oname); name=PyString_AsString(oname);
if(*name=='a' && strcmp(name,"acquire")==0) if(*name=='a' && strcmp(name,"acquire")==0)
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
if(*name=='_' && strcmp(name,"__init__")==0) if(*name=='_')
return Py_FindAttr((PyObject*)self,oname); {
if(strcmp(name,"__init__")==0) return Py_FindAttr(OBJECT(self),oname);
#ifdef IMPLICIT_ACQUIRE___ROLES__
if(strcmp(name,"__roles__")==0) return Wrapper_getattro(self,oname);
#endif
}
if(*name++=='a' && *name++=='q' && *name++=='_') if(*name++=='a' && *name++=='q' && *name++=='_')
{ {
if(strcmp(name,"acquire")==0) if(strcmp(name,"acquire")==0)
{ {
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
} }
if(strcmp(name,"parent")==0) if(strcmp(name,"parent")==0)
{ {
...@@ -318,6 +323,8 @@ Xaq_getattro(Wrapper *self, PyObject *oname) ...@@ -318,6 +323,8 @@ Xaq_getattro(Wrapper *self, PyObject *oname)
} }
} }
PyErr_SetObject(PyExc_AttributeError,oname); PyErr_SetObject(PyExc_AttributeError,oname);
return NULL; return NULL;
} }
...@@ -368,18 +375,18 @@ Wrapper_acquire(Wrapper *self, PyObject *oname, ...@@ -368,18 +375,18 @@ Wrapper_acquire(Wrapper *self, PyObject *oname,
if(r->ob_refcnt==1) if(r->ob_refcnt==1)
{ {
Py_INCREF(self); Py_INCREF(self);
ASSIGN(((Wrapper*)r)->container,(PyObject*)self); ASSIGN(((Wrapper*)r)->container,OBJECT(self));
} }
else else
ASSIGN(r,(PyObject*)newWrapper(((Wrapper*)r)->obj, ASSIGN(r,newWrapper(((Wrapper*)r)->obj,
(PyObject*)self, self->ob_type)); OBJECT(self), self->ob_type));
} }
else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj) else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj)
ASSIGN(r,PyECMethod_New(r,(PyObject*)self)); ASSIGN(r,PyECMethod_New(r,OBJECT(self)));
else if(has__of__(r)) else if(has__of__(r))
ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL)); ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL));
if(filter) if(filter)
switch(apply_filter(filter,self,oname,r,extra,orig)) switch(apply_filter(filter,OBJECT(self),oname,r,extra,orig))
{ {
case -1: return NULL; case -1: return NULL;
case 1: return r; case 1: return r;
...@@ -452,7 +459,7 @@ Wrapper_repr(Wrapper *self) ...@@ -452,7 +459,7 @@ Wrapper_repr(Wrapper *self)
{ {
PyObject *r; PyObject *r;
if((r=PyObject_GetAttr((PyObject*)self,py__repr__))) if((r=PyObject_GetAttr(OBJECT(self),py__repr__)))
{ {
ASSIGN(r,PyObject_CallFunction(r,NULL,NULL)); ASSIGN(r,PyObject_CallFunction(r,NULL,NULL));
return r; return r;
...@@ -469,7 +476,7 @@ Wrapper_str(Wrapper *self) ...@@ -469,7 +476,7 @@ Wrapper_str(Wrapper *self)
{ {
PyObject *r; PyObject *r;
if((r=PyObject_GetAttr((PyObject*)self,py__str__))) if((r=PyObject_GetAttr(OBJECT(self),py__str__)))
{ {
ASSIGN(r,PyObject_CallFunction(r,NULL,NULL)); ASSIGN(r,PyObject_CallFunction(r,NULL,NULL));
return r; return r;
...@@ -491,7 +498,7 @@ static PyObject * ...@@ -491,7 +498,7 @@ static PyObject *
Wrapper_call(Wrapper *self, PyObject *args, PyObject *kw) Wrapper_call(Wrapper *self, PyObject *args, PyObject *kw)
{ {
Py_INCREF(args); Py_INCREF(args);
return CallMethodO((PyObject*)self,py__call__,args,kw); return CallMethodO(OBJECT(self),py__call__,args,kw);
} }
...@@ -504,7 +511,7 @@ Wrapper_length(Wrapper *self) ...@@ -504,7 +511,7 @@ Wrapper_length(Wrapper *self)
long l; long l;
PyObject *r; PyObject *r;
UNLESS(r=CallMethodO((PyObject*)self,py__len__,NULL,NULL)) return -1; UNLESS(r=CallMethodO(OBJECT(self),py__len__,NULL,NULL)) return -1;
l=PyInt_AsLong(r); l=PyInt_AsLong(r);
Py_DECREF(r); Py_DECREF(r);
return l; return l;
...@@ -513,25 +520,25 @@ Wrapper_length(Wrapper *self) ...@@ -513,25 +520,25 @@ Wrapper_length(Wrapper *self)
static PyObject * static PyObject *
Wrapper_concat(Wrapper *self, PyObject *bb) Wrapper_concat(Wrapper *self, PyObject *bb)
{ {
return CallMethodO((PyObject*)self,py__concat__,Build("(O)", bb) ,NULL); return CallMethodO(OBJECT(self),py__concat__,Build("(O)", bb) ,NULL);
} }
static PyObject * static PyObject *
Wrapper_repeat(Wrapper *self, int n) Wrapper_repeat(Wrapper *self, int n)
{ {
return CallMethodO((PyObject*)self,py__repeat__,Build("(i)", n),NULL); return CallMethodO(OBJECT(self),py__repeat__,Build("(i)", n),NULL);
} }
static PyObject * static PyObject *
Wrapper_item(Wrapper *self, int i) Wrapper_item(Wrapper *self, int i)
{ {
return CallMethodO((PyObject*)self,py__getitem__, Build("(i)", i),NULL); return CallMethodO(OBJECT(self),py__getitem__, Build("(i)", i),NULL);
} }
static PyObject * static PyObject *
Wrapper_slice(Wrapper *self, int ilow, int ihigh) Wrapper_slice(Wrapper *self, int ilow, int ihigh)
{ {
return CallMethodO((PyObject*)self,py__getslice__, return CallMethodO(OBJECT(self),py__getslice__,
Build("(ii)", ilow, ihigh),NULL); Build("(ii)", ilow, ihigh),NULL);
} }
...@@ -540,13 +547,13 @@ Wrapper_ass_item(Wrapper *self, int i, PyObject *v) ...@@ -540,13 +547,13 @@ Wrapper_ass_item(Wrapper *self, int i, PyObject *v)
{ {
if(v) if(v)
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__setitem__, UNLESS(v=CallMethodO(OBJECT(self),py__setitem__,
Build("(iO)", i, v),NULL)) Build("(iO)", i, v),NULL))
return -1; return -1;
} }
else else
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__delitem__, UNLESS(v=CallMethodO(OBJECT(self),py__delitem__,
Build("(iO)", i),NULL)) Build("(iO)", i),NULL))
return -1; return -1;
} }
...@@ -559,13 +566,13 @@ Wrapper_ass_slice(Wrapper *self, int ilow, int ihigh, PyObject *v) ...@@ -559,13 +566,13 @@ Wrapper_ass_slice(Wrapper *self, int ilow, int ihigh, PyObject *v)
{ {
if(v) if(v)
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__setslice__, UNLESS(v=CallMethodO(OBJECT(self),py__setslice__,
Build("(iiO)", ilow, ihigh, v),NULL)) Build("(iiO)", ilow, ihigh, v),NULL))
return -1; return -1;
} }
else else
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__delslice__, UNLESS(v=CallMethodO(OBJECT(self),py__delslice__,
Build("(ii)", ilow, ihigh),NULL)) Build("(ii)", ilow, ihigh),NULL))
return -1; return -1;
} }
...@@ -590,7 +597,7 @@ static PySequenceMethods Wrapper_as_sequence = { ...@@ -590,7 +597,7 @@ static PySequenceMethods Wrapper_as_sequence = {
static PyObject * static PyObject *
Wrapper_subscript(Wrapper *self, PyObject *key) Wrapper_subscript(Wrapper *self, PyObject *key)
{ {
return CallMethodO((PyObject*)self,py__getitem__,Build("(O)", key),NULL); return CallMethodO(OBJECT(self),py__getitem__,Build("(O)", key),NULL);
} }
static int static int
...@@ -598,13 +605,13 @@ Wrapper_ass_sub(Wrapper *self, PyObject *key, PyObject *v) ...@@ -598,13 +605,13 @@ Wrapper_ass_sub(Wrapper *self, PyObject *key, PyObject *v)
{ {
if(v) if(v)
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__setitem__, UNLESS(v=CallMethodO(OBJECT(self),py__setitem__,
Build("(OO)", key, v),NULL)) Build("(OO)", key, v),NULL))
return -1; return -1;
} }
else else
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__delitem__, UNLESS(v=CallMethodO(OBJECT(self),py__delitem__,
Build("(O)", key),NULL)) Build("(O)", key),NULL))
return -1; return -1;
} }
...@@ -627,7 +634,7 @@ Wrapper_acquire_method(Wrapper *self, PyObject *args) ...@@ -627,7 +634,7 @@ Wrapper_acquire_method(Wrapper *self, PyObject *args)
UNLESS(PyArg_ParseTuple(args,"O|OO",&name,&filter,&extra)) return NULL; UNLESS(PyArg_ParseTuple(args,"O|OO",&name,&filter,&extra)) return NULL;
return Wrapper_acquire(self,name,filter,extra,self); return Wrapper_acquire(self,name,filter,extra,OBJECT(self));
} }
static struct PyMethodDef Wrapper_methods[] = { static struct PyMethodDef Wrapper_methods[] = {
...@@ -713,7 +720,7 @@ acquire_of(PyObject *self, PyObject *args) ...@@ -713,7 +720,7 @@ acquire_of(PyObject *self, PyObject *args)
return NULL; return NULL;
} }
return (PyObject*)newWrapper(self,args,(PyTypeObject *)&Wrappertype); return newWrapper(self,args,(PyTypeObject *)&Wrappertype);
} }
static PyObject * static PyObject *
...@@ -731,7 +738,7 @@ xaq_of(PyObject *self, PyObject *args) ...@@ -731,7 +738,7 @@ xaq_of(PyObject *self, PyObject *args)
return NULL; return NULL;
} }
return (PyObject*)newWrapper(self,args,(PyTypeObject *)&XaqWrappertype); return newWrapper(self,args,(PyTypeObject *)&XaqWrappertype);
} }
static struct PyMethodDef Acquirer_methods[] = { static struct PyMethodDef Acquirer_methods[] = {
...@@ -752,7 +759,7 @@ void ...@@ -752,7 +759,7 @@ void
initAcquisition() initAcquisition()
{ {
PyObject *m, *d; PyObject *m, *d;
char *rev="$Revision: 1.12 $"; char *rev="$Revision: 1.13 $";
PURE_MIXIN_CLASS(Acquirer, PURE_MIXIN_CLASS(Acquirer,
"Base class for objects that implicitly" "Base class for objects that implicitly"
" acquire attributes from containers\n" " acquire attributes from containers\n"
...@@ -767,8 +774,8 @@ initAcquisition() ...@@ -767,8 +774,8 @@ initAcquisition()
/* Create the module and add the functions */ /* Create the module and add the functions */
m = Py_InitModule4("Acquisition", methods, m = Py_InitModule4("Acquisition", methods,
"Provide base classes for acquiring objects\n\n" "Provide base classes for acquiring objects\n\n"
"$Id: Acquisition.c,v 1.12 1997/11/19 13:39:32 jim Exp $\n", "$Id: Acquisition.c,v 1.13 1997/11/19 13:51:14 jim Exp $\n",
(PyObject*)NULL,PYTHON_API_VERSION); OBJECT(NULL),PYTHON_API_VERSION);
d = PyModule_GetDict(m); d = PyModule_GetDict(m);
init_py_names(); init_py_names();
...@@ -789,6 +796,10 @@ initAcquisition() ...@@ -789,6 +796,10 @@ initAcquisition()
/***************************************************************************** /*****************************************************************************
$Log: Acquisition.c,v $ $Log: Acquisition.c,v $
Revision 1.13 1997/11/19 13:51:14 jim
Extended compile option to implicitly acquire __roles__ to
implicitly acquire roles even for explicit acquirers.
Revision 1.12 1997/11/19 13:39:32 jim Revision 1.12 1997/11/19 13:39:32 jim
Changed filter machinery so that wrapped objects are used as Changed filter machinery so that wrapped objects are used as
inst and parent in filter. inst and parent in filter.
......
/* /*
$Id: Acquisition.c,v 1.12 1997/11/19 13:39:32 jim Exp $ $Id: Acquisition.c,v 1.13 1997/11/19 13:51:14 jim Exp $
Acquisition Wrappers -- Implementation of acquisition through wrappers Acquisition Wrappers -- Implementation of acquisition through wrappers
...@@ -168,7 +168,7 @@ Wrapper__init__(Wrapper *self, PyObject *args) ...@@ -168,7 +168,7 @@ Wrapper__init__(Wrapper *self, PyObject *args)
/* ---------- */ /* ---------- */
static Wrapper * static PyObject *
newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype) newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype)
{ {
Wrapper *self; Wrapper *self;
...@@ -178,7 +178,7 @@ newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype) ...@@ -178,7 +178,7 @@ newWrapper(PyObject *obj, PyObject *container, PyTypeObject *Wrappertype)
Py_INCREF(container); Py_INCREF(container);
self->obj=obj; self->obj=obj;
self->container=container; self->container=container;
return self; return OBJECT(self);
} }
...@@ -203,14 +203,14 @@ Wrapper_getattro(Wrapper *self, PyObject *oname) ...@@ -203,14 +203,14 @@ Wrapper_getattro(Wrapper *self, PyObject *oname)
if(r->ob_refcnt==1) if(r->ob_refcnt==1)
{ {
Py_INCREF(self); Py_INCREF(self);
ASSIGN(((Wrapper*)r)->container,(PyObject*)self); ASSIGN(((Wrapper*)r)->container,OBJECT(self));
} }
else else
ASSIGN(r,(PyObject*)newWrapper(((Wrapper*)r)->obj, ASSIGN(r, newWrapper(((Wrapper*)r)->obj,
(PyObject*)self,self->ob_type)); OBJECT(self),self->ob_type));
} }
else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj) else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj)
ASSIGN(r,PyECMethod_New(r,(PyObject*)self)); ASSIGN(r,PyECMethod_New(r,OBJECT(self)));
else if(has__of__(r)) else if(has__of__(r))
ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL)); ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL));
return r; return r;
...@@ -228,7 +228,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname) ...@@ -228,7 +228,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname)
{ {
if(strcmp(name,"acquire")==0) if(strcmp(name,"acquire")==0)
{ {
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
} }
if(strcmp(name,"parent")==0) if(strcmp(name,"parent")==0)
{ {
...@@ -255,7 +255,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname) ...@@ -255,7 +255,7 @@ Wrapper_getattro(Wrapper *self, PyObject *oname)
} }
if(*name++=='_' && strcmp(name,"_init__")==0) if(*name++=='_' && strcmp(name,"_init__")==0)
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
PyErr_SetObject(PyExc_AttributeError,oname); PyErr_SetObject(PyExc_AttributeError,oname);
return NULL; return NULL;
...@@ -274,14 +274,14 @@ Xaq_getattro(Wrapper *self, PyObject *oname) ...@@ -274,14 +274,14 @@ Xaq_getattro(Wrapper *self, PyObject *oname)
if(r->ob_refcnt==1) if(r->ob_refcnt==1)
{ {
Py_INCREF(self); Py_INCREF(self);
ASSIGN(((Wrapper*)r)->container,(PyObject*)self); ASSIGN(((Wrapper*)r)->container,OBJECT(self));
} }
else else
ASSIGN(r,(PyObject*)newWrapper(((Wrapper*)r)->obj, ASSIGN(r, newWrapper(((Wrapper*)r)->obj,
(PyObject*)self, self->ob_type)); OBJECT(self), self->ob_type));
} }
else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj) else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj)
ASSIGN(r,PyECMethod_New(r,(PyObject*)self)); ASSIGN(r,PyECMethod_New(r,OBJECT(self)));
else if(has__of__(r)) else if(has__of__(r))
ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL)); ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL));
return r; return r;
...@@ -291,16 +291,21 @@ Xaq_getattro(Wrapper *self, PyObject *oname) ...@@ -291,16 +291,21 @@ Xaq_getattro(Wrapper *self, PyObject *oname)
name=PyString_AsString(oname); name=PyString_AsString(oname);
if(*name=='a' && strcmp(name,"acquire")==0) if(*name=='a' && strcmp(name,"acquire")==0)
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
if(*name=='_' && strcmp(name,"__init__")==0) if(*name=='_')
return Py_FindAttr((PyObject*)self,oname); {
if(strcmp(name,"__init__")==0) return Py_FindAttr(OBJECT(self),oname);
#ifdef IMPLICIT_ACQUIRE___ROLES__
if(strcmp(name,"__roles__")==0) return Wrapper_getattro(self,oname);
#endif
}
if(*name++=='a' && *name++=='q' && *name++=='_') if(*name++=='a' && *name++=='q' && *name++=='_')
{ {
if(strcmp(name,"acquire")==0) if(strcmp(name,"acquire")==0)
{ {
return Py_FindAttr((PyObject*)self,oname); return Py_FindAttr(OBJECT(self),oname);
} }
if(strcmp(name,"parent")==0) if(strcmp(name,"parent")==0)
{ {
...@@ -318,6 +323,8 @@ Xaq_getattro(Wrapper *self, PyObject *oname) ...@@ -318,6 +323,8 @@ Xaq_getattro(Wrapper *self, PyObject *oname)
} }
} }
PyErr_SetObject(PyExc_AttributeError,oname); PyErr_SetObject(PyExc_AttributeError,oname);
return NULL; return NULL;
} }
...@@ -368,18 +375,18 @@ Wrapper_acquire(Wrapper *self, PyObject *oname, ...@@ -368,18 +375,18 @@ Wrapper_acquire(Wrapper *self, PyObject *oname,
if(r->ob_refcnt==1) if(r->ob_refcnt==1)
{ {
Py_INCREF(self); Py_INCREF(self);
ASSIGN(((Wrapper*)r)->container,(PyObject*)self); ASSIGN(((Wrapper*)r)->container,OBJECT(self));
} }
else else
ASSIGN(r,(PyObject*)newWrapper(((Wrapper*)r)->obj, ASSIGN(r,newWrapper(((Wrapper*)r)->obj,
(PyObject*)self, self->ob_type)); OBJECT(self), self->ob_type));
} }
else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj) else if(PyECMethod_Check(r) && PyECMethod_Self(r)==self->obj)
ASSIGN(r,PyECMethod_New(r,(PyObject*)self)); ASSIGN(r,PyECMethod_New(r,OBJECT(self)));
else if(has__of__(r)) else if(has__of__(r))
ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL)); ASSIGN(r,CallMethodO(r,py__of__,Build("(O)", self), NULL));
if(filter) if(filter)
switch(apply_filter(filter,self,oname,r,extra,orig)) switch(apply_filter(filter,OBJECT(self),oname,r,extra,orig))
{ {
case -1: return NULL; case -1: return NULL;
case 1: return r; case 1: return r;
...@@ -452,7 +459,7 @@ Wrapper_repr(Wrapper *self) ...@@ -452,7 +459,7 @@ Wrapper_repr(Wrapper *self)
{ {
PyObject *r; PyObject *r;
if((r=PyObject_GetAttr((PyObject*)self,py__repr__))) if((r=PyObject_GetAttr(OBJECT(self),py__repr__)))
{ {
ASSIGN(r,PyObject_CallFunction(r,NULL,NULL)); ASSIGN(r,PyObject_CallFunction(r,NULL,NULL));
return r; return r;
...@@ -469,7 +476,7 @@ Wrapper_str(Wrapper *self) ...@@ -469,7 +476,7 @@ Wrapper_str(Wrapper *self)
{ {
PyObject *r; PyObject *r;
if((r=PyObject_GetAttr((PyObject*)self,py__str__))) if((r=PyObject_GetAttr(OBJECT(self),py__str__)))
{ {
ASSIGN(r,PyObject_CallFunction(r,NULL,NULL)); ASSIGN(r,PyObject_CallFunction(r,NULL,NULL));
return r; return r;
...@@ -491,7 +498,7 @@ static PyObject * ...@@ -491,7 +498,7 @@ static PyObject *
Wrapper_call(Wrapper *self, PyObject *args, PyObject *kw) Wrapper_call(Wrapper *self, PyObject *args, PyObject *kw)
{ {
Py_INCREF(args); Py_INCREF(args);
return CallMethodO((PyObject*)self,py__call__,args,kw); return CallMethodO(OBJECT(self),py__call__,args,kw);
} }
...@@ -504,7 +511,7 @@ Wrapper_length(Wrapper *self) ...@@ -504,7 +511,7 @@ Wrapper_length(Wrapper *self)
long l; long l;
PyObject *r; PyObject *r;
UNLESS(r=CallMethodO((PyObject*)self,py__len__,NULL,NULL)) return -1; UNLESS(r=CallMethodO(OBJECT(self),py__len__,NULL,NULL)) return -1;
l=PyInt_AsLong(r); l=PyInt_AsLong(r);
Py_DECREF(r); Py_DECREF(r);
return l; return l;
...@@ -513,25 +520,25 @@ Wrapper_length(Wrapper *self) ...@@ -513,25 +520,25 @@ Wrapper_length(Wrapper *self)
static PyObject * static PyObject *
Wrapper_concat(Wrapper *self, PyObject *bb) Wrapper_concat(Wrapper *self, PyObject *bb)
{ {
return CallMethodO((PyObject*)self,py__concat__,Build("(O)", bb) ,NULL); return CallMethodO(OBJECT(self),py__concat__,Build("(O)", bb) ,NULL);
} }
static PyObject * static PyObject *
Wrapper_repeat(Wrapper *self, int n) Wrapper_repeat(Wrapper *self, int n)
{ {
return CallMethodO((PyObject*)self,py__repeat__,Build("(i)", n),NULL); return CallMethodO(OBJECT(self),py__repeat__,Build("(i)", n),NULL);
} }
static PyObject * static PyObject *
Wrapper_item(Wrapper *self, int i) Wrapper_item(Wrapper *self, int i)
{ {
return CallMethodO((PyObject*)self,py__getitem__, Build("(i)", i),NULL); return CallMethodO(OBJECT(self),py__getitem__, Build("(i)", i),NULL);
} }
static PyObject * static PyObject *
Wrapper_slice(Wrapper *self, int ilow, int ihigh) Wrapper_slice(Wrapper *self, int ilow, int ihigh)
{ {
return CallMethodO((PyObject*)self,py__getslice__, return CallMethodO(OBJECT(self),py__getslice__,
Build("(ii)", ilow, ihigh),NULL); Build("(ii)", ilow, ihigh),NULL);
} }
...@@ -540,13 +547,13 @@ Wrapper_ass_item(Wrapper *self, int i, PyObject *v) ...@@ -540,13 +547,13 @@ Wrapper_ass_item(Wrapper *self, int i, PyObject *v)
{ {
if(v) if(v)
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__setitem__, UNLESS(v=CallMethodO(OBJECT(self),py__setitem__,
Build("(iO)", i, v),NULL)) Build("(iO)", i, v),NULL))
return -1; return -1;
} }
else else
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__delitem__, UNLESS(v=CallMethodO(OBJECT(self),py__delitem__,
Build("(iO)", i),NULL)) Build("(iO)", i),NULL))
return -1; return -1;
} }
...@@ -559,13 +566,13 @@ Wrapper_ass_slice(Wrapper *self, int ilow, int ihigh, PyObject *v) ...@@ -559,13 +566,13 @@ Wrapper_ass_slice(Wrapper *self, int ilow, int ihigh, PyObject *v)
{ {
if(v) if(v)
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__setslice__, UNLESS(v=CallMethodO(OBJECT(self),py__setslice__,
Build("(iiO)", ilow, ihigh, v),NULL)) Build("(iiO)", ilow, ihigh, v),NULL))
return -1; return -1;
} }
else else
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__delslice__, UNLESS(v=CallMethodO(OBJECT(self),py__delslice__,
Build("(ii)", ilow, ihigh),NULL)) Build("(ii)", ilow, ihigh),NULL))
return -1; return -1;
} }
...@@ -590,7 +597,7 @@ static PySequenceMethods Wrapper_as_sequence = { ...@@ -590,7 +597,7 @@ static PySequenceMethods Wrapper_as_sequence = {
static PyObject * static PyObject *
Wrapper_subscript(Wrapper *self, PyObject *key) Wrapper_subscript(Wrapper *self, PyObject *key)
{ {
return CallMethodO((PyObject*)self,py__getitem__,Build("(O)", key),NULL); return CallMethodO(OBJECT(self),py__getitem__,Build("(O)", key),NULL);
} }
static int static int
...@@ -598,13 +605,13 @@ Wrapper_ass_sub(Wrapper *self, PyObject *key, PyObject *v) ...@@ -598,13 +605,13 @@ Wrapper_ass_sub(Wrapper *self, PyObject *key, PyObject *v)
{ {
if(v) if(v)
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__setitem__, UNLESS(v=CallMethodO(OBJECT(self),py__setitem__,
Build("(OO)", key, v),NULL)) Build("(OO)", key, v),NULL))
return -1; return -1;
} }
else else
{ {
UNLESS(v=CallMethodO((PyObject*)self,py__delitem__, UNLESS(v=CallMethodO(OBJECT(self),py__delitem__,
Build("(O)", key),NULL)) Build("(O)", key),NULL))
return -1; return -1;
} }
...@@ -627,7 +634,7 @@ Wrapper_acquire_method(Wrapper *self, PyObject *args) ...@@ -627,7 +634,7 @@ Wrapper_acquire_method(Wrapper *self, PyObject *args)
UNLESS(PyArg_ParseTuple(args,"O|OO",&name,&filter,&extra)) return NULL; UNLESS(PyArg_ParseTuple(args,"O|OO",&name,&filter,&extra)) return NULL;
return Wrapper_acquire(self,name,filter,extra,self); return Wrapper_acquire(self,name,filter,extra,OBJECT(self));
} }
static struct PyMethodDef Wrapper_methods[] = { static struct PyMethodDef Wrapper_methods[] = {
...@@ -713,7 +720,7 @@ acquire_of(PyObject *self, PyObject *args) ...@@ -713,7 +720,7 @@ acquire_of(PyObject *self, PyObject *args)
return NULL; return NULL;
} }
return (PyObject*)newWrapper(self,args,(PyTypeObject *)&Wrappertype); return newWrapper(self,args,(PyTypeObject *)&Wrappertype);
} }
static PyObject * static PyObject *
...@@ -731,7 +738,7 @@ xaq_of(PyObject *self, PyObject *args) ...@@ -731,7 +738,7 @@ xaq_of(PyObject *self, PyObject *args)
return NULL; return NULL;
} }
return (PyObject*)newWrapper(self,args,(PyTypeObject *)&XaqWrappertype); return newWrapper(self,args,(PyTypeObject *)&XaqWrappertype);
} }
static struct PyMethodDef Acquirer_methods[] = { static struct PyMethodDef Acquirer_methods[] = {
...@@ -752,7 +759,7 @@ void ...@@ -752,7 +759,7 @@ void
initAcquisition() initAcquisition()
{ {
PyObject *m, *d; PyObject *m, *d;
char *rev="$Revision: 1.12 $"; char *rev="$Revision: 1.13 $";
PURE_MIXIN_CLASS(Acquirer, PURE_MIXIN_CLASS(Acquirer,
"Base class for objects that implicitly" "Base class for objects that implicitly"
" acquire attributes from containers\n" " acquire attributes from containers\n"
...@@ -767,8 +774,8 @@ initAcquisition() ...@@ -767,8 +774,8 @@ initAcquisition()
/* Create the module and add the functions */ /* Create the module and add the functions */
m = Py_InitModule4("Acquisition", methods, m = Py_InitModule4("Acquisition", methods,
"Provide base classes for acquiring objects\n\n" "Provide base classes for acquiring objects\n\n"
"$Id: Acquisition.c,v 1.12 1997/11/19 13:39:32 jim Exp $\n", "$Id: Acquisition.c,v 1.13 1997/11/19 13:51:14 jim Exp $\n",
(PyObject*)NULL,PYTHON_API_VERSION); OBJECT(NULL),PYTHON_API_VERSION);
d = PyModule_GetDict(m); d = PyModule_GetDict(m);
init_py_names(); init_py_names();
...@@ -789,6 +796,10 @@ initAcquisition() ...@@ -789,6 +796,10 @@ initAcquisition()
/***************************************************************************** /*****************************************************************************
$Log: Acquisition.c,v $ $Log: Acquisition.c,v $
Revision 1.13 1997/11/19 13:51:14 jim
Extended compile option to implicitly acquire __roles__ to
implicitly acquire roles even for explicit acquirers.
Revision 1.12 1997/11/19 13:39:32 jim Revision 1.12 1997/11/19 13:39:32 jim
Changed filter machinery so that wrapped objects are used as Changed filter machinery so that wrapped objects are used as
inst and parent in filter. inst and parent in filter.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment