[cfe-users] Location of function name?

Richard Smith via cfe-users cfe-users at lists.llvm.org
Tue May 26 12:17:18 PDT 2020


On Fri, 22 May 2020 at 19:06, Sterling B via cfe-users <
cfe-users at lists.llvm.org> wrote:

> Hi Clang Experts, could you kindly advice how to get location of a
> function *name* when visiting FunctionDecl in RecursiveASTVisitor
> (getBeginLoc and getEndLoc return the whole range for the definition, not
> just the name). Example:
>
> For source code like this:
> int f(int x) { return x + 1; }
>
> this is the current code
>
> bool VisitFunctionDecl(clang::FunctionDecl *FD) {
>     clang::ASTContext &context = FD->getASTContext();
>     int begin = context.getFullLoc(FD->getBeginLoc()).getFileOffset();
>     int end = context.getFullLoc(FD->getEndLoc()).getFileOffset();
>     std::string path =
> context.getFullLoc(FD->getBeginLoc()).getFileEntry()->getName().str();
> .   ..
> }
>
> will give offsets [0,29], but I'd like to get the location of the "f",
> i.e. [5-6].
>

In general, you can use getLocation() to get the location of the name in a
NamedDecl. For a FunctionDecl, there's also getNameInfo(), which will
return more detailed information about the name of the function (allowing
you to handle the case where the function name is more than a single token,
such as for C++ functions with non-identifier names like "operator int*").
If you want to also include the preceding C++ nested name specifier as part
of the name, you can use getQualifierLoc to determine its location.


> Thanks!
> Sterling.
> _______________________________________________
> cfe-users mailing list
> cfe-users at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20200526/1dcfcb95/attachment.html>


More information about the cfe-users mailing list