From 27c612ecd05cfa255c02ec0bf8e6558f5c8dc206 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sat, 11 Jun 2016 18:52:41 +0300 Subject: [PATCH] Ignored abstract operators because they cannot be wrapped in Mono/.NET. Signed-off-by: Dimitar Dobrev --- src/Generator/Driver.cs | 1 + .../Passes/IgnoreAbstractOperatorsPass.cs | 18 ++++++++++++++++++ tests/Common/Common.h | 6 ++++++ 3 files changed, 25 insertions(+) create mode 100644 src/Generator/Passes/IgnoreAbstractOperatorsPass.cs diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 38b9d365..a499d50f 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -308,6 +308,7 @@ 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()); diff --git a/src/Generator/Passes/IgnoreAbstractOperatorsPass.cs b/src/Generator/Passes/IgnoreAbstractOperatorsPass.cs new file mode 100644 index 00000000..18895dff --- /dev/null +++ b/src/Generator/Passes/IgnoreAbstractOperatorsPass.cs @@ -0,0 +1,18 @@ +using CppSharp.AST; + +namespace CppSharp.Passes +{ + public class IgnoreAbstractOperatorsPass : TranslationUnitPass + { + public override bool VisitMethodDecl(Method method) + { + if (!base.VisitMethodDecl(method) || method.TranslationUnit.IsSystemHeader) + return false; + + if (method.IsPure && method.IsOperator) + method.ExplicitlyIgnore(); + + return true; + } + } +} diff --git a/tests/Common/Common.h b/tests/Common/Common.h index 8883f542..3730d48e 100644 --- a/tests/Common/Common.h +++ b/tests/Common/Common.h @@ -1117,3 +1117,9 @@ private: SpecialisesVoid* s; SpecialisesVoidInUnion* h; }; + +class DLL_API HasAbstractOperator +{ +public: + virtual bool operator==(const HasAbstractOperator& other) = 0; +};