[cfe-commits] r73655 - in /cfe/trunk/lib/Sema: Sema.h SemaCXXScopeSpec.cpp SemaDecl.cpp SemaDeclCXX.cpp

Argiris Kirtzidis akyrtzi at gmail.com
Wed Jun 17 16:15:40 PDT 2009


Author: akirtzidis
Date: Wed Jun 17 18:15:40 2009
New Revision: 73655

URL: http://llvm.org/viewvc/llvm-project?rev=73655&view=rev
Log:
Factor out some common code into Sema::EnterDeclaratorContext/ExitDeclaratorContext.

Modified:
    cfe/trunk/lib/Sema/Sema.h
    cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp
    cfe/trunk/lib/Sema/SemaDecl.cpp
    cfe/trunk/lib/Sema/SemaDeclCXX.cpp

Modified: cfe/trunk/lib/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.h?rev=73655&r1=73654&r2=73655&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/Sema.h (original)
+++ cfe/trunk/lib/Sema/Sema.h Wed Jun 17 18:15:40 2009
@@ -539,6 +539,12 @@
   void PushDeclContext(Scope *S, DeclContext *DC);
   void PopDeclContext();
   
+  /// EnterDeclaratorContext - Used when we must lookup names in the context
+  /// of a declarator's nested name specifier.
+  void EnterDeclaratorContext(Scope *S, DeclContext *DC);
+  void ExitDeclaratorContext(Scope *S);
+  
+  
   /// getCurFunctionDecl - If inside of a function body, this returns a pointer
   /// to the function decl for the function being parsed.  If we're currently
   /// in a 'block', this returns the containing context.

Modified: cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp?rev=73655&r1=73654&r2=73655&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp (original)
+++ cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp Wed Jun 17 18:15:40 2009
@@ -286,11 +286,7 @@
 /// The 'SS' should be a non-empty valid CXXScopeSpec.
 void Sema::ActOnCXXEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS) {
   assert(SS.isSet() && "Parser passed invalid CXXScopeSpec.");
-  assert(PreDeclaratorDC == 0 && "Previous declarator context not popped?");
-  PreDeclaratorDC = static_cast<DeclContext*>(S->getEntity());
-  CurContext = computeDeclContext(SS);
-  assert(CurContext && "No context?");
-  S->setEntity(CurContext);
+  EnterDeclaratorContext(S, computeDeclContext(SS));
 }
 
 /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously
@@ -301,12 +297,5 @@
 void Sema::ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS) {
   assert(SS.isSet() && "Parser passed invalid CXXScopeSpec.");
   assert(S->getEntity() == computeDeclContext(SS) && "Context imbalance!");
-  S->setEntity(PreDeclaratorDC);
-  PreDeclaratorDC = 0;
-
-  // Reset CurContext to the nearest enclosing context.
-  while (!S->getEntity() && S->getParent())
-    S = S->getParent();
-  CurContext = static_cast<DeclContext*>(S->getEntity());
-  assert(CurContext && "No context?");
+  ExitDeclaratorContext(S);
 }

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=73655&r1=73654&r2=73655&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Jun 17 18:15:40 2009
@@ -219,6 +219,30 @@
   CurContext = getContainingDC(CurContext);
 }
 
+void Sema::EnterDeclaratorContext(Scope *S, DeclContext *DC) {
+  assert(PreDeclaratorDC == 0 && "Previous declarator context not popped?");
+  PreDeclaratorDC = static_cast<DeclContext*>(S->getEntity());
+  CurContext = DC;
+  assert(CurContext && "No context?");
+  S->setEntity(CurContext);
+}
+
+/// ActOnCXXExitDeclaratorScope - Called when a declarator that previously
+/// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same
+/// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.
+/// Used to indicate that names should revert to being looked up in the
+/// defining scope.
+void Sema::ExitDeclaratorContext(Scope *S) {
+  S->setEntity(PreDeclaratorDC);
+  PreDeclaratorDC = 0;
+
+  // Reset CurContext to the nearest enclosing context.
+  while (!S->getEntity() && S->getParent())
+    S = S->getParent();
+  CurContext = static_cast<DeclContext*>(S->getEntity());
+  assert(CurContext && "No context?");
+}
+
 /// \brief Determine whether we allow overloading of the function
 /// PrevDecl with another declaration.
 ///

Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=73655&r1=73654&r2=73655&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Wed Jun 17 18:15:40 2009
@@ -2852,12 +2852,7 @@
   // was used in a member function of X.
   
   // Change current context into the context of the initializing declaration.
-  
-  assert(PreDeclaratorDC == 0 && "Previous declarator context not popped?");
-  PreDeclaratorDC = static_cast<DeclContext*>(S->getEntity());
-  CurContext = D->getDeclContext();
-  assert(CurContext && "No context?");
-  S->setEntity(CurContext);
+  EnterDeclaratorContext(S, D->getDeclContext());
 }
 
 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
@@ -2874,12 +2869,5 @@
     return;
 
   assert(S->getEntity() == D->getDeclContext() && "Context imbalance!");
-  S->setEntity(PreDeclaratorDC);
-  PreDeclaratorDC = 0;
-
-  // Reset CurContext to the nearest enclosing context.
-  while (!S->getEntity() && S->getParent())
-    S = S->getParent();
-  CurContext = static_cast<DeclContext*>(S->getEntity());
-  assert(CurContext && "No context?");
+  ExitDeclaratorContext(S);
 }





More information about the cfe-commits mailing list