Skip to content

Commit 4d4505e

Browse files
committed
Generate valid C# for default params in specialisations
Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
1 parent 0255eb7 commit 4d4505e

File tree

3 files changed

+9
-11
lines changed

3 files changed

+9
-11
lines changed

src/Generator/Passes/HandleDefaultParamValuesPass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class HandleDefaultParamValuesPass : TranslationUnitPass
1212
new Dictionary<DeclarationContext, List<Function>>();
1313

1414
public HandleDefaultParamValuesPass()
15-
=> VisitOptions.ResetFlags(VisitFlags.ClassMethods);
15+
=> VisitOptions.ResetFlags(VisitFlags.ClassMethods | VisitFlags.ClassTemplateSpecializations);
1616

1717
public override bool VisitTranslationUnit(TranslationUnit unit)
1818
{

src/Generator/Passes/SpecializationMethodsWithDependentPointersPass.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,6 @@ private static Method GetExtensionMethodForDependentPointer(Method specializedMe
8888
foreach (var parameter in extensionMethod.Parameters)
8989
{
9090
var qualType = parameter.QualifiedType;
91-
if (parameter.DefaultArgument != null)
92-
{
93-
Type type = qualType.Type.Desugar(resolveTemplateSubstitution: false);
94-
type = (type.GetFinalPointee() ?? type).Desugar(
95-
resolveTemplateSubstitution: false);
96-
if (type is TemplateParameterSubstitutionType)
97-
parameter.DefaultArgument = null;
98-
}
9991
RemoveTemplateSubstitution(ref qualType);
10092
parameter.QualifiedType = qualType;
10193
}

tests/CSharp/CSharpTemplates.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ T IndependentFields<T>::staticDependent(const T& t)
119119
return t;
120120
}
121121

122+
template <typename T>
123+
template <typename AdditionalDependentType>
124+
void IndependentFields<T>::usesAdditionalDependentType(AdditionalDependentType additionalDependentType)
125+
{
126+
}
127+
122128
template <typename T>
123129
float IndependentFields<T>::getIndependent()
124130
{
@@ -176,7 +182,7 @@ class DependentValueFields : public Base<T>
176182
};
177183

178184
template <typename T>
179-
DependentValueFields<T>::DependentValueFields()
185+
DependentValueFields<T>::DependentValueFields() : unionField(0), dependentFunctionPointerField(0)
180186
{
181187
}
182188

@@ -186,7 +192,7 @@ DependentValueFields<T>::~DependentValueFields()
186192
}
187193

188194
template <typename T>
189-
DependentValueFields<T>::DependentValueFields(IndependentFields<T> i)
195+
DependentValueFields<T>::DependentValueFields(IndependentFields<T> i) : DependentValueFields()
190196
{
191197
}
192198

0 commit comments

Comments
 (0)