[cfe-commits] r80336 - in /cfe/trunk: include/clang/AST/DeclCXX.h include/clang/AST/DeclNodes.def lib/AST/DeclBase.cpp lib/AST/DeclCXX.cpp

Anders Carlsson andersca at mac.com
Thu Aug 27 22:30:28 PDT 2009


Author: andersca
Date: Fri Aug 28 00:30:28 2009
New Revision: 80336

URL: http://llvm.org/viewvc/llvm-project?rev=80336&view=rev
Log:
Check in UnresolvedUsingDecl.

Modified:
    cfe/trunk/include/clang/AST/DeclCXX.h
    cfe/trunk/include/clang/AST/DeclNodes.def
    cfe/trunk/lib/AST/DeclBase.cpp
    cfe/trunk/lib/AST/DeclCXX.cpp

Modified: cfe/trunk/include/clang/AST/DeclCXX.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=80336&r1=80335&r2=80336&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/DeclCXX.h (original)
+++ cfe/trunk/include/clang/AST/DeclCXX.h Fri Aug 28 00:30:28 2009
@@ -1576,20 +1576,23 @@
 /// UsingDecl - Represents a C++ using-declaration. For example:
 ///    using someNameSpace::someIdentifier;
 class UsingDecl : public NamedDecl {
-
   /// \brief The source range that covers the nested-name-specifier
   /// preceding the declaration name.
   SourceRange NestedNameRange;
+  
   /// \brief The source location of the target declaration name.
   SourceLocation TargetNameLocation;
+  
   /// \brief The source location of the "using" location itself.
   SourceLocation UsingLocation;
+  
   /// \brief Target declaration.
   NamedDecl* TargetDecl;
-  /// \brief Target declaration.
+  
+  /// \brief Target nested name specifier.
   NestedNameSpecifier* TargetNestedNameDecl;
 
-  // Had 'typename' keyword.
+  // \brief Has 'typename' keyword.
   bool IsTypeName;
 
   UsingDecl(DeclContext *DC, SourceLocation L, SourceRange NNR,
@@ -1635,6 +1638,47 @@
   }
   static bool classof(const UsingDecl *D) { return true; }
 };
+
+/// UnresolvedUsingDecl - Represents a using declaration whose name can not
+/// yet be resolved.
+class UnresolvedUsingDecl : public NamedDecl {
+  /// \brief The source range that covers the nested-name-specifier
+  /// preceding the declaration name.
+  SourceRange TargetNestedNameRange;
+  
+  /// \brief The source location of the target declaration name.
+  SourceLocation TargetNameLocation;
+  
+  NestedNameSpecifier *TargetNestedNameSpecifier;
+  
+  DeclarationName TargetName;
+  
+  // \brief Has 'typename' keyword.
+  bool IsTypeName;
+  
+  UnresolvedUsingDecl(DeclContext *DC, SourceLocation UsingLoc,
+                      SourceRange TargetNNR, NestedNameSpecifier *TargetNNS,
+                      SourceLocation TargetNameLoc, DeclarationName TargetName,
+                      bool IsTypeNameArg)
+  : NamedDecl(Decl::UnresolvedUsing, DC, UsingLoc, TargetName),
+    TargetNestedNameRange(TargetNNR), TargetNameLocation(TargetNameLoc), 
+    TargetNestedNameSpecifier(TargetNNS), TargetName(TargetName), 
+    IsTypeName(IsTypeNameArg) { }
+
+public:
+  static UnresolvedUsingDecl *Create(ASTContext &C, DeclContext *DC,
+                                     SourceLocation UsingLoc,
+                                     SourceRange TargetNNR,
+                                     NestedNameSpecifier *TargetNNS,
+                                     SourceLocation TargetNameLoc,
+                                     DeclarationName TargetName,
+                                     bool IsTypeNameArg);
+  
+  static bool classof(const Decl *D) {
+    return D->getKind() == Decl::UnresolvedUsing;
+  }
+  static bool classof(const UnresolvedUsingDecl *D) { return true; }
+};
   
 /// StaticAssertDecl - Represents a C++0x static_assert declaration.
 class StaticAssertDecl : public Decl {

Modified: cfe/trunk/include/clang/AST/DeclNodes.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclNodes.def?rev=80336&r1=80335&r2=80336&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/DeclNodes.def (original)
+++ cfe/trunk/include/clang/AST/DeclNodes.def Fri Aug 28 00:30:28 2009
@@ -111,6 +111,7 @@
     DECL(ClassTemplate, TemplateDecl)
     DECL(TemplateTemplateParm, TemplateDecl)
   DECL(Using, NamedDecl)
+  DECL(UnresolvedUsing, NamedDecl)
   DECL(ObjCMethod, NamedDecl)
   DECL(ObjCContainer, NamedDecl)
     DECL(ObjCCategory, ObjCContainerDecl)

Modified: cfe/trunk/lib/AST/DeclBase.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclBase.cpp?rev=80336&r1=80335&r2=80336&view=diff

==============================================================================
--- cfe/trunk/lib/AST/DeclBase.cpp (original)
+++ cfe/trunk/lib/AST/DeclBase.cpp Fri Aug 28 00:30:28 2009
@@ -191,6 +191,7 @@
     case OriginalParmVar:
     case NonTypeTemplateParm:
     case Using:
+    case UnresolvedUsing:
     case ObjCMethod:
     case ObjCContainer:
     case ObjCCategory:

Modified: cfe/trunk/lib/AST/DeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=80336&r1=80335&r2=80336&view=diff

==============================================================================
--- cfe/trunk/lib/AST/DeclCXX.cpp (original)
+++ cfe/trunk/lib/AST/DeclCXX.cpp Fri Aug 28 00:30:28 2009
@@ -832,6 +832,17 @@
       TargetNNS, IsTypeNameArg);
 }
 
+UnresolvedUsingDecl *UnresolvedUsingDecl::Create(ASTContext &C, DeclContext *DC,
+                                                 SourceLocation UsingLoc,
+                                                 SourceRange TargetNNR,
+                                                 NestedNameSpecifier *TargetNNS,
+                                                 SourceLocation TargetNameLoc,
+                                                 DeclarationName TargetName,
+                                                 bool IsTypeNameArg) {
+  return new (C) UnresolvedUsingDecl(DC, UsingLoc, TargetNNR, TargetNNS,
+                                     TargetNameLoc, TargetName, IsTypeNameArg);
+}
+
 StaticAssertDecl *StaticAssertDecl::Create(ASTContext &C, DeclContext *DC,
                                            SourceLocation L, Expr *AssertExpr,
                                            StringLiteral *Message) {





More information about the cfe-commits mailing list