diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-12-15 14:42:53 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-12-15 14:42:53 -0300 |
commit | 83df2914d6c98e40b9aeb1154149427276f45417 (patch) | |
tree | 414cf93bc4d1f53edc1a253470d4be27ae272c99 | |
parent | cdcb5567c77b3f703541839101cad564605b7f61 (diff) |
Updates generator to use improvements in API Extractor regarding function modifications.
-rw-r--r-- | cppgenerator.cpp | 18 | ||||
-rw-r--r-- | shibokengenerator.cpp | 33 | ||||
-rw-r--r-- | shibokengenerator.h | 8 |
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, |