Report a bugIf you spot a problem with this page, click here to create a Bugzilla issue.
Improve this pageQuickly 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 usinga local clone.
dmd.optimize
Perform constant folding.
Expression
expandVar(int
result, VarDeclaration
v);
If variable has a const initializer, return that initializer.
Returns: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.
Parameters:VarDeclarationlengthVar | variable declaration for the.length property |
Expressionarr | String, ArrayLiteral, or of TypeSArray |
package void
setLengthVarIfKnown(VarDeclaration
lengthVar, Type
type);
Same as above, but determines the length from 'type'.
Parameters:VarDeclarationlengthVar | variable declaration for the.length property |
Typetype | TypeSArray |
Expression
optimize(Expression
e, int
result, bool
keepLvalue = false);
Constant fold an Expression.
Parameters:Expressione | expression to const fold; this may get modified in-place |
intresult | WANTvalue, WANTexpand, or both |
boolkeepLvalue | e is an lvalue, and keep it as an lvalue since it is an argument to aref orout parameter, or the operand of& operator |
Returns:Constant folded version ofe