From f26018db87ad1bd7451abfe2dcdc43a99f7d942c Mon Sep 17 00:00:00 2001 From: triton Date: Sun, 26 May 2013 18:31:13 +0100 Subject: [PATCH] Fixed CheckOperatorsOverloads pass to work correctly for non C#-supported operator overloads. --- src/Generator/Passes/CheckOperatorsOverloads.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Generator/Passes/CheckOperatorsOverloads.cs b/src/Generator/Passes/CheckOperatorsOverloads.cs index 8a1b7d13..1944a62f 100644 --- a/src/Generator/Passes/CheckOperatorsOverloads.cs +++ b/src/Generator/Passes/CheckOperatorsOverloads.cs @@ -55,10 +55,16 @@ namespace CppSharp.Passes if (@operator.IsStatic) @operator.Parameters = @operator.Parameters.Skip(1).ToList(); + var type = new PointerType() + { + QualifiedPointee = new QualifiedType(new TagType(@class)), + Modifier = PointerType.TypeModifier.Pointer + }; + @operator.Parameters.Insert(0, new Parameter { Name = Helpers.GeneratedIdentifier("op"), - QualifiedType = new QualifiedType(new TagType(@class)), + QualifiedType = new QualifiedType(type), Kind = ParameterKind.OperatorParameter }); } @@ -76,15 +82,16 @@ namespace CppSharp.Passes var existingKind = missingKind == op2 ? op1 : op2; // FIXME: We have to check for missing overloads per overload instance. - foreach (var overload in @class.FindOperator(existingKind)) + foreach (var overload in @class.FindOperator(existingKind).ToList()) { if (overload.Ignore) continue; var @params = overload.Parameters; + bool isBuiltin; var method = new Method() { - Name = CSharpTextTemplate.GetOperatorIdentifier(missingKind), + Name = CSharpTextTemplate.GetOperatorIdentifier(missingKind, out isBuiltin), Namespace = @class, IsSynthetized = true, Kind = CXXMethodKind.Operator,