зеркало из https://github.com/mono/CppSharp.git
Match names of parameters in templates to their specializations
Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
This commit is contained in:
Родитель
0214b6e1cc
Коммит
3ae0fd0fd5
|
@ -216,6 +216,7 @@ namespace CppSharp
|
|||
|
||||
TranslationUnitPasses.AddPass(new ResolveIncompleteDeclsPass());
|
||||
TranslationUnitPasses.AddPass(new IgnoreSystemDeclarationsPass());
|
||||
TranslationUnitPasses.AddPass(new MatchParamNamesWithInstantiatedFromPass());
|
||||
|
||||
if (Options.IsCSharpGenerator)
|
||||
TranslationUnitPasses.AddPass(new EqualiseAccessOfOverrideAndBasePass());
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
using CppSharp.AST;
|
||||
|
||||
namespace CppSharp.Passes
|
||||
{
|
||||
/// <summary>
|
||||
/// Fixes a so far irreproducible bug where parameters in a template have names
|
||||
/// different from the ones the respective parameters have in the specializations.
|
||||
/// </summary>
|
||||
public class MatchParamNamesWithInstantiatedFromPass : TranslationUnitPass
|
||||
{
|
||||
public MatchParamNamesWithInstantiatedFromPass() => VisitOptions.ResetFlags(
|
||||
VisitFlags.ClassMethods | VisitFlags.NamespaceFunctions |
|
||||
VisitFlags.ClassTemplateSpecializations);
|
||||
|
||||
public override bool VisitFunctionDecl(Function function)
|
||||
{
|
||||
if (!base.VisitFunctionDecl(function) || function.InstantiatedFrom == null ||
|
||||
(function.Namespace is ClassTemplateSpecialization specialization &&
|
||||
specialization.SpecializationKind == TemplateSpecializationKind.ExplicitSpecialization))
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < function.Parameters.Count; i++)
|
||||
function.InstantiatedFrom.Parameters[i].Name = function.Parameters[i].Name;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче