Browse Source

Added support for anonymous C++11 inline namespaces to the AST and parsers.

pull/222/head
triton 11 years ago
parent
commit
ee3fbd8e03
  1. 4
      src/AST/Namespace.cs
  2. 6
      src/CppParser/AST.cpp
  3. 3
      src/CppParser/AST.h
  4. 2
      src/CppParser/Parser.cpp
  5. 2
      src/Parser/Parser.cpp

4
src/AST/Namespace.cs

@ -311,7 +311,9 @@ namespace CppSharp.AST @@ -311,7 +311,9 @@ namespace CppSharp.AST
/// Represents a C++ namespace.
/// </summary>
public class Namespace : DeclarationContext
{
{
public bool IsInline;
public override T Visit<T>(IDeclVisitor<T> visitor)
{
return visitor.VisitNamespace(this);

6
src/CppParser/AST.cpp

@ -108,8 +108,8 @@ DEF_STRING(Declaration, Name) @@ -108,8 +108,8 @@ DEF_STRING(Declaration, Name)
DEF_STRING(Declaration, DebugText)
DEF_VECTOR(Declaration, PreprocessedEntity*, PreprocessedEntities)
DeclarationContext::DeclarationContext()
: Declaration(DeclarationKind::DeclarationContext) {}
DeclarationContext::DeclarationContext() : IsAnonymous(false),
Declaration(DeclarationKind::DeclarationContext) {}
DEF_VECTOR(DeclarationContext, Namespace*, Namespaces)
DEF_VECTOR(DeclarationContext, Enumeration*, Enums)
@ -403,7 +403,7 @@ ClassTemplatePartialSpecialization::ClassTemplatePartialSpecialization() @@ -403,7 +403,7 @@ ClassTemplatePartialSpecialization::ClassTemplatePartialSpecialization()
FunctionTemplate::FunctionTemplate() { Kind = DeclarationKind::FunctionTemplate; }
Namespace::Namespace() { Kind = DeclarationKind::Namespace; }
Namespace::Namespace() : IsInline(false) { Kind = DeclarationKind::Namespace; }
PreprocessedEntity::PreprocessedEntity()
: Declaration(DeclarationKind::PreprocessedEntity),

3
src/CppParser/AST.h

@ -406,6 +406,8 @@ struct CS_API DeclarationContext : public Declaration @@ -406,6 +406,8 @@ struct CS_API DeclarationContext : public Declaration
VECTOR(TypedefDecl*, Typedefs)
VECTOR(Variable*, Variables)
std::map<uint64_t, Declaration*> Anonymous;
bool IsAnonymous;
};
struct CS_API TypedefDecl : public Declaration
@ -652,6 +654,7 @@ struct CS_API FunctionTemplate : public Template @@ -652,6 +654,7 @@ struct CS_API FunctionTemplate : public Template
struct CS_API Namespace : public DeclarationContext
{
Namespace();
bool IsInline;
};
enum struct MacroLocation

2
src/CppParser/Parser.cpp

@ -1077,6 +1077,8 @@ DeclarationContext* Parser::GetNamespace(clang::Decl* D, @@ -1077,6 +1077,8 @@ DeclarationContext* Parser::GetNamespace(clang::Decl* D,
continue;
auto Name = ND->getName();
DC = DC->FindCreateNamespace(Name);
((Namespace*)DC)->IsAnonymous = ND->isAnonymousNamespace();
((Namespace*)DC)->IsInline = ND->isInline();
HandleDeclaration(ND, DC);
continue;
}

2
src/Parser/Parser.cpp

@ -1090,6 +1090,8 @@ CppSharp::AST::DeclarationContext^ Parser::GetNamespace(clang::Decl* D, @@ -1090,6 +1090,8 @@ CppSharp::AST::DeclarationContext^ Parser::GetNamespace(clang::Decl* D,
continue;
auto Name = clix::marshalString<clix::E_UTF8>(ND->getName());
DC = DC->FindCreateNamespace(Name);
safe_cast<CppSharp::AST::Namespace^>(DC)->IsAnonymous = ND->isAnonymousNamespace();
safe_cast<CppSharp::AST::Namespace^>(DC)->IsInline = ND->isInline();
HandleDeclaration(ND, DC);
continue;
}

Loading…
Cancel
Save