Support nested classes (#4178) (#5778)

Signed-off-by: Kamil Rakoczy <[email protected]>
This commit is contained in:
Kamil Rakoczy
2025-02-17 23:47:41 +11:00
committed by GitHub
parent fbe8439eb8
commit c840ffb0ae
31 changed files with 664 additions and 23 deletions
+8 -2
View File
@@ -100,9 +100,15 @@ private:
if (local || prot) {
const auto refClassp = VN_CAST(m_modp, Class);
const char* how = nullptr;
if (local && defClassp && refClassp != defClassp) {
// Inner nested classes can access `local` or `protected` members of their outer class
const auto nestedAccess = [refClassp](const AstClass*, const AstNode* memberp) {
return memberp == refClassp;
};
if (local && defClassp
&& ((refClassp != defClassp) && !(defClassp->existsMember(nestedAccess)))) {
how = "'local'";
} else if (prot && defClassp && !AstClass::isClassExtendedFrom(refClassp, defClassp)) {
} else if (prot && defClassp && !AstClass::isClassExtendedFrom(refClassp, defClassp)
&& !(defClassp->existsMember(nestedAccess))) {
how = "'protected'";
}
if (how) {