dmd.optimize

Perform constant folding.

Authors

Walter Bright

Source: optimize.d

  • Declaration

    Expression expandVar(int result, VarDeclaration v);

    If variable has a const initializer, return that initializer.

    Return Value

    initializer if there is one, null if not, ErrorExp if error

  • Declaration

    package void setLengthVarIfKnown(VarDeclaration lengthVar, Expression arr);

    It is possible for constant folding to change an array expression of unknown length, into one where the length is known. If the expression 'arr' is a literal, set lengthVar to be its length.

    Parameters

    VarDeclaration lengthVar

    variable declaration for the .length property

    Expression arr

    String, ArrayLiteral, or of TypeSArray

  • Declaration

    package void setLengthVarIfKnown(VarDeclaration lengthVar, Type type);

    Same as above, but determines the length from 'type'.

    Parameters

    VarDeclaration lengthVar

    variable declaration for the .length property

    Type type

    TypeSArray

  • Declaration

    Expression Expression_optimize(Expression e, int result, bool keepLvalue);

    Constant fold an Expression.

    Parameters

    Expression e

    expression to const fold; this may get modified in-place

    int result

    WANTvalue, WANTexpand, or both

    bool keepLvalue

    e is an lvalue, and keep it as an lvalue since it is an argument to a ref or out parameter, or the operand of & operator

    Return Value

    Constant folded version of e