Browse Source

Based if a method is an override exclusively on if it has any overridden methods.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/904/head
Dimitar Dobrev 8 years ago
parent
commit
845bf5b7f1
  1. 9
      src/AST/Method.cs
  2. 23
      src/Generator/Passes/GenerateAbstractImplementationsPass.cs
  3. 7
      src/Generator/Passes/ObjectOverridesPass.cs

9
src/AST/Method.cs

@ -94,7 +94,6 @@ namespace CppSharp.AST @@ -94,7 +94,6 @@ namespace CppSharp.AST
Access = method.Access;
IsVirtual = method.IsVirtual;
IsConst = method.IsConst;
IsOverride = method.IsOverride;
IsFinal = method.IsFinal;
IsProxy = method.IsProxy;
IsStatic = method.IsStatic;
@ -118,11 +117,7 @@ namespace CppSharp.AST @@ -118,11 +117,7 @@ namespace CppSharp.AST
public bool IsStatic { get; set; }
public bool IsConst { get; set; }
public bool IsExplicit { get; set; }
public bool IsOverride
{
get { return isOverride ?? OverriddenMethods.Any(); }
set { isOverride = value; }
}
public bool IsOverride => OverriddenMethods.Any();
// True if the method is final / sealed.
public bool IsFinal { get; set; }
@ -174,7 +169,5 @@ namespace CppSharp.AST @@ -174,7 +169,5 @@ namespace CppSharp.AST
{
return visitor.VisitMethodDecl(this);
}
private bool? isOverride;
}
}

23
src/Generator/Passes/GenerateAbstractImplementationsPass.cs

@ -57,17 +57,18 @@ namespace CppSharp.Passes @@ -57,17 +57,18 @@ namespace CppSharp.Passes
var internalImpl = GetInternalImpl(@class);
var abstractMethods = GetRelevantAbstractMethods(@class);
internalImpl.Methods.AddRange(
from method in abstractMethods
select new Method(method)
{
Namespace = internalImpl,
OriginalFunction = method,
IsPure = false,
IsOverride = true,
SynthKind = FunctionSynthKind.AbstractImplCall
});
foreach (var abstractMethod in abstractMethods)
{
var impl = new Method(abstractMethod)
{
Namespace = internalImpl,
OriginalFunction = abstractMethod,
IsPure = false,
SynthKind = FunctionSynthKind.AbstractImplCall
};
impl.OverriddenMethods.Add(abstractMethod);
internalImpl.Methods.Add(impl);
}
internalImpl.Layout = @class.Layout;

7
src/Generator/Passes/ObjectOverridesPass.cs

@ -127,10 +127,9 @@ namespace CppSharp @@ -127,10 +127,9 @@ namespace CppSharp
Namespace = @class,
ReturnType = new QualifiedType(stringType),
SynthKind = FunctionSynthKind.ComplementOperator,
IsOverride = true,
IsProxy = true
};
toStringMethod.OverriddenMethods.Add(new Method { Name = "Equals" });
@class.Methods.Add(toStringMethod);
Diagnostics.Debug("Function converted to ToString: {0}::{1}",
@ -152,9 +151,9 @@ namespace CppSharp @@ -152,9 +151,9 @@ namespace CppSharp
ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Bool)),
Parameters = new List<Parameter> { methodEqualsParam },
SynthKind = FunctionSynthKind.ComplementOperator,
IsOverride = true,
IsProxy = true
};
methodEquals.OverriddenMethods.Add(new Method { Name = "Equals" });
@class.Methods.Add(methodEquals);
var methodHashCode = new Method
@ -163,9 +162,9 @@ namespace CppSharp @@ -163,9 +162,9 @@ namespace CppSharp
Namespace = @class,
ReturnType = new QualifiedType(new BuiltinType(PrimitiveType.Int)),
SynthKind = FunctionSynthKind.ComplementOperator,
IsOverride = true,
IsProxy = true
};
methodHashCode.OverriddenMethods.Add(new Method { Name = "GetHashCode" });
@class.Methods.Add(methodHashCode);
return true;

Loading…
Cancel
Save