[cfe-commits] r112177 - in /cfe/trunk: include/clang/AST/DeclBase.h include/clang/AST/ExternalASTSource.h include/clang/Sema/Sema.h lib/Sema/SemaAttr.cpp lib/Sema/SemaDeclCXX.cpp
John McCall
rjmccall at apple.com
Thu Aug 26 02:15:37 PDT 2010
Author: rjmccall
Date: Thu Aug 26 04:15:37 2010
New Revision: 112177
URL: http://llvm.org/viewvc/llvm-project?rev=112177&view=rev
Log:
Move things around so that Sema.h no longer depends on even DeclBase.h.
It still depends on Type because DeclarationName.h does.
Modified:
cfe/trunk/include/clang/AST/DeclBase.h
cfe/trunk/include/clang/AST/ExternalASTSource.h
cfe/trunk/include/clang/Sema/Sema.h
cfe/trunk/lib/Sema/SemaAttr.cpp
cfe/trunk/lib/Sema/SemaDeclCXX.cpp
Modified: cfe/trunk/include/clang/AST/DeclBase.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=112177&r1=112176&r2=112177&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclBase.h (original)
+++ cfe/trunk/include/clang/AST/DeclBase.h Thu Aug 26 04:15:37 2010
@@ -642,6 +642,25 @@
virtual void print(llvm::raw_ostream &OS) const;
};
+class DeclContextLookupResult : public std::pair<NamedDecl**,NamedDecl**> {
+public:
+ DeclContextLookupResult(NamedDecl **I, NamedDecl **E) : pair(I, E) {}
+ DeclContextLookupResult() : pair() {}
+
+ using pair::operator=;
+};
+
+class DeclContextLookupConstResult
+ : public std::pair<NamedDecl*const*, NamedDecl*const*> {
+public:
+ DeclContextLookupConstResult(std::pair<NamedDecl**,NamedDecl**> R)
+ : pair(R) {}
+ DeclContextLookupConstResult(NamedDecl * const *I, NamedDecl * const *E)
+ : pair(I, E) {}
+ DeclContextLookupConstResult() : pair() {}
+
+ using pair::operator=;
+};
/// DeclContext - This is used only as base class of specific decl types that
/// can act as declaration contexts. These decls are (only the top classes
@@ -1063,9 +1082,8 @@
/// access to the results of lookup up a name within this context.
typedef NamedDecl * const * lookup_const_iterator;
- typedef std::pair<lookup_iterator, lookup_iterator> lookup_result;
- typedef std::pair<lookup_const_iterator, lookup_const_iterator>
- lookup_const_result;
+ typedef DeclContextLookupResult lookup_result;
+ typedef DeclContextLookupConstResult lookup_const_result;
/// lookup - Find the declarations (if any) with the given Name in
/// this context. Returns a range of iterators that contains all of
@@ -1173,7 +1191,6 @@
getKind() == TemplateTemplateParm;
}
-
// Specialization selected when ToTy is not a known subclass of DeclContext.
template <class ToTy,
bool IsKnownSubtype = ::llvm::is_base_of< DeclContext, ToTy>::value>
Modified: cfe/trunk/include/clang/AST/ExternalASTSource.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExternalASTSource.h?rev=112177&r1=112176&r2=112177&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/ExternalASTSource.h (original)
+++ cfe/trunk/include/clang/AST/ExternalASTSource.h Thu Aug 26 04:15:37 2010
@@ -14,16 +14,23 @@
#ifndef LLVM_CLANG_AST_EXTERNAL_AST_SOURCE_H
#define LLVM_CLANG_AST_EXTERNAL_AST_SOURCE_H
-#include "clang/AST/DeclarationName.h"
-#include "clang/AST/DeclBase.h"
-#include "clang/AST/Type.h"
-#include "llvm/ADT/SmallVector.h"
#include <cassert>
#include <vector>
+
+namespace llvm {
+template <class T> class SmallVectorImpl;
+}
+
namespace clang {
class ASTConsumer;
+class Decl;
+class DeclContext;
+class DeclContextLookupResult;
+class DeclarationName;
class ExternalSemaSource; // layering violation required for downcasting
+class NamedDecl;
+class Selector;
class Stmt;
/// \brief Abstract interface for external sources of AST nodes.
@@ -90,7 +97,7 @@
/// Generally the final step of this method is either to call
/// SetExternalVisibleDeclsForName or to recursively call lookup on
/// the DeclContext after calling SetExternalVisibleDecls.
- virtual DeclContext::lookup_result
+ virtual DeclContextLookupResult
FindExternalVisibleDeclsByName(const DeclContext *DC,
DeclarationName Name) = 0;
@@ -135,17 +142,17 @@
virtual void PrintStats();
protected:
- static DeclContext::lookup_result
+ static DeclContextLookupResult
SetExternalVisibleDeclsForName(const DeclContext *DC,
DeclarationName Name,
llvm::SmallVectorImpl<NamedDecl*> &Decls);
- static DeclContext::lookup_result
+ static DeclContextLookupResult
SetNoExternalVisibleDeclsForName(const DeclContext *DC,
DeclarationName Name);
void MaterializeVisibleDeclsForName(const DeclContext *DC,
- DeclarationName Name,
+ DeclarationName Name,
llvm::SmallVectorImpl<NamedDecl*> &Decls);
};
Modified: cfe/trunk/include/clang/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=112177&r1=112176&r2=112177&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/Sema.h (original)
+++ cfe/trunk/include/clang/Sema/Sema.h Thu Aug 26 04:15:37 2010
@@ -20,7 +20,6 @@
#include "clang/Sema/IdentifierResolver.h"
#include "clang/Sema/ObjCMethodList.h"
#include "clang/AST/OperationKinds.h"
-#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclarationName.h"
#include "clang/AST/ExternalASTSource.h"
#include "llvm/ADT/OwningPtr.h"
@@ -65,11 +64,13 @@
class DeclSpec;
class DeclaratorDecl;
class DeducedTemplateArgument;
+ class DependentDiagnostic;
class DesignatedInitExpr;
class EnumConstantDecl;
class Expr;
class ExtVectorType;
class ExternalSemaSource;
+ class FormatAttr;
class FriendDecl;
class FullExpr;
class FunctionDecl;
@@ -87,6 +88,7 @@
class LookupResult;
class MultiLevelTemplateArgumentList;
class NamedDecl;
+ class NonNullAttr;
class ObjCCategoryDecl;
class ObjCCategoryImplDecl;
class ObjCCompatibleAliasDecl;
@@ -128,6 +130,7 @@
class UsingShadowDecl;
class ValueDecl;
class VarDecl;
+ class VisibilityAttr;
class VisibleDeclConsumer;
namespace sema {
@@ -1204,7 +1207,8 @@
void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,
QualType T1, QualType T2,
UnresolvedSetImpl &Functions);
- DeclContext::lookup_result LookupConstructors(CXXRecordDecl *Class);
+
+ DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class);
CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class);
void ArgumentDependentLookup(DeclarationName Name, bool Operator,
@@ -3768,15 +3772,14 @@
/// FreePackedContext - Deallocate and null out PackContext.
void FreePackedContext();
+ /// PushVisibilityAttr - Note that we've entered a context with a
+ /// visibility attribute.
+ void PushVisibilityAttr(const VisibilityAttr *Attr);
+
/// AddPushedVisibilityAttribute - If '#pragma GCC visibility' was used,
/// add an appropriate visibility attribute.
void AddPushedVisibilityAttribute(Decl *RD);
- /// PushPragmaVisibility - Push the top element of the visibility stack; used
- /// for '#pragma GCC visibility' and visibility attributes on namespaces.
- void PushPragmaVisibility(VisibilityAttr::VisibilityType type,
- SourceLocation loc);
-
/// PopPragmaVisibility - Pop the top element of the visibility stack; used
/// for '#pragma GCC visibility' and visibility attributes on namespaces.
void PopPragmaVisibility();
Modified: cfe/trunk/lib/Sema/SemaAttr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaAttr.cpp?rev=112177&r1=112176&r2=112177&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaAttr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaAttr.cpp Thu Aug 26 04:15:37 2010
@@ -315,6 +315,16 @@
VisContext = 0;
}
+static void PushPragmaVisibility(Sema &S, VisibilityAttr::VisibilityType type,
+ SourceLocation loc) {
+ // Put visibility on stack.
+ if (!S.VisContext)
+ S.VisContext = new VisStack;
+
+ VisStack *Stack = static_cast<VisStack*>(S.VisContext);
+ Stack->push_back(std::make_pair(type, loc));
+}
+
void Sema::ActOnPragmaVisibility(bool IsPush, const IdentifierInfo* VisType,
SourceLocation PragmaLoc) {
if (IsPush) {
@@ -333,20 +343,14 @@
VisType->getName();
return;
}
- PushPragmaVisibility(type, PragmaLoc);
+ PushPragmaVisibility(*this, type, PragmaLoc);
} else {
PopPragmaVisibility();
}
}
-void Sema::PushPragmaVisibility(VisibilityAttr::VisibilityType type,
- SourceLocation loc) {
- // Put visibility on stack.
- if (!VisContext)
- VisContext = new VisStack;
-
- VisStack *Stack = static_cast<VisStack*>(VisContext);
- Stack->push_back(std::make_pair(type, loc));
+void Sema::PushVisibilityAttr(const VisibilityAttr *Attr) {
+ PushPragmaVisibility(*this, Attr->getVisibility(), Attr->getLocation());
}
void Sema::PopPragmaVisibility() {
Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=112177&r1=112176&r2=112177&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Thu Aug 26 04:15:37 2010
@@ -3277,13 +3277,15 @@
// Namespace Handling
//===----------------------------------------------------------------------===//
+
+
/// ActOnStartNamespaceDef - This is called at the start of a namespace
/// definition.
Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
- SourceLocation IdentLoc,
- IdentifierInfo *II,
- SourceLocation LBrace,
- AttributeList *AttrList) {
+ SourceLocation IdentLoc,
+ IdentifierInfo *II,
+ SourceLocation LBrace,
+ AttributeList *AttrList) {
// anonymous namespace starts at its left brace
NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext,
(II ? IdentLoc : LBrace) , II);
@@ -3294,7 +3296,7 @@
ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
if (const VisibilityAttr *attr = Namespc->getAttr<VisibilityAttr>())
- PushPragmaVisibility(attr->getVisibility(), attr->getLocation());
+ PushVisibilityAttr(attr);
if (II) {
// C++ [namespace.def]p2:
More information about the cfe-commits
mailing list