dmd.aggregate
Defines a Dsymbol
representing an aggregate
, which is a struct
, union
or class
.
Specification: Structs, Unions, Class.
License
Source: aggregate.d
Documentation: https://dlang.org/phobos/dmd_aggregate.html
-
Declaration
enum
ClassKind
: ubyte;The
ClassKind
enum is used in AggregateDeclaration AST nodes to specify the linkage type of the struct/class/interface or if it is an anonymous class. If the class is anonymous it is also considered to be a D class.-
Declaration
d
the aggregate is a
d
(efault) class -
Declaration
cpp
the aggregate is a C++ struct/class/interface
-
Declaration
objc
the aggregate is an Objective-C class/interface
-
Declaration
c
the aggregate is a C struct
-
-
Declaration
const(char)*
toChars
(ClassKindc
);Give a nice string for a class kind for error messages
Parameters
ClassKind
c
class kind
Return Value
0-terminated string for
c
-
Declaration
struct
MangleOverride
;If an aggregate has a pargma(mangle, ...) this holds the information to mangle.
-
Declaration
abstract class
AggregateDeclaration
: dmd.dsymbol.ScopeDsymbol;Abstract aggregate as a common ancestor for Class- and StructDeclaration.
-
Declaration
Type
type
; -
Declaration
StorageClass
storage_class
; -
Declaration
uint
structsize
;size of struct
-
Declaration
uint
alignsize
;size of struct for alignment purposes
-
Declaration
VarDeclarations
fields
;VarDeclaration
fields
-
Declaration
Dsymbol
deferred
;any
deferred
semantic2() or semantic3() symbol -
Declaration
ClassKind
classKind
;specifies whether this is a D, C++, Objective-C or anonymous struct/class/interface
-
Declaration
CPPMANGLE
cppmangle
;Specify whether to mangle the aggregate as a
class
or astruct
This information is used by the MSVC mangler Only valid for class and struct. TODO: Merge with ClassKind ? -
Declaration
MangleOverride*
mangleOverride
;overridden symbol with pragma(mangle, "...") if not
null
-
Declaration
Dsymbol
enclosing
;!=
null
if is nested pointing to the dsymbol that directlyenclosing
it.- The function that
enclosing
it (nested struct and class) - The class that
enclosing
it (nested class only) - If
enclosing
aggregate is template, itsenclosing
dsymbol.
Discussion
See AggregateDeclaraton::makeNested for the details.
- The function that
-
Declaration
VarDeclaration
vthis
;'this' parameter if this aggregate is nested
-
Declaration
VarDeclaration
vthis2
;'this' parameter if this aggregate is a template and is nested
-
Declaration
FuncDeclarations
invs
;Array of invariants
-
Declaration
FuncDeclaration
inv
;Merged invariant calling all members of invs
-
Declaration
Dsymbol
ctor
;CtorDeclaration or TemplateDeclaration
-
Declaration
CtorDeclaration
defaultCtor
;default constructor - should have no arguments, because it would be stored in TypeInfo_Class.defaultConstructor
-
Declaration
AliasThis
aliasthis
;forward unresolved lookups to
aliasthis
-
Declaration
DtorDeclarations
userDtors
;user-defined destructors (
~this()
) - mixins can yield multiple ones -
Declaration
DtorDeclaration
aggrDtor
;aggregate destructor calling userDtors and fieldDtor (and base class aggregate dtor for C++ classes)
-
Declaration
DtorDeclaration
dtor
;the aggregate destructor exposed as
__xdtor
alias -
Declaration
DtorDeclaration
tidtor
;(same as aggrDtor, except for C++ classes with virtual dtor on Windows)
Discussion
aggregate destructor used in TypeInfo (must have extern(D) ABI)
-
Declaration
DtorDeclaration
fieldDtor
;function destructing (non-inherited) fields
-
Declaration
Expression
getRTInfo
;pointer to GC info generated by object.RTInfo(this)
-
Declaration
Visibility
visibility
; -
Declaration
bool
noDefaultCtor
;no default construction
-
Declaration
bool
disableNew
;disallow allocations using
new
-
Declaration
Sizeok
sizeok
;set when structsize contains valid data
-
Declaration
Scope*
newScope
(Scope*sc
);Create a new scope from
sc
. semantic, semantic2 and semantic3 will use this for aggregate members. -
Declaration
final size_t
nonHiddenFields
();Return Value
The total number of fields minus the number of hidden fields.
-
Declaration
final bool
determineSize
(const ref Locloc
);Collect all instance fields, then determine instance size.
Return Value
false
if failed to determine the size. -
Declaration
final bool
checkOverlappedFields
();Calculate field[i].overlapped and overlapUnsafe, and check that all of explicit field initializers have unique memory space on instance.
Return Value
true
if any errors happen. -
Declaration
final bool
fill
(const ref Locloc
, Expressions*elements
, boolctorinit
);Fill out remainder of
elements
[] with default initializers for fields[].Parameters
Loc
loc
location
Expressions*
elements
explicit arguments which given to construct object.
bool
ctorinit
true
if theelements
will be used for default initialization.Return Value
false
if any errors occur. Otherwise, returnstrue
and the missing arguments will be pushed inelements
[]. -
Declaration
static pure nothrow @safe void
alignmember
(structalign_talignment
, uintmemalignsize
, uint*poffset
);Do byte or word
alignment
as necessary. Align sizes of 0, as we may not know array sizes yet.Parameters
structalign_t
alignment
struct
alignment
that is in effectuint
memalignsize
natural
alignment
of fielduint*
poffset
pointer to offset to be aligned
-
Declaration
static uint
placeField
(uint*nextoffset
, uintmemsize
, uintmemalignsize
, structalign_talignment
, uint*paggsize
, uint*paggalignsize
, boolisunion
);Place a field (mem) into an aggregate (agg), which can be a struct, union or class
Parameters
uint*
nextoffset
location just past the end of the previous field in the aggregate. Updated to be just past the end of this field to be placed, i.e. the future
nextoffset
uint
memsize
size of field
uint
memalignsize
natural
alignment
of fieldstructalign_t
alignment
alignment
in effect for this fielduint*
paggsize
size of aggregate (updated)
uint*
paggalignsize
alignment
of aggregate (updated)bool
isunion
the aggregate is a union
Return Value
aligned offset to place field at
-
Declaration
final void
setDeprecated
();Flag this aggregate as deprecated
-
Declaration
final const bool
isNested
();Returns
true
if there's an extra member which is the 'this' pointer to the enclosing context (enclosing aggregate or function) -
Declaration
final Dsymbol
searchCtor
();Look for constructor declaration.
-
Declaration
void*
sinit
;initializer symbol
-