def postProcessMutate(self, obj): pyobj = obj.pyobj # Create a low-level slot for the dictionary, if one exists. # Note that for type objects, this is done earlier. if not isinstance(pyobj, type): mangledDictName = self.dictSlotForObj(pyobj) if mangledDictName: mangledDictNameObj = self.__getObject(mangledDictName) if mangledDictNameObj in obj.slot: obj.addLowLevel(self.desc.dictionaryName, obj.slot[mangledDictNameObj]) # No function pointers, so C function pointers are transformed into a hidden function object. if isinstance(pyobj, xtypes.TypeNeedsHiddenStub): self.makeHiddenFunction(obj, cfuncptr(pyobj)) # No internal pointers, so member descriptors need to have a "slot pointer" added if isinstance(pyobj, xtypes.MemberDescriptorType): # It's a slot descriptor. # HACK there's no such thing as a "slot pointer", so use a unique string mangledNameObj = self.__getObject(self.compiler.slots.uniqueSlotName(pyobj)) obj.addLowLevel(self.desc.slotObj, mangledNameObj) # Requires a C function pointer. if isinstance(pyobj, xtypes.TypeNeedsStub): try: ptr = cfuncptr(pyobj) self.registerPointer(ptr, obj) except TypeError: print "Cannot get pointer:", pyobj
def postProcessMutate(self, obj): pyobj = obj.pyobj # Create a low-level slot for the dictionary, if one exists. # Note that for type objects, this is done earlier. if not isinstance(pyobj, type): mangledDictName = self.dictSlotForObj(pyobj) if mangledDictName: mangledDictNameObj = self.__getObject(mangledDictName) if mangledDictNameObj in obj.slot: obj.addLowLevel(self.desc.dictionaryName, obj.slot[mangledDictNameObj]) # No function pointers, so C function pointers are transformed into a hidden function object. if isinstance(pyobj, xtypes.TypeNeedsHiddenStub): self.makeHiddenFunction(obj, cfuncptr(pyobj)) # No internal pointers, so member descriptors need to have a "slot pointer" added if isinstance(pyobj, xtypes.MemberDescriptorType): # It's a slot descriptor. # HACK there's no such thing as a "slot pointer", so use a unique string mangledNameObj = self.__getObject( self.compiler.slots.uniqueSlotName(pyobj)) obj.addLowLevel(self.desc.slotObj, mangledNameObj) # Requires a C function pointer. if isinstance(pyobj, xtypes.TypeNeedsStub): try: ptr = cfuncptr(pyobj) self.registerPointer(ptr, obj) except TypeError: print "Cannot get pointer:", pyobj
def cfuncptr(self, obj): try: return cfuncptr(obj) except TypeError: raise TypeError, "Cannot get pointer from %r" % type(obj)