[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