aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseObjc.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-08-26 02:32:45 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-08-26 02:32:45 +0000
commit4d7da2f4a39adcc2ea211fb30600fabde4f3a0b1 (patch)
treefddd36e47c0ae4341469136aacd5ec8e6cb2bad3 /lib/Parse/ParseObjc.cpp
parenta56f7460baf475151e03b1249a1343349328e39c (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.cpp26
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,