minor cleanups: make getIdentifierNamespace() be a single load
instead of a load + large inlined switch.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67864 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp
index ef9dc76..72ac555 100644
--- a/lib/AST/DeclBase.cpp
+++ b/lib/AST/DeclBase.cpp
@@ -117,6 +117,14 @@
 // Decl Implementation
 //===----------------------------------------------------------------------===//
 
+// Out-of-line virtual method providing a home for Decl.
+Decl::~Decl() {
+  if (isOutOfSemaDC())
+    delete getMultipleDC();
+  
+  assert(!HasAttrs && "attributes should have been freed by Destroy");
+}
+
 void Decl::setDeclContext(DeclContext *DC) {
   if (isOutOfSemaDC())
     delete getMultipleDC();
@@ -140,12 +148,66 @@
   }
 }
 
-// Out-of-line virtual method providing a home for Decl.
-Decl::~Decl() {
-  if (isOutOfSemaDC())
-    delete getMultipleDC();
+unsigned Decl::getIdentifierNamespaceForKind(Kind DeclKind) {
+  switch (DeclKind) {
+    default: 
+      if (DeclKind >= FunctionFirst && DeclKind <= FunctionLast)
+        return IDNS_Ordinary;
+      assert(0 && "Unknown decl kind!");
+    case OverloadedFunction:
+    case Typedef:
+    case EnumConstant:
+    case Var:
+    case ImplicitParam:
+    case ParmVar:
+    case OriginalParmVar:
+    case NonTypeTemplateParm:
+    case ObjCMethod:
+    case ObjCContainer:
+    case ObjCCategory:
+    case ObjCInterface:
+    case ObjCCategoryImpl:
+    case ObjCProperty:
+    case ObjCCompatibleAlias:
+      return IDNS_Ordinary;
+      
+    case ObjCProtocol:
+      return IDNS_Protocol;
+      
+    case Field:
+    case ObjCAtDefsField:
+    case ObjCIvar:
+      return IDNS_Member;
+      
+    case Record:
+    case CXXRecord:
+    case Enum:
+    case TemplateTypeParm:
+      return IDNS_Tag;
+      
+    case Namespace:
+    case Template:
+    case FunctionTemplate:
+    case ClassTemplate:
+    case TemplateTemplateParm:
+      return IDNS_Tag | IDNS_Ordinary;
+    
+    // Never have names.
+    case LinkageSpec:
+    case FileScopeAsm:
+    case StaticAssert:
+    case ObjCClass:
+    case ObjCImplementation:
+    case ObjCPropertyImpl:
+    case ObjCForwardProtocol:
+    case Block:
+    case TranslationUnit:
 
-  assert(!HasAttrs && "attributes should have been freed by Destroy");
+    // Aren't looked up?
+    case UsingDirective:
+    case ClassTemplateSpecialization:
+      return 0;
+  }
 }
 
 void Decl::addAttr(Attr *NewAttr) {
@@ -426,8 +488,7 @@
 typedef llvm::DenseMap<DeclarationName, StoredDeclsList> StoredDeclsMap;
 
 DeclContext::~DeclContext() {
-  unsigned Size = LookupPtr.getInt();
-  if (Size == LookupIsMap)
+  if (isLookupMap())
     delete static_cast<StoredDeclsMap*>(LookupPtr.getPointer());
   else
     delete [] static_cast<NamedDecl**>(LookupPtr.getPointer());