[PATCH] D119363: [clang] Add `ObjCProtocolLoc` to represent protocol references
David Goldman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 15 11:08:32 PST 2022
dgoldman added a comment.
In D119363#3323778 <https://reviews.llvm.org/D119363#3323778>, @sammccall wrote:
> I'm a bit concerned about the parent map vs ASTMatchFinder's view being out of sync: we'll have a ProtocolLoc node that has a parent but the parent doesn't have the child.
>
> I'm not sure this breaks anything immediately, but I think we should also make these nodes visible to matchers, even if there's no specific matcher yet.
Hmm I can try to do it - what do I need to modify to make them visible to matchers?
================
Comment at: clang/include/clang/AST/TypeLoc.h:2611
+class ObjCProtocolLoc {
+ const ObjCProtocolDecl *Protocol = nullptr;
+ SourceLocation Loc = SourceLocation();
----------------
sammccall wrote:
> Also add a public `getLocation()` accessor for ProtocolLoc? (That returns SourceLocation)
this was already there? did you want something else?
================
Comment at: clang/include/clang/AST/TypeLoc.h:2617
+ : Protocol(protocol), Loc(loc) {}
+ const ObjCProtocolDecl *getProtocol() const { return Protocol; }
+ SourceLocation getLocation() const { return Loc; }
----------------
sammccall wrote:
> Return non-const pointer, matching other AST nodes. (But method should be const)
Why - Is there a reason to make it mutable? TypeLoc's getTypePtr is const (although this is a decl not a type).
================
Comment at: clang/include/clang/AST/TypeLoc.h:2621
+ /// Evaluates true when this protocol loc is valid/non-empty.
+ explicit operator bool() const { return Protocol; }
+};
----------------
sammccall wrote:
> dgoldman wrote:
> > sammccall wrote:
> > > will we ever have invalid instances?
> > From what I can tell, nope. This is explicitly used here though: https://github.com/llvm/llvm-project/blob/ceb5dc55c2e395c085cd9d16c4152c5a1923d7e2/clang/lib/AST/ParentMapContext.cpp#L405
> > From what I can tell, nope. This is explicitly used here though: https://github.com/llvm/llvm-project/blob/ceb5dc55c2e395c085cd9d16c4152c5a1923d7e2/clang/lib/AST/ParentMapContext.cpp#L405
>
> Well it's not used today, you're adding the use in this patch.
>
> It can be solved in some other way, like pulling out an isNull template and then overloading it for ProtocolLoc.
> I don't think we should add API surface to AST nodes to satisfy brittle templates
Gotcha, I'm relatively new to templates but took a stab at isNull - LMK what you think/if there's a better way.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119363/new/
https://reviews.llvm.org/D119363
More information about the cfe-commits
mailing list