Пример #1
0
	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
Пример #2
0
    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
Пример #3
0
	def cfuncptr(self, obj):
		try:
			return cfuncptr(obj)
		except TypeError:
			raise TypeError, "Cannot get pointer from %r" % type(obj)
Пример #4
0
 def cfuncptr(self, obj):
     try:
         return cfuncptr(obj)
     except TypeError:
         raise TypeError, "Cannot get pointer from %r" % type(obj)