From c0ed93cd5ec3869762beda0ee5f34ba0bbf3f086 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sat, 2 Nov 2013 17:54:46 +0200 Subject: [PATCH] Prevented postfix and dereference operators from being wrapped as such because C# does not support them. Signed-off-by: Dimitar Dobrev --- 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 04972842..024245f6 100644 --- a/src/Generator/Passes/CheckOperatorsOverloads.cs +++ b/src/Generator/Passes/CheckOperatorsOverloads.cs @@ -169,11 +169,8 @@ namespace CppSharp.Passes case CXXOperatorKind.Minus: case CXXOperatorKind.Exclaim: case CXXOperatorKind.Tilde: - case CXXOperatorKind.PlusPlus: - case CXXOperatorKind.MinusMinus: // These binary operators can be overloaded - case CXXOperatorKind.Star: case CXXOperatorKind.Slash: case CXXOperatorKind.Percent: case CXXOperatorKind.Amp: @@ -193,12 +190,22 @@ namespace CppSharp.Passes case CXXOperatorKind.Conversion: return true; + // Only prefix operators can be overloaded + case CXXOperatorKind.PlusPlus: + case CXXOperatorKind.MinusMinus: + return @operator.Parameters.Count == 0; + + // Bitwise shift operators can only be overloaded if the second parameter is int case CXXOperatorKind.LessLess: case CXXOperatorKind.GreaterGreater: PrimitiveType primitiveType; return @operator.Parameters.Last().Type.IsPrimitiveType(out primitiveType) && primitiveType == PrimitiveType.Int32; + // No parameters means the dereference operator - cannot be overloaded + case CXXOperatorKind.Star: + return @operator.Parameters.Count > 0; + // Assignment operators cannot be overloaded case CXXOperatorKind.PlusEqual: case CXXOperatorKind.MinusEqual: