diff --git a/src/AST/Class.cs b/src/AST/Class.cs index f4812594..ca08569f 100644 --- a/src/AST/Class.cs +++ b/src/AST/Class.cs @@ -133,6 +133,28 @@ namespace CppSharp.AST Layout = new ClassLayout(); } + public Class(Class @class) + : base(@class) + { + Bases = new List(@class.Bases); + Fields = new List(@class.Fields); + Properties = new List(@class.Properties); + Methods = new List(@class.Methods); + Specifiers = new List(@class.Specifiers); + IsPOD = @class.IsPOD; + Type = @class.Type; + Layout = new ClassLayout(@class.Layout); + IsAbstract = @class.IsAbstract; + IsUnion = @class.IsUnion; + IsOpaque = @class.IsOpaque; + IsDynamic = @class.IsDynamic; + IsPolymorphic = @class.IsPolymorphic; + HasNonTrivialDefaultConstructor = @class.HasNonTrivialDefaultConstructor; + HasNonTrivialCopyConstructor = @class.HasNonTrivialCopyConstructor; + HasNonTrivialDestructor = @class.HasNonTrivialDestructor; + IsStatic = @class.IsStatic; + } + public bool HasBase { get { return Bases.Count > 0; } @@ -149,8 +171,8 @@ namespace CppSharp.AST { foreach (var @base in Bases) { - if (@base.IsClass && @base.Class.IsDeclared) - return @base.Class; + if (@base.IsClass && @base.Class.IsDeclared) + return @base.Class; } return null; @@ -199,11 +221,16 @@ namespace CppSharp.AST } } + public override IEnumerable FindOperator(CXXOperatorKind kind) + { + return Methods.Where(m => m.OperatorKind == kind); + } + public override IEnumerable GetOverloads(Function function) { - if (function.IsOperator) - return Methods.Where(fn => fn.OperatorKind == function.OperatorKind); - + if (function.IsOperator) + return Methods.Where(fn => fn.OperatorKind == function.OperatorKind); + var methods = Methods.Where(m => m.Name == function.Name); if (methods.ToList().Count != 0) return methods; diff --git a/src/AST/Function.cs b/src/AST/Function.cs index a3c795f8..7215e1c7 100644 --- a/src/AST/Function.cs +++ b/src/AST/Function.cs @@ -37,9 +37,21 @@ namespace CppSharp.AST HasDefaultValue = false; } + public Parameter(Parameter p) + : base(p) + { + HasDefaultValue = p.HasDefaultValue; + Index = p.Index; + IsIndirect = p.IsIndirect; + Kind = p.Kind; + QualifiedType = p.QualifiedType; + Usage = p.Usage; + } + public Type Type { get { return QualifiedType.Type; } } public QualifiedType QualifiedType { get; set; } public bool IsIndirect { get; set; } + public uint Index { get; set; } public ParameterKind Kind { get; set; } public ParameterUsage Usage { get; set; } diff --git a/src/AST/Method.cs b/src/AST/Method.cs index ce335c4c..f55afb42 100644 --- a/src/AST/Method.cs +++ b/src/AST/Method.cs @@ -148,6 +148,11 @@ namespace CppSharp.AST public Class ExplicitInterfaceImpl { get; set; } + public override T Visit(IDeclVisitor visitor) + { + return visitor.VisitMethodDecl(this); + } + public override QualifiedType GetFunctionType() { var qualifiedType = base.GetFunctionType(); diff --git a/src/AST/Namespace.cs b/src/AST/Namespace.cs index 6adaab95..733be99f 100644 --- a/src/AST/Namespace.cs +++ b/src/AST/Namespace.cs @@ -25,16 +25,16 @@ namespace CppSharp.AST public Dictionary Anonymous; // True if the context is inside an extern "C" context. - public bool IsExternCContext; - - public override string LogicalName - { - get { return IsAnonymous ? "" : base.Name; } - } - - public override string LogicalOriginalName - { - get { return IsAnonymous ? "" : base.OriginalName; } + public bool IsExternCContext; + + public override string LogicalName + { + get { return IsAnonymous ? "" : base.Name; } + } + + public override string LogicalOriginalName + { + get { return IsAnonymous ? "" : base.OriginalName; } } protected DeclarationContext() @@ -51,6 +51,22 @@ namespace CppSharp.AST Anonymous = new Dictionary(); } + protected DeclarationContext(DeclarationContext dc) + : base(dc) + { + Namespaces = new List(dc.Namespaces); + Enums = new List(dc.Enums); + Functions = new List(dc.Functions); + Classes = new List(dc.Classes); + Templates = new List