diff options
author | Steve Naroff <snaroff@apple.com> | 2007-09-28 23:39:26 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2007-09-28 23:39:26 +0000 |
commit | 5b6b72f53ad164497cf62484b60cdbb4361f1978 (patch) | |
tree | 412a558e9a8e1e12633cc92d3eafdb7ad59be240 /Parse/ParseObjc.cpp | |
parent | eb19188e668d0ad2c968fc0286a6922f9194deb4 (diff) |
Add some comments to MultiKeywordSelector, make all methods private, add a friend, move some methods around.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42456 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Parse/ParseObjc.cpp')
-rw-r--r-- | Parse/ParseObjc.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp index 3317b88da3..be0e026157 100644 --- a/Parse/ParseObjc.cpp +++ b/Parse/ParseObjc.cpp @@ -502,6 +502,58 @@ Parser::TypeTy *Parser::ParseObjCTypeName() { return Ty; } +unsigned Selector::getNumArgs() const { + unsigned IIF = getIdentifierInfoFlag(); + if (IIF == ZeroArg) + return 0; + if (IIF == OneArg) + return 1; + // We point to a MultiKeywordSelector (pointer doesn't contain any flags). + MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr); + return SI->getNumArgs(); +} + +IdentifierInfo *Selector::getIdentifierInfoForSlot(unsigned argIndex) { + IdentifierInfo *II = getAsIdentifierInfo(); + if (II) { + assert(((argIndex == 0) || (argIndex == 1)) && "illegal keyword index"); + return II; + } + // We point to a MultiKeywordSelector (pointer doesn't contain any flags). + MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr); + return SI->getIdentifierInfoForSlot(argIndex); +} + +char *MultiKeywordSelector::getName(llvm::SmallVectorImpl<char> &methodName) { + methodName[0] = '\0'; + keyword_iterator KeyIter = keyword_begin(); + for (unsigned int i = 0; i < NumArgs; i++) { + if (KeyIter[i]) { + unsigned KeyLen = strlen(KeyIter[i]->getName()); + methodName.append(KeyIter[i]->getName(), KeyIter[i]->getName()+KeyLen); + } + methodName.push_back(':'); + } + methodName.push_back('\0'); + return &methodName[0]; +} + +char *Selector::getName(llvm::SmallVectorImpl<char> &methodName) { + methodName[0] = '\0'; + IdentifierInfo *II = getAsIdentifierInfo(); + if (II) { + unsigned NameLen = strlen(II->getName()); + methodName.append(II->getName(), II->getName()+NameLen); + if (getNumArgs() == 1) + methodName.push_back(':'); + methodName.push_back('\0'); + } else { // We have a multiple keyword selector (no embedded flags). + MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr); + SI->getName(methodName); + } + return &methodName[0]; +} + Selector Parser::ObjcGetUnarySelector(IdentifierInfo *unarySel) { return Selector(unarySel, 0); |