diff options
author | Hugo Lima <hugo.lima@openbossa.org> | 2009-09-18 15:20:19 -0300 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2009-09-18 15:20:19 -0300 |
commit | 16aec6877fb3cd4b76cf76988c853529b9b31c42 (patch) | |
tree | b84f9602337cb37baba7dbcdc8b34e37d5cf91f6 | |
parent | aaf120dfbbcce364f694f985fb2348a9429b2bee (diff) |
Fixed bugs related to the strings returned by defaultValue and originalDefaultValue.
- If there are no typesystem modifications, originalDefaultValue will be equals to
defautlvalue, so originalDefaultValue will not be the same string found by the
C++ parser, it will be usefull only to check if there are some default values
modifications.
-rw-r--r-- | abstractmetabuilder.cpp | 36 | ||||
-rw-r--r-- | abstractmetabuilder.h | 2 |
2 files changed, 18 insertions, 20 deletions
diff --git a/abstractmetabuilder.cpp b/abstractmetabuilder.cpp index 0ba989dc7..5df7328fd 100644 --- a/abstractmetabuilder.cpp +++ b/abstractmetabuilder.cpp @@ -1513,14 +1513,16 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu if (arg->defaultValue() || !replacedExpression.isEmpty()) { QString expr = arg->defaultValueExpression(); - - if (!expr.isEmpty()) - metaArg->setOriginalDefaultValueExpression(expr); - - if (m_currentClass) { - expr = translateDefaultValue(arg, metaArg->type(), metaFunction, m_currentClass, i); - metaArg->setDefaultValueExpression(expr); + expr = fixDefaultValue(arg, metaArg->type(), metaFunction, m_currentClass, i); + metaArg->setOriginalDefaultValueExpression(expr); + + QString replacedExpression = metaFunction->replacedDefaultExpression(m_currentClass, i + 1); + if (metaFunction->removedDefaultExpression(m_currentClass, i + 1)) { + expr = ""; + } else if (!replacedExpression.isEmpty()) { + expr = replacedExpression; } + metaArg->setDefaultValueExpression(expr); if (expr.isEmpty()) firstDefaultArgument = i; @@ -1853,18 +1855,12 @@ void AbstractMetaBuilder::decideUsagePattern(AbstractMetaType *metaType) } } -QString AbstractMetaBuilder::translateDefaultValue(ArgumentModelItem item, AbstractMetaType *type, +QString AbstractMetaBuilder::fixDefaultValue(ArgumentModelItem item, AbstractMetaType *type, AbstractMetaFunction *fnc, AbstractMetaClass *implementingClass, int argumentIndex) { QString functionName = fnc->name(); - QString className = implementingClass->qualifiedCppName(); - - QString replacedExpression = fnc->replacedDefaultExpression(implementingClass, argumentIndex + 1); - if (fnc->removedDefaultExpression(implementingClass, argumentIndex + 1)) - return ""; - else if (!replacedExpression.isEmpty()) - return replacedExpression; + QString className = implementingClass ? implementingClass->qualifiedCppName() : QString(); QString expr = item->defaultValueExpression(); if (type) { @@ -1924,10 +1920,12 @@ QString AbstractMetaBuilder::translateDefaultValue(ArgumentModelItem item, Abstr expr.prepend(typeNamespace); // Fix scope if the parameter is a field of the current class - foreach (const AbstractMetaField* field, implementingClass->fields()) { - if (defaultRegEx.cap(2) == field->name()) { - expr = defaultRegEx.cap(1) + implementingClass->name() + "::" + defaultRegEx.cap(2) + defaultRegEx.cap(3); - break; + if (implementingClass) { + foreach (const AbstractMetaField* field, implementingClass->fields()) { + if (defaultRegEx.cap(2) == field->name()) { + expr = defaultRegEx.cap(1) + implementingClass->name() + "::" + defaultRegEx.cap(2) + defaultRegEx.cap(3); + break; + } } } } diff --git a/abstractmetabuilder.h b/abstractmetabuilder.h index 4f0979129..1b66ac5a9 100644 --- a/abstractmetabuilder.h +++ b/abstractmetabuilder.h @@ -117,7 +117,7 @@ public: void setupClonable(AbstractMetaClass *cls); void setupFunctionDefaults(AbstractMetaFunction *metaFunction, AbstractMetaClass *metaClass); - QString translateDefaultValue(ArgumentModelItem item, AbstractMetaType *type, + QString fixDefaultValue(ArgumentModelItem item, AbstractMetaType *type, AbstractMetaFunction *fnc, AbstractMetaClass *, int argumentIndex); AbstractMetaType *translateType(const TypeInfo &type, bool *ok, bool resolveType = true, bool resolveScope = true); |