From: Anders Carlsson Date: Sat, 22 Jan 2011 15:11:37 +0000 (+0000) Subject: Start stubbing out a ClassVirtSpecifiers class. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c46bb7d098bf9e9f0258bf2bb97d8f0f7d382288;p=clang Start stubbing out a ClassVirtSpecifiers class. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124032 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Sema/DeclSpec.h b/include/clang/Sema/DeclSpec.h index 0f8624f0a3..7d5b8b41c8 100644 --- a/include/clang/Sema/DeclSpec.h +++ b/include/clang/Sema/DeclSpec.h @@ -1468,7 +1468,7 @@ struct FieldDeclarator { } }; -/// +/// VirtSpecifiers - Represents a C++0x virt-specifier-seq. class VirtSpecifiers { public: enum VirtSpecifier { @@ -1501,6 +1501,31 @@ private: }; +/// ClassVirtSpecifiers - Represents a C++0x class-virt-specifier-seq. +class ClassVirtSpecifiers { +public: + enum ClassVirtSpecifier { + CVS_None = 0, + CVS_Final = 1, + CVS_Explicit = 2 + }; + + ClassVirtSpecifiers() : Specifiers(0) { } + + bool isFinalSpecified() const { return Specifiers & CVS_Final; } + SourceLocation getFinalLoc() const { return CVS_finalLoc; } + + bool isExplicitSpecified() const { return Specifiers & CVS_Explicit; } + SourceLocation getExplicitLoc() const { return CVS_explicitLoc; } + +private: + unsigned Specifiers; + + SourceLocation CVS_finalLoc, CVS_explicitLoc; + + static const char *getSpecifierName(ClassVirtSpecifier CVS); +}; + } // end namespace clang #endif diff --git a/lib/Sema/DeclSpec.cpp b/lib/Sema/DeclSpec.cpp index 5ead0c5f13..3facfac7a3 100644 --- a/lib/Sema/DeclSpec.cpp +++ b/lib/Sema/DeclSpec.cpp @@ -669,15 +669,6 @@ void UnqualifiedId::setOperatorFunctionId(SourceLocation OperatorLoc, } } -const char *VirtSpecifiers::getSpecifierName(VirtSpecifier VS) { - switch (VS) { - default: assert(0 && "Unknown specifier"); - case VS_Override: return "override"; - case VS_Final: return "final"; - case VS_New: return "new"; - } -} - bool VirtSpecifiers::SetVirtSpecifier(VirtSpecifier VS, SourceLocation Loc, const char *&PrevSpec) { if (Specifiers & VS) { @@ -696,3 +687,11 @@ bool VirtSpecifiers::SetVirtSpecifier(VirtSpecifier VS, SourceLocation Loc, return false; } +const char *VirtSpecifiers::getSpecifierName(VirtSpecifier VS) { + switch (VS) { + default: assert(0 && "Unknown specifier"); + case VS_Override: return "override"; + case VS_Final: return "final"; + case VS_New: return "new"; + } +}