[Python-checkins] python/dist/src/Mac/Modules/ae _AEmodule.c,1.12,1.13 aesupport.py,1.26,1.27

jackjansen@users.sourceforge.net jackjansen@users.sourceforge.net
Fri, 29 Nov 2002 15:41:13 -0800


Update of /cvsroot/python/python/dist/src/Mac/Modules/ae
In directory sc8-pr-cvs1:/tmp/cvs-serv8673/ae

Modified Files:
	_AEmodule.c aesupport.py 
Log Message:
Converted the Carbon modules to use PEP252-style objects, with
descriptors in stead of manual getattr hooks to get at attributes
of the objects.

For Qd I have in stead gotten rid of most of the attribute access
in favor of the carbon-style accessor methods (with the exception
of visRgn, to be done later), and of the Carbon.Qd.qd global object,
for which accessor functions are also available.

For List I have fixed the fact that various methods were incorrectly
generated as functions.

CF is untouched: PEP252 doesn't allow "poor-mans-inheritance" with
basechain, so it will have to wait for PEP253 support.


Index: _AEmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/ae/_AEmodule.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** _AEmodule.c	16 Aug 2002 09:09:13 -0000	1.12
--- _AEmodule.c	29 Nov 2002 23:40:41 -0000	1.13
***************
*** 21,24 ****
--- 21,27 ----
  
  
+ #ifndef PyDoc_STR
+ #define PyDoc_STR(x) (x)
+ #endif
  #ifdef WITHOUT_FRAMEWORKS
  #include <AppleEvents.h>
***************
*** 36,40 ****
  #endif
  
! static pascal OSErr GenericEventHandler(); /* Forward */
  
  AEEventHandlerUPP upp_GenericEventHandler;
--- 39,49 ----
  #endif
  
! #if UNIVERSAL_INTERFACES_VERSION >= 0x0340
! typedef long refcontype;
! #else
! typedef unsigned long refcontype;
! #endif
! 
! static pascal OSErr GenericEventHandler(const AppleEvent *request, AppleEvent *reply, refcontype refcon); /* Forward */
  
  AEEventHandlerUPP upp_GenericEventHandler;
***************
*** 821,864 ****
  };
  
! PyMethodChain AEDesc_chain = { AEDesc_methods, NULL };
! 
! static PyObject *AEDesc_getattr(AEDescObject *self, char *name)
  {
  
! 	if (strcmp(name, "type") == 0)
! 		return PyMac_BuildOSType(self->ob_itself.descriptorType);
! 	if (strcmp(name, "data") == 0) {
! 		PyObject *res;
! #if !TARGET_API_MAC_CARBON
! 		char state;
! 		state = HGetState(self->ob_itself.dataHandle);
! 		HLock(self->ob_itself.dataHandle);
! 		res = PyString_FromStringAndSize(
! 			*self->ob_itself.dataHandle,
! 			GetHandleSize(self->ob_itself.dataHandle));
! 		HUnlock(self->ob_itself.dataHandle);
! 		HSetState(self->ob_itself.dataHandle, state);
! #else
! 		Size size;
! 		char *ptr;
! 		OSErr err;
! 		
! 		size = AEGetDescDataSize(&self->ob_itself);
! 		if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
! 			return NULL;
! 		if ( (ptr = PyString_AsString(res)) == NULL )
! 			return NULL;
! 		if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
! 			return PyMac_Error(err);	
! #endif
! 		return res;
! 	}
! 	if (strcmp(name, "__members__") == 0)
! 		return Py_BuildValue("[ss]", "data", "type");
  
! 	return Py_FindMethodInChain(&AEDesc_chain, (PyObject *)self, name);
  }
  
! #define AEDesc_setattr NULL
  
  #define AEDesc_compare NULL
--- 830,867 ----
  };
  
! static PyObject *AEDesc_get_type(AEDescObject *self, void *closure)
  {
+ 	return PyMac_BuildOSType(self->ob_itself.descriptorType);
+ }
  
! #define AEDesc_set_type NULL
  
! static PyObject *AEDesc_get_data(AEDescObject *self, void *closure)
! {
! 
! 			PyObject *res;
! 			Size size;
! 			char *ptr;
! 			OSErr err;
! 			
! 			size = AEGetDescDataSize(&self->ob_itself);
! 			if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
! 				return NULL;
! 			if ( (ptr = PyString_AsString(res)) == NULL )
! 				return NULL;
! 			if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
! 				return PyMac_Error(err);	
! 			return res;
! 			
  }
  
! #define AEDesc_set_data NULL
! 
! static PyGetSetDef AEDesc_getsetlist[] = {
! 	{"type", (getter)AEDesc_get_type, (setter)AEDesc_set_type, "Type of this AEDesc"},
! 	{"data", (getter)AEDesc_get_data, (setter)AEDesc_set_data, "The raw data in this AEDesc"},
! 	{NULL, NULL, NULL, NULL},
! };
! 
  
  #define AEDesc_compare NULL
***************
*** 877,882 ****
  	(destructor) AEDesc_dealloc, /*tp_dealloc*/
  	0, /*tp_print*/
! 	(getattrfunc) AEDesc_getattr, /*tp_getattr*/
! 	(setattrfunc) AEDesc_setattr, /*tp_setattr*/
  	(cmpfunc) AEDesc_compare, /*tp_compare*/
  	(reprfunc) AEDesc_repr, /*tp_repr*/
--- 880,885 ----
  	(destructor) AEDesc_dealloc, /*tp_dealloc*/
  	0, /*tp_print*/
! 	(getattrfunc)0, /*tp_getattr*/
! 	(setattrfunc)0, /*tp_setattr*/
  	(cmpfunc) AEDesc_compare, /*tp_compare*/
  	(reprfunc) AEDesc_repr, /*tp_repr*/
***************
*** 885,888 ****
--- 888,908 ----
  	(PyMappingMethods *)0, /* tp_as_mapping */
  	(hashfunc) AEDesc_hash, /*tp_hash*/
+ 	0, /*tp_call*/
+ 	0, /*tp_str*/
+ 	PyObject_GenericGetAttr, /*tp_getattro*/
+ 	PyObject_GenericSetAttr, /*tp_setattro */
+ 	0, /*outputHook_tp_as_buffer*/
+ 	0, /*outputHook_tp_flags*/
+ 	0, /*outputHook_tp_doc*/
+ 	0, /*outputHook_tp_traverse*/
+ 	0, /*outputHook_tp_clear*/
+ 	0, /*outputHook_tp_richcompare*/
+ 	0, /*outputHook_tp_weaklistoffset*/
+ 	0, /*outputHook_tp_iter*/
+ 	0, /*outputHook_tp_iternext*/
+ 	AEDesc_methods, /* tp_methods */
+ 	0, /*outputHook_tp_members*/
+ 	AEDesc_getsetlist, /*tp_getset*/
+ 	0, /*outputHook_tp_base*/
  };
  
***************
*** 1350,1359 ****
  
  
- 
- #if UNIVERSAL_INTERFACES_VERSION >= 0x0340
- typedef long refcontype;
- #else
- typedef unsigned long refcontype;
- #endif
  
  static pascal OSErr
--- 1370,1373 ----

Index: aesupport.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/ae/aesupport.py,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** aesupport.py	25 Mar 2002 00:32:17 -0000	1.26
--- aesupport.py	29 Nov 2002 23:40:41 -0000	1.27
***************
*** 83,86 ****
--- 83,89 ----
  
  includestuff = includestuff + """
+ #ifndef PyDoc_STR
+ #define PyDoc_STR(x) (x)
+ #endif
  #ifdef WITHOUT_FRAMEWORKS
  #include <AppleEvents.h>
***************
*** 98,102 ****
  #endif
  
! static pascal OSErr GenericEventHandler(); /* Forward */
  
  AEEventHandlerUPP upp_GenericEventHandler;
--- 101,111 ----
  #endif
  
! #if UNIVERSAL_INTERFACES_VERSION >= 0x0340
! typedef long refcontype;
! #else
! typedef unsigned long refcontype;
! #endif
! 
! static pascal OSErr GenericEventHandler(const AppleEvent *request, AppleEvent *reply, refcontype refcon); /* Forward */
  
  AEEventHandlerUPP upp_GenericEventHandler;
***************
*** 119,128 ****
  
  finalstuff = finalstuff + """
- #if UNIVERSAL_INTERFACES_VERSION >= 0x0340
- typedef long refcontype;
- #else
- typedef unsigned long refcontype;
- #endif
- 
  static pascal OSErr
  GenericEventHandler(const AppleEvent *request, AppleEvent *reply, refcontype refcon)
--- 128,131 ----
***************
*** 172,176 ****
  module = MacModule('_AE', 'AE', includestuff, finalstuff, initstuff)
  
! class AEDescDefinition(GlobalObjectDefinition):
  
  	def __init__(self, name, prefix = None, itselftype = None):
--- 175,204 ----
  module = MacModule('_AE', 'AE', includestuff, finalstuff, initstuff)
  
! class AEDescDefinition(PEP252Mixin, GlobalObjectDefinition):
! 	getsetlist = [(
! 		'type',
! 		'return PyMac_BuildOSType(self->ob_itself.descriptorType);',
! 		None,
! 		'Type of this AEDesc'
! 		), (
! 		'data',
! 		"""
! 		PyObject *res;
! 		Size size;
! 		char *ptr;
! 		OSErr err;
! 		
! 		size = AEGetDescDataSize(&self->ob_itself);
! 		if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
! 			return NULL;
! 		if ( (ptr = PyString_AsString(res)) == NULL )
! 			return NULL;
! 		if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
! 			return PyMac_Error(err);	
! 		return res;
! 		""",
! 		None,
! 		'The raw data in this AEDesc'
! 		)]
  
  	def __init__(self, name, prefix = None, itselftype = None):
***************
*** 180,218 ****
  	def outputFreeIt(self, name):
  		Output("AEDisposeDesc(&%s);", name)
- 
- 	def outputGetattrHook(self):
- 		Output("""
- if (strcmp(name, "type") == 0)
- 	return PyMac_BuildOSType(self->ob_itself.descriptorType);
- if (strcmp(name, "data") == 0) {
- 	PyObject *res;
- #if !TARGET_API_MAC_CARBON
- 	char state;
- 	state = HGetState(self->ob_itself.dataHandle);
- 	HLock(self->ob_itself.dataHandle);
- 	res = PyString_FromStringAndSize(
- 		*self->ob_itself.dataHandle,
- 		GetHandleSize(self->ob_itself.dataHandle));
- 	HUnlock(self->ob_itself.dataHandle);
- 	HSetState(self->ob_itself.dataHandle, state);
- #else
- 	Size size;
- 	char *ptr;
- 	OSErr err;
- 	
- 	size = AEGetDescDataSize(&self->ob_itself);
- 	if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
- 		return NULL;
- 	if ( (ptr = PyString_AsString(res)) == NULL )
- 		return NULL;
- 	if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
- 		return PyMac_Error(err);	
- #endif
- 	return res;
- }
- if (strcmp(name, "__members__") == 0)
- 	return Py_BuildValue("[ss]", "data", "type");
- """)
- 
  
  aedescobject = AEDescDefinition('AEDesc')
--- 208,211 ----