Selaa lähdekoodia

*** empty log message ***

Joe Shochet 25 vuotta sitten
vanhempi
sitoutus
b1bf5ff657

+ 13 - 1
direct/src/ffi/FFIInterrogateDatabase.py

@@ -47,6 +47,7 @@ def constructImportFile(codeDir, CModuleName):
 def outputGlobalFileImports(file, methodList, CModuleName):
 def outputGlobalFileImports(file, methodList, CModuleName):
     # Print the standard header
     # Print the standard header
     file.write(FFIConstants.generatedHeader)
     file.write(FFIConstants.generatedHeader)
+    file.write('# CMODULE [' + CModuleName + ']\n')
 
 
     # Import Python's builtin types
     # Import Python's builtin types
     file.write('import types\n')
     file.write('import types\n')
@@ -95,7 +96,7 @@ def outputImportFileImports(file, typeList, CModuleName):
     
     
     # Print the standard header
     # Print the standard header
     file.write(FFIConstants.generatedHeader)
     file.write(FFIConstants.generatedHeader)
-    
+    file.write('# CMODULE [' + CModuleName + ']\n')
     file.write('# Import the interrogate module\n')
     file.write('# Import the interrogate module\n')
     file.write('import ' + FFIConstants.InterrogateModuleName + '\n')
     file.write('import ' + FFIConstants.InterrogateModuleName + '\n')
     file.write('\n')
     file.write('\n')
@@ -261,6 +262,8 @@ class FFIInterrogateDatabase:
             descriptor = FFITypes.PrimitiveTypeDescriptor()
             descriptor = FFITypes.PrimitiveTypeDescriptor()
             #descriptor.environment = self.environment
             #descriptor.environment = self.environment
             descriptor.atomicType = interrogate_type_atomic_token(typeIndex)
             descriptor.atomicType = interrogate_type_atomic_token(typeIndex)
+            if interrogate_type_has_module_name(typeIndex):
+                descriptor.moduleName = 'lib' + interrogate_type_module_name(typeIndex)
             descriptor.foreignTypeName = \
             descriptor.foreignTypeName = \
                 FFIRename.nonClassNameFromCppName(getTypeName(typeIndex))
                 FFIRename.nonClassNameFromCppName(getTypeName(typeIndex))
             descriptor.typeIndex = typeIndex
             descriptor.typeIndex = typeIndex
@@ -277,6 +280,9 @@ class FFIInterrogateDatabase:
             if descriptor.isNested:
             if descriptor.isNested:
                 outerTypeIndex = interrogate_type_outer_class(typeIndex)
                 outerTypeIndex = interrogate_type_outer_class(typeIndex)
                 descriptor.outerType = self.constructDescriptor(outerTypeIndex)
                 descriptor.outerType = self.constructDescriptor(outerTypeIndex)
+            if interrogate_type_has_module_name(typeIndex):
+                descriptor.moduleName = 'lib' + interrogate_type_module_name(typeIndex)
+
             # Enums are ints in C++ but we do not want to redefine the int type
             # Enums are ints in C++ but we do not want to redefine the int type
             # So we will just call them enums
             # So we will just call them enums
             descriptor.enumName = FFIRename.classNameFromCppName(getTypeName(typeIndex))
             descriptor.enumName = FFIRename.classNameFromCppName(getTypeName(typeIndex))
@@ -305,6 +311,8 @@ class FFIInterrogateDatabase:
         if descriptor.isNested:
         if descriptor.isNested:
             outerTypeIndex = interrogate_type_outer_class(typeIndex)
             outerTypeIndex = interrogate_type_outer_class(typeIndex)
             descriptor.outerType = self.constructDescriptor(outerTypeIndex)
             descriptor.outerType = self.constructDescriptor(outerTypeIndex)
+        if interrogate_type_has_module_name(typeIndex):
+            descriptor.moduleName = 'lib' + interrogate_type_module_name(typeIndex)
         descriptor.foreignTypeName = \
         descriptor.foreignTypeName = \
              FFIRename.nonClassNameFromCppName(getTypeName(typeIndex))
              FFIRename.nonClassNameFromCppName(getTypeName(typeIndex))
         descriptor.typeIndex = typeIndex
         descriptor.typeIndex = typeIndex
@@ -323,6 +331,8 @@ class FFIInterrogateDatabase:
         if descriptor.isNested:
         if descriptor.isNested:
             outerTypeIndex = interrogate_type_outer_class(typeIndex)
             outerTypeIndex = interrogate_type_outer_class(typeIndex)
             descriptor.outerType = self.constructDescriptor(outerTypeIndex)
             descriptor.outerType = self.constructDescriptor(outerTypeIndex)
+        if interrogate_type_has_module_name(typeIndex):
+            descriptor.moduleName = 'lib' + interrogate_type_module_name(typeIndex)
         descriptor.foreignTypeName = \
         descriptor.foreignTypeName = \
              FFIRename.nonClassNameFromCppName(getTypeName(typeIndex))
              FFIRename.nonClassNameFromCppName(getTypeName(typeIndex))
         descriptor.typeIndex = typeIndex
         descriptor.typeIndex = typeIndex
@@ -363,6 +373,8 @@ class FFIInterrogateDatabase:
         if descriptor.isNested:
         if descriptor.isNested:
             outerTypeIndex = interrogate_type_outer_class(typeIndex)
             outerTypeIndex = interrogate_type_outer_class(typeIndex)
             descriptor.outerType = self.constructDescriptor(outerTypeIndex)
             descriptor.outerType = self.constructDescriptor(outerTypeIndex)
+        if interrogate_type_has_module_name(typeIndex):
+            descriptor.moduleName = 'lib' + interrogate_type_module_name(typeIndex)
         descriptor.foreignTypeName = FFIRename.classNameFromCppName(getTypeName(typeIndex))
         descriptor.foreignTypeName = FFIRename.classNameFromCppName(getTypeName(typeIndex))
         if FFIConstants.wantComments:
         if FFIConstants.wantComments:
             if interrogate_type_has_comment(typeIndex):
             if interrogate_type_has_comment(typeIndex):

+ 10 - 1
direct/src/ffi/FFITypes.py

@@ -56,6 +56,9 @@ class BaseTypeDescriptor:
         # By default this type is not atomic
         # By default this type is not atomic
         self.atomicType = 0
         self.atomicType = 0
 
 
+        # What C module did this type come from?
+        self.moduleName = ''
+
     def isAtomic(self):
     def isAtomic(self):
         return (self.atomicType != 0)
         return (self.atomicType != 0)
         
         
@@ -131,6 +134,7 @@ class EnumTypeDescriptor(PrimitiveTypeDescriptor):
         self.generateCode(file, 0)
         self.generateCode(file, 0)
 
 
     def generateCode(self, file, nesting):
     def generateCode(self, file, nesting):
+        indent(file, nesting, '# CMODULE [' + self.moduleName + ']\n')
         self.outputComment(file, nesting)
         self.outputComment(file, nesting)
         self.outputValues(file, nesting)
         self.outputValues(file, nesting)
         
         
@@ -232,6 +236,8 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
         # Now look at all the methods that we might inherit if we are at
         # Now look at all the methods that we might inherit if we are at
         # a multiple inheritance node and get their C modules
         # a multiple inheritance node and get their C modules
         for parentType in parent.parentTypes:
         for parentType in parent.parentTypes:
+            if (not (parentType.moduleName in self.CModules)):
+                self.CModules.append(parentType.moduleName)
             for method in parentType.instanceMethods:
             for method in parentType.instanceMethods:
                 if (not (method.typeDescriptor.moduleName in self.CModules)):
                 if (not (method.typeDescriptor.moduleName in self.CModules)):
                     self.CModules.append(method.typeDescriptor.moduleName)
                     self.CModules.append(method.typeDescriptor.moduleName)
@@ -250,7 +256,8 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
             return self.CModules
             return self.CModules
         except:
         except:
             # Otherwise, it must be our first time through, do the real work
             # Otherwise, it must be our first time through, do the real work
-            self.CModules = []
+            # Start with our own moduleName
+            self.CModules = [self.moduleName]
             for method in (self.constructors + [self.destructor] + self.instanceMethods
             for method in (self.constructors + [self.destructor] + self.instanceMethods
                            + self.upcastMethods + self.downcastMethods + self.staticMethods):
                            + self.upcastMethods + self.downcastMethods + self.staticMethods):
                 if method:
                 if method:
@@ -474,6 +481,7 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
 
 
 
 
     def generateCode(self, file, nesting):
     def generateCode(self, file, nesting):
+
         self.recordOverloadedMethods()
         self.recordOverloadedMethods()
         self.cullOverloadedMethods()        
         self.cullOverloadedMethods()        
         self.outputImports(file, nesting)
         self.outputImports(file, nesting)
@@ -583,6 +591,7 @@ class ClassTypeDescriptor(BaseTypeDescriptor):
         
         
 
 
     def outputBaseImports(self, file):
     def outputBaseImports(self, file):
+        indent(file, 0, '# CMODULE [' + self.moduleName + ']\n')
         indent(file, 0, 'import ' + FFIConstants.staticModuleName + '\n')
         indent(file, 0, 'import ' + FFIConstants.staticModuleName + '\n')
         # Everybody imports types for type checking
         # Everybody imports types for type checking
         indent(file, 0, 'import types\n')
         indent(file, 0, 'import types\n')

+ 1 - 1
direct/src/ffi/generatePythonCode

@@ -31,7 +31,7 @@ Options:
   -i lib      interrogate library
   -i lib      interrogate library
   -O          no C++ comments or assertion statements
   -O          no C++ comments or assertion statements
 """
 """
-    
+
 # Initialize variables
 # Initialize variables
 outputDir = ''
 outputDir = ''
 extensionsDir = ''
 extensionsDir = ''