diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-08-26 02:32:45 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-08-26 02:32:45 +0000 |
commit | 4d7da2f4a39adcc2ea211fb30600fabde4f3a0b1 (patch) | |
tree | fddd36e47c0ae4341469136aacd5ec8e6cb2bad3 /lib/Parse/ParseObjc.cpp | |
parent | a56f7460baf475151e03b1249a1343349328e39c (diff) |
Synthesize property setter method as we do for getter.
- Also, fix Parser to construct proper SetterName selector (should be
lifted out of parser though).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55352 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseObjc.cpp')
-rw-r--r-- | lib/Parse/ParseObjc.cpp | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index 5758460412..a2f4eb2508 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -212,6 +212,23 @@ Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration( return 0; } +/// constructSetterName - Return the setter name for the given +/// identifier, i.e. "set" + Name where the initial character of Name +/// has been capitalized. +static IdentifierInfo *constructSetterName(IdentifierTable &Idents, + const IdentifierInfo *Name) { + unsigned N = Name->getLength(); + char *SelectorName = new char[3 + N]; + memcpy(SelectorName, "set", 3); + memcpy(&SelectorName[3], Name->getName(), N); + SelectorName[3] = toupper(SelectorName[3]); + + IdentifierInfo *Setter = + &Idents.get(SelectorName, &SelectorName[3 + N]); + delete[] SelectorName; + return Setter; +} + /// objc-interface-decl-list: /// empty /// objc-interface-decl-list objc-property-decl [OBJC2] @@ -276,11 +293,12 @@ void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl, PP.getSelectorTable().getNullarySelector(OCDS.getGetterName() ? OCDS.getGetterName() : FD.D.getIdentifier()); + IdentifierInfo *SetterName = OCDS.getSetterName(); + if (!SetterName) + SetterName = constructSetterName(PP.getIdentifierTable(), + FD.D.getIdentifier()); Selector SetterSel = - PP.getSelectorTable().getNullarySelector(OCDS.getSetterName() - ? OCDS.getSetterName() - // FIXME. This is not right! - : FD.D.getIdentifier()); + PP.getSelectorTable().getUnarySelector(SetterName); DeclTy *Property = Actions.ActOnProperty(CurScope, AtLoc, FD, OCDS, GetterSel, SetterSel, |