From 00697c8a36626b674495a55460df1869b698d155 Mon Sep 17 00:00:00 2001 From: Axel Naumann Date: Tue, 16 Sep 2014 13:45:30 +0200 Subject: [PATCH] Also fwd declare types nested in namespaces. --- .../cling/lib/Interpreter/ForwardDeclPrinter.cpp | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp b/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp index d3a856c..5e48bbb 100644 --- a/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp +++ b/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp @@ -968,18 +968,30 @@ namespace cling { bool ForwardDeclPrinter::isIncompatibleType(QualType q, bool includeNNS) { //FIXME: This is a workaround and filters out many acceptable cases //Refer to Point#1 - QualType temp = q; - while (temp.getTypePtr()->isAnyPointerType())//For 3 star programmers - temp = temp.getTypePtr()->getPointeeType(); + while (q->isAnyPointerType())//For 3 star programmers + q = q->getPointeeType(); - while (temp.getTypePtr()->isReferenceType())//For move references - temp = temp.getNonReferenceType(); + while (q->isReferenceType())//For move references + q = q.getNonReferenceType(); - std::string str = QualType(temp.getTypePtr(),0).getAsString(); + // FIXME: Arrays? everything else? ref to pointer (i.e. combinations)? + + std::string str = QualType(q.getTypePtr(),0).getAsString(); // llvm::outs() << "Q:"<(q.getTypePtr())) { + NestedNameSpecifier* NNS = ET->getQualifier(); + if (!NNS) { + // suppress TD in typedef struct {...} TD; + result = true; + } else { + if (NNS->getKind() != NestedNameSpecifier::Namespace + && NNS->getKind() != NestedNameSpecifier::Global) + result = true; + } + } + } return result; } -- 1.8.2