Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Downloads
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Calendar
  - Forums
  - IRC
  - Community Discord
  - Wiki
  - GitHub
  - Issues
  - Get involved
  - Contributors
  - Foundation
  - Security Team
  - Donate
  - Sponsors
- Resources
  - Tour
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - run.dlang.io
  - Visual D
  - Acknowledgments
  - D Style
  - Glossary
  - Sitemap

Search
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

# dmd.access

Enforce visibility contrains such as public and private.

Specification Visibility Attributes

Authors:
Walter Bright
License:
Boost License 1.0

Source access.d

Documentation https://dlang.org/phobos/dmd_access.html

Coverage https://codecov.io/gh/dlang/dmd/src/master/src/dmd/access.d

bool `checkAccess`(AggregateDeclaration `ad`, Loc `loc`, Scope* `sc`, Dsymbol `smember`);
  Do access check for member of this class, this class being the type of the 'this' pointer used to access smember. Returns true if the member is not accessible.
bool `checkAccess`(Loc `loc`, Scope* `sc`, Expression `e`, Declaration `d`);
  Check access to d for expression e.d Returns true if the declaration is not accessible.
bool `checkAccess`(Scope* `sc`, Package `p`);
  Check access to package/module `p` from scope `sc`.
  Parameters:

  Scope* `sc` | scope from which to access to a fully qualified package name
  Package `p` | the package/module to check access for

  Returns:
  true if the package is not accessible.
  Because a global symbol table tree is used for imported packages/modules, access to them needs to be checked based on the imports in the scope chain (see https://issues.dlang.org/show_bug.cgi?id=313).
bool `symbolIsVisible`(Module `mod`, Dsymbol `s`);
  Check whether symbols `s` is visible in `mod`.
  Parameters:

  Module `mod` | lookup origin
  Dsymbol `s` | symbol to check for visibility

  Returns:
  true if s is visible in mod
bool `symbolIsVisible`(Dsymbol `origin`, Dsymbol `s`);
  Same as above, but determines the lookup module from symbols `origin`.
bool `symbolIsVisible`(Scope* `sc`, Dsymbol `s`);
  Same as above but also checks for protected symbols visible from scope `sc`. Used for qualified name lookup.
  Parameters:

  Scope* `sc` | lookup scope
  Dsymbol `s` | symbol to check for visibility

  Returns:
  true if s is visible by origin
bool `checkSymbolAccess`(Scope* `sc`, Dsymbol `s`);
  Check if a symbol is visible from a given scope without taking into account the most visible overload.
  Parameters:

  Scope* `sc` | lookup scope
  Dsymbol `s` | symbol to check for visibility

  Returns:
  true if s is visible by origin
Dsymbol `mostVisibleOverload`(Dsymbol `s`, Module `mod` = null);
  Use the most visible overload to check visibility. Later perform an access check on the resolved overload. This function is similar to overloadApply, but doesn't recurse nor resolve aliases because protection/visibility is an attribute of the alias not the aliasee.

Copyright © 1999-2020 by the D Language Foundation | Page generated by Ddoc on Sat Aug 15 10:00:52 2020