Skip to content

Commit 385c5e9

Browse files
committed
Ensure valid C# for default args assigned secondary bases
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 49122e0 commit 385c5e9

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

src/Generator/Generators/CSharp/CSharpExpressionPrinter.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,8 @@ public string VisitParameter(Parameter parameter)
3131
return $"({desugared.Visit(typePrinter)}) {expression}";
3232
var finalType = (desugared.GetFinalPointee() ?? desugared).Desugar();
3333
if (finalType.TryGetClass(out var @class) && @class.IsInterface)
34-
{
35-
string cast;
36-
if (parameter.DefaultArgument.Declaration is Method method &&
37-
method.IsConstructor && method.Namespace == @class.OriginalClass)
38-
{
39-
cast = string.Empty;
40-
}
41-
else
42-
{
43-
cast = $"({@class.OriginalClass.Visit(typePrinter)}) ";
44-
}
45-
return cast + expression;
46-
}
34+
return $@"({@class.Visit(typePrinter)}) ({
35+
@class.OriginalClass.Visit(typePrinter)}) {expression}";
4736
return expression;
4837
}
4938

tests/CSharp/CSharp.Tests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ public void TestDefaultArguments()
342342
methodsWithDefaultValues.DefaultWithFreeConstantInNameSpace();
343343
methodsWithDefaultValues.DefaultWithStdNumericLimits(10, 5);
344344
methodsWithDefaultValues.DefaultWithSpecialization();
345+
methodsWithDefaultValues.DefaultOverloadedImplicitCtor();
345346
methodsWithDefaultValues.DefaultWithParamNamedSameAsMethod(5);
346347
}
347348
}

tests/CSharp/CSharp.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,14 @@ void MethodsWithDefaultValues::defaultWithSpecialization(IndependentFields<int>
822822
{
823823
}
824824

825+
void MethodsWithDefaultValues::defaultOverloadedImplicitCtor(P p)
826+
{
827+
}
828+
829+
void MethodsWithDefaultValues::defaultOverloadedImplicitCtor(Qux q)
830+
{
831+
}
832+
825833
int MethodsWithDefaultValues::DefaultWithParamNamedSameAsMethod(int DefaultWithParamNamedSameAsMethod, const Foo& defaultArg)
826834
{
827835
return 1;

tests/CSharp/CSharp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,8 @@ class DLL_API MethodsWithDefaultValues : public Quux
483483
void defaultWithStdNumericLimits(double d = 1.0, int i = std::numeric_limits<double>::infinity());
484484
void defaultWithParamRequiringRename(_ClassWithLeadingUnderscore* ptr = nullptr);
485485
void defaultWithSpecialization(IndependentFields<int> specialization = IndependentFields<int>());
486+
void defaultOverloadedImplicitCtor(P p);
487+
void defaultOverloadedImplicitCtor(Qux q = Qux());
486488
int DefaultWithParamNamedSameAsMethod(int DefaultWithParamNamedSameAsMethod, const Foo& defaultArg = Foo());
487489
int getA();
488490
private:

0 commit comments

Comments
 (0)