Review Request 123987: Don't create declarations for anonymous function parameters
Milian Wolff
mail at milianw.de
Wed Jun 3 14:23:37 UTC 2015
> On June 3, 2015, 7:22 a.m., Milian Wolff wrote:
> > duchain/builder.cpp, line 785
> > <https://git.reviewboard.kde.org/r/123987/diff/1/?file=378686#file378686line785>
> >
> > this is very costly for the common case of non-empty identifiers. could you instead use the range and check whether that is empty please? i.e. skip the string conversion
>
> Sergey Kalinichev wrote:
> I've just tried it, but both: clang_Cursor_getSpellingNameRange and clang_getCursorExtent return non empty ranges, is there any other method?
> Also this path is called for function parameters only which is not so often, so I don't think it's a problem at all.
>
> Milian Wolff wrote:
> Then please add a comment like "TODO: find a way to do this without a costly string conversion" and I'll take a look at it.
>
> thanks!
>
> Kevin Funk wrote:
> Just quickly scanned the clang source: I don't see an easy way to do this.
>
> Otoh, `clang_getCursorSpelling()` is likely just increasing the ref count on an internal `cxstring`, so it might not be that problematic. Would need to check the backtrace what happens for the ParmDecl cursor, but I don't have a debug build of LLVM/Clang right now.
>
> Still, please add an TODO.
>
> Milian Wolff wrote:
> in such a case it would still be better if we could get rid of the `.toString()`, i.e. add a `ClangString::isEmpty()`, maybe based on `strlen` if there's nothing better. Will still be much faster as no allocation is required then.
>
> Kevin Funk wrote:
> Yep, please add this Sergey: `bool ClangString::isEmpty() const { return strlen(clang_getCString(string)) == 0; }` and use that.
>
> This is at least a no-op on our side then (no conversion to QString needed); clang_getCString is just doing a static_cast.
>
> Kevin Funk wrote:
> After giving this another though, this is unnecessarily slow as well...
>
> Let's do:
> ```
> bool ClangString::isEmpty() const { const char* str = clang_getCString(string); return !str || str[0] == '\0'; }
> ```
>
> I think we nailed it now!
yep, sounds good.
- Milian
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/123987/#review81098
-----------------------------------------------------------
On June 3, 2015, 7:04 a.m., Sergey Kalinichev wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/123987/
> -----------------------------------------------------------
>
> (Updated June 3, 2015, 7:04 a.m.)
>
>
> Review request for KDevelop.
>
>
> Repository: kdev-clang
>
>
> Description
> -------
>
> E.g.: void f(int);
> The int parameter is anonymous, so instead of creting a declaration pointing at the ) we do nothing here.
>
>
> Diffs
> -----
>
> duchain/builder.cpp 4165cfc
> tests/files/variables.cpp 71935e9
>
> Diff: https://git.reviewboard.kde.org/r/123987/diff/
>
>
> Testing
> -------
>
>
> Thanks,
>
> Sergey Kalinichev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20150603/57e789bb/attachment.html>
More information about the KDevelop-devel
mailing list