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.
ddmd.attrib
Compiler implementation of the
D programming language.
Authors:
License:
Source: attrib.d
- abstract class
AttribDeclaration
: ddmd.dsymbol.Dsymbol; -
- static Scope*
createNewScope
(Scope*sc
, StorageClassstc
, LINKlinkage
, CPPMANGLEcppmangle
, Protprotection
, intexplicitProtection
, AlignDeclarationaligndecl
, PINLINEinlining
); - Create a new scope if one or more given attributes are different from the
sc
's. If the returned scope !=sc
, the caller should pop the scope after it used. - Scope*
newScope
(Scope*sc
); - A hook point to supply scope for members. addMember, setScope, importAll, semantic, semantic2 and semantic3 will use this.
- final void
addLocalClass
(ClassDeclarations*aclasses
);
- class
StorageClassDeclaration
: ddmd.attrib.AttribDeclaration; - class
DeprecatedDeclaration
: ddmd.attrib.StorageClassDeclaration; -
- Scope*
newScope
(Scope*sc
); - Provides a new scope with STCdeprecated and Scope.depdecl setCalls StorageClassDeclaration.
newScope
(as it must be called or copied in any function overridingnewScope
), then set the Scope's depdecl.Returns:Always a new scope, to use for this DeprecatedDeclaration's members. - void
semantic2
(Scope*sc
); - Run the DeprecatedDeclaration's
semantic2
phase then its members.The message set via a DeprecatedDeclaration can be either of: - a string literal - an enum - a static immutable So we need to call ctfe to resolve it. Afterward forwards to the members'semantic2
.
- class
LinkDeclaration
: ddmd.attrib.AttribDeclaration; - class
CPPMangleDeclaration
: ddmd.attrib.AttribDeclaration; - class
ProtDeclaration
: ddmd.attrib.AttribDeclaration; -
- this(Loc
loc
, Protp
, Dsymbols*decl
); - Parameters:
Loc loc
source location of attribute token Prot p
protection attribute data Dsymbols* decl
declarations which are affected by this protection attribute - this(Loc
loc
, Identifiers*pkg_identifiers
, Dsymbols*decl
); - Parameters:
Loc loc
source location of attribute token Identifiers* pkg_identifiers
list of identifiers for a qualified package name Dsymbols* decl
declarations which are affected by this protection attribute
- class
AlignDeclaration
: ddmd.attrib.AttribDeclaration; - class
AnonDeclaration
: ddmd.attrib.AttribDeclaration; - class
PragmaDeclaration
: ddmd.attrib.AttribDeclaration; - class
ConditionalDeclaration
: ddmd.attrib.AttribDeclaration; - class
StaticIfDeclaration
: ddmd.attrib.ConditionalDeclaration; -
- Dsymbols*
include
(Scope*sc
, ScopeDsymbolsds
); - Different from other AttribDeclaration subclasses,
include
() call requires the completion of addMember and setScope phases.
- class
StaticForeachDeclaration
: ddmd.attrib.AttribDeclaration; - Static foreach at declaration scope, like: static foreach (i; [0, 1, 2]){ }
- StaticForeach
sfe
; - contains static foreach expansion logic
- ScopeDsymbol
scopesym
; - cached enclosing scope (mimics static if declaration)
- bool
cached
; - include can be called multiple times, but a static foreach should be expanded at most once. Achieved by caching the result of the first call. We need both
cached
and cache, because null is a valid value for cache.
- class
ForwardingAttribDeclaration
: ddmd.attrib.AttribDeclaration; - Collection of declarations that stores foreach index variables in a local symbol table. Other symbols declared within are forwarded to another scope, like:static foreach (i; 0 .. 10) // loop variables for different indices do not conflict. { // this body is expanded into 10 ForwardingAttribDeclarations, where i has storage class STClocal mixin("enum x" ~ to!string(i) ~ " = i"); // ok, can access current loop variable } static foreach (i; 0.. 10) { pragma(msg, mixin("x" ~ to!string(i))); // ok, all 10 symbols are visible as they were forwarded to the global scope } static assert (!is(typeof(i))); // loop index variable is not visible outside of the static foreach loop A StaticForeachDeclaration generates one
ForwardingAttribDeclaration
for each expansion of its body. The AST of theForwardingAttribDeclaration
contains both the `static foreach variables and the respective copy of the static foreach` body. The functionality is achieved by using a ForwardingScopeDsymbol as the parent symbol for the generated declarations.- Scope*
newScope
(Scope*sc
); - Use the ForwardingScopeDsymbol as the parent symbol for members.
- void
addMember
(Scope*sc
, ScopeDsymbolsds
); - Lazily initializes the scope to forward to.
- class
CompileDeclaration
: ddmd.attrib.AttribDeclaration; - Mixin declarations, like: mixin("int x");
- class
UserAttributeDeclaration
: ddmd.attrib.AttribDeclaration; - User defined attributes look like: @(args, ...)
Copyright © 1999-2017 by the D Language Foundation | Page generated by
Ddoc on (no date time)