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

4
tests/dotnet/Common/Common.cpp

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

2
tests/dotnet/Common/Common.h

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

Loading…
Cancel
Save