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 | |
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')
-rw-r--r-- | generator/headergenerator.cpp | 19 | ||||
-rw-r--r-- | generator/headergenerator.h | 4 |
2 files changed, 11 insertions, 12 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; diff --git a/generator/headergenerator.h b/generator/headergenerator.h index 6710b9948..41273e7df 100644 --- a/generator/headergenerator.h +++ b/generator/headergenerator.h @@ -45,8 +45,8 @@ private: void writeTypeConverterDecl(QTextStream& s, const TypeEntry* type); void writeSbkTypeFunction(QTextStream& s, const AbstractMetaEnum* cppEnum); void writeSbkTypeFunction(QTextStream& s, const AbstractMetaClass* cppClass); - void writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* typeEntry, int& idx); - void writeTypeIndexDefine(QTextStream& s, const AbstractMetaClass* metaClass, int& idx); + void writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* typeEntry); + void writeTypeIndexDefine(QTextStream& s, const AbstractMetaClass* metaClass); void writeTypeConverterImpl(QTextStream& s, const TypeEntry* type); void writeProtectedEnumSurrogate(QTextStream& s, const AbstractMetaEnum* cppEnum); void writeInheritedOverloads(QTextStream& s); |