diff options
Diffstat (limited to 'lib/AST/NestedNameSpecifier.cpp')
-rw-r--r-- | lib/AST/NestedNameSpecifier.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/AST/NestedNameSpecifier.cpp b/lib/AST/NestedNameSpecifier.cpp new file mode 100644 index 0000000000..318c05fe7c --- /dev/null +++ b/lib/AST/NestedNameSpecifier.cpp @@ -0,0 +1,34 @@ +//===--- NestedNameSpecifier.cpp - C++ nested name specifiers -----*- C++ -*-=// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the NestedNameSpecifier class, which represents +// a C++ nested-name-specifier. +// +//===----------------------------------------------------------------------===// +#include "clang/AST/NestedNameSpecifier.h" +#include "clang/AST/ASTContext.h" +#include "clang/AST/Decl.h" +#include "clang/AST/Type.h" +using namespace clang; + +DeclContext * +NestedNameSpecifier::computeDeclContext(ASTContext &Context) const { + // The simple case: we're storing a DeclContext + if ((Data & 0x01) == 0) + return reinterpret_cast<DeclContext *>(Data); + + Type *T = getAsType(); + if (!T) + return 0; + + // Retrieve the DeclContext associated with this type. + const TagType *TagT = T->getAsTagType(); + assert(TagT && "No DeclContext from a non-tag type"); + return TagT->getDecl(); +} |