[PATCH] D42517: [clangd] Pass Context implicitly using TLS.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 31 04:52:12 PST 2018
sammccall marked 3 inline comments as done.
sammccall added a comment.
Thanks!
================
Comment at: clangd/Context.h:77
+ /// See WithContext and WithContextValue for how to do this safely.
+ static Context ¤t();
----------------
ilya-biryukov wrote:
> Maybe we could return `const Context&` here and have a separate `setCurrent()` method for replacing the current context?
> Most of the clients shouldn't mutate the contexts anyway, and finding the few that do seems easier if there's a separate method for that.
Done (named `swap`).
In fact the only caller is `WithContext`, which is a good sign.
It would be possible to make `swap()` private, since WithContext is in this file. I tend to lean against it because embedders will do explicit context manipulation and WithContext may not be the right primitive for them. So I've left the WithContext guidance as "just a comment". Could be convinced though.
================
Comment at: clangd/Context.h:201
+ WithContext &operator=(const WithContext &) = delete;
+ WithContext(WithContext &&) = default; // Allow return-by-value.
+ WithContext &operator=(WithContext &&) = delete;
----------------
ilya-biryukov wrote:
> Where do we use it? Can't we make move ctor deleted too?
Good catch! This was used in an old version of the patch.
================
Comment at: clangd/Trace.cpp:131
+ return Context::current().clone();
+ WithContextValue WithArgs{std::unique_ptr<json::obj>(Args)};
+ return T->beginSpan(Name, Args);
----------------
ilya-biryukov wrote:
> Maybe use parentheses instead of braces for initialization?
Braces here are to avoid most-vexing-parse: with parens this is a function declaration.
(I'm not sure this is worth a comment, as the compiler flags it if you change it)
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D42517
More information about the cfe-commits
mailing list