On 2014-06-08 17:37, Dicebot wrote:
Finally got to cleanup and submit this PR:
https://github.com/D-Programming-Language/dmd/pull/3651
While proposed change is very small (and backwards-compatible)
and not worth separate DIP, it is still a language change and
needs community approval.
Copy of description:
========================================
Currently there is no way to use package protection attribute
with deeply nested package hierarchy, forcing to either use flat
one or public protection. This is one of blocking issues for
further usage of package.d in Phobos and one of reasons why
namespace hacks are so popular.
For example, if helpers in std.internal will be marked as
package, only std.internal will be able to access those, but not
rest of std. This PR fixes it by allowing package(<pkgname>)
syntax to explicitly define owning package.
This new syntax will work:
---
module std.internal.mod1;
package(std) void foo() {}
module std.mod2;
---
import std.internal.mod2;
void bar() { foo(); }
----
Exact semantics can are described by added "protection" tests to
test/compilable (last commit in this PR).
Plain package behavior is unchanged and thus no breaking changes
introduced.
Is the idea that anything nested in the specified package has access to
the symbol?
--
/Jacob Carlborg