Verse 28.10 Access Specifier Regression: <public> members of <internal> classes are now considered <internal> if referenced from a <public> class which has inherited the <internal> class

Please select what you are reporting on:

Verse

What Type of Bug are you experiencing?

Verse

Summary

Data and Functions which are access specified as public and which are within an internal access specified scope are now considered internal instead of public when referenced via an inheriting public class.

Steps to Reproduce

Example Code:

ModuleA<public> := module:
    # Hidden Implementation detail in internal_parent_class
    internal_parent_class<internal> := class:
        Value<public>:int

    # Public surface in public_parent_class
    public_parent_class<public> := class(internal_parent_class):

ModuleB<public> := module:
    using {ModuleA}
    # Child class utilizes public surface in public_parent_class
    child_class<public> := class(public_parent_class):
        GetValue():int = Value

Expected Result

28.01 behavior: this will compile.

Observed Result

28.10 behavior: this will not compile.
Script error 3593: "Invalid access of public data (/localhost/VerseTesting/ModuleA/internal_parent_class:)Value from function /localhost/VerseTesting/ModuleB/child_class/GetValue.

Platform(s)

Windows

Additional Notes

If this change is intended, please publish a notice in the relevant patch notes as it has caused our project to fail to compile on load, which is not a good developer experience when downloading a new update without at least one version in which this would be a compiler warning.

Moreover, please improve compiler error 3593; the enclosing scope in the scope hierarchy which is internal should be listed to clarify why accessing an otherwise public data/function/module is invalid.

The status of UCB-1239 incident has been moved from ‘Awaiting Validation’ to ‘Needs Triage’.