forked from OSchip/llvm-project
parent
b53c03be8a
commit
f2ca389205
|
@ -1480,8 +1480,8 @@ public:
|
|||
|
||||
VirtSpecifiers() : Specifiers(0) { }
|
||||
|
||||
bool SetVirtSpecifier(VirtSpecifier VS, SourceLocation Loc,
|
||||
const char *&PrevSpec);
|
||||
bool SetSpecifier(VirtSpecifier VS, SourceLocation Loc,
|
||||
const char *&PrevSpec);
|
||||
|
||||
bool isOverrideSpecified() const { return Specifiers & VS_Override; }
|
||||
SourceLocation getOverrideLoc() const { return VS_overrideLoc; }
|
||||
|
@ -1512,6 +1512,9 @@ public:
|
|||
|
||||
ClassVirtSpecifiers() : Specifiers(0) { }
|
||||
|
||||
bool SetSpecifier(ClassVirtSpecifier CVS, SourceLocation Loc,
|
||||
const char *&PrevSpec);
|
||||
|
||||
bool isFinalSpecified() const { return Specifiers & CVS_Final; }
|
||||
SourceLocation getFinalLoc() const { return CVS_finalLoc; }
|
||||
|
||||
|
|
|
@ -1308,7 +1308,7 @@ void Parser::ParseOptionalCXX0XVirtSpecifierSeq(VirtSpecifiers &VS) {
|
|||
// C++ [class.mem]p8:
|
||||
// A virt-specifier-seq shall contain at most one of each virt-specifier.
|
||||
const char* PrevSpec = 0;
|
||||
if (VS.SetVirtSpecifier(Specifier, Tok.getLocation(), PrevSpec))
|
||||
if (VS.SetSpecifier(Specifier, Tok.getLocation(), PrevSpec))
|
||||
Diag(Tok.getLocation(), diag::err_duplicate_virt_specifier)
|
||||
<< PrevSpec
|
||||
<< FixItHint::CreateRemoval(Tok.getLocation());
|
||||
|
|
|
@ -669,8 +669,8 @@ void UnqualifiedId::setOperatorFunctionId(SourceLocation OperatorLoc,
|
|||
}
|
||||
}
|
||||
|
||||
bool VirtSpecifiers::SetVirtSpecifier(VirtSpecifier VS, SourceLocation Loc,
|
||||
const char *&PrevSpec) {
|
||||
bool VirtSpecifiers::SetSpecifier(VirtSpecifier VS, SourceLocation Loc,
|
||||
const char *&PrevSpec) {
|
||||
if (Specifiers & VS) {
|
||||
PrevSpec = getSpecifierName(VS);
|
||||
return true;
|
||||
|
@ -684,6 +684,7 @@ bool VirtSpecifiers::SetVirtSpecifier(VirtSpecifier VS, SourceLocation Loc,
|
|||
case VS_Final: VS_finalLoc = Loc; break;
|
||||
case VS_New: VS_newLoc = Loc; break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -695,3 +696,31 @@ const char *VirtSpecifiers::getSpecifierName(VirtSpecifier VS) {
|
|||
case VS_New: return "new";
|
||||
}
|
||||
}
|
||||
|
||||
bool ClassVirtSpecifiers::SetSpecifier(ClassVirtSpecifier CVS,
|
||||
SourceLocation Loc,
|
||||
const char *&PrevSpec) {
|
||||
if (Specifiers & CVS) {
|
||||
PrevSpec = getSpecifierName(CVS);
|
||||
return true;
|
||||
}
|
||||
|
||||
Specifiers |= CVS;
|
||||
|
||||
switch (CVS) {
|
||||
default: assert(0 && "Unknown specifier!");
|
||||
case CVS_Final: CVS_finalLoc = Loc; break;
|
||||
case CVS_Explicit: CVS_explicitLoc = Loc; break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *ClassVirtSpecifiers::getSpecifierName(ClassVirtSpecifier CVS) {
|
||||
switch (CVS) {
|
||||
default: assert(0 && "Unknown specifier");
|
||||
case CVS_Final: return "final";
|
||||
case CVS_Explicit: return "explicit";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue