Browse Source

Added the specialisation info, if any, along with its arguments, to functions.

pull/734/head
Dimitar Dobrev 8 years ago
parent
commit
329d350f9d
  1. 10
      src/CppParser/Parser.cpp
  2. 5
      src/Parser/ASTConverter.cs

10
src/CppParser/Parser.cpp

@ -1443,6 +1443,16 @@ Parser::WalkFunctionTemplateSpec(clang::FunctionTemplateSpecializationInfo* FTSI @@ -1443,6 +1443,16 @@ Parser::WalkFunctionTemplateSpec(clang::FunctionTemplateSpecializationInfo* FTSI
// FTS->Arguments = WalkTemplateArgumentList(FTSI->TemplateArguments, TALI);
FTS->_template = WalkFunctionTemplate(FTSI->getTemplate());
FTS->_template->Specializations.push_back(FTS);
if (auto TSA = FTSI->TemplateArguments)
{
if (auto TSAW = FTSI->TemplateArgumentsAsWritten)
{
if (TSA->size() == TSAW->NumTemplateArgs)
{
FTS->Arguments = WalkTemplateArgumentList(TSA, TSAW);
}
}
}
return FTS;
}

5
src/Parser/ASTConverter.cs

@ -1167,6 +1167,9 @@ namespace CppSharp @@ -1167,6 +1167,9 @@ namespace CppSharp
if (function.InstantiatedFrom != null)
_function.InstantiatedFrom = (AST.Function) Visit(function.InstantiatedFrom);
_function.FunctionType = typeConverter.VisitQualified(function.QualifiedType);
if (function.SpecializationInfo != null)
_function.SpecializationInfo = VisitFunctionTemplateSpecialization(
function.SpecializationInfo);
for (uint i = 0; i < function.ParametersCount; ++i)
{
@ -1788,6 +1791,7 @@ namespace CppSharp @@ -1788,6 +1791,7 @@ namespace CppSharp
return FunctionTemplateSpecializations[spec.__Instance];
var _spec = new AST.FunctionTemplateSpecialization();
FunctionTemplateSpecializations.Add(spec.__Instance, _spec);
_spec.Template = (AST.FunctionTemplate)Visit(spec.Template);
_spec.SpecializedFunction = (AST.Function)Visit(spec.SpecializedFunction);
_spec.SpecializationKind = VisitSpecializationKind(spec.SpecializationKind);
@ -1796,7 +1800,6 @@ namespace CppSharp @@ -1796,7 +1800,6 @@ namespace CppSharp
var _arg = VisitTemplateArgument(spec.GetArguments(i));
_spec.Arguments.Add(_arg);
}
FunctionTemplateSpecializations.Add(spec.__Instance, _spec);
NativeObjects.Add(spec);
return _spec;
}

Loading…
Cancel
Save