Commit 6f0269ef authored by Dimitri van Heesch's avatar Dimitri van Heesch

Bug 734077 - no uniquely matching class member found for inline function...

Bug 734077 - no uniquely matching class member found for inline function definition where parameter argument names don't match
parent e913d55b
...@@ -4364,6 +4364,11 @@ bool ClassDef::isPublished() const ...@@ -4364,6 +4364,11 @@ bool ClassDef::isPublished() const
return m_impl->spec&Entry::Published; return m_impl->spec&Entry::Published;
} }
bool ClassDef::isForwardDeclared() const
{
return m_impl->spec&Entry::ForwardDecl;
}
bool ClassDef::isObjectiveC() const bool ClassDef::isObjectiveC() const
{ {
return getLanguage()==SrcLangExt_ObjC; return getLanguage()==SrcLangExt_ObjC;
......
...@@ -271,6 +271,9 @@ class ClassDef : public Definition ...@@ -271,6 +271,9 @@ class ClassDef : public Definition
/** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */ /** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */
bool isExtension() const; bool isExtension() const;
/** Returns TRUE if this class represents a forward declaration of a template class */
bool isForwardDeclared() const;
/** Returns the class of which this is a category (Objective-C only) */ /** Returns the class of which this is a category (Objective-C only) */
ClassDef *categoryOf() const; ClassDef *categoryOf() const;
......
...@@ -1256,7 +1256,7 @@ static void addClassToContext(EntryNav *rootNav) ...@@ -1256,7 +1256,7 @@ static void addClassToContext(EntryNav *rootNav)
Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n", Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n",
cd ? cd->name().data() : root->name.data(), qualifiedName.data(),cd); cd ? cd->name().data() : root->name.data(), qualifiedName.data(),cd);
if (cd) if (cd)
{ {
fullName=cd->name(); fullName=cd->name();
Debug::print(Debug::Classes,0," Existing class %s!\n",cd->name().data()); Debug::print(Debug::Classes,0," Existing class %s!\n",cd->name().data());
...@@ -1276,11 +1276,12 @@ static void addClassToContext(EntryNav *rootNav) ...@@ -1276,11 +1276,12 @@ static void addClassToContext(EntryNav *rootNav)
} }
//cd->setName(fullName); // change name to match docs //cd->setName(fullName); // change name to match docs
if (cd->templateArguments()==0) if (cd->templateArguments()==0 || (cd->isForwardDeclared() && (root->spec&Entry::ForwardDecl)==0))
{ {
// this happens if a template class declared with @class is found // this happens if a template class declared with @class is found
// before the actual definition. // before the actual definition or if a forward declaration has different template
ArgumentList *tArgList = // parameter names.
ArgumentList *tArgList =
getTemplateArgumentsFromName(cd->name(),root->tArgLists); getTemplateArgumentsFromName(cd->name(),root->tArgLists);
cd->setTemplateArguments(tArgList); cd->setTemplateArguments(tArgList);
} }
......
...@@ -133,6 +133,7 @@ class Entry ...@@ -133,6 +133,7 @@ class Entry
static const uint64 Enum = (1ULL<<12); // for Java-style enums static const uint64 Enum = (1ULL<<12); // for Java-style enums
static const uint64 Service = (1ULL<<13); // UNO IDL static const uint64 Service = (1ULL<<13); // UNO IDL
static const uint64 Singleton = (1ULL<<14); // UNO IDL static const uint64 Singleton = (1ULL<<14); // UNO IDL
static const uint64 ForwardDecl = (1ULL<<14); // forward declarad template classes
// member specifiers (add new items to the beginning) // member specifiers (add new items to the beginning)
static const uint64 PrivateGettable = (1ULL<<20); // C# private getter static const uint64 PrivateGettable = (1ULL<<20); // C# private getter
......
...@@ -5300,6 +5300,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) ...@@ -5300,6 +5300,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{ {
prependScope(); prependScope();
} }
current->spec|=Entry::ForwardDecl;
current_root->addSubEntry(current); current_root->addSubEntry(current);
current = new Entry; current = new Entry;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment