[cfe-commits] r50684 - /cfe/trunk/lib/Analysis/CFRefCount.cpp
Ted Kremenek
kremenek at apple.com
Mon May 5 16:55:01 PDT 2008
Author: kremenek
Date: Mon May 5 18:55:01 2008
New Revision: 50684
URL: http://llvm.org/viewvc/llvm-project?rev=50684&view=rev
Log:
Add summary generation for "initXXX" methods.
Modified:
cfe/trunk/lib/Analysis/CFRefCount.cpp
Modified: cfe/trunk/lib/Analysis/CFRefCount.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFRefCount.cpp?rev=50684&r1=50683&r2=50684&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/CFRefCount.cpp (original)
+++ cfe/trunk/lib/Analysis/CFRefCount.cpp Mon May 5 18:55:01 2008
@@ -214,7 +214,12 @@
RetainSummary* getCFSummaryGetRule(FunctionDecl* FD);
RetainSummary* getPersistentSummary(ArgEffects* AE, RetEffect RE);
-
+
+ RetainSummary* getInstanceMethodSummary(Selector S);
+
+ RetainSummary* getMethodSummary(Selector S);
+ RetainSummary* getInitMethodSummary(Selector S);
+
public:
RetainSummaryManager(ASTContext& ctx, bool gcenabled)
@@ -239,7 +244,8 @@
// mitigating the need to do explicit cleanup of the
// Argument-Effect summaries.
- for (ArgEffectsSetTy::iterator I = ArgEffectsSet.begin(), E = ArgEffectsSet.end(); I!=E; ++I)
+ for (ArgEffectsSetTy::iterator I = ArgEffectsSet.begin(),
+ E = ArgEffectsSet.end(); I!=E; ++I)
I->getValue().~ArgEffects();
}
@@ -302,7 +308,7 @@
//===----------------------------------------------------------------------===//
RetainSummary* RetainSummaryManager::getSummary(FunctionDecl* FD,
- ASTContext& Ctx) {
+ ASTContext& Ctx) {
SourceLocation Loc = FD->getLocation();
@@ -330,7 +336,7 @@
}
RetainSummary* RetainSummaryManager::getNSSummary(FunctionDecl* FD,
- const char* FName) {
+ const char* FName) {
FName += 2;
if (strcmp(FName, "MakeCollectable") == 0)
@@ -340,7 +346,7 @@
}
RetainSummary* RetainSummaryManager::getCFSummary(FunctionDecl* FD,
- const char* FName) {
+ const char* FName) {
FName += 2;
@@ -475,8 +481,44 @@
// Summary creation for Selectors.
//===----------------------------------------------------------------------===//
+RetainSummary* RetainSummaryManager::getInitMethodSummary(Selector S) {
+ assert(ScratchArgs.empty());
+
+ RetainSummary* Summ =
+ getPersistentSummary(getArgEffects(), RetEffect::MakeReceiverAlias());
+
+ ObjCMethodSummaries[S] = Summ;
+ return Summ;
+}
+
+RetainSummary* RetainSummaryManager::getMethodSummary(Selector S) {
+
+ // Look up a summary in our cache of Selectors -> Summaries.
+ ObjCMethodSummariesTy::iterator I = ObjCMethodSummaries.find(S);
+
+ if (I != ObjCMethodSummaries.end())
+ return I->second;
+ // "initXXX": pass-through for receiver.
+ const char* s = S.getIdentifierInfoForSlot(0)->getName();
+
+ if (s[0] == 'i' && s[10] == 'n' && s[2] == 'i' && s[3] == 't')
+ return getInitMethodSummary(S);
+
+ return 0;
+}
+
+RetainSummary* RetainSummaryManager::getInstanceMethodSummary(Selector S) {
+
+ // Look up a summary in our cache of Selectors -> Summaries.
+ ObjCMethodSummariesTy::iterator I = ObjCInstanceMethodSummaries.find(S);
+
+ if (I != ObjCInstanceMethodSummaries.end())
+ return I->second;
+
+ return 0;
+}
//===----------------------------------------------------------------------===//
// Reference-counting logic (typestate + counts).
More information about the cfe-commits
mailing list