dmd.aggregate

Defines a Dsymbol representing an aggregate, which is a struct, union or class.

Specification: Structs, Unions, Class.

Authors

Walter Bright

Source: aggregate.d

  • 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.

    • d

      Declaration

      d

      the aggregate is a d(efault) class

    • cpp

      Declaration

      cpp

      the aggregate is a C++ struct/class/interface

    • Declaration

      objc

      the aggregate is an Objective-C class/interface

    • c

      Declaration

      c

      the aggregate is a C struct

  • 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 a struct 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 directly enclosing it.

      1. The function that enclosing it (nested struct and class)
      2. The class that enclosing it (nested class only)
      3. If enclosing aggregate is template, its enclosing dsymbol.

      Discussion

      See AggregateDeclaraton::makeNested for the details.

    • 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

    • inv

      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 Loc loc);

      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 Loc loc, Expressions* elements, bool ctorinit);

      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 the elements will be used for default initialization.

      Return Value

      false if any errors occur. Otherwise, returns true and the missing arguments will be pushed in elements[].

    • Declaration

      static pure nothrow @safe void alignmember(structalign_t alignment, uint memalignsize, 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 effect

      uint memalignsize

      natural alignment of field

      uint* poffset

      pointer to offset to be aligned

    • Declaration

      static uint placeField(uint* nextoffset, uint memsize, uint memalignsize, structalign_t alignment, uint* paggsize, uint* paggalignsize, bool isunion);

      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 field

      structalign_t alignment

      alignment in effect for this field

      uint* 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