aboutsummaryrefslogtreecommitdiffstats
path: root/abstractmetalang.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'abstractmetalang.cpp')
-rw-r--r--abstractmetalang.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/abstractmetalang.cpp b/abstractmetalang.cpp
index 5e8020db7..9643d5f85 100644
--- a/abstractmetalang.cpp
+++ b/abstractmetalang.cpp
@@ -675,12 +675,22 @@ QString AbstractMetaFunction::minimalSignature() const
return minimalSignature;
}
-FunctionModificationList AbstractMetaFunction::modifications(const AbstractMetaClass *implementor) const
+FunctionModificationList AbstractMetaFunction::modifications(const AbstractMetaClass* implementor) const
{
- // FIXME Global functions do not support modifications
if (!implementor)
- return FunctionModificationList();
- return implementor->typeEntry()->functionModifications(minimalSignature());
+ implementor = ownerClass();
+
+ if (!implementor)
+ return TypeDatabase::instance()->functionModifications(minimalSignature());
+
+ FunctionModificationList mods;
+ while (implementor) {
+ mods += implementor->typeEntry()->functionModifications(minimalSignature());
+ if (implementor == implementor->baseClass())
+ break;
+ implementor = implementor->baseClass();
+ }
+ return mods;
}
bool AbstractMetaFunction::hasModifications(const AbstractMetaClass *implementor) const
@@ -714,7 +724,7 @@ CodeSnipList AbstractMetaFunction::injectedCodeSnips(CodeSnip::Position position
bool AbstractMetaFunction::hasSignatureModifications() const
{
- foreach (const FunctionModification mod, modifications(ownerClass())) {
+ foreach (const FunctionModification mod, modifications()) {
foreach (const ArgumentModification argmod, mod.argument_mods) {
// since zero represents the return type and we're
// interested only in checking the function arguments,