Browse Source

Marked incomplete declarations even if their completions cannot be found.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/661/head
Dimitar Dobrev 10 years ago
parent
commit
7f93b4a5bd
  1. 12
      src/CppParser/Parser.cpp
  2. 2
      src/Generator/Passes/ResolveIncompleteDeclsPass.cs

12
src/CppParser/Parser.cpp

@ -1148,11 +1148,11 @@ ClassTemplate* Parser::WalkClassTemplate(const clang::ClassTemplateDecl* TD)
return CT; return CT;
CT = new ClassTemplate(); CT = new ClassTemplate();
if (!TD->isThisDeclarationADefinition() && if (!TD->isThisDeclarationADefinition())
TD->getCanonicalDecl()->isThisDeclarationADefinition())
{ {
CT->IsIncomplete = true; CT->IsIncomplete = true;
CT->CompleteDeclaration = WalkClassTemplate(TD->getCanonicalDecl()); if (TD->getCanonicalDecl()->isThisDeclarationADefinition())
CT->CompleteDeclaration = WalkClassTemplate(TD->getCanonicalDecl());
} }
HandleDeclaration(TD, CT); HandleDeclaration(TD, CT);
@ -1374,11 +1374,11 @@ FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl
/*AddToNamespace=*/false); /*AddToNamespace=*/false);
FT = new FunctionTemplate(); FT = new FunctionTemplate();
if (!TD->isThisDeclarationADefinition() && if (!TD->isThisDeclarationADefinition())
TD->getCanonicalDecl()->isThisDeclarationADefinition())
{ {
FT->IsIncomplete = true; FT->IsIncomplete = true;
FT->CompleteDeclaration = WalkFunctionTemplate(TD->getCanonicalDecl()); if (TD->getCanonicalDecl()->isThisDeclarationADefinition())
FT->CompleteDeclaration = WalkFunctionTemplate(TD->getCanonicalDecl());
} }
HandleDeclaration(TD, FT); HandleDeclaration(TD, FT);

2
src/Generator/Passes/ResolveIncompleteDeclsPass.cs

@ -20,7 +20,7 @@ namespace CppSharp.Passes
if (!base.VisitClassTemplateDecl(template)) if (!base.VisitClassTemplateDecl(template))
return false; return false;
if (template.IsIncomplete) if (template.IsIncomplete && template.CompleteDeclaration != null)
{ {
var completeDeclaration = (ClassTemplate) template.CompleteDeclaration; var completeDeclaration = (ClassTemplate) template.CompleteDeclaration;
foreach (var specialization in template.Specializations.Where( foreach (var specialization in template.Specializations.Where(

Loading…
Cancel
Save