0
|
1 module dmd.expression.Ushr;
|
|
2
|
114
|
3 import dmd.common;
|
0
|
4 import dmd.Type;
|
|
5 import dmd.Expression;
|
|
6 import dmd.Loc;
|
|
7 import dmd.TY;
|
|
8 import dmd.IntegerExp;
|
|
9
|
|
10 Expression Ushr(Type type, Expression e1, Expression e2)
|
|
11 {
|
|
12 Expression e;
|
|
13 Loc loc = e1.loc;
|
|
14 uint count;
|
|
15 ulong value;
|
|
16
|
|
17 value = e1.toInteger();
|
|
18 count = cast(uint)e2.toInteger();
|
|
19
|
|
20 switch (e1.type.toBasetype().ty)
|
|
21 {
|
|
22 case Tint8:
|
|
23 case Tuns8:
|
|
24 assert(0); // no way to trigger this
|
|
25 value = (value & 0xFF) >> count;
|
|
26 break;
|
|
27
|
|
28 case Tint16:
|
|
29 case Tuns16:
|
|
30 assert(0); // no way to trigger this
|
|
31 value = (value & 0xFFFF) >> count;
|
|
32 break;
|
|
33
|
|
34 case Tint32:
|
|
35 case Tuns32:
|
|
36 value = (value & 0xFFFFFFFF) >> count;
|
|
37 break;
|
|
38
|
|
39 case Tint64:
|
|
40 case Tuns64:
|
|
41 value = cast(ulong)(value) >> count;
|
|
42 break;
|
|
43
|
|
44 default:
|
|
45 assert(0);
|
|
46 }
|
|
47
|
|
48 e = new IntegerExp(loc, value, type);
|
|
49
|
|
50 return e;
|
|
51 } |