dmd.cond

Evaluate compile-time conditionals, such as static if version and debug.

Specification: Conditional Compilation

Authors

Walter Bright

Source: cond.d

  • Declaration

    enum Include: ubyte;

    • Declaration

      notComputed

      not computed yet

    • yes

      Declaration

      yes

      include the conditional code

    • no

      Declaration

      no

      do not include the conditional code

  • Declaration

    class StaticForeach: dmd.root.rootobject.RootObject;

    Implements common functionality for StaticForeachDeclaration and StaticForeachStatement This performs the necessary lowerings before dmd.statementsem.makeTupleForeach can be used to expand the corresponding static foreach declaration or statement.

    • Declaration

      ForeachStatement aggrfe;

      Not null iff the static foreach is over an aggregate. In this case, it contains the corresponding ForeachStatement. For StaticForeachDeclaration, the body is null.

    • Declaration

      ForeachRangeStatement rangefe;

      Not null iff the static foreach is over a range. Exactly one of the aggrefe and rangefe fields is not null. See aggrfe field for more details.

    • Declaration

      bool needExpansion;

      true if it is necessary to expand a tuple into multiple variables (see lowerNonArrayAggregate).

    • Declaration

      void prepare(Scope* sc);

      Perform static foreach lowerings that are necessary in order to finally expand the static foreach using dmd.statementsem.makeTupleForeach.

    • Declaration

      bool ready();

      Return Value

      true iff ready to call dmd.statementsem.makeTupleForeach.

  • Declaration

    abstract class DVCondition: dmd.cond.Condition;

  • Declaration

    class DebugCondition: dmd.cond.DVCondition;

    • Declaration

      deprecated static void addGlobalIdent(const(char)* ident);
      static void addGlobalIdent(string ident);
      static void addGlobalIdent(const(char)[] ident);

      Add an user-supplied identifier to the list of global debug identifiers

      Discussion

      Can be called from either the driver or a debug = Ident; statement. Unlike version identifier, there isn't any reserved debug identifier so no validation takes place.

      Parameters

      const(char)* ident

      identifier to add

    • Declaration

      this(ref const Loc loc, Module mod, uint level, Identifier ident);

      Instantiate a new DebugCondition

      Parameters

      Module mod

      Module this node belongs to

      uint level

      Minimum global level this condition needs to pass. Only used if ident is null.

      Identifier ident

      Identifier required for this condition to pass. If null, this conditiion will use an integer level.

      Loc loc

      Location in the source file

  • Declaration

    class VersionCondition: dmd.cond.DVCondition;

    Node to represent a version condition

    Discussion

    A version condition is of the form:

    1. version (Identifier)
    In user code. This class also provides means to add version identifier to the list of global (cross module) identifiers.

    • Declaration

      static void checkReserved(ref const Loc loc, const(char)[] ident);

      Raises an error if a version identifier is reserved.

      Discussion

      Called when setting a version identifier, e.g. -version=identifier parameter to the compiler or version = Foo in user code.

      Parameters

      Loc loc

      Where the identifier is set

      const(char)[] ident

      identifier being checked (ident[$] must be '\0')

    • Declaration

      deprecated static void addGlobalIdent(const(char)* ident);
      static void addGlobalIdent(string ident);
      static void addGlobalIdent(const(char)[] ident);

      Add an user-supplied global identifier to the list

      Discussion

      Only called from the driver for -version=Ident parameters. Will raise an error if the identifier is reserved.

      Parameters

      const(char)* ident

      identifier to add

    • Declaration

      deprecated static void addPredefinedGlobalIdent(const(char)* ident);
      static void addPredefinedGlobalIdent(string ident);
      static void addPredefinedGlobalIdent(const(char)[] ident);

      Add any global identifier to the list, without checking if it's predefined

      Discussion

      Only called from the driver after platform detection, and internally.

      Parameters

      const(char)* ident

      identifier to add (ident[$] must be '\0')

    • Declaration

      this(ref const Loc loc, Module mod, uint level, Identifier ident);

      Instantiate a new VersionCondition

      Parameters

      Module mod

      Module this node belongs to

      uint level

      Minimum global level this condition needs to pass. Only used if ident is null.

      Identifier ident

      Identifier required for this condition to pass. If null, this conditiion will use an integer level.

      Loc loc

      Location in the source file

  • Declaration

    class StaticIfCondition: dmd.cond.Condition;

  • Declaration

    bool findCondition(Identifiers* ids, Identifier ident);

    Find ident in an array of identifiers.

    Parameters

    Identifiers* ids

    array of identifiers

    Identifier ident

    identifier to search for

    Return Value

    true if found