def constructEnumTypeDescriptor(self, typeIndex): if self.isDefinedType(typeIndex): return self.typeIndexMap[typeIndex] else: descriptor = FFITypes.EnumTypeDescriptor() #descriptor.environment = self.environment descriptor.isNested = interrogate_type_is_nested(typeIndex) if descriptor.isNested: outerTypeIndex = interrogate_type_outer_class(typeIndex) 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 # So we will just call them enums descriptor.enumName = FFIRename.classNameFromCppName( getTypeName(typeIndex)) descriptor.foreignTypeName = '__enum__' + descriptor.enumName numValues = interrogate_type_number_of_enum_values(typeIndex) # Store the names and values of the enum in a dictionary for i in range(numValues): value = interrogate_type_enum_value(typeIndex, i) name = FFIRename.classNameFromCppName( interrogate_type_enum_value_name(typeIndex, i)) scopedName = FFIRename.classNameFromCppName( interrogate_type_enum_value_scoped_name(typeIndex, i)) descriptor.values[name] = value descriptor.typeIndex = typeIndex self.typeIndexMap[typeIndex] = descriptor return descriptor
def constructEnumTypeDescriptor(self, typeIndex): if self.isDefinedType(typeIndex): return self.typeIndexMap[typeIndex] else: descriptor = FFITypes.EnumTypeDescriptor() #descriptor.environment = self.environment descriptor.isNested = interrogate_type_is_nested(typeIndex) if descriptor.isNested: outerTypeIndex = interrogate_type_outer_class(typeIndex) 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 # So we will just call them enums descriptor.enumName = FFIRename.classNameFromCppName(getTypeName(typeIndex)) descriptor.foreignTypeName = '__enum__' + descriptor.enumName numValues = interrogate_type_number_of_enum_values(typeIndex) # Store the names and values of the enum in a dictionary for i in range(numValues): value = interrogate_type_enum_value(typeIndex, i) name = FFIRename.classNameFromCppName( interrogate_type_enum_value_name(typeIndex, i)) scopedName = FFIRename.classNameFromCppName( interrogate_type_enum_value_scoped_name(typeIndex, i)) descriptor.values[name] = value descriptor.typeIndex = typeIndex self.typeIndexMap[typeIndex] = descriptor return descriptor
def constructManifest(self, manifestIndex): descriptor = None intValue = None getter = None if interrogate_manifest_has_type(manifestIndex): typeIndex = interrogate_manifest_get_type(manifestIndex) descriptor = self.constructDescriptor(typeIndex) definition = interrogate_manifest_definition(manifestIndex) # See if this manifest is an int. There are shortcuts if it is. # If it does have an int value, there will be no getter, we will # just output the value in the generated code if interrogate_manifest_has_int_value(manifestIndex): intValue = interrogate_manifest_get_int_value(manifestIndex) else: # See if this manifest has a getter if interrogate_manifest_has_getter(manifestIndex): getterIndex = interrogate_manifest_getter(manifestIndex) getter = self.constructGlobalFunction(getterIndex) manifestSpec = FFISpecs.ManifestSpecification() manifestSpec.typeDescriptor = descriptor manifestSpec.definition = definition manifestSpec.intValue = intValue manifestSpec.getter = getter cppName = interrogate_manifest_name(manifestIndex) manifestSpec.name = FFIRename.classNameFromCppName(cppName) return manifestSpec
def constructGlobal(self, globalIndex, CModuleName): # We really do not need the descriptor for the value, just # the getter and setter # typeIndex = interrogate_element_type(globalIndex) # descriptor = self.constructDescriptor(typeIndex) if interrogate_element_has_getter(globalIndex): getterIndex = interrogate_element_getter(globalIndex) # If this function is not in this Cmodule just return if not self.functionInCModule(getterIndex, CModuleName): return None getter = self.constructGlobalFunction(getterIndex) else: getter = None if interrogate_element_has_setter(globalIndex): setterIndex = interrogate_element_setter(globalIndex) # If this function is not in this Cmodule just return if not self.functionInCModule(setterIndex, CModuleName): return None setter = self.constructGlobalFunction(setterIndex) else: setter = None globalSpec = FFISpecs.GlobalValueSpecification() globalSpec.getter = getter globalSpec.setter = setter # globalSpec.typeDescriptor = descriptor cppName = interrogate_element_name(globalIndex) globalSpec.name = FFIRename.classNameFromCppName(cppName) return globalSpec
def constructClassTypeDescriptor(self, typeIndex): if self.isDefinedType(typeIndex): return self.typeIndexMap[typeIndex] typeName = FFIRename.classNameFromCppName(getTypeName(typeIndex)) if typeName == "PyObject": # A special case: the PyObject type is really a native # Python object, not to be molested--it's not really an # FFI class object. descriptor = FFITypes.PyObjectTypeDescriptor() self.typeIndexMap[typeIndex] = descriptor return descriptor descriptor = FFITypes.ClassTypeDescriptor() self.typeIndexMap[typeIndex] = descriptor #descriptor.environment = self.environment descriptor.foreignTypeName = typeName if (typeName == "TypedObject"): FFITypes.TypedObjectDescriptor = descriptor descriptor.isNested = interrogate_type_is_nested(typeIndex) if descriptor.isNested: outerTypeIndex = interrogate_type_outer_class(typeIndex) descriptor.outerType = self.constructDescriptor(outerTypeIndex) if interrogate_type_has_module_name(typeIndex): descriptor.moduleName = 'lib' + interrogate_type_module_name( typeIndex) if FFIConstants.wantComments: if interrogate_type_has_comment(typeIndex): descriptor.comment = interrogate_type_comment(typeIndex) descriptor.typeIndex = typeIndex descriptor.instanceMethods = self.constructMemberFunctionSpecifications( typeIndex) descriptor.upcastMethods = self.constructUpcastFunctionSpecifications( typeIndex) # Constructing downcasts does not return the functions, it just puts them in the class # See the comment in that function self.constructDowncastFunctionSpecifications(typeIndex) descriptor.filterOutStaticMethods() descriptor.constructors = self.constructConstructorSpecifications( typeIndex) descriptor.destructor = self.constructDestructorSpecification( typeIndex) descriptor.parentTypes = self.constructParentTypeDescriptors(typeIndex) descriptor.nestedTypes = self.constructNestedTypeDescriptors(typeIndex) return descriptor
def constructClassTypeDescriptor(self, typeIndex): if self.isDefinedType(typeIndex): return self.typeIndexMap[typeIndex] typeName = FFIRename.classNameFromCppName(getTypeName(typeIndex)) if typeName == "PyObject": # A special case: the PyObject type is really a native # Python object, not to be molested--it's not really an # FFI class object. descriptor = FFITypes.PyObjectTypeDescriptor() self.typeIndexMap[typeIndex] = descriptor return descriptor descriptor = FFITypes.ClassTypeDescriptor() self.typeIndexMap[typeIndex] = descriptor #descriptor.environment = self.environment descriptor.foreignTypeName = typeName if (typeName == "TypedObject"): FFITypes.TypedObjectDescriptor = descriptor descriptor.isNested = interrogate_type_is_nested(typeIndex) if descriptor.isNested: outerTypeIndex = interrogate_type_outer_class(typeIndex) descriptor.outerType = self.constructDescriptor(outerTypeIndex) if interrogate_type_has_module_name(typeIndex): descriptor.moduleName = 'lib' + interrogate_type_module_name(typeIndex) if FFIConstants.wantComments: if interrogate_type_has_comment(typeIndex): descriptor.comment = interrogate_type_comment(typeIndex) descriptor.typeIndex = typeIndex descriptor.instanceMethods = self.constructMemberFunctionSpecifications(typeIndex) descriptor.upcastMethods = self.constructUpcastFunctionSpecifications(typeIndex) # Constructing downcasts does not return the functions, it just puts them in the class # See the comment in that function self.constructDowncastFunctionSpecifications(typeIndex) descriptor.filterOutStaticMethods() descriptor.constructors = self.constructConstructorSpecifications(typeIndex) descriptor.destructor = self.constructDestructorSpecification(typeIndex) descriptor.parentTypes = self.constructParentTypeDescriptors(typeIndex) descriptor.nestedTypes = self.constructNestedTypeDescriptors(typeIndex) return descriptor