Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


Perform constant folding.

Source optimize.d

Expression expandVar(int result, VarDeclaration v);
If variable has a const initializer, return that initializer.
initializer if there is one, null if not, ErrorExp if error
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.
VarDeclaration lengthVar variable declaration for the .length property
Expression arr String, ArrayLiteral, or of TypeSArray
package void setLengthVarIfKnown(VarDeclaration lengthVar, Type type);
Same as above, but determines the length from 'type'.
VarDeclaration lengthVar variable declaration for the .length property
Type type TypeSArray
Expression optimize(Expression e, int result, bool keepLvalue = false);
Constant fold an Expression.
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
Constant folded version of e