From 8cd84a1b471bb5d984e5ee5625bb2b344628d4bc Mon Sep 17 00:00:00 2001 From: Petr Silhavik Date: Fri, 28 Dec 2012 16:52:25 +0100 Subject: [PATCH] Fix inner initial state. There was a bug when finding inner initial states. If there was inner initial state, his name was ignored. As inner initial state was fixly used the second template argument. This argument means the outer context. --- src/visualizer.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/visualizer.cpp b/src/visualizer.cpp index 8a39b55..60308f7 100644 --- a/src/visualizer.cpp +++ b/src/visualizer.cpp @@ -376,18 +376,19 @@ public: if (TST->getNumArgs() >= ArgNum+1) { return TST->getArgLoc(ArgNum); } else - Diag(TST->getBeginLoc(), diag_warning) << TST->getType()->getTypeClassName() << "has not enough arguments" << TST->getSourceRange(); + if(ArgNum!=2) + Diag(TST->getBeginLoc(), diag_warning) << TST->getType()->getTypeClassName() << "has not enough arguments" << TST->getSourceRange(); } else Diag(T.getBeginLoc(), diag_warning) << T.getType()->getTypeClassName() << "type as template argument is not supported" << T.getSourceRange(); return TemplateArgumentLoc(); } TemplateArgumentLoc getTemplateArgLocOfBase(const CXXBaseSpecifier *Base, unsigned ArgNum) { - return getTemplateArgLoc(Base->getTypeSourceInfo()->getTypeLoc(), 1); + return getTemplateArgLoc(Base->getTypeSourceInfo()->getTypeLoc(), ArgNum); } CXXRecordDecl *getTemplateArgDeclOfBase(const CXXBaseSpecifier *Base, unsigned ArgNum, TemplateArgumentLoc &Loc) { - Loc = getTemplateArgLocOfBase(Base, 1); + Loc = getTemplateArgLocOfBase(Base, ArgNum); switch (Loc.getArgument().getKind()) { case TemplateArgument::Type: return Loc.getTypeSourceInfo()->getType()->getAsCXXRecordDecl(); -- 2.39.2