Browse Source

Generate valid C# for default params in specialisations

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1632/head
Dimitar Dobrev 4 years ago
parent
commit
4d4505e334
  1. 2
      src/Generator/Passes/HandleDefaultParamValuesPass.cs
  2. 8
      src/Generator/Passes/SpecializationMethodsWithDependentPointersPass.cs
  3. 10
      tests/CSharp/CSharpTemplates.h

2
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -12,7 +12,7 @@ namespace CppSharp.Passes @@ -12,7 +12,7 @@ namespace CppSharp.Passes
new Dictionary<DeclarationContext, List<Function>>();
public HandleDefaultParamValuesPass()
=> VisitOptions.ResetFlags(VisitFlags.ClassMethods);
=> VisitOptions.ResetFlags(VisitFlags.ClassMethods | VisitFlags.ClassTemplateSpecializations);
public override bool VisitTranslationUnit(TranslationUnit unit)
{

8
src/Generator/Passes/SpecializationMethodsWithDependentPointersPass.cs

@ -88,14 +88,6 @@ namespace CppSharp.Passes @@ -88,14 +88,6 @@ namespace CppSharp.Passes
foreach (var parameter in extensionMethod.Parameters)
{
var qualType = parameter.QualifiedType;
if (parameter.DefaultArgument != null)
{
Type type = qualType.Type.Desugar(resolveTemplateSubstitution: false);
type = (type.GetFinalPointee() ?? type).Desugar(
resolveTemplateSubstitution: false);
if (type is TemplateParameterSubstitutionType)
parameter.DefaultArgument = null;
}
RemoveTemplateSubstitution(ref qualType);
parameter.QualifiedType = qualType;
}

10
tests/CSharp/CSharpTemplates.h

@ -119,6 +119,12 @@ T IndependentFields<T>::staticDependent(const T& t) @@ -119,6 +119,12 @@ T IndependentFields<T>::staticDependent(const T& t)
return t;
}
template <typename T>
template <typename AdditionalDependentType>
void IndependentFields<T>::usesAdditionalDependentType(AdditionalDependentType additionalDependentType)
{
}
template <typename T>
float IndependentFields<T>::getIndependent()
{
@ -176,7 +182,7 @@ private: @@ -176,7 +182,7 @@ private:
};
template <typename T>
DependentValueFields<T>::DependentValueFields()
DependentValueFields<T>::DependentValueFields() : unionField(0), dependentFunctionPointerField(0)
{
}
@ -186,7 +192,7 @@ DependentValueFields<T>::~DependentValueFields() @@ -186,7 +192,7 @@ DependentValueFields<T>::~DependentValueFields()
}
template <typename T>
DependentValueFields<T>::DependentValueFields(IndependentFields<T> i)
DependentValueFields<T>::DependentValueFields(IndependentFields<T> i) : DependentValueFields()
{
}

Loading…
Cancel
Save