aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2011-01-22 15:11:37 +0000
committerAnders Carlsson <andersca@mac.com>2011-01-22 15:11:37 +0000
commitc46bb7d098bf9e9f0258bf2bb97d8f0f7d382288 (patch)
treea1731f9a8ca5e5d19d0f75684f545f46973b605f
parentf1602a56f89ac48aa1b5bce42f07ee795e674a6f (diff)
Start stubbing out a ClassVirtSpecifiers class.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124032 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Sema/DeclSpec.h27
-rw-r--r--lib/Sema/DeclSpec.cpp17
2 files changed, 34 insertions, 10 deletions
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";
+ }
+}