diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2011-07-11 14:16:18 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:15:28 -0300 |
commit | fe18fa07c473af4f4b3886efa8d6f1fb5fe9d8a5 (patch) | |
tree | 34952292aa049c29e26f2f369fdd97c59384258c /generator/headergenerator.cpp | |
parent | 2685383e5094222bc535db465b411abae967a883 (diff) |
Write type indexes in an ABI safe way.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'generator/headergenerator.cpp')
-rw-r--r-- | generator/headergenerator.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/generator/headergenerator.cpp b/generator/headergenerator.cpp index 3a8210366..a975eae71 100644 --- a/generator/headergenerator.cpp +++ b/generator/headergenerator.cpp @@ -286,7 +286,7 @@ void HeaderGenerator::writeTypeConverterDecl(QTextStream& s, const TypeEntry* ty } } -void HeaderGenerator::writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* typeEntry, int& idx) +void HeaderGenerator::writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* typeEntry) { if (!typeEntry || !typeEntry->generateCode()) return; @@ -295,23 +295,23 @@ void HeaderGenerator::writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* s.setFieldWidth(60); s << getTypeIndexVariableName(typeEntry); s.setFieldWidth(0); - s << ' ' << (idx++) << endl; + s << ' ' << getTypeIndex(typeEntry) << endl; if (typeEntry->isEnum()) { const EnumTypeEntry* ete = reinterpret_cast<const EnumTypeEntry*>(typeEntry); if (ete->flags()) - writeTypeIndexDefineLine(s, ete->flags(), idx); + writeTypeIndexDefineLine(s, ete->flags()); } } -void HeaderGenerator::writeTypeIndexDefine(QTextStream& s, const AbstractMetaClass* metaClass, int& idx) +void HeaderGenerator::writeTypeIndexDefine(QTextStream& s, const AbstractMetaClass* metaClass) { if (!metaClass->typeEntry()->generateCode()) return; - writeTypeIndexDefineLine(s, metaClass->typeEntry(), idx); + writeTypeIndexDefineLine(s, metaClass->typeEntry()); foreach (const AbstractMetaEnum* metaEnum, metaClass->enums()) { if (metaEnum->isPrivate()) continue; - writeTypeIndexDefineLine(s, metaEnum->typeEntry(), idx); + writeTypeIndexDefineLine(s, metaEnum->typeEntry()); } } @@ -338,19 +338,18 @@ void HeaderGenerator::finishGeneration() Indentation indent(INDENT); macrosStream << "// Type indices" << endl; - int idx = 0; AbstractMetaEnumList globalEnums = this->globalEnums(); foreach (const AbstractMetaClass* metaClass, classes()) { - writeTypeIndexDefine(macrosStream, metaClass, idx); + writeTypeIndexDefine(macrosStream, metaClass); lookForEnumsInClassesNotToBeGenerated(globalEnums, metaClass); } foreach (const AbstractMetaEnum* metaEnum, globalEnums) - writeTypeIndexDefineLine(macrosStream, metaEnum->typeEntry(), idx); + writeTypeIndexDefineLine(macrosStream, metaEnum->typeEntry()); macrosStream << "#define "; macrosStream.setFieldWidth(60); macrosStream << "SBK_"+moduleName()+"_IDX_COUNT"; macrosStream.setFieldWidth(0); - macrosStream << ' ' << idx << endl << endl; + macrosStream << ' ' << getMaxTypeIndex() << endl << endl; macrosStream << "// This variable stores all python types exported by this module" << endl; macrosStream << "extern PyTypeObject** " << cppApiVariableName() << ';' << endl << endl; |