Browse Source

Merged IgnoreAbstractOperatorsPass into CheckOperatorsOverloadsPass and added a test.

pull/696/head
Joao Matos 9 years ago
parent
commit
013a9e8b4c
  1. 10
      src/Generator.Tests/Passes/TestPasses.cs
  2. 1
      src/Generator/Driver.cs
  3. 4
      src/Generator/Passes/CheckOperatorsOverloads.cs
  4. 18
      src/Generator/Passes/IgnoreAbstractOperatorsPass.cs
  5. 5
      tests/Native/Passes.h

10
src/Generator.Tests/Passes/TestPasses.cs

@ -209,5 +209,15 @@ namespace CppSharp.Generator.Tests.Passes @@ -209,5 +209,15 @@ namespace CppSharp.Generator.Tests.Passes
{
return type.Visit(new CSharpTypePrinter(Driver)).Type;
}
[Test]
public void TestAbstractOperator()
{
passBuilder.AddPass(new CheckOperatorsOverloadsPass());
passBuilder.RunPasses(pass => pass.VisitLibrary(AstContext));
var @class = AstContext.FindDecl<Class>("ClassWithAbstractOperator").First();
Assert.AreEqual(@class.Operators.First().GenerationKind, GenerationKind.None);
}
}
}

1
src/Generator/Driver.cs

@ -316,7 +316,6 @@ namespace CppSharp @@ -316,7 +316,6 @@ namespace CppSharp
TranslationUnitPasses.AddPass(new FindSymbolsPass());
TranslationUnitPasses.AddPass(new CheckStaticClass());
TranslationUnitPasses.AddPass(new IgnoreAbstractOperatorsPass());
TranslationUnitPasses.AddPass(new MoveOperatorToClassPass());
TranslationUnitPasses.AddPass(new MoveFunctionToClassPass());
TranslationUnitPasses.AddPass(new GenerateAnonymousDelegatesPass());

4
src/Generator/Passes/CheckOperatorsOverloads.cs

@ -8,7 +8,7 @@ namespace CppSharp.Passes @@ -8,7 +8,7 @@ namespace CppSharp.Passes
/// <summary>
/// Checks for missing operator overloads required by C#.
/// </summary>
class CheckOperatorsOverloadsPass : TranslationUnitPass
public class CheckOperatorsOverloadsPass : TranslationUnitPass
{
public CheckOperatorsOverloadsPass()
{
@ -49,7 +49,7 @@ namespace CppSharp.Passes @@ -49,7 +49,7 @@ namespace CppSharp.Passes
{
foreach (var @operator in @class.Operators.Where(o => o.IsGenerated))
{
if (!IsValidOperatorOverload(@operator))
if (!IsValidOperatorOverload(@operator) || @operator.IsPure)
{
Driver.Diagnostics.Debug("Invalid operator overload {0}::{1}",
@class.OriginalName, @operator.OperatorKind);

18
src/Generator/Passes/IgnoreAbstractOperatorsPass.cs

@ -1,18 +0,0 @@ @@ -1,18 +0,0 @@
using CppSharp.AST;
namespace CppSharp.Passes
{
public class IgnoreAbstractOperatorsPass : TranslationUnitPass
{
public override bool VisitMethodDecl(Method method)
{
if (!base.VisitMethodDecl(method))
return false;
if (method.IsPure && method.IsOperator)
method.ExplicitlyIgnore();
return true;
}
}
}

5
tests/Native/Passes.h

@ -67,3 +67,8 @@ struct TestMethodAsInternal @@ -67,3 +67,8 @@ struct TestMethodAsInternal
{
int CS_INTERNAL beInternal();
};
class ClassWithAbstractOperator
{
virtual operator int() = 0;
};

Loading…
Cancel
Save