Add addPropertyMethods implementations for
ObjC{Category,Protocol}Decl. - No functionality change. llvm-svn: 55404
This commit is contained in:
parent
912c28444f
commit
e7ecbc539e
|
@ -626,6 +626,10 @@ public:
|
||||||
|
|
||||||
void addProperties(ObjCPropertyDecl **Properties, unsigned NumProperties);
|
void addProperties(ObjCPropertyDecl **Properties, unsigned NumProperties);
|
||||||
|
|
||||||
|
void addPropertyMethods(ASTContext &Context,
|
||||||
|
ObjCPropertyDecl* Property,
|
||||||
|
llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods);
|
||||||
|
|
||||||
typedef ObjCPropertyDecl * const * classprop_iterator;
|
typedef ObjCPropertyDecl * const * classprop_iterator;
|
||||||
classprop_iterator classprop_begin() const { return PropertyDecl; }
|
classprop_iterator classprop_begin() const { return PropertyDecl; }
|
||||||
classprop_iterator classprop_end() const {
|
classprop_iterator classprop_end() const {
|
||||||
|
@ -863,6 +867,10 @@ public:
|
||||||
|
|
||||||
void addProperties(ObjCPropertyDecl **Properties, unsigned NumProperties);
|
void addProperties(ObjCPropertyDecl **Properties, unsigned NumProperties);
|
||||||
|
|
||||||
|
void addPropertyMethods(ASTContext &Context,
|
||||||
|
ObjCPropertyDecl* Property,
|
||||||
|
llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods);
|
||||||
|
|
||||||
ObjCPropertyDecl *FindPropertyDeclaration(IdentifierInfo *PropertyId) const;
|
ObjCPropertyDecl *FindPropertyDeclaration(IdentifierInfo *PropertyId) const;
|
||||||
|
|
||||||
typedef ObjCPropertyDecl * const * classprop_iterator;
|
typedef ObjCPropertyDecl * const * classprop_iterator;
|
||||||
|
|
|
@ -402,14 +402,28 @@ void ObjCInterfaceDecl::mergeProperties(ObjCPropertyDecl **Properties,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// addPropertyMethods - Goes through list of properties declared in this class
|
static void
|
||||||
/// and builds setter/getter method declartions depending on the setter/getter
|
addPropertyMethods(Decl *D,
|
||||||
/// attributes of the property.
|
|
||||||
///
|
|
||||||
void ObjCInterfaceDecl::addPropertyMethods(
|
|
||||||
ASTContext &Context,
|
ASTContext &Context,
|
||||||
ObjCPropertyDecl *property,
|
ObjCPropertyDecl *property,
|
||||||
llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
|
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
|
// FIXME: The synthesized property we set here is misleading. We
|
||||||
// almost always synthesize these methods unless the user explicitly
|
// almost always synthesize these methods unless the user explicitly
|
||||||
// provided prototypes (which is odd, but allowed). Sema should be
|
// provided prototypes (which is odd, but allowed). Sema should be
|
||||||
|
@ -417,7 +431,6 @@ void ObjCInterfaceDecl::addPropertyMethods(
|
||||||
// it is not currently).
|
// it is not currently).
|
||||||
|
|
||||||
// Find the default getter and if one not found, add one.
|
// Find the default getter and if one not found, add one.
|
||||||
ObjCMethodDecl *GetterDecl = getInstanceMethod(property->getGetterName());
|
|
||||||
if (!GetterDecl) {
|
if (!GetterDecl) {
|
||||||
// No instance method of same name as property getter name was found.
|
// No instance method of same name as property getter name was found.
|
||||||
// Declare a getter method and add it to the list of methods
|
// Declare a getter method and add it to the list of methods
|
||||||
|
@ -427,7 +440,7 @@ void ObjCInterfaceDecl::addPropertyMethods(
|
||||||
property->getLocation(),
|
property->getLocation(),
|
||||||
property->getGetterName(),
|
property->getGetterName(),
|
||||||
property->getType(),
|
property->getType(),
|
||||||
this,
|
D,
|
||||||
true, false, true, ObjCMethodDecl::Required);
|
true, false, true, ObjCMethodDecl::Required);
|
||||||
insMethods.push_back(GetterDecl);
|
insMethods.push_back(GetterDecl);
|
||||||
}
|
}
|
||||||
|
@ -438,7 +451,6 @@ void ObjCInterfaceDecl::addPropertyMethods(
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Find the default setter and if one not found, add one.
|
// Find the default setter and if one not found, add one.
|
||||||
ObjCMethodDecl *SetterDecl = getInstanceMethod(property->getSetterName());
|
|
||||||
if (!SetterDecl) {
|
if (!SetterDecl) {
|
||||||
// No instance method of same name as property setter name was found.
|
// No instance method of same name as property setter name was found.
|
||||||
// Declare a setter method and add it to the list of methods
|
// Declare a setter method and add it to the list of methods
|
||||||
|
@ -448,7 +460,7 @@ void ObjCInterfaceDecl::addPropertyMethods(
|
||||||
property->getLocation(),
|
property->getLocation(),
|
||||||
property->getSetterName(),
|
property->getSetterName(),
|
||||||
Context.VoidTy,
|
Context.VoidTy,
|
||||||
this,
|
D,
|
||||||
true, false, true, ObjCMethodDecl::Required);
|
true, false, true, ObjCMethodDecl::Required);
|
||||||
insMethods.push_back(SetterDecl);
|
insMethods.push_back(SetterDecl);
|
||||||
|
|
||||||
|
@ -466,6 +478,39 @@ void ObjCInterfaceDecl::addPropertyMethods(
|
||||||
property->setSetterMethodDecl(SetterDecl);
|
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
|
/// addProperties - Insert property declaration AST nodes into
|
||||||
/// ObjCProtocolDecl's PropertyDecl field.
|
/// ObjCProtocolDecl's PropertyDecl field.
|
||||||
///
|
///
|
||||||
|
|
Loading…
Reference in New Issue