From 532a2e059f369eeb3b8e4333192e9a7cfa4e654d Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Wed, 6 Mar 2019 01:30:37 +0200 Subject: [PATCH] Ignore methods with parameters when generating expressions Signed-off-by: Dimitar Dobrev --- src/CppParser/Bootstrap/Bootstrap.cs | 17 ++++---------- .../IgnoreMethodsWithParametersPass.cs | 23 +++++++++++++++++++ src/CppParser/Bootstrap/premake5.lua | 2 +- 3 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 src/CppParser/Bootstrap/IgnoreMethodsWithParametersPass.cs diff --git a/src/CppParser/Bootstrap/Bootstrap.cs b/src/CppParser/Bootstrap/Bootstrap.cs index 4842ba77..b8d320d6 100644 --- a/src/CppParser/Bootstrap/Bootstrap.cs +++ b/src/CppParser/Bootstrap/Bootstrap.cs @@ -77,7 +77,10 @@ namespace CppSharp public void Preprocess(Driver driver, ASTContext ctx) { - GenerateProperties(driver.Context, ctx); + new IgnoreMethodsWithParametersPass { Context = driver.Context } + .VisitASTContext(ctx); + new GetterSetterToPropertyPass { Context = driver.Context } + .VisitASTContext(ctx); var preprocessDecls = new PreprocessDeclarations(); foreach (var unit in ctx.TranslationUnits) @@ -102,18 +105,6 @@ namespace CppSharp { } - private static void GenerateProperties(BindingContext ctx, - ASTContext ast) - { - var propertyPass = new GetterSetterToPropertyPass() - { - Context = ctx - }; - - foreach (var unit in ast.TranslationUnits) - unit.Visit(propertyPass); - } - public IEnumerable ExprClasses; private void GenerateExpr(BindingContext ctx) diff --git a/src/CppParser/Bootstrap/IgnoreMethodsWithParametersPass.cs b/src/CppParser/Bootstrap/IgnoreMethodsWithParametersPass.cs new file mode 100644 index 00000000..c43fd3ac --- /dev/null +++ b/src/CppParser/Bootstrap/IgnoreMethodsWithParametersPass.cs @@ -0,0 +1,23 @@ +using CppSharp.AST; +using CppSharp.AST.Extensions; +using CppSharp.Passes; +using System.Linq; + +namespace CppSharp +{ + public class IgnoreMethodsWithParametersPass : TranslationUnitPass + { + public override bool VisitMethodDecl(Method method) + { + if (!base.VisitMethodDecl(method)) + return false; + + if (!method.OriginalReturnType.Type.IsPrimitiveType(PrimitiveType.Void) && + method.Parameters.Count( + p => p.Kind == ParameterKind.Regular && p.DefaultValue == null) > 0) + method.ExplicitlyIgnore(); + + return true; + } + } +} diff --git a/src/CppParser/Bootstrap/premake5.lua b/src/CppParser/Bootstrap/premake5.lua index 1ba1788a..6da2d656 100644 --- a/src/CppParser/Bootstrap/premake5.lua +++ b/src/CppParser/Bootstrap/premake5.lua @@ -6,7 +6,7 @@ project "CppSharp.Parser.Bootstrap" language "C#" debugdir "." - files { "Bootstrap.cs", "*.lua" } + files { "*.cs", "*.lua" } links { "CppSharp", "CppSharp.AST", "CppSharp.Generator", "CppSharp.Parser" } filter { "action:not netcore" }