Mercurial > projects > ddmd
view dmd/expression/shift_optimize.d @ 156:0c8cc2a10f99
+ ArrayInitializer.toAssocArrayLiteral()
+ FuncDeclaration.isUnique()
+ TypeEnum.alignsize()
+ TypeEnum.toChars()
+ TypeEnum.getProperty()
+ VarExp.equals()
+ expression.Util.fpunique()
* fixed missing default in TypeBasic
author | trass3r |
---|---|
date | Wed, 15 Sep 2010 18:24:39 +0200 |
parents | e28b18c23469 |
children |
line wrap: on
line source
module dmd.expression.shift_optimize; import dmd.common; import dmd.Expression; import dmd.BinExp; import dmd.Type; import dmd.IntegerExp; Expression shift_optimize(int result, BinExp e, Expression function(Type, Expression, Expression) shift) { Expression ex = e; e.e1 = e.e1.optimize(result); e.e2 = e.e2.optimize(result); if (e.e2.isConst() == 1) { long i2 = e.e2.toInteger(); ulong sz = e.e1.type.size() * 8; if (i2 < 0 || i2 > sz) { e.error("shift by %jd is outside the range 0..%zu", i2, sz); e.e2 = new IntegerExp(0); } if (e.e1.isConst() == 1) { ex = shift(e.type, e.e1, e.e2); } } return ex; }