Browse Source

CSharpExpressionPrinter: Wrap expression in parenthesis

Wrap default parameter expressions in parentheses to ensure whole expressions are casted instead of only the first operand.
pull/1741/head
Trung Nguyen 2 years ago committed by Trung
parent
commit
355c22219a
No known key found for this signature in database
GPG Key ID: 8C6357127C5190F6
  1. 4
      src/Generator/Generators/CSharp/CSharpExpressionPrinter.cs
  2. 4
      tests/dotnet/Common/Common.cpp
  3. 2
      tests/dotnet/Common/Common.h

4
src/Generator/Generators/CSharp/CSharpExpressionPrinter.cs

@ -27,11 +27,11 @@ namespace CppSharp.Generators.CSharp
if (desugared.IsPrimitiveType() && if (desugared.IsPrimitiveType() &&
(parameter.DefaultArgument.Declaration != null || (parameter.DefaultArgument.Declaration != null ||
parameter.DefaultArgument.Class == StatementClass.BinaryOperator)) parameter.DefaultArgument.Class == StatementClass.BinaryOperator))
return $"({desugared.Visit(typePrinter)}) {expression}"; return $"({desugared.Visit(typePrinter)}) ({expression})";
var finalType = (desugared.GetFinalPointee() ?? desugared).Desugar(); var finalType = (desugared.GetFinalPointee() ?? desugared).Desugar();
if (finalType.TryGetClass(out var @class) && @class.IsInterface) if (finalType.TryGetClass(out var @class) && @class.IsInterface)
return $@"({@class.Visit(typePrinter)}) ({ return $@"({@class.Visit(typePrinter)}) ({
@class.OriginalClass.Visit(typePrinter)}) {expression}"; @class.OriginalClass.Visit(typePrinter)}) ({expression})";
return expression; return expression;
} }

4
tests/dotnet/Common/Common.cpp

@ -1274,3 +1274,7 @@ extern "C"
return s; return s;
} }
} // extern "C" } // extern "C"
void DLL_API FunctionWithFlagsAsDefaultParameter(int defaultParam)
{
}

2
tests/dotnet/Common/Common.h

@ -1567,3 +1567,5 @@ extern "C"
DLL_API void takeConflictName(struct system* self); DLL_API void takeConflictName(struct system* self);
DLL_API struct system freeFunctionReturnByValue(); DLL_API struct system freeFunctionReturnByValue();
} // extern "C" } // extern "C"
void DLL_API FunctionWithFlagsAsDefaultParameter(int defaultParam = A | B);

Loading…
Cancel
Save