diff options
Diffstat (limited to 'Mac/Modules/cf/cfsupport.py')
-rw-r--r-- | Mac/Modules/cf/cfsupport.py | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/Mac/Modules/cf/cfsupport.py b/Mac/Modules/cf/cfsupport.py index e68ae03..c244c72 100644 --- a/Mac/Modules/cf/cfsupport.py +++ b/Mac/Modules/cf/cfsupport.py @@ -250,7 +250,7 @@ OptionalCFURLRef = OpaqueByValueType("CFURLRef", "OptionalCFURLRefObj") # Our (opaque) objects -class MyGlobalObjectDefinition(GlobalObjectDefinition): +class MyGlobalObjectDefinition(PEP253Mixin, GlobalObjectDefinition): def outputCheckNewArg(self): Output('if (itself == NULL)') OutLbrace() @@ -302,11 +302,39 @@ class MyGlobalObjectDefinition(GlobalObjectDefinition): Output("return PyString_FromString(buf);") OutRbrace() + def output_tp_newBody(self): + Output("PyObject *self;") + Output + Output("if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;") + Output("((%s *)self)->ob_itself = NULL;", self.objecttype) + Output("((%s *)self)->ob_freeit = CFRelease;", self.objecttype) + Output("return self;") + + def output_tp_initBody(self): + Output("%s itself;", self.itselftype) + Output("char *kw[] = {\"itself\", 0};") + Output() + Output("if (PyArg_ParseTupleAndKeywords(args, kwds, \"O&\", kw, %s_Convert, &itself))", + self.prefix) + OutLbrace() + Output("((%s *)self)->ob_itself = itself;", self.objecttype) + Output("return 0;") + OutRbrace() + if self.prefix != 'CFTypeRefObj': + Output() + Output("/* Any CFTypeRef descendent is allowed as initializer too */") + Output("if (PyArg_ParseTupleAndKeywords(args, kwds, \"O&\", kw, CFTypeRefObj_Convert, &itself))") + OutLbrace() + Output("((%s *)self)->ob_itself = itself;", self.objecttype) + Output("return 0;") + OutRbrace() + Output("return -1;") + class CFTypeRefObjectDefinition(MyGlobalObjectDefinition): pass class CFArrayRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFTypeRefObj_chain" + basetype = "CFTypeRef_Type" def outputRepr(self): Output() @@ -318,7 +346,7 @@ class CFArrayRefObjectDefinition(MyGlobalObjectDefinition): OutRbrace() class CFMutableArrayRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFArrayRefObj_chain" + basetype = "CFArrayRef_Type" def outputRepr(self): Output() @@ -330,7 +358,7 @@ class CFMutableArrayRefObjectDefinition(MyGlobalObjectDefinition): OutRbrace() class CFDictionaryRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFTypeRefObj_chain" + basetype = "CFTypeRef_Type" def outputRepr(self): Output() @@ -342,7 +370,7 @@ class CFDictionaryRefObjectDefinition(MyGlobalObjectDefinition): OutRbrace() class CFMutableDictionaryRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFDictionaryRefObj_chain" + basetype = "CFDictionaryRef_Type" def outputRepr(self): Output() @@ -354,7 +382,7 @@ class CFMutableDictionaryRefObjectDefinition(MyGlobalObjectDefinition): OutRbrace() class CFDataRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFTypeRefObj_chain" + basetype = "CFTypeRef_Type" def outputCheckConvertArg(self): Out(""" @@ -378,7 +406,7 @@ class CFDataRefObjectDefinition(MyGlobalObjectDefinition): OutRbrace() class CFMutableDataRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFDataRefObj_chain" + basetype = "CFDataRef_Type" def outputRepr(self): Output() @@ -390,7 +418,7 @@ class CFMutableDataRefObjectDefinition(MyGlobalObjectDefinition): OutRbrace() class CFStringRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFTypeRefObj_chain" + basetype = "CFTypeRef_Type" def outputCheckConvertArg(self): Out(""" @@ -423,7 +451,7 @@ class CFStringRefObjectDefinition(MyGlobalObjectDefinition): OutRbrace() class CFMutableStringRefObjectDefinition(CFStringRefObjectDefinition): - basechain = "&CFStringRefObj_chain" + basetype = "CFStringRef_Type" def outputCheckConvertArg(self): # Mutable, don't allow Python strings @@ -439,7 +467,7 @@ class CFMutableStringRefObjectDefinition(CFStringRefObjectDefinition): OutRbrace() class CFURLRefObjectDefinition(MyGlobalObjectDefinition): - basechain = "&CFTypeRefObj_chain" + basetype = "CFTypeRef_Type" def outputRepr(self): Output() |