Browse Source

Added a new abstract class DeclarationContext that acts as a container for declarations and make Class and Namespace inherit from it.

pull/1/head
triton 12 years ago
parent
commit
e1ac13601c
  1. 42
      src/Bridge/ASTVisitor.cs
  2. 12
      src/Bridge/Class.cs
  3. 3
      src/Bridge/Declaration.cs
  4. 57
      src/Bridge/Namespace.cs
  5. 4
      src/Generator/Passes/CheckAmbiguousOverloads.cs

42
src/Bridge/ASTVisitor.cs

@ -21,12 +21,12 @@ namespace CppSharp @@ -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;
}
/// <summary>
@ -211,6 +211,9 @@ namespace CppSharp @@ -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 @@ -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 @@ -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;

12
src/Bridge/Class.cs

@ -80,17 +80,12 @@ namespace CppSharp @@ -80,17 +80,12 @@ namespace CppSharp
}
// Represents a C++ record Decl.
public class Class : Declaration
public class Class : DeclarationContext
{
public List<BaseClassSpecifier> Bases;
public List<Class> NestedClasses;
public List<Enumeration> NestedEnums;
public List<Field> Fields;
public List<Property> Properties;
public List<Method> Methods;
public List<Variable> Variables;
public List<Event> Events;
public List<FunctionTemplate> FunctionTemplates;
// True if the record is a POD (Plain Old Data) type.
public bool IsPOD;
@ -116,11 +111,6 @@ namespace CppSharp @@ -116,11 +111,6 @@ namespace CppSharp
Fields = new List<Field>();
Properties = new List<Property>();
Methods = new List<Method>();
Variables = new List<Variable>();
Events = new List<Event>();
NestedClasses = new List<Class>();
NestedEnums = new List<Enumeration>();
FunctionTemplates = new List<FunctionTemplate>();
IsAbstract = false;
IsUnion = false;
IsOpaque = false;

3
src/Bridge/Declaration.cs

@ -1,6 +1,5 @@ @@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using CppSharp;
namespace CppSharp
{
@ -40,7 +39,7 @@ 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;

57
src/Bridge/Namespace.cs

@ -1,14 +1,13 @@ @@ -1,14 +1,13 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace CppSharp
{
/// <summary>
/// Represents a C++ namespace.
/// Represents a declaration context.
/// </summary>
public class Namespace : Declaration
public abstract class DeclarationContext : Declaration
{
public bool IsAnonymous { get; set; }
@ -19,6 +18,7 @@ namespace CppSharp @@ -19,6 +18,7 @@ namespace CppSharp
public List<Template> Templates;
public List<TypedefDecl> Typedefs;
public List<Variable> Variables;
public List<Event> Events;
public TranslationUnit TranslationUnit
{
@ -31,41 +31,16 @@ namespace CppSharp @@ -31,41 +31,16 @@ namespace CppSharp
}
}
public override bool IsGenerated
{
get
{
return !IgnoreFlags.HasFlag(IgnoreFlags.Generation) ||
Namespace.IsGenerated;
}
}
public override bool IsProcessed
{
get
{
return !IgnoreFlags.HasFlag(IgnoreFlags.Processing) ||
Namespace.IsProcessed;
}
}
public Namespace()
: this(null, String.Empty)
{
}
public Namespace(Namespace parent, string name, bool isAnonymous = false)
protected DeclarationContext()
{
Name = name;
Namespace = parent;
IsAnonymous = isAnonymous;
Namespaces = new List<Namespace>();
Enums = new List<Enumeration>();
Functions = new List<Function>();
Classes = new List<Class>();
Templates = new List<Template>();
Typedefs = new List<TypedefDecl>();
Variables = new List<Variable>();
Events = new List<Event>();
}
public Namespace FindNamespace(string name)
@ -78,7 +53,7 @@ namespace CppSharp @@ -78,7 +53,7 @@ namespace CppSharp
public Namespace FindNamespace(string[] namespaces)
{
Namespace currentNamespace = this;
DeclarationContext currentNamespace = this;
foreach (var @namespace in namespaces)
{
@ -91,17 +66,21 @@ namespace CppSharp @@ -91,17 +66,21 @@ namespace CppSharp
currentNamespace = childNamespace;
}
return currentNamespace;
return currentNamespace as Namespace;
}
public Namespace FindCreateNamespace(string name, Namespace parent)
public Namespace FindCreateNamespace(string name)
{
var @namespace = FindNamespace(name);
if (@namespace == null)
{
@namespace = new Namespace(parent, name);
@namespace = new Namespace
{
Name = name,
Namespace = this,
};
Namespaces.Add(@namespace);
}
@ -249,7 +228,13 @@ namespace CppSharp @@ -249,7 +228,13 @@ namespace CppSharp
}
public bool IsRoot { get { return Namespace == null; } }
}
/// <summary>
/// Represents a C++ namespace.
/// </summary>
public class Namespace : DeclarationContext
{
public override T Visit<T>(IDeclVisitor<T> visitor)
{
return visitor.VisitNamespace(this);

4
src/Generator/Passes/CheckAmbiguousOverloads.cs

@ -65,12 +65,12 @@ namespace CppSharp.Passes @@ -65,12 +65,12 @@ namespace CppSharp.Passes
Options.VisitNamespaceEnums = false;
Options.VisitNamespaceTemplates = false;
Options.VisitNamespaceTypedefs = false;
Options.VisitNamespaceEvents = false;
Options.VisitNamespaceVariables = false;
Options.VisitClassBases = false;
Options.VisitClassFields = false;
Options.VisitClassProperties = false;
Options.VisitClassEvents = false;
Options.VisitClassVariables = false;
}
public override bool VisitClassDecl(Class @class)

Loading…
Cancel
Save