ilya-biryukov added inline comments.

================
Comment at: clangd/ClangdUnit.h:132
 
-/// Manages resources, required by clangd. Allows to rebuild file with new
-/// contents, and provides AST and Preamble for it.
-class CppFile {
+/// A helper class that handles building preambles and ASTs for a file. Also
+/// adds some logging.
----------------
sammccall wrote:
> This may be change aversion, but I'm not sure this class does enough after 
> this change - it doesn't store the inputs or the outputs/cache, so it kind of 
> seems like it wants to be a function.
> 
> I guess the motivation here is that storing the outputs means dealing with 
> the cache, and the cache is local to TUScheduler.
> But `CppFile` is only used in TUScheduler, so we could move this there too? 
> It feels like expanding the scope more than I'd like.
> 
> The upside is that I think it's a more natural division of responsibility: 
> `CppFile` could continue to be the "main" holder of the 
> `shared_ptr<Preamble>` (which we don't limit, but share), and instead of 
> `Optional<ParsedAST>` it'd have a `weak_ptr<ParsedAST>` which is controlled 
> and can be refreshed through the cache.
> 
> As discussed offline, the cache could look something like:
> ```
> class Cache {
>    shared_ptr<ParsedAST> put(ParsedAST);
>    void hintUsed(ParsedAST*); // optional, bumps LRU when client reads
>    void hintUnused(ParsedAST*); // optional, releases when client abandons
> }
> 
> shared_ptr<ParsedAST> CppFile::getAST() {
>   shared_ptr<ParsedAST> AST = WeakAST.lock();
>   if (AST)
>     Cache.hintUsed(AST.get());
>   else
>     WeakAST = AST = Cache.put(build...);
>   return AST;
> }
> ```
I've reimplemented the cache with weak_ptr/shared_ptr. 
With a slightly different interface to hide more stuff in the cache API. Please 
take a look and let me know what you think.

Nevertheless, I still find `CppFile` refactoring useful. It unties preambles 
from the ASTs and I believe this is a good thing, given that their lifetimes 
are different.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D47063



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to