aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2009-12-15 14:42:53 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-12-15 14:42:53 -0300
commit83df2914d6c98e40b9aeb1154149427276f45417 (patch)
tree414cf93bc4d1f53edc1a253470d4be27ae272c99
parentcdcb5567c77b3f703541839101cad564605b7f61 (diff)
Updates generator to use improvements in API Extractor regarding function modifications.
-rw-r--r--cppgenerator.cpp18
-rw-r--r--shibokengenerator.cpp33
-rw-r--r--shibokengenerator.h8
3 files changed, 11 insertions, 48 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp
index 2b5c3c3e8..d89a74ecb 100644
--- a/cppgenerator.cpp
+++ b/cppgenerator.cpp
@@ -287,9 +287,9 @@ void CppGenerator::writeConstructorNative(QTextStream& s, const AbstractMetaFunc
s << " : ";
writeFunctionCall(s, func);
s << " {" << endl;
- writeCodeSnips(s, getCodeSnips(func), CodeSnip::Beginning, TypeSystem::NativeCode, func);
+ writeCodeSnips(s, func->injectedCodeSnips(), CodeSnip::Beginning, TypeSystem::NativeCode, func);
s << INDENT << "// ... middle" << endl;
- writeCodeSnips(s, getCodeSnips(func), CodeSnip::End, TypeSystem::NativeCode, func);
+ writeCodeSnips(s, func->injectedCodeSnips(), CodeSnip::End, TypeSystem::NativeCode, func);
s << '}' << endl << endl;
}
@@ -383,7 +383,7 @@ void CppGenerator::writeVirtualMethodNative(QTextStream &s, const AbstractMetaFu
CodeSnipList snips;
if (func->hasInjectedCode()) {
- snips = getCodeSnips(func);
+ snips = func->injectedCodeSnips();
if (injectedCodeUsesPySelf(func))
s << INDENT << "PyObject* pySelf = BindingManager::instance().retrieveWrapper(this);" << endl;
@@ -401,7 +401,7 @@ void CppGenerator::writeVirtualMethodNative(QTextStream &s, const AbstractMetaFu
s << INDENT << "PyGILState_Release(gil_state);" << endl << endl;
}
- foreach (FunctionModification func_mod, functionModifications(func)) {
+ foreach (FunctionModification func_mod, func->modifications()) {
foreach (ArgumentModification arg_mod, func_mod.argument_mods) {
if (!arg_mod.resetAfterUse)
continue;
@@ -986,7 +986,7 @@ void CppGenerator::writeMethodCall(QTextStream& s, const AbstractMetaFunction* f
CodeSnipList snips;
if (func->hasInjectedCode()) {
- snips = getCodeSnips(func);
+ snips = func->injectedCodeSnips();
if (injectedCodeUsesCppSelf(func)) {
s << INDENT;
#ifdef AVOID_PROTECTED_HACK
@@ -1184,7 +1184,7 @@ void CppGenerator::writeMethodCall(QTextStream& s, const AbstractMetaFunction* f
// Ownership transference between C++ and Python.
QList<ArgumentModification> ownership_mods;
- foreach (FunctionModification func_mod, functionModifications(func)) {
+ foreach (FunctionModification func_mod, func->modifications()) {
foreach (ArgumentModification arg_mod, func_mod.argument_mods) {
if (!arg_mod.ownerships.isEmpty() && arg_mod.ownerships.contains(TypeSystem::TargetLangCode))
ownership_mods.append(arg_mod);
@@ -2227,7 +2227,7 @@ void CppGenerator::finishGeneration()
// type system files.
QString incFile = func->includeFile();
QRegExp regex("\\b(?:lib)?" + moduleName() + "\\b");
- if (regex.indexIn(incFile) == -1)
+ if (!func->isUserAdded() && regex.indexIn(incFile) == -1)
continue;
if (!func->isModifiedRemoved())
@@ -2237,7 +2237,9 @@ void CppGenerator::finishGeneration()
if (overloads.isEmpty())
continue;
- includes << overloads.first()->includeFile();
+ QString includeFile = overloads.first()->includeFile();
+ if (!includeFile.isEmpty())
+ includes << includeFile;
writeMethodWrapper(s_globalFunctionImpl, overloads);
writeMethodDefinition(s_globalFunctionDef, overloads);
diff --git a/shibokengenerator.cpp b/shibokengenerator.cpp
index b7644593d..cb1c20dde 100644
--- a/shibokengenerator.cpp
+++ b/shibokengenerator.cpp
@@ -146,19 +146,6 @@ void ShibokenGenerator::initPrimitiveTypesCorrespondences()
m_formatUnits.insert("float", "f");
}
-FunctionModificationList ShibokenGenerator::functionModifications(const AbstractMetaFunction* func)
-{
- FunctionModificationList mods;
- const AbstractMetaClass *cls = func->ownerClass();
- while (cls) {
- mods += func->modifications(cls);
- if (cls == cls->baseClass())
- break;
- cls = cls->baseClass();
- }
- return mods;
-}
-
QString ShibokenGenerator::translateTypeForWrapperMethod(const AbstractMetaType* cType,
const AbstractMetaClass* context) const
{
@@ -691,7 +678,7 @@ QString ShibokenGenerator::functionSignature(const AbstractMetaFunction *func,
bool ShibokenGenerator::hasInjectedCodeOrSignatureModification(const AbstractMetaFunction* func)
{
- foreach (FunctionModification mod, functionModifications(func)) {
+ foreach (FunctionModification mod, func->modifications()) {
if (mod.isCodeInjection() || mod.isRenameModifier())
return true;
}
@@ -821,24 +808,6 @@ AbstractMetaFunctionList ShibokenGenerator::filterFunctions(const AbstractMetaCl
//return metaClass->functions();
}
-CodeSnipList ShibokenGenerator::getCodeSnips(const AbstractMetaFunction *func)
-{
- CodeSnipList result;
- const AbstractMetaClass* metaClass = func->implementingClass();
- while (metaClass) {
- foreach (FunctionModification mod, func->modifications(metaClass)) {
- if (mod.isCodeInjection())
- result << mod.snips;
- }
-
- if (metaClass == metaClass->baseClass())
- break;
- metaClass = metaClass->baseClass();
- }
-
- return result;
-}
-
void ShibokenGenerator::writeCodeSnips(QTextStream& s,
const CodeSnipList& codeSnips,
CodeSnip::Position position,
diff --git a/shibokengenerator.h b/shibokengenerator.h
index f7a79e708..3ee45487f 100644
--- a/shibokengenerator.h
+++ b/shibokengenerator.h
@@ -114,13 +114,6 @@ public:
const AbstractMetaClass* context = 0);
/**
- * Returns a function's code snippets.
- * \param func the function from which retrieve the code snippets
- * \return a list containing the function code snippets
- */
- CodeSnipList getCodeSnips(const AbstractMetaFunction* func);
-
- /**
* Verifies if any of the function's code injections of the "target"
* type needs the type system variable "%CPPSELF".
* \param func the function to check
@@ -285,7 +278,6 @@ protected:
static QString retvalVariableName() { return QString("py_result"); }
- static FunctionModificationList functionModifications(const AbstractMetaFunction* func);
AbstractMetaFunctionList queryFunctions(const AbstractMetaClass* metaClass, bool allFunction = false);
void writeFunctionCall(QTextStream& s,
const AbstractMetaFunction* metaFunc,