Commit b4fd6ac5 authored by Dimitri van Heesch's avatar Dimitri van Heesch
Browse files

Bug 739210 - C++11 scoped enums with same name inside different classes are merged if using tagfile

parent cba0d89f
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -7038,7 +7038,7 @@ static void findEnums(EntryNav *rootNav)

    if (cd && !name.isEmpty()) // found a enum inside a compound
    {
      //printf("Enum `%s'::`%s'\n",cd->name(),name.data());
      //printf("Enum `%s'::`%s'\n",cd->name().data(),name.data());
      fd=0;
      mnsd=Doxygen::memberNameSDict;
      isGlobal=FALSE;
@@ -7071,17 +7071,17 @@ static void findEnums(EntryNav *rootNav)
      if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
      md->setBodySegment(root->bodyLine,root->endBodyLine);
      md->setBodyDef(rootNav->fileDef());
      md->setMemberSpecifiers(root->spec); // UNO IDL "published"
      md->setMemberSpecifiers(root->spec);
      md->setEnumBaseType(root->args);
      //printf("Enum %s definition at line %d of %s: protection=%d\n",
      //    root->name.data(),root->bodyLine,root->fileName.data(),root->protection);
      //printf("Enum %s definition at line %d of %s: protection=%d scope=%s\n",
      //    root->name.data(),root->bodyLine,root->fileName.data(),root->protection,cd?cd->name().data():"<none>");
      md->addSectionsToDefinition(root->anchors);
      md->setMemberGroupId(root->mGrpId);
      md->enableCallGraph(root->callGraph);
      md->enableCallerGraph(root->callerGraph);
      //printf("%s::setRefItems(%d)\n",md->name().data(),root->sli?root->sli->count():-1);
      md->setRefItems(root->sli);
      //printf("found enum %s nd=%p\n",name.data(),nd);
      //printf("found enum %s nd=%p\n",md->name().data(),nd);
      bool defSet=FALSE;

      QCString baseType = root->args;
@@ -7268,9 +7268,13 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
                Entry *root = e->entry();
                //printf("md->qualifiedName()=%s rootNav->name()=%s tagInfo=%p name=%s\n",
                //    md->qualifiedName().data(),rootNav->name().data(),rootNav->tagInfo(),root->name.data());
                QCString qualifiedName = substitute(rootNav->name(),"::",".");
                if (!scope.isEmpty() && rootNav->tagInfo())
                {
                  qualifiedName=substitute(scope,"::",".")+"."+qualifiedName;
                }
                if (substitute(md->qualifiedName(),"::",".")== // TODO: add function to get canonical representation
                    substitute(rootNav->name(),"::",".") ||    // enum value scope matches that of the enum
                    rootNav->tagInfo()                         // be less strict for tag files as members can have incomplete scope
                    qualifiedName       // enum value scope matches that of the enum
                   )
                {
                  MemberDef *fmd=new MemberDef(