dmd.declaration

Miscellaneous declarations, including typedef, alias, variable declarations including the implicit this declaration, type tuples, ClassInfo, ModuleInfo and various TypeInfos.

Authors

Walter Bright

Source: declaration.d

  • Declaration

    bool checkFrameAccess(Loc loc, Scope* sc, AggregateDeclaration ad, size_t iStart = 0);

    Check to see the aggregate type is nested and its context pointer is accessible from the current scope. Returns true if error occurs.

  • Declaration

    bool modifyFieldVar(Loc loc, Scope* sc, VarDeclaration var, Expression e1);

    Mark variable v as modified if it is inside a constructor that var is a field in. Also used to allow immutable globals to be initialized inside a static constructor.

    Return Value

    true if it's an initialization of v

  • Declaration

    void ObjectNotFound(Identifier id);

  • Declaration

    abstract class Declaration: dmd.dsymbol.Dsymbol;

    • Declaration

      final bool checkDisabled(Loc loc, Scope* sc, bool isAliasedDeclaration = false);

      Issue an error if an attempt to call a disabled method is made

      Discussion

      If the declaration is disabled but inside a disabled function, returns true but do not issue an error message.

      Parameters

      Loc loc

      Location information of the call

      Scope* sc

      Scope in which the call occurs

      bool isAliasedDeclaration

      if true searches overload set

      Return Value

      true if this Declaration is @disabled, false otherwise.

    • Declaration

      final Modifiable checkModify(Loc loc, Scope* sc, Expression e1, ModifyFlags flag);

      Check to see if declaration can be modified in this context (sc). Issue error if not.

      Parameters

      Loc loc

      location for error messages

      Expression e1

      null or this expression when this declaration is a field

      Scope* sc

      context

      ModifyFlags flag

      if the first bit is set it means do not issue error message for invalid modification; if the second bit is set, it means that this declaration is a field and a subfield of it is modified.

      Return Value

      Modifiable.yes or Modifiable.initialization

    • Declaration

      final const LINK resolvedLinkage();

      Returns the linkage, resolving the target-specific System one.

    • Declaration

      final const pure nothrow @nogc @safe bool isReference();

      Return Value

      Whether the variable is a reference, annotated with out or ref

  • Declaration

    class TupleDeclaration: dmd.declaration.Declaration;

    • Declaration

      void foreachVar(scope void delegate(Dsymbol) dg);

      Calls dg(Dsymbol) for each Dsymbol, which should be a VarDeclaration inside VarExp (isexp == true).

      Parameters

      void delegate(Dsymbol) dg

      delegate to call for each Dsymbol

    • Declaration

      int foreachVar(scope int delegate(Dsymbol) dg);

      Calls dg(Dsymbol) for each Dsymbol, which should be a VarDeclaration inside VarExp (isexp == true). If dg returns !=0, stops and returns that value else returns 0.

      Parameters

      int delegate(Dsymbol) dg

      delegate to call for each Dsymbol

      Return Value

      last value returned by dg()

  • Declaration

    class AliasDeclaration: dmd.declaration.Declaration;

    • Declaration

      const bool isAliasedTemplateParameter();

      Return Value

      true if this instance was created to make a template parameter visible in the scope of a template body, false otherwise

  • Declaration

    class OverDeclaration: dmd.declaration.Declaration;

  • Declaration

    class VarDeclaration: dmd.declaration.Declaration;

    • Declaration

      final bool isDataseg();

      Does symbol go into data segment? Includes extern variables.

    • Declaration

      final bool isThreadlocal();

      Does symbol go into thread local storage?

    • Declaration

      final bool isCTFE();

      Can variable be read and written by CTFE?

    • Declaration

      final bool canTakeAddressOf();

      Return true if we can take the address of this variable.

    • Declaration

      final bool needsScopeDtor();

      Return true if variable needs to call the destructor.

    • Declaration

      final Expression callScopeDtor(Scope* sc);

      If a variable has a scope destructor call, return call for it. Otherwise, return NULL.

    • Declaration

      final Expression getConstInitializer(bool needFullType = true);

      If variable has a constant expression initializer, get it. Otherwise, return null.

    • Declaration

      final Expression expandInitializer(Loc loc);

      Helper function for the expansion of manifest constant.

    • Declaration

      final bool checkNestedReference(Scope* sc, Loc loc);

      Check to see if this variable is actually in an enclosing function rather than the current one. Update nestedrefs[], closureVars[] and outerVars[].

      Return Value

      true if error occurs.

  • Declaration

    class BitFieldDeclaration: dmd.declaration.VarDeclaration;

    C11 6.7.2.1-4 bit fields

    • Declaration

      final ulong getMinMax(Identifier id);

      Retrieve the .min or .max values. Only valid after semantic analysis.

      Parameters

      Identifier id

      Id.min or Id.max

      Return Value

      the min or max value

  • Declaration

    class SymbolDeclaration: dmd.declaration.Declaration;

    This is a shell around a back end symbol

  • Declaration

    class TypeInfoDeclaration: dmd.declaration.VarDeclaration;

  • Declaration

    class TypeInfoStructDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoClassDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoInterfaceDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoPointerDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoArrayDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoStaticArrayDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoAssociativeArrayDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoEnumDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoFunctionDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoDelegateDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoTupleDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoConstDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoInvariantDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoSharedDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoWildDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class TypeInfoVectorDeclaration: dmd.declaration.TypeInfoDeclaration;

  • Declaration

    class ThisDeclaration: dmd.declaration.VarDeclaration;

    For the "this" parameter to member functions