Browse Source

Refactoring fixes in ParamTypeToInterfacePass.

pull/1300/head
João Matos 6 years ago committed by João Matos
parent
commit
4ac2427afc
  1. 22
      src/Generator/Passes/ParamTypeToInterfacePass.cs

22
src/Generator/Passes/ParamTypeToInterfacePass.cs

@ -5,6 +5,10 @@ using CppSharp.AST.Extensions;
namespace CppSharp.Passes namespace CppSharp.Passes
{ {
/// <summary>
/// Replaces all references to secondary bases with their respective interface
/// type that is generated by MultipleInheritancePass.
/// </summary>
public class ParamTypeToInterfacePass : TranslationUnitPass public class ParamTypeToInterfacePass : TranslationUnitPass
{ {
public ParamTypeToInterfacePass() public ParamTypeToInterfacePass()
@ -29,7 +33,8 @@ namespace CppSharp.Passes
// parameters and returns from a specialised interface // parameters and returns from a specialised interface
// must not be replaced if the templated interface uses a template parameter // must not be replaced if the templated interface uses a template parameter
Function templateInterfaceFunction = GetTemplateInterfaceFunction(function); var interfaceFunction = GetInterfaceFunction(function);
var templateInterfaceFunction = interfaceFunction?.InstantiatedFrom;
if ((!function.IsOperator || function.Parameters.Count > 1) && if ((!function.IsOperator || function.Parameters.Count > 1) &&
(templateInterfaceFunction == null || (templateInterfaceFunction == null ||
@ -53,11 +58,13 @@ namespace CppSharp.Passes
templateInterfaceFunction.Parameters.Where( templateInterfaceFunction.Parameters.Where(
p => p.Kind != ParameterKind.OperatorParameter && p => p.Kind != ParameterKind.OperatorParameter &&
p.Kind != ParameterKind.IndirectReturnType)); p.Kind != ParameterKind.IndirectReturnType));
for (int i = 0; i < parameters.Count; i++) for (int i = 0; i < parameters.Count; i++)
{ {
if (templateFunctionParameters.Any() && if (templateFunctionParameters.Any() &&
IsTemplateParameter(templateFunctionParameters[i].QualifiedType)) IsTemplateParameter(templateFunctionParameters[i].QualifiedType))
continue; continue;
var qualifiedType = parameters[i].QualifiedType; var qualifiedType = parameters[i].QualifiedType;
ChangeToInterfaceType(ref qualifiedType); ChangeToInterfaceType(ref qualifiedType);
parameters[i].QualifiedType = qualifiedType; parameters[i].QualifiedType = qualifiedType;
@ -84,14 +91,13 @@ namespace CppSharp.Passes
return true; return true;
} }
private static Function GetTemplateInterfaceFunction(Function function) private static Function GetInterfaceFunction(Function function)
{ {
Function templateInterfaceFunction = null; var @class = function.OriginalNamespace as Class;
Class @class = function.OriginalNamespace as Class; if (@class == null || !@class.IsInterface)
if (@class != null && @class.IsInterface) return null;
templateInterfaceFunction = @class.Methods.First(
m => m.OriginalFunction == function.OriginalFunction).InstantiatedFrom; return @class.Methods.First(m => m.OriginalFunction == function.OriginalFunction);
return templateInterfaceFunction;
} }
private static Property GetTemplateInterfaceProperty(Property property) private static Property GetTemplateInterfaceProperty(Property property)

Loading…
Cancel
Save