Mercurial > projects > ddmd
comparison dmd/expression/Shr.d @ 0:10317f0c89a5
Initial commit
author | korDen |
---|---|
date | Sat, 24 Oct 2009 08:42:06 +0400 |
parents | |
children | e28b18c23469 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:10317f0c89a5 |
---|---|
1 module dmd.expression.Shr; | |
2 | |
3 import dmd.Expression; | |
4 import dmd.Type; | |
5 import dmd.Loc; | |
6 import dmd.IntegerExp; | |
7 import dmd.TY; | |
8 | |
9 Expression Shr(Type type, Expression e1, Expression e2) | |
10 { | |
11 Loc loc = e1.loc; | |
12 | |
13 long value = e1.toInteger(); | |
14 uint count = cast(uint)e2.toInteger(); | |
15 | |
16 switch (e1.type.toBasetype().ty) | |
17 { | |
18 case TY.Tint8: | |
19 value = cast(byte)(value) >> count; | |
20 break; | |
21 | |
22 case TY.Tuns8: | |
23 value = cast(ubyte)(value) >> count; | |
24 break; | |
25 | |
26 case TY.Tint16: | |
27 value = cast(short)(value) >> count; | |
28 break; | |
29 | |
30 case TY.Tuns16: | |
31 value = cast(ushort)(value) >> count; | |
32 break; | |
33 | |
34 case TY.Tint32: | |
35 value = cast(int)(value) >> count; | |
36 break; | |
37 | |
38 case TY.Tuns32: | |
39 value = cast(uint)(value) >> count; | |
40 break; | |
41 | |
42 case TY.Tint64: | |
43 value = cast(long)(value) >> count; | |
44 break; | |
45 | |
46 case TY.Tuns64: | |
47 value = cast(ulong)(value) >> count; | |
48 break; | |
49 } | |
50 | |
51 return new IntegerExp(loc, value, type); | |
52 } |