diff --git a/src/AST/Method.cs b/src/AST/Method.cs index 74285471..65bbf895 100644 --- a/src/AST/Method.cs +++ b/src/AST/Method.cs @@ -92,6 +92,12 @@ namespace CppSharp.AST Conversion = method.Conversion; } + public Method(Function function) + : base(function) + { + + } + public AccessSpecifierDecl AccessDecl { get; set; } public bool IsVirtual { get; set; } diff --git a/src/Generator/Passes/CheckOperatorsOverloads.cs b/src/Generator/Passes/CheckOperatorsOverloads.cs index df41f004..964321c8 100644 --- a/src/Generator/Passes/CheckOperatorsOverloads.cs +++ b/src/Generator/Passes/CheckOperatorsOverloads.cs @@ -54,6 +54,8 @@ namespace CppSharp.Passes @operator.ExplicityIgnored = true; continue; } + if (@operator.SynthKind == FunctionSynthKind.NonMemberOperator) + continue; // Handle missing operator parameters if (@operator.IsStatic) diff --git a/src/Generator/Passes/MoveOperatorToClassPass.cs b/src/Generator/Passes/MoveOperatorToClassPass.cs index bb89b683..b35753b5 100644 --- a/src/Generator/Passes/MoveOperatorToClassPass.cs +++ b/src/Generator/Passes/MoveOperatorToClassPass.cs @@ -23,27 +23,20 @@ namespace CppSharp.Passes if (!FunctionToInstanceMethodPass.GetClassParameter(param, out @class)) return false; - function.ExplicityIgnored = true; - // Create a new fake method so it acts as a static method. - var method = new Method() + + var method = new Method(function) { Namespace = @class, - OriginalNamespace = @class, - Name = function.Name, - OriginalName = function.OriginalName, - Mangled = function.Mangled, - Access = AccessSpecifier.Public, Kind = CXXMethodKind.Operator, - ReturnType = function.ReturnType, - Parameters = new List(function.Parameters).Skip(1).ToList(), - CallingConvention = function.CallingConvention, - IsVariadic = function.IsVariadic, - IsInline = function.IsInline, OperatorKind = function.OperatorKind, - SynthKind = FunctionSynthKind.NonMemberOperator + SynthKind = FunctionSynthKind.NonMemberOperator, + OriginalFunction = null, + IsStatic = true }; + function.ExplicityIgnored = true; + @class.Methods.Add(method); Driver.Diagnostics.Debug("Function converted to operator: {0}::{1}",