From 7f1fc10b91214b007bbfb613d111f11e9d195e37 Mon Sep 17 00:00:00 2001 From: Ludovic Jozeau Date: Sat, 4 Jul 2020 12:40:00 +0200 Subject: [PATCH] fix static member variable not added to type vars --- src/indexer.cc | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/indexer.cc b/src/indexer.cc index 914ccf17..e403d313 100644 --- a/src/indexer.cc +++ b/src/indexer.cc @@ -670,14 +670,17 @@ public: if (!rd->isCompleteDefinition() || rd->isDependentType() || rd->isInvalidDecl() || !validateRecord(rd)) offset = -1; - for (FieldDecl *fd : rd->fields()) { - int offset1 = offset < 0 ? -1 : int(offset + ctx->getFieldOffset(fd)); - if (fd->getIdentifier()) - type.def.vars.emplace_back(getUsr(fd), offset1); - else if (const auto *rt1 = fd->getType()->getAs()) { - if (const RecordDecl *rd1 = rt1->getDecl()) - if (seen.insert(rd1).second) - stack.push_back({rd1, offset1}); + for (Decl const *decl : rd->decls()) { + if (auto const *static_var = dyn_cast(decl)) { + type.def.vars.emplace_back(getUsr(static_var), -1); + } else if (auto const *fd = dyn_cast(decl)) { + int offset1 = offset < 0 ? -1 : int(offset + ctx->getFieldOffset(fd)); + if (fd->getIdentifier()) + type.def.vars.emplace_back(getUsr(fd), offset1); + else if (const auto *rt1 = fd->getType()->getAs()) + if (const RecordDecl *rd1 = rt1->getDecl()) + if (seen.insert(rd1).second) + stack.push_back({rd1, offset1}); } } } @@ -866,10 +869,13 @@ public: t = vd->getType(); if (is_def || is_decl) { const Decl *dc = cast(sem_dc); - Kind kind = getKind(dc, var->def.parent_kind); - if (kind == Kind::Func) + Kind parent_kind = getKind(dc, var->def.parent_kind); + if (parent_kind != Kind::Invalid) + var->def.parent = {getUsr(dc), parent_kind}; + + if (parent_kind == Kind::Func) db->toFunc(getUsr(dc)).def.vars.push_back(usr); - else if (kind == Kind::Type && !isa(sem_dc)) + else if (parent_kind == Kind::Type && !isa(sem_dc)) db->toType(getUsr(dc)).def.vars.emplace_back(usr, -1); if (!t.isNull()) { if (auto *bt = t->getAs()) {