ilya-biryukov added inline comments.
================ Comment at: clangd/ExpectedTypes.h:68 + +/// Represents a type of partially applied conversion. Should be treated as an +/// opaque value and can only be used to check whether the types are converible ---------------- sammccall wrote: > this represents a type (in the c++ sense), not a conversion, right? It's an "expression" with an extra data with some extra data (whether the user conversion was applied to get this expression) ================ Comment at: clangd/ExpectedTypes.h:82 + static llvm::SmallVector<SType, 2> + fromCompletionResult(ASTContext &Ctx, const CodeCompletionResult &R); + ---------------- sammccall wrote: > coupling to CompletionResult seems premature here, can we stick to passing > getExpectedType() until we know that abstraction needs to be broken? There's some useful logic that is tied to completion results, e.g. to extract function return type `CompletionResult`. Happy to accept a decl, but would keep the name `fromCompletionResult`. Does that LG? ================ Comment at: clangd/ExpectedTypes.h:213 + +void collectConvertibleFrom(ASTContext &Ctx, MockExpr Source, + llvm::function_ref<void(PartialConv)> OutF); ---------------- sammccall wrote: > sammccall wrote: > > why is implementing one of these directions not enough? > > > > It should probably be: > > As far as I can tell, derived-to-base is the tricky one here: it's an > > important conversion (albeit one we should leave out of the first patch), > > and you can't ask "what's convertible to base" since the answer is an open > > set you can't see. > > > > So it seems the minimal set you need for handling pointer to base is `Type > > getRepresentative(Type)` and `set<Type> > > getRepresentativesAfterConversion(Type)` or so... > names are unclear: is `collectConvertibleFrom(T)` the convertible-from types > for T (i.e the types T is convertible from), or the types that are > convertible from T? Derived-to-base and user conversions. We can't enumerate all derived classes for some type, so instead need to enumerate all bases when adding a symbol to the index. We can't enumerate all types that have user-defined conversions to some type T, so we need to enumerate all user-defined conversions when adding a symbol instead. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D52273 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits