[cfe-commits] r55404 - in /cfe/trunk: include/clang/AST/DeclObjC.h lib/AST/DeclObjC.cpp
Daniel Dunbar
daniel at zuster.org
Tue Aug 26 19:09:39 PDT 2008
Author: ddunbar
Date: Tue Aug 26 21:09:39 2008
New Revision: 55404
URL: http://llvm.org/viewvc/llvm-project?rev=55404&view=rev
Log:
Add addPropertyMethods implementations for
ObjC{Category,Protocol}Decl.
- No functionality change.
Modified:
cfe/trunk/include/clang/AST/DeclObjC.h
cfe/trunk/lib/AST/DeclObjC.cpp
Modified: cfe/trunk/include/clang/AST/DeclObjC.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=55404&r1=55403&r2=55404&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclObjC.h (original)
+++ cfe/trunk/include/clang/AST/DeclObjC.h Tue Aug 26 21:09:39 2008
@@ -625,6 +625,10 @@
ObjCPropertyDecl **getPropertyDecl() { return PropertyDecl; }
void addProperties(ObjCPropertyDecl **Properties, unsigned NumProperties);
+
+ void addPropertyMethods(ASTContext &Context,
+ ObjCPropertyDecl* Property,
+ llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods);
typedef ObjCPropertyDecl * const * classprop_iterator;
classprop_iterator classprop_begin() const { return PropertyDecl; }
@@ -862,6 +866,10 @@
ObjCPropertyDecl * const * getPropertyDecl() const { return PropertyDecl; }
void addProperties(ObjCPropertyDecl **Properties, unsigned NumProperties);
+
+ void addPropertyMethods(ASTContext &Context,
+ ObjCPropertyDecl* Property,
+ llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods);
ObjCPropertyDecl *FindPropertyDeclaration(IdentifierInfo *PropertyId) const;
Modified: cfe/trunk/lib/AST/DeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclObjC.cpp?rev=55404&r1=55403&r2=55404&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclObjC.cpp (original)
+++ cfe/trunk/lib/AST/DeclObjC.cpp Tue Aug 26 21:09:39 2008
@@ -402,14 +402,28 @@
}
}
-/// addPropertyMethods - Goes through list of properties declared in this class
-/// and builds setter/getter method declartions depending on the setter/getter
-/// attributes of the property.
-///
-void ObjCInterfaceDecl::addPropertyMethods(
- ASTContext &Context,
- ObjCPropertyDecl *property,
- llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
+static void
+addPropertyMethods(Decl *D,
+ ASTContext &Context,
+ ObjCPropertyDecl *property,
+ llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
+ ObjCMethodDecl *GetterDecl, *SetterDecl;
+
+ if (ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(D)) {
+ GetterDecl = OID->getInstanceMethod(property->getGetterName());
+ if (!property->isReadOnly())
+ SetterDecl = OID->getInstanceMethod(property->getSetterName());
+ } else if (ObjCCategoryDecl *OCD = dyn_cast<ObjCCategoryDecl>(D)) {
+ GetterDecl = OCD->getInstanceMethod(property->getGetterName());
+ if (!property->isReadOnly())
+ SetterDecl = OCD->getInstanceMethod(property->getSetterName());
+ } else {
+ ObjCProtocolDecl *OPD = cast<ObjCProtocolDecl>(D);
+ GetterDecl = OPD->getInstanceMethod(property->getGetterName());
+ if (!property->isReadOnly())
+ SetterDecl = OPD->getInstanceMethod(property->getSetterName());
+ }
+
// FIXME: The synthesized property we set here is misleading. We
// almost always synthesize these methods unless the user explicitly
// provided prototypes (which is odd, but allowed). Sema should be
@@ -417,7 +431,6 @@
// it is not currently).
// Find the default getter and if one not found, add one.
- ObjCMethodDecl *GetterDecl = getInstanceMethod(property->getGetterName());
if (!GetterDecl) {
// No instance method of same name as property getter name was found.
// Declare a getter method and add it to the list of methods
@@ -427,7 +440,7 @@
property->getLocation(),
property->getGetterName(),
property->getType(),
- this,
+ D,
true, false, true, ObjCMethodDecl::Required);
insMethods.push_back(GetterDecl);
}
@@ -438,7 +451,6 @@
return;
// Find the default setter and if one not found, add one.
- ObjCMethodDecl *SetterDecl = getInstanceMethod(property->getSetterName());
if (!SetterDecl) {
// No instance method of same name as property setter name was found.
// Declare a setter method and add it to the list of methods
@@ -448,7 +460,7 @@
property->getLocation(),
property->getSetterName(),
Context.VoidTy,
- this,
+ D,
true, false, true, ObjCMethodDecl::Required);
insMethods.push_back(SetterDecl);
@@ -466,6 +478,39 @@
property->setSetterMethodDecl(SetterDecl);
}
+/// addPropertyMethods - Goes through list of properties declared in this class
+/// and builds setter/getter method declartions depending on the setter/getter
+/// attributes of the property.
+///
+void ObjCInterfaceDecl::addPropertyMethods(
+ ASTContext &Context,
+ ObjCPropertyDecl *property,
+ llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
+ ::addPropertyMethods(this, Context, property, insMethods);
+}
+
+/// addPropertyMethods - Goes through list of properties declared in this class
+/// and builds setter/getter method declartions depending on the setter/getter
+/// attributes of the property.
+///
+void ObjCCategoryDecl::addPropertyMethods(
+ ASTContext &Context,
+ ObjCPropertyDecl *property,
+ llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
+ ::addPropertyMethods(this, Context, property, insMethods);
+}
+
+/// addPropertyMethods - Goes through list of properties declared in this class
+/// and builds setter/getter method declartions depending on the setter/getter
+/// attributes of the property.
+///
+void ObjCProtocolDecl::addPropertyMethods(
+ ASTContext &Context,
+ ObjCPropertyDecl *property,
+ llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
+ ::addPropertyMethods(this, Context, property, insMethods);
+}
+
/// addProperties - Insert property declaration AST nodes into
/// ObjCProtocolDecl's PropertyDecl field.
///
More information about the cfe-commits
mailing list