Implement SE-0117.

One minor revision: this lifts the proposed restriction against
overriding a non-open method with an open one.  On reflection,
that was inconsistent with the existing rule permitting non-public
methods to be overridden with public ones.  The restriction on
subclassing a non-open class with an open class remains, and is
in fact consistent with the existing access rule.
This commit is contained in:
John McCall
2016-07-29 14:49:04 -07:00
parent 328866ace9
commit afdda3d107
67 changed files with 1234 additions and 903 deletions

View File

@@ -1546,6 +1546,7 @@ static uint8_t getRawStableAccessibility(Accessibility access) {
CASE(FilePrivate)
CASE(Internal)
CASE(Public)
CASE(Open)
#undef CASE
}
}
@@ -3777,7 +3778,7 @@ static void writeDeclCommentTable(
// we want to take the testability state into account
// and emit documentation if and only if they are visible to clients
// (which means public ordinarily, but public+internal when testing enabled).
if (VD->getEffectiveAccess() != Accessibility::Public)
if (VD->getEffectiveAccess() < Accessibility::Public)
return true;
}