From e1ac13601c2a08f0ba634ca13d5f367474456e9a Mon Sep 17 00:00:00 2001 From: triton Date: Sat, 18 May 2013 15:33:05 +0100 Subject: [PATCH] Added a new abstract class DeclarationContext that acts as a container for declarations and make Class and Namespace inherit from it. --- src/Bridge/ASTVisitor.cs | 42 ++++++++------ src/Bridge/Class.cs | 12 +--- src/Bridge/Declaration.cs | 3 +- src/Bridge/Namespace.cs | 57 +++++++------------ .../Passes/CheckAmbiguousOverloads.cs | 4 +- 5 files changed, 50 insertions(+), 68 deletions(-) diff --git a/src/Bridge/ASTVisitor.cs b/src/Bridge/ASTVisitor.cs index d0776d8f..d8573edf 100644 --- a/src/Bridge/ASTVisitor.cs +++ b/src/Bridge/ASTVisitor.cs @@ -21,12 +21,12 @@ namespace CppSharp public bool VisitClassFields = true; public bool VisitClassProperties = true; public bool VisitClassMethods = true; - public bool VisitClassEvents = true; - public bool VisitClassVariables = true; public bool VisitNamespaceEnums = true; public bool VisitNamespaceTemplates = true; public bool VisitNamespaceTypedefs = true; + public bool VisitNamespaceEvents = true; + public bool VisitNamespaceVariables = true; } /// @@ -211,6 +211,9 @@ namespace CppSharp if (!VisitDeclaration(@class)) return false; + if (!VisitDeclarationContext(@class)) + return false; + if (Options.VisitClassBases) foreach (var baseClass in @class.Bases) if (baseClass.IsClass) @@ -231,14 +234,6 @@ namespace CppSharp VisitMethodDecl(method); } - if (Options.VisitClassEvents) - foreach (var @event in @class.Events) - VisitEvent(@event); - - if (Options.VisitClassVariables) - foreach (var variable in @class.Variables) - VisitVariableDecl(variable); - return true; } @@ -341,28 +336,41 @@ namespace CppSharp public virtual bool VisitNamespace(Namespace @namespace) { - if (!VisitDeclaration(@namespace)) + return VisitDeclarationContext(@namespace); + } + + public virtual bool VisitDeclarationContext(DeclarationContext context) + { + if (!VisitDeclaration(context)) return false; - foreach (var decl in @namespace.Classes) + foreach (var decl in context.Classes) decl.Visit(this); - foreach (var decl in @namespace.Functions) + foreach (var decl in context.Functions) decl.Visit(this); if (Options.VisitNamespaceEnums) - foreach (var decl in @namespace.Enums) + foreach (var decl in context.Enums) decl.Visit(this); if (Options.VisitNamespaceTemplates) - foreach (var decl in @namespace.Templates) + foreach (var decl in context.Templates) decl.Visit(this); if (Options.VisitNamespaceTypedefs) - foreach (var decl in @namespace.Typedefs) + foreach (var decl in context.Typedefs) + decl.Visit(this); + + if (Options.VisitNamespaceVariables) + foreach (var decl in context.Variables) + VisitVariableDecl(decl); + + if (Options.VisitNamespaceEvents) + foreach (var decl in context.Events) decl.Visit(this); - foreach (var decl in @namespace.Namespaces) + foreach (var decl in context.Namespaces) decl.Visit(this); return true; diff --git a/src/Bridge/Class.cs b/src/Bridge/Class.cs index 7ad991a9..bf7a87ba 100644 --- a/src/Bridge/Class.cs +++ b/src/Bridge/Class.cs @@ -80,17 +80,12 @@ namespace CppSharp } // Represents a C++ record Decl. - public class Class : Declaration + public class Class : DeclarationContext { public List Bases; - public List NestedClasses; - public List NestedEnums; public List Fields; public List Properties; public List Methods; - public List Variables; - public List Events; - public List FunctionTemplates; // True if the record is a POD (Plain Old Data) type. public bool IsPOD; @@ -116,11 +111,6 @@ namespace CppSharp Fields = new List(); Properties = new List(); Methods = new List(); - Variables = new List(); - Events = new List(); - NestedClasses = new List(); - NestedEnums = new List(); - FunctionTemplates = new List(); IsAbstract = false; IsUnion = false; IsOpaque = false; diff --git a/src/Bridge/Declaration.cs b/src/Bridge/Declaration.cs index cf191139..96b965e5 100644 --- a/src/Bridge/Declaration.cs +++ b/src/Bridge/Declaration.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using CppSharp; namespace CppSharp { @@ -40,7 +39,7 @@ namespace CppSharp public abstract class Declaration : INamedDecl { // Namespace the declaration is contained in. - public Namespace Namespace; + public DeclarationContext Namespace; private string name; diff --git a/src/Bridge/Namespace.cs b/src/Bridge/Namespace.cs index dd2b0639..58470734 100644 --- a/src/Bridge/Namespace.cs +++ b/src/Bridge/Namespace.cs @@ -1,14 +1,13 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; namespace CppSharp { /// - /// Represents a C++ namespace. + /// Represents a declaration context. /// - public class Namespace : Declaration + public abstract class DeclarationContext : Declaration { public bool IsAnonymous { get; set; } @@ -19,6 +18,7 @@ namespace CppSharp public List