diff options
Diffstat (limited to 'include/clang/AST/DeclCXX.h')
-rw-r--r-- | include/clang/AST/DeclCXX.h | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 869ab3b153..499f3c822c 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -1711,18 +1711,21 @@ private: /// Language - The language for this linkage specification. LanguageIDs Language; - /// HadBraces - Whether this linkage specification had curly braces or not. - bool HadBraces : 1; + /// LBraceLoc - The source location for the left brace (if valid). + SourceLocation LBraceLoc; + /// RBraceLoc - The source location for the right brace (if valid). + SourceLocation RBraceLoc; LinkageSpecDecl(DeclContext *DC, SourceLocation L, LanguageIDs lang, - bool Braces) - : Decl(LinkageSpec, DC, L), - DeclContext(LinkageSpec), Language(lang), HadBraces(Braces) { } + SourceLocation LBLoc, SourceLocation RBLoc) + : Decl(LinkageSpec, DC, L), DeclContext(LinkageSpec), + Language(lang), LBraceLoc(LBLoc), RBraceLoc(RBLoc) { } public: static LinkageSpecDecl *Create(ASTContext &C, DeclContext *DC, SourceLocation L, LanguageIDs Lang, - bool Braces); + SourceLocation LBraceLoc, + SourceLocation RBraceLoc = SourceLocation()); /// \brief Return the language specified by this linkage specification. LanguageIDs getLanguage() const { return Language; } @@ -1732,11 +1735,23 @@ public: /// \brief Determines whether this linkage specification had braces in /// its syntactic form. - bool hasBraces() const { return HadBraces; } + bool hasBraces() const { return RBraceLoc.isValid(); } + SourceLocation getLBraceLoc() const { return LBraceLoc; } + SourceLocation getRBraceLoc() const { return RBraceLoc; } + void setLBraceLoc(SourceLocation L) { LBraceLoc = L; } + void setRBraceLoc(SourceLocation L) { RBraceLoc = L; } - /// \brief Set whether this linkage specification has braces in its - /// syntactic form. - void setHasBraces(bool B) { HadBraces = B; } + SourceLocation getLocEnd() const { + if (hasBraces()) + return getRBraceLoc(); + // No braces: get the end location of the (only) declaration in context + // (if present). + return decls_empty() ? getLocation() : decls_begin()->getLocEnd(); + } + + SourceRange getSourceRange() const { + return SourceRange(getLocation(), getLocEnd()); + } static bool classof(const Decl *D) { return classofKind(D->getKind()); } static bool classof(const LinkageSpecDecl *D) { return true; } |