Browse Source

Fixed anonymous declaration parsing.

pull/273/head
triton 11 years ago
parent
commit
e4873e20cc
  1. 2
      src/CppParser/AST.cpp
  2. 4
      src/CppParser/AST.h
  3. 8
      src/CppParser/Parser.cpp

2
src/CppParser/AST.cpp

@ -166,7 +166,7 @@ DEF_VECTOR(DeclarationContext, Template*, Templates) @@ -166,7 +166,7 @@ DEF_VECTOR(DeclarationContext, Template*, Templates)
DEF_VECTOR(DeclarationContext, TypedefDecl*, Typedefs)
DEF_VECTOR(DeclarationContext, Variable*, Variables)
Declaration* DeclarationContext::FindAnonymous(uint64_t key)
Declaration* DeclarationContext::FindAnonymous(const std::string& key)
{
auto it = Anonymous.find(key);
return (it != Anonymous.end()) ? it->second : 0;

4
src/CppParser/AST.h

@ -395,7 +395,7 @@ struct CS_API DeclarationContext : public Declaration @@ -395,7 +395,7 @@ struct CS_API DeclarationContext : public Declaration
{
DeclarationContext(DeclarationKind kind);
CS_IGNORE Declaration* FindAnonymous(uint64_t key);
CS_IGNORE Declaration* FindAnonymous(const std::string& USR);
CS_IGNORE CppSharp::CppParser::AST::Namespace* FindNamespace(const std::string& Name);
CS_IGNORE CppSharp::CppParser::AST::Namespace* FindNamespace(const std::vector<std::string>&);
@ -424,7 +424,7 @@ struct CS_API DeclarationContext : public Declaration @@ -424,7 +424,7 @@ struct CS_API DeclarationContext : public Declaration
VECTOR(Template*, Templates)
VECTOR(TypedefDecl*, Typedefs)
VECTOR(Variable*, Variables)
std::map<uint64_t, Declaration*> Anonymous;
std::map<std::string, Declaration*> Anonymous;
bool IsAnonymous;
};

8
src/CppParser/Parser.cpp

@ -578,7 +578,8 @@ Class* Parser::GetRecord(clang::RecordDecl* Record, bool& Process) @@ -578,7 +578,8 @@ Class* Parser::GetRecord(clang::RecordDecl* Record, bool& Process)
if (HasEmptyName)
{
if (auto AR = NS->FindAnonymous((uint64_t)Record))
auto USR = GetDeclUSR(Record);
if (auto AR = NS->FindAnonymous(USR))
RC = static_cast<Class*>(AR);
}
else
@ -593,7 +594,10 @@ Class* Parser::GetRecord(clang::RecordDecl* Record, bool& Process) @@ -593,7 +594,10 @@ Class* Parser::GetRecord(clang::RecordDecl* Record, bool& Process)
HandleDeclaration(Record, RC);
if (HasEmptyName)
NS->Anonymous[(uint64_t)Record] = RC;
{
auto USR = GetDeclUSR(Record);
NS->Anonymous[USR] = RC;
}
if (!isCompleteDefinition)
return RC;

Loading…
Cancel
Save