Class dmd.attrib.ForwardingAttribDeclaration
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 STC.local
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 the ForwardingAttribDeclaration 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.
Fields
Name | Type | Description |
---|---|---|
cppnamespace
|
CPPNamespaceDeclaration | C++ namespace this symbol belongs to |
decl
|
dmd | Dsymbol's affected by this AttribDeclaration |
Methods
Name | Description |
---|---|
addMember
(sc, sds)
|
Lazily initializes the scope to forward to. |
newScope
(sc)
|
Use the ForwardingScopeDsymbol as the parent symbol for members. |
accept
(v)
|
|
addComment
(comment)
|
Add documentation comment to Dsymbol. Ignore NULL comments. |
addLocalClass
(aclasses)
|
|
arraySyntaxCopy
(a)
|
Do syntax copy of an array of Dsymbol's. |
createNewScope
(sc, stc, linkage, cppmangle, protection, explicitProtection, aligndecl, inlining)
|
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. |
factory
(classname)
|
Create instance of class specified by the fully qualified name classname. The class must either have no constructors or have a default constructor. |
followInstantiationContext
(p1, p2)
|
Returns true if any of the symbols p1 or p2 resides in the enclosing
instantiation scope of this .
|
getAccessModule
()
|
Determine which Module a Dsymbol is in, as far as access rights go. |
getModule
()
|
Determine which Module a Dsymbol is in. |
hasPointers
()
|
Is Dsymbol a variable that contains pointers? |
inNonRoot
()
|
Returns true if this symbol is defined in a non-root module without instantiation. |
isMember
()
|
Returns an AggregateDeclaration when toParent() is that. |
isMember2
()
|
Returns an AggregateDeclaration when toParent2() is that. |
isMemberDecl
()
|
Returns an AggregateDeclaration when toParentDecl() is that. |
isMemberLocal
()
|
Returns an AggregateDeclaration when toParentLocal() is that. |
oneMember
(ps, ident)
|
Determine if this symbol is only one. |
oneMembers
(members, ps, ident)
|
Same as Dsymbol::oneMember(), but look at an array of Dsymbols. |
opCmp
(o)
|
Compare with another Object obj. |
opEquals
(o)
|
Test whether this is equal to o .
The default implementation only compares by identity (using the is operator).
Generally, overrides for opEquals should attempt to compare objects by their contents.
|
pastMixin
()
|
pastMixin returns the enclosing symbol if this is a template mixin.
|
prot
()
|
|
search
(loc, ident, flags)
|
Search for ident as member of s. |
searchX
(loc, sc, id, flags)
|
Search for identifier id as a member of this .
id may be a template instance.
|
setScope
(sc)
|
Set scope for future semantic analysis so we can deal better with forward references. |
size
(loc)
|
|
syntaxCopy
(s)
|
Copy the syntax. Used for template instantiations. If s is NULL, allocate the new object, otherwise fill it in. |
toAlias
()
|
If this symbol is really an alias for another, return that other. If needed, semantic() is invoked due to resolve forward reference. |
toAlias2
()
|
Resolve recursive tuple expansion in eponymous template. |
toHash
()
|
Compute hash function for Object. |
toParent
()
|
parent field returns a lexically enclosing scope symbol this is a member of.
|
toParent2
()
|
parent field returns a lexically enclosing scope symbol this is a member of.
|
toParentDecl
()
|
parent field returns a lexically enclosing scope symbol this is a member of.
|
toParentLocal
()
|
parent field returns a lexically enclosing scope symbol this is a member of.
|
toParentP
(p1, p2)
|
Returns the declaration scope scope of this unless any of the symbols
p1 or p2 resides in its enclosing instantiation scope then the
latter is returned.
|
toString
()
|
|
toString
()
|
Convert Object to a human readable string. |