dmd.dsymbol
The base class for a D symbol, which can be a module, variable, function, enum, etc.
License
Source: dsymbol.d
Documentation: https://dlang.org/phobos/dmd_dsymbol.html
-
Declaration
int
foreachDsymbol
(Dsymbols*symbols
, scope int delegate(Dsymbol)dg
);Calls
dg
(Dsymbol *sym) for each Dsymbol. Ifdg
returns !=0, stops and returns that value else returns 0.Parameters
Dsymbols*
symbols
Dsymbols
int delegate(Dsymbol)
dg
delegate to call for each Dsymbol
Return Value
last value returned by
dg
()See Also
-
Declaration
void
foreachDsymbol
(Dsymbols*symbols
, scope void delegate(Dsymbol)dg
);Calls
dg
(Dsymbol *sym) for each Dsymbol.Parameters
Dsymbols*
symbols
Dsymbols
void delegate(Dsymbol)
dg
delegate to call for each Dsymbol
See Also
-
Declaration
struct
FieldState
;Struct/Class/Union field state. Used for transitory information when setting field offsets, such as bit fields.
-
Declaration
uint
offset
;byte
offset
for next field -
Declaration
uint
fieldOffset
;byte offset for the start of the bit field
-
Declaration
uint
fieldSize
;byte size of field
-
Declaration
uint
fieldAlign
;byte alignment of field
-
Declaration
uint
bitOffset
;bit offset for field
-
Declaration
bool
inFlight
;bit field is in flight
-
-
Declaration
class
Dsymbol
: dmd.ast_node.ASTNode;-
Declaration
CPPNamespaceDeclaration
cppnamespace
;C++ namespace this symbol belongs to
-
Declaration
ushort
localNum
;perturb mangled name to avoid collisions with those in FuncDeclaration.localsymtab
-
Declaration
final Module
getModule
();Determine which Module a Dsymbol is in.
-
Declaration
final bool
isCsymbol
();Does this Dsymbol come from a C file?
Return Value
true
if it does -
Declaration
final Module
getAccessModule
();Determine which Module a Dsymbol is in, as far as access rights go.
-
Declaration
final inout inout(Dsymbol)
pastMixin
();
returns the enclosing symbol if this is a template mixin.pastMixin
Discussion
pastMixinAndNspace
does likewise, additionally skipping over Nspaces that are mangleOnly.
See alsoparent
,toParent
andtoParent2
. -
Declaration
final inout inout(Dsymbol)
toParent
();
final inout inout(Dsymbol)toParent2
();
final inout inout(Dsymbol)toParentDecl
();
final inout inout(Dsymbol)toParentLocal
();parent
field returns a lexically enclosing scope symbol this is a member of.Discussion
returns a logically enclosing scope symbol this is a member of. It skips over TemplateMixin's.toParent
()
returns an enclosing scope symbol this is living at runtime. It skips over both TemplateInstance's and TemplateMixin's. It's used when looking for the 'this' pointer of the enclosing function/class.toParent2
()
similar totoParentDecl
()
but always follows the template declaration scope instead of the instantiation scope.toParent2
()
similar totoParentLocal
()
but follows the instantiation scope if a template declaration is non-local i.e. global or static.toParentDecl
()Examples
module mod; template Foo(alias a) { mixin Bar!(); } mixin template Bar() { public { // VisibilityDeclaration void baz() { a = 2; } } } void test() { int v = 1; alias foo = Foo!(v); foo.baz(); assert(v == 2); } // s == FuncDeclaration('mod.test.Foo!().Bar!().baz()') // s.parent == TemplateMixin('mod.test.Foo!().Bar!()') // s.toParent() == TemplateInstance('mod.test.Foo!()') // s.toParent2() == FuncDeclaration('mod.test') // s.toParentDecl() == Module('mod') // s.toParentLocal() == FuncDeclaration('mod.test')
-
Declaration
final Dsymbol
toParentP
(Dsymbolp1
, Dsymbolp2
= null);Returns the declaration scope scope of
this
unless any of the symbols
orp1
resides in its enclosing instantiation scope then the latter is returned.p2
-
Declaration
final bool
followInstantiationContext
(Dsymbolp1
, Dsymbolp2
= null);Returns
true
if any of the symbols
orp1
resides in the enclosing instantiation scope ofp2
this
. -
Declaration
static Dsymbols*
arraySyntaxCopy
(Dsymbols*a
);Do syntax copy of an array of Dsymbol's.
-
Declaration
Dsymbol
toAlias
();If this symbol is really an alias for another, return that other. If needed, semantic() is invoked due to resolve forward reference.
-
Declaration
Dsymbol
toAlias2
();Resolve recursive tuple expansion in eponymous template.
-
Declaration
void
setScope
(Scope*sc
);Set scope for future semantic analysis so we can deal better with forward references.
-
Declaration
Dsymbol
search
(const ref Locloc
, Identifierident
, intflags
= IgnoreNone);Search for
ident
as member of s.Parameters
Loc
loc
location to print for error messages
Identifier
ident
identifier to
search
forint
flags
IgnoreXXXX
Return Value
null
if not found -
Declaration
final Dsymbol
searchX
(const ref Locloc
, Scope*sc
, RootObjectid
, intflags
);Search for identifier
id
as a member ofthis
.
may be a template instance.id
Parameters
Loc
loc
location to print the error messages
Scope*
sc
the scope where the symbol is located
RootObject
id
the
id
of the symbolint
flags
the search
flags
which can beSearchLocalsOnly
orIgnorePrivateImports
Return Value
symbol found, NULL if not
-
Declaration
d_uns64
size
(const ref Locloc
);Return Value
SIZE_INVALID when the
size
cannot be determined -
Declaration
final inout inout(AggregateDeclaration)
isMember
();Returns an AggregateDeclaration when toParent() is that.
-
Declaration
final inout inout(AggregateDeclaration)
isMember2
();Returns an AggregateDeclaration when toParent2() is that.
-
Declaration
final inout inout(AggregateDeclaration)
isMemberDecl
();Returns an AggregateDeclaration when toParentDecl() is that.
-
Declaration
final inout inout(AggregateDeclaration)
isMemberLocal
();Returns an AggregateDeclaration when toParentLocal() is that.
-
Declaration
pure nothrow @nogc @safe Visibility
visible
(); -
Declaration
Dsymbol
syntaxCopy
(Dsymbols
);Copy the syntax. Used for template instantiations. If
s
is NULL, allocate the new object, otherwise fill it in. -
Declaration
bool
oneMember
(Dsymbol*ps
, Identifierident
);Determine if this symbol is only one.
Return Value
false
, *ps
= NULL: There are 2 or more symbolstrue
, *ps
= NULL: There are zero symbolstrue
, *ps
= symbol: The one and only one symbol -
Declaration
static bool
oneMembers
(Dsymbols*members
, Dsymbol*ps
, Identifierident
);Same as Dsymbol::oneMember(), but look at an array of Dsymbols.
-
Declaration
bool
hasPointers
();Is Dsymbol a variable that contains pointers?
-
Declaration
void
addComment
(const(char)*comment
);Add documentation
comment
to Dsymbol. Ignore NULL comments. -
Declaration
final bool
inNonRoot
();Returns
true
if this symbol is defined in a non-root module without instantiation. -
Declaration
void
accept
(Visitorv
);
-
-
Declaration
class
ScopeDsymbol
: dmd.dsymbol.Dsymbol;Dsymbol that generates a scope
-
Declaration
Dsymbol
search
(const ref Locloc
, Identifierident
, intflags
= SearchLocalsOnly);This function is #1 on the list of functions that eat cpu time. Be very, very careful about slowing it down.
-
Declaration
final FuncDeclaration
findGetMembers
();Look for member of the form: const(MemberInfo)[] getMembers(string); Returns NULL if not found
-
Declaration
Dsymbol
symtabInsert
(Dsymbols
);Insert Dsymbol in table.
Parameters
Dsymbol
s
symbol to add
Return Value
null
if already in table,
if inserteds
-
Declaration
Dsymbol
symtabLookup
(Dsymbols
, Identifierid
);Look up identifier in symbol table.
Parameters
Dsymbol
s
symbol
Identifier
id
identifier to look up
Return Value
Dsymbol if found,
null
if not -
Declaration
bool
hasStaticCtorOrDtor
();Return
true
if any of the members are static ctors or static dtors, or if any members have members that are. -
Declaration
static int
_foreach
(Scope*sc
, Dsymbols*members
, scope ForeachDgdg
, size_t*pn
= null);Expands attribute declarations in
members
in depth first order. Callsdg
(size_t symidx, Dsymbol *sym) for each member. Ifdg
returns !=0, stops and returns that value else returns 0. Use this function to avoid the O(N + N^2/2) complexity of calculating dim and calling N times getNth.Return Value
last value returned by
dg
()
-
-
Declaration
class
WithScopeSymbol
: dmd.dsymbol.ScopeDsymbol;With statement scope
-
Declaration
class
ArrayScopeSymbol
: dmd.dsymbol.ScopeDsymbol;Array Index/Slice scope
-
Declaration
Dsymbol
search
(const ref Locloc
, Identifierident
, intflags
= IgnoreNone);This override is used to solve
$
-
-
Declaration
class
OverloadSet
: dmd.dsymbol.Dsymbol;Overload Sets
-
Declaration
class
ForwardingScopeDsymbol
: dmd.dsymbol.ScopeDsymbol;Forwarding ScopeDsymbol. Used by ForwardingAttribDeclaration and ForwardingScopeDeclaration to forward symbol insertions to another scope. See
dmd.attrib.ForwardingAttribDeclaration
for more details.-
Declaration
ScopeDsymbol
forward
;Symbol to
forward
insertions to. Can benull
before being lazily initialized. -
Declaration
Dsymbol
symtabLookup
(Dsymbols
, Identifierid
);This override handles the following two cases: static foreach (i, i; [0]) { ... } and static foreach (i; [0]) { enum i = 2; }
-
-
Declaration
class
ExpressionDsymbol
: dmd.dsymbol.Dsymbol;Class that holds an expression in a Dsymbol wrapper. This is not an AST node, but a class used to pass an expression as a function parameter of type Dsymbol.
-
Declaration
class
AliasAssign
: dmd.dsymbol.Dsymbol;Encapsulate assigning to an alias:
identifier = type;
identifier = symbol;
whereidentifier
is an AliasDeclaration in scope.-
Declaration
Identifier
ident
;Dsymbol's
ident
will benull
, as this class is anonymous -
Declaration
Type
type
;replace previous RHS of AliasDeclaration with
type
-
Declaration
Dsymbol
aliassym
;replace previous RHS of AliasDeclaration with
aliassym
-
Declaration
this(const ref Loc
loc
, Identifierident
, Typetype
, Dsymbolaliassym
);only one of
type
andaliassym
can be !=null
-
-
Declaration
class
DsymbolTable
: dmd.root.rootobject.RootObject;Table of Dsymbol's
-
Declaration
Dsymbol
lookup
(const Identifierident
);Look up Identifier in symbol table
Parameters
Identifier
ident
identifer to look up
Return Value
Dsymbol if found,
null
if not -
Declaration
void
update
(Dsymbols
);Replace existing symbol in symbol table with
. If it's
s
not there, add it.Parameters
Dsymbol
s
replacement symbol with same identifier
-
Declaration
Dsymbol
insert
(Dsymbols
);Insert Dsymbol in table.
Parameters
Dsymbol
s
symbol to add
Return Value
null
if already in table,
if inserteds
-
Declaration
Dsymbol
insert
(const Identifierident
, Dsymbols
);Insert Dsymbol in table.
Parameters
Identifier
ident
identifier to serve as index
Dsymbol
s
symbol to add
Return Value
null
if already in table,
if inserteds
-
Declaration
const pure size_t
length
();Return Value
number of symbols in symbol table
-
-
Declaration
Dsymbol
handleTagSymbols
(ref Scopesc
, Dsymbols
, Dsymbols2
, ScopeDsymbolsds
);ImportC tag symbols sit in a parallel symbol table, so that this C code works:
struct S { a; }; int S; struct S s;
when there is an existing symbols
with the same name. C also allows forward and prototype declarations of tag symbols, this function merges those.s2
Parameters
Scope
sc
context
Dsymbol
s
symbol to add to symbol table
Dsymbol
s2
existing declaration
ScopeDsymbol
sds
symbol table
Return Value
if
s
ands2
are successfully put in symbol table then return the merged symbol,null
if they conflict -
Declaration
Dsymbol
handleSymbolRedeclarations
(ref Scopesc
, Dsymbols
, Dsymbols2
, ScopeDsymbolsds
);ImportC allows redeclarations of C variables, functions and typedefs. extern int x; int x = 3; and: extern void f(); void f() { } Attempt to merge them.
Parameters
Scope
sc
context
Dsymbol
s
symbol to add to symbol table
Dsymbol
s2
existing declaration
ScopeDsymbol
sds
symbol table
Return Value
if
s
ands2
are successfully put in symbol table then return the merged symbol,null
if they conflict