aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2011-07-11 14:16:18 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:15:28 -0300
commitfe18fa07c473af4f4b3886efa8d6f1fb5fe9d8a5 (patch)
tree34952292aa049c29e26f2f369fdd97c59384258c /generator
parent2685383e5094222bc535db465b411abae967a883 (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.cpp19
-rw-r--r--generator/headergenerator.h4
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);