From a08e8644412445437228486a7302ad9d05fab9bb Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Mon, 6 Oct 2014 00:52:59 +0300 Subject: [PATCH] Fixed the pass for changing parameter types to their respective interface, if any, not to lose any pointers. Signed-off-by: Dimitar Dobrev --- .../Passes/ParamTypeToInterfacePass.cs | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/Generator/Passes/ParamTypeToInterfacePass.cs b/src/Generator/Passes/ParamTypeToInterfacePass.cs index 350221c0..86f23875 100644 --- a/src/Generator/Passes/ParamTypeToInterfacePass.cs +++ b/src/Generator/Passes/ParamTypeToInterfacePass.cs @@ -1,5 +1,4 @@ -using System.Linq; -using CppSharp.AST; +using CppSharp.AST; namespace CppSharp.Passes { @@ -9,25 +8,16 @@ namespace CppSharp.Passes { if (!function.IsOperator) { - if (function.HasIndirectReturnTypeParameter) + ChangeToInterfaceType(function.ReturnType); + foreach (Parameter parameter in function.Parameters) { - var parameter = function.Parameters.Find(p => p.Kind == ParameterKind.IndirectReturnType); - parameter.QualifiedType = GetInterfaceType(parameter.QualifiedType); - } - else - { - function.ReturnType = GetInterfaceType(function.ReturnType); - } - foreach (Parameter parameter in function.Parameters.Where( - p => p.Kind != ParameterKind.IndirectReturnType)) - { - parameter.QualifiedType = GetInterfaceType(parameter.QualifiedType); + ChangeToInterfaceType(parameter.QualifiedType); } } return base.VisitFunctionDecl(function); } - private static QualifiedType GetInterfaceType(QualifiedType type) + private static void ChangeToInterfaceType(QualifiedType type) { var tagType = type.Type as TagType; if (tagType == null) @@ -43,10 +33,9 @@ namespace CppSharp.Passes { var @interface = @class.Namespace.Classes.Find(c => c.OriginalClass == @class); if (@interface != null) - return new QualifiedType(new TagType(@interface)); + tagType.Declaration = @interface; } } - return type; } } }