*** empty log message ***

This commit is contained in:
Roger Hughston 2005-02-23 02:03:00 +00:00
parent a9268c8e7f
commit fe79ba9dca
8 changed files with 270 additions and 76 deletions

View File

@ -23,36 +23,36 @@ class DistributedSmoothNodeAI(DistributedNodeAI.DistributedNodeAI,
# These have their FFI functions exposed for efficiency
def setSmH(self, h, t):
self._NodePath__overloaded_setH_ptrNodePath_float(h)
self.private__overloaded_setH_ptrNodePath_float(h)
def setSmZ(self, z, t):
self._NodePath__overloaded_setZ_ptrNodePath_float(z)
self.private__overloaded_setZ_ptrNodePath_float(z)
def setSmXY(self, x, y, t):
self._NodePath__overloaded_setX_ptrNodePath_float(x)
self._NodePath__overloaded_setY_ptrNodePath_float(y)
self.private__overloaded_setX_ptrNodePath_float(x)
self.private__overloaded_setY_ptrNodePath_float(y)
def setSmXZ(self, x, z, t):
self._NodePath__overloaded_setX_ptrNodePath_float(x)
self._NodePath__overloaded_setZ_ptrNodePath_float(z)
self.private__overloaded_setX_ptrNodePath_float(x)
self.private__overloaded_setZ_ptrNodePath_float(z)
def setSmPos(self, x, y, z, t):
self._NodePath__overloaded_setPos_ptrNodePath_float_float_float(x,y,z)
self.private__overloaded_setPos_ptrNodePath_float_float_float(x,y,z)
def setSmHpr(self, h, p, r, t):
self._NodePath__overloaded_setHpr_ptrNodePath_float_float_float(h,p,r)
self.private__overloaded_setHpr_ptrNodePath_float_float_float(h,p,r)
def setSmXYH(self, x, y, h, t):
self._NodePath__overloaded_setX_ptrNodePath_float(x)
self._NodePath__overloaded_setY_ptrNodePath_float(y)
self._NodePath__overloaded_setH_ptrNodePath_float(h)
self.private__overloaded_setX_ptrNodePath_float(x)
self.private__overloaded_setY_ptrNodePath_float(y)
self.private__overloaded_setH_ptrNodePath_float(h)
def setSmXYZH(self, x, y, z, h, t):
self._NodePath__overloaded_setPos_ptrNodePath_float_float_float(x,y,z)
self._NodePath__overloaded_setH_ptrNodePath_float(h)
self.private__overloaded_setPos_ptrNodePath_float_float_float(x,y,z)
self.private__overloaded_setH_ptrNodePath_float(h)
def setSmPosHpr(self, x, y, z, h, p, r, t):
self._NodePath__overloaded_setPosHpr_ptrNodePath_float_float_float_float_float_float(x,y,z,h,p,r)
self.private__overloaded_setPosHpr_ptrNodePath_float_float_float_float_float_float(x,y,z,h,p,r)
def clearSmoothing(self, bogus = None):
pass
@ -60,16 +60,16 @@ class DistributedSmoothNodeAI(DistributedNodeAI.DistributedNodeAI,
# Do we use these on the AIx?
def setComponentX(self, x):
self._NodePath__overloaded_setX_ptrNodePath_float(x)
self.private__overloaded_setX_ptrNodePath_float(x)
def setComponentY(self, y):
self._NodePath__overloaded_setY_ptrNodePath_float(y)
self.private__overloaded_setY_ptrNodePath_float(y)
def setComponentZ(self, z):
self._NodePath__overloaded_setZ_ptrNodePath_float(z)
self.private__overloaded_setZ_ptrNodePath_float(z)
def setComponentH(self, h):
self._NodePath__overloaded_setH_ptrNodePath_float(h)
self.private__overloaded_setH_ptrNodePath_float(h)
def setComponentP(self, p):
self._NodePath__overloaded_setP_ptrNodePath_float(p)
self.private__overloaded_setP_ptrNodePath_float(p)
def setComponentR(self, r):
self._NodePath__overloaded_setR_ptrNodePath_float(r)
self.private__overloaded_setR_ptrNodePath_float(r)
def setComponentT(self, t):
pass

View File

@ -21,4 +21,4 @@ InterrogateModuleName = None
wantComments = 1
# Should FFI output type assertions?
wantTypeChecking = 1
wantTypeChecking = 0

View File

@ -1,4 +1,4 @@
from new import instance
import FFIConstants
WrapperClassMap = {}
@ -25,6 +25,23 @@ def registerInTypeMap(pythonClass):
WrapperClassMap[typeIndex] = pythonClass
def funcToMethod(func,clas,method_name=None):
"""Adds func to class so it is an accessible method; use method_name to specify the name to be used for calling the method.
The new method is accessible to any instance immediately."""
func.im_class=clas
func.im_func=func
func.im_self=None
if not method_name:
clas.__dict__[method_name]=func
else:
clas.__dict__[func.__name__]=func
def FFIInstance(classdef, this = 0, userManagesMemory = 0 ):
answer = instance(classdef)
answer.this = this
answer.userManagesMemory = userManagesMemory
return answer
class FFIExternalObject:
def __init__(self, *_args):
@ -130,7 +147,8 @@ class FFIExternalObject:
# We do not need to downcast if we already have the same class
if (exactWrapperClass and (exactWrapperClass != self.__class__)):
# Create a new wrapper class instance
exactObject = exactWrapperClass(None)
#exactObject = exactWrapperClass(None)
exactObject = FFIInstance(exactWrapperClass)
# Get the downcast pointer that has had all the downcast
# funcs called
downcastObject = self.downcast(exactWrapperClass)

View File

@ -52,6 +52,8 @@ def outputGlobalFileImports(file, methodList, CModuleName):
# Import Python's builtin types
file.write('from types import IntType, LongType, FloatType, NoneType, StringType\n')
file.write('from direct.ffi import FFIExternalObject\n')
# Import the C modules
CModuleList = []
@ -88,6 +90,7 @@ def outputGlobalFileImports(file, methodList, CModuleName):
for moduleName in moduleList:
if moduleName:
file.write('import ' + moduleName + '\n')
file.write('import ' + moduleName + '1\n')
file.write('\n')
@ -140,6 +143,13 @@ def outputImportFileImports(file, typeList, CModuleName):
file.write('import ' + moduleName + '\n')
file.write('\n')
file.write('# Import classes2\n')
for moduleName in moduleList:
if moduleName:
file.write('import ' + moduleName + '1\n')
file.write('\n')
file.write('# Import the global module file into our name space\n')
file.write('from ' + CModuleName + 'Globals import *\n')
file.write('\n')

View File

@ -223,10 +223,10 @@ class FFIMethodArgumentTreeCollection:
# Global functions do not need static versions
if (self.methodSpecList[0].isStatic() and
(not self.methodSpecList[0].isConstructor())):
indent(file, nesting+1, 'def ' +
indent(file, nesting, 'def ' +
self.methodSpecList[0].name + '(*_args):\n')
else:
indent(file, nesting+1, 'def ' +
indent(file, nesting, 'def ' +
self.methodSpecList[0].name + '(self, *_args):\n')
self.methodSpecList[0].outputCFunctionComment(file, nesting+2)
indent(file, nesting+2, 'numArgs = len(_args)\n')
@ -239,17 +239,25 @@ class FFIMethodArgumentTreeCollection:
# Constructors are not treated as static. They are special because
# they are not really constructors, they are instance methods that fill
# in the this pointer.
methodName = self.methodSpecList[0].name
if (self.methodSpecList[0].isStatic() and
(not self.methodSpecList[0].isConstructor()) and
(not isinstance(self.methodSpecList[0], FFISpecs.GlobalFunctionSpecification))):
self.outputOverloadedStaticFooter(file, nesting)
else:
if self.classTypeDesc :
indent(file, nesting, "FFIExternalObject.funcToMethod("+methodName+','+ self.classTypeDesc.foreignTypeName+ ",'"+methodName+"')\n")
indent(file, nesting, 'del '+methodName+'\n')
indent(file, nesting, ' \n')
indent(file, nesting+1, '\n')
def outputOverloadedStaticFooter(self, file, nesting):
# foo = staticmethod(foo)
methodName = self.methodSpecList[0].name
indent(file, nesting+1, methodName + ' = staticmethod(' + methodName + ')\n')
indent(file, nesting, self.classTypeDesc.foreignTypeName + '.' + methodName + ' = staticmethod(' + methodName + ')\n')
indent(file, nesting,'del ' +methodName+' \n\n')
def setup(self):
for method in self.methodSpecList:

View File

@ -86,7 +86,7 @@ class FunctionSpecification:
So "getChild(int)" becomes "overloaded_getChild_int(int)"
"""
if self.overloaded:
name = '__overloaded_' + self.name
name = 'private__overloaded_' + self.name
for methodArgSpec in self.typeDescriptor.argumentTypes:
name = name + '_' + methodArgSpec.typeDescriptor.foreignTypeName
return name
@ -186,6 +186,8 @@ class GlobalFunctionSpecification(FunctionSpecification):
if (i < (len(argTypes)-1)):
file.write(', ')
file.write(')\n')
#indent(file,1, 'if returnValue is None:\n')
#indent(file,2, 'return None\n')
returnType = self.typeDescriptor.returnType.recursiveTypeDescriptor()
returnType.generateReturnValueWrapper(None, file,
self.typeDescriptor.userManagesMemory,
@ -199,7 +201,7 @@ class GlobalFunctionSpecification(FunctionSpecification):
##################################################
def outputMethodHeader(self, methodClass, file, nesting):
argTypes = self.typeDescriptor.argumentTypes
indent(file, nesting+1, 'def ' + self.getFinalName() + '(')
indent(file, nesting, 'def ' + self.getFinalName() + '(')
for i in range(len(argTypes)):
# Instead of the first argument, put self
if (i == 0):
@ -229,6 +231,9 @@ class GlobalFunctionSpecification(FunctionSpecification):
if (i < (len(argTypes)-1)):
file.write(', ')
file.write(')\n')
indent(file,1, 'if returnValue is None:\n')
indent(file,2, 'return None\n')
returnType = self.typeDescriptor.returnType.recursiveTypeDescriptor()
returnType.generateReturnValueWrapper(methodClass, file,
self.typeDescriptor.userManagesMemory,
@ -288,12 +293,13 @@ class MethodSpecification(FunctionSpecification):
if (i < (len(thislessArgTypes)-1)):
file.write(', ')
file.write('):\n')
self.outputCFunctionComment(file, nesting+2)
def outputConstructorBody(self, methodClass, file, nesting):
# The method body will look something like
# self.this = panda.Class_constructor(arg)
# self.userManagesMemory = 1 (optional)
self.outputCFunctionComment(file, nesting+2)
argTypes = self.typeDescriptor.argumentTypes
thislessArgTypes = self.typeDescriptor.thislessArgTypes()
self.outputTypeChecking(methodClass, thislessArgTypes, file, nesting+2)
@ -327,11 +333,11 @@ class MethodSpecification(FunctionSpecification):
if (i < (len(thislessArgTypes)-1)):
file.write(', ')
file.write('):\n')
self.outputCFunctionComment(file, nesting+2)
def outputDestructorBody(self, methodClass, file, nesting):
# The method body will look something like
# panda.Class_destructor(self.this)
self.outputCFunctionComment(file, nesting+2)
functionName = (self.typeDescriptor.moduleName + '.'
+ self.typeDescriptor.wrapperName)
# Make sure the module and function have not been deleted first
@ -349,7 +355,7 @@ class MethodSpecification(FunctionSpecification):
def outputMethodHeader(self, methodClass, file, nesting):
argTypes = self.typeDescriptor.argumentTypes
thislessArgTypes = self.typeDescriptor.thislessArgTypes()
indent(file, nesting+1, 'def ' + self.getFinalName() + '(self')
indent(file, nesting, 'def ' + self.getFinalName() + '(self')
if (len(thislessArgTypes) > 0):
file.write(', ')
for i in range(len(thislessArgTypes)):
@ -376,7 +382,7 @@ class MethodSpecification(FunctionSpecification):
file.write(thislessArgTypes[i].passName())
if (i < (len(thislessArgTypes)-1)):
file.write(', ')
file.write(')\n')
file.write(')\n')
# If this is an augmented assignment operator like +=, we have special rules
# In this case we simply call the C++ function, make sure we got the same
# return value back, then return self. Otherwise if you let it go through the
@ -392,6 +398,12 @@ class MethodSpecification(FunctionSpecification):
needsDowncast, nesting+2)
def outputMethodFooter(self, methodClass, file, nesting):
indent(file, nesting, 'FFIExternalObject.funcToMethod(' +self.getFinalName()+ ',' + methodClass.foreignTypeName + ",'" +self.getFinalName() +"')\n")
indent(file, nesting, 'del ' + self.getFinalName()+' \n')
indent(file, nesting+1,'\n')
#indent(file, nesting,methodClass.foreignTypeName +'.'+ self.getFinalName() + ' = staticmethod(' + self.getFinalName() + ')\n')
#indent(file, nesting,'del ' + self.getFinalName()+' \n')
#indent(file, nesting+1, '\n')
indent(file, nesting+1, '\n')
@ -400,12 +412,13 @@ class MethodSpecification(FunctionSpecification):
##################################################
def outputStaticHeader(self, methodClass, file, nesting):
argTypes = self.typeDescriptor.argumentTypes
indent(file, nesting+1, 'def ' + self.getFinalName() + '(')
indent(file, nesting, 'def ' + self.getFinalName() + '(')
for i in range(len(argTypes)):
file.write(argTypes[i].name)
if (i < (len(argTypes)-1)):
file.write(', ')
file.write('):\n')
file.write('):\n')
def outputStaticBody(self, methodClass, file, nesting):
# The method body will look something like
@ -431,7 +444,8 @@ class MethodSpecification(FunctionSpecification):
1, nesting+2)
def outputStaticFooter(self, methodClass, file, nesting):
indent(file, nesting+1, self.getFinalName() + ' = staticmethod(' + self.getFinalName() + ')\n')
indent(file, nesting,methodClass.foreignTypeName +'.'+ self.getFinalName() + ' = staticmethod(' + self.getFinalName() + ')\n')
indent(file, nesting,'del ' + self.getFinalName()+' \n')
indent(file, nesting+1, '\n')
##################################################
@ -440,7 +454,7 @@ class MethodSpecification(FunctionSpecification):
def outputInheritedMethodHeader(self, methodClass, parentList, file, nesting, needsDowncast):
argTypes = self.typeDescriptor.argumentTypes
thislessArgTypes = self.typeDescriptor.thislessArgTypes()
indent(file, nesting+1, 'def ' + self.getFinalName() + '(self')
indent(file, nesting, 'def ' + self.getFinalName() + '(self')
if (len(thislessArgTypes) > 0):
file.write(', ')
for i in range(len(thislessArgTypes)):
@ -492,7 +506,9 @@ class MethodSpecification(FunctionSpecification):
needsDowncast, nesting+2)
def outputInheritedMethodFooter(self, methodClass, parentList, file, nesting, needsDowncast):
indent(file, nesting+1, '\n')
indent(file, nesting, 'FFIExternalObject.funcToMethod(' +self.getFinalName()+ ',' + methodClass.foreignTypeName + ",'" +self.getFinalName() +"')\n")
indent(file, nesting, 'del ' + self.getFinalName()+' \n')
indent(file, nesting+1,'\n')
class GlobalValueSpecification:

View File

@ -507,18 +507,27 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
passed in.
"""
fileName = self.foreignTypeName + '.py'
fileName1 = self.foreignTypeName + '1.py'
file = open(os.path.join(dir, fileName), 'w')
indent(file, 0, FFIConstants.generatedHeader)
self.outputBaseImports(file)
self.generateCode(file, 0)
self.generateCode1(file, 0,extensionsDir)
file.close()
file = open(os.path.join(dir, fileName1), 'w')
indent(file, 0, FFIConstants.generatedHeader)
#self.outputBaseImports(file)
self.generateCode2(file, 0,extensionsDir,self.foreignTypeName)
file.close()
# Copy in any extensions we may have
self.copyExtensions(extensionsDir, file, 0)
self.outputClassFooter(file)
#self.copyExtensions(extensionsDir, file, 0)
#self.outputClassFooter(file)
file.close()
def generateCode(self, file, nesting):
def generateCode(self, file, nesting, extensionsDir=None):
self.recordOverloadedMethods()
self.cullOverloadedMethods()
@ -551,6 +560,115 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
self.destructor.generateDestructorCode(self, file, nesting)
# If you have no destructor, inherit one
##########################
## Extension methods moved up locally
if extensionsDir :
self.copyExtensions(extensionsDir, file, 0)
##########################
## import return types
returnTypeModules = self.getReturnTypeModules()
if len(returnTypeModules):
for moduleName in returnTypeModules:
indent(file, nesting, 'import ' + moduleName + '\n')
################################
if len(self.staticMethods):
indent(file, nesting+1, '\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '# Static Methods #\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '\n')
for method in self.staticMethods:
method.generateStaticCode(self, file, nesting)
if len(self.instanceMethods):
indent(file, nesting+1, '\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '# Instance methods #\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '\n')
for method in self.instanceMethods:
method.generateMethodCode(self, file, nesting)
if len(self.upcastMethods):
indent(file, nesting+1, '\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '# Upcast methods #\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '\n')
for method in self.upcastMethods:
method.generateUpcastMethodCode(self, file, nesting)
if len(self.downcastMethods):
indent(file, nesting+1, '\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '# Downcast methods #\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '\n')
for method in self.downcastMethods:
method.generateDowncastMethodCode(self, file, nesting)
# Copy in all our parent nodes (only does work if we are an MI node)
self.copyParentMethods(file, nesting)
self.generateOverloadedMethods(file, nesting)
def generateCode1(self, file, nesting, extensionsDir=None):
self.recordOverloadedMethods()
self.cullOverloadedMethods()
self.outputImports(file, nesting)
self.outputClassHeader(file, nesting)
self.outputClassComment(file, nesting)
self.outputClassCModules(file, nesting)
self.outputNestedTypes(file, nesting)
indent(file, nesting+1, '\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '# Constructors #\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '\n')
self.outputBaseConstructor(file, nesting)
if self.constructors:
for method in self.constructors:
method.generateConstructorCode(self, file, nesting)
else:
self.outputEmptyConstructor(file, nesting)
indent(file, nesting+1, '\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '# Destructor #\n')
indent(file, nesting+1, '##################################################\n')
indent(file, nesting+1, '\n')
self.outputBaseDestructor(file, nesting)
if self.destructor:
self.destructor.generateDestructorCode(self, file, nesting)
# If you have no destructor, inherit one
##########################
## Extension methods moved up locally
if extensionsDir :
self.copyExtensions(extensionsDir, file, 0)
def generateCode2(self, file, nesting, extensionsDir, file1module):
indent(file, nesting, 'from ' + file1module + ' import *\n')
##########################
## import return types
returnTypeModules = self.getReturnTypeModules()
if len(returnTypeModules):
for moduleName in returnTypeModules:
indent(file, nesting, 'import ' + moduleName + '\n')
################################
if len(self.staticMethods):
indent(file, nesting+1, '\n')
indent(file, nesting+1, '##################################################\n')
@ -632,6 +750,7 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
indent(file, 0, '# CMODULE [' + self.moduleName + ']\n')
# Everybody imports types for type checking
indent(file, 0, 'from types import IntType, LongType, FloatType, NoneType, StringType\n')
indent(file, 0, 'from direct.ffi import FFIExternalObject\n')
indent(file, 0, '\n')
indent(file, 0, '# Import all the C modules this class uses\n')
@ -641,6 +760,7 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
indent(file, 0, 'import ' + moduleName + 'Downcasts\n')
indent(file, 0, '\n')
indent(file, 0, 'from direct.ffi import FFIExternalObject\n')
def outputImportsRecursively(self, parent, file, nesting):
@ -750,10 +870,10 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
# Store the class C modules for the class so they do not
# get garbage collected before we do
# TODO: this did not appear to work so I'm taking it out
# indent(file, nesting+1, '__CModules__ = [')
# for moduleName in self.getCModules():
#indent(file, nesting+1, '__CModules__ = [')
#for moduleName in self.getCModules():
# file.write(moduleName + ',')
# file.write(']\n')
#file.write(']\n')
# Store the downcast function modules so the FFIExternalObject
# can index into them to find the downcast functions
@ -780,14 +900,18 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
"""
indent(file, nesting+1, 'def __init__(self, *_args):\n')
indent(file, nesting+2, '# Initialize the super class\n')
indent(file, nesting+2, 'FFIExternalObject.FFIExternalObject.__init__(self)\n')
indent(file, nesting+2, '# If you want an empty shadow object, pass in None\n')
indent(file, nesting+2, 'if ((len(_args) == 1) and (_args[0] == None)):\n')
indent(file, nesting+3, 'return\n')
indent(file, nesting+2, '# Otherwise, call the C constructor\n')
indent(file, nesting+2, '# Do Not Initialize the super class it is inlined\n')
#indent(file, nesting+2, '# Initialize the super class\n')
#indent(file, nesting+2, 'FFIExternalObject.FFIExternalObject.__init__(self)\n')
## this is not the right way to do this any more..
indent(file, nesting+2, '# If you want an empty shadow object use the FFIInstance(class) function\n')
#indent(file, nesting+2, 'if ((len(_args) == 1) and (_args[0] == None)):\n')
#indent(file, nesting+3, 'return\n')
#indent(file, nesting+2, '# Otherwise, call the C constructor\n')
indent(file, nesting+2, 'self.constructor(*_args)\n')
indent(file, nesting+2, '\n')
indent(file, nesting, '\n')
def outputEmptyConstructor(self, file, nesting):
@ -806,20 +930,24 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
Python object is garbage collected. We are going to overwrite
it with special cleanup for Panda.
"""
indent(file, nesting+1, 'def __del__(self):\n')
if self.destructor:
indent(file, nesting+1, 'def __del__(self):\n')
# Reference counting is now handled in the C++ code
# indent(file, nesting+2, 'if isinstance(self, ReferenceCount):\n')
# indent(file, nesting+3, 'self.unref()\n')
# indent(file, nesting+3, 'if (self.getCount() == 0):\n')
# indent(file, nesting+4, 'self.destructor()\n')
# Reference counting is now handled in the C++ code
# indent(file, nesting+2, 'if isinstance(self, ReferenceCount):\n')
# indent(file, nesting+3, 'self.unref()\n')
# indent(file, nesting+3, 'if (self.getCount() == 0):\n')
# indent(file, nesting+4, 'self.destructor()\n')
# If the scripting language owns the memory for this object,
# we need to call the C++ destructor when Python frees the
# shadow object, but only if the userManagesMemory flag is set.
# Also make sure we are not destructing a null pointer
indent(file, nesting+2, 'if (self.userManagesMemory and (self.this != 0)):\n')
indent(file, nesting+3, 'self.destructor()\n')
# If the scripting language owns the memory for this object,
# we need to call the C++ destructor when Python frees the
# shadow object, but only if the userManagesMemory flag is set.
# Also make sure we are not destructing a null pointer
indent(file, nesting+2, 'if (self.userManagesMemory and (self.this != 0)):\n')
self.destructor.outputDestructorBody(self, file, nesting+1)
indent(file, nesting, '\n')
#indent(file, nesting+3, 'self.destructor()\n')
def outputEmptyDestructor(self, file, nesting):
@ -839,27 +967,41 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
class destructor with None as the only parameter to get an
empty shadow object.
"""
if classTypeDesc != self:
indent(file, nesting, 'import ' + self.foreignTypeName + '\n')
indent(file, nesting, 'returnObject = ')
#if classTypeDesc != self:
# indent(file, nesting, 'import ' + self.foreignTypeName + '\n')
indent(file,nesting, 'if returnValue == 0: return None\n')
# Do not put Class.Class if this file is the file that defines Class
# Also check for nested classes. They do not need the module name either
typeName = FFIOverload.getTypeName(classTypeDesc, self)
file.write(typeName)
file.write('(None)\n')
indent(file, nesting, 'returnObject.this = returnValue\n')
#file.write(typeName + '(None)\n')
### inline the old constructers
#indent(file, nesting, 'returnObject = ')
#file.write('FFIExternalObject.FFIInstance('+ typeName + ',returnValue,'+str(userManagesMemory)+')\n')
#indent(file,nesting, 'returnObject.this = 0\n');
#indent(file,nesting, 'returnObject.userManagesMemory = 0\n');
##
#indent(file, nesting, 'returnObject.this = returnValue\n')
# Zero this pointers get returned as the Python None object
indent(file, nesting, 'if (returnObject.this == 0): return None\n')
if userManagesMemory:
indent(file, nesting, 'returnObject.userManagesMemory = 1\n')
#indent(file, nesting, 'if (returnObject.this == 0): return None\n')
#if userManagesMemory:
# indent(file, nesting, 'returnObject.userManagesMemory = 1\n')
#else:
# indent(file, nesting, 'returnObject.userManagesMemory = 0\n')
if needsDowncast:
#indent(file, nesting, 'returnObject = FFIExternalObject.FFIInstance('+ typeName + ',returnValue,'+str(userManagesMemory)+')\n')
if (FFIOverload.inheritsFrom(self, TypedObjectDescriptor) or
self == TypedObjectDescriptor):
indent(file, nesting, 'return returnObject.setPointer()\n')
#indent(file, nesting, 'return returnObject.setPointer()\n')
indent(file, nesting, 'return FFIExternalObject.FFIInstance('+ typeName + ',returnValue,'+str(userManagesMemory)+').setPointer()\n')
else:
indent(file, nesting, 'return returnObject\n')
indent(file, nesting,'return FFIExternalObject.FFIInstance('+ typeName + ',returnValue,'+str(userManagesMemory)+')\n')
#indent(file, nesting, 'return returnObject\n')
else:
indent(file, nesting, 'return returnObject\n')
indent(file, nesting,'return FFIExternalObject.FFIInstance('+ typeName + ',returnValue,'+str(userManagesMemory)+')\n')
#indent(file, nesting, 'return returnObject\n')

View File

@ -18,7 +18,7 @@ class IntervalManager(CIntervalManager):
# CIntervalManager object.
if globalPtr:
CIntervalManager.__init__(self, None)
#CIntervalManager.__init__(self, None)
cObj = CIntervalManager.getGlobalPtr()
self.this = cObj.this
self.userManagesMemory = 0