bool SemaAnnotator:: passReference(ValueDecl *D, Type Ty, DeclNameLoc Loc, ReferenceMetaData Data) { TypeDecl *CtorTyRef = nullptr; ExtensionDecl *ExtDecl = nullptr; if (auto *TD = dyn_cast<TypeDecl>(D)) { if (!CtorRefs.empty() && Loc.isValid()) { Expr *Fn = CtorRefs.back()->getFn(); if (Fn->getLoc() == Loc.getBaseNameLoc()) { D = extractDecl(Fn); CtorTyRef = TD; } } if (!ExtDecls.empty() && Loc.isValid()) { auto ExtTyLoc = ExtDecls.back()->getExtendedTypeLoc().getLoc(); if (ExtTyLoc.isValid() && ExtTyLoc == Loc.getBaseNameLoc()) { ExtDecl = ExtDecls.back(); } } } CharSourceRange Range = Lexer::getCharSourceRangeFromSourceRange(D->getASTContext().SourceMgr, Loc.getSourceRange()); bool Continue = SEWalker.visitDeclReference(D, Range, CtorTyRef, ExtDecl, Ty, Data); if (!Continue) Cancelled = true; return Continue; }
bool SemaAnnotator::passReference(ValueDecl *D, Type Ty, DeclNameLoc Loc) { TypeDecl *CtorTyRef = nullptr; if (TypeDecl *TD = dyn_cast<TypeDecl>(D)) { if (!CtorRefs.empty() && Loc.isValid()) { Expr *Fn = CtorRefs.back()->getFn(); if (Fn->getLoc() == Loc.getBaseNameLoc()) { D = extractDecl(Fn); CtorTyRef = TD; } } } CharSourceRange Range = Lexer::getCharSourceRangeFromSourceRange(D->getASTContext().SourceMgr, Loc.getSourceRange()); bool Continue = SEWalker.visitDeclReference(D, Range, CtorTyRef, Ty); if (!Continue) Cancelled = true; return Continue; }