# dmd.optimize

Perform constant folding.

#### Authors

Walter Bright

#### License

Boost License 1.0

Source: optimize.d

Documentation: https://dlang.org/phobos/dmd_optimize.html

Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/optimize.d

- `expandVar`

  #### 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

- `setLengthVarIfKnown`

  #### 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

- `setLengthVarIfKnown`

  #### 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

- `Expression_optimize`

  #### 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``