*** empty log message ***

This commit is contained in:
Joe Shochet 2001-02-01 03:44:35 +00:00
parent 628994dffb
commit 768861a4d0
1 changed files with 16 additions and 2 deletions

View File

@ -6,6 +6,10 @@ import string
from PythonUtil import *
augmentedAssignments = ['__iadd__', '__isub__', '__imul__', '__idiv__',
'__ior__', '__iand__', '__ixor__',
'__ilshift__', '__irshift__']
class FunctionSpecification:
def __init__(self):
self.name = ''
@ -364,8 +368,18 @@ class MethodSpecification(FunctionSpecification):
if (i < (len(thislessArgTypes)-1)):
file.write(', ')
file.write(')\n')
returnType = self.typeDescriptor.returnType.recursiveTypeDescriptor()
returnType.generateReturnValueWrapper(file, self.typeDescriptor.userManagesMemory, needsDowncast, nesting+2)
# 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
# normal system, it actually deletes the old Python object causing the C++ memory
# to be deleted then returns a new Python shadow object with the old C++ pointer... BAD!
if self.getFinalName() in augmentedAssignments:
indent(file, nesting+2, 'assert(self.this == returnValue)\n')
indent(file, nesting+2, 'return self\n')
else:
returnType = self.typeDescriptor.returnType.recursiveTypeDescriptor()
returnType.generateReturnValueWrapper(file, self.typeDescriptor.userManagesMemory,
needsDowncast, nesting+2)
def outputMethodFooter(self, methodClass, file, nesting):
indent(file, nesting+1, '\n')