annotate dmd/expression/Ushr.d @ 135:af1bebfd96a4 dmd2037

dmd 2.038
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Mon, 13 Sep 2010 22:19:42 +0100
parents e28b18c23469
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.expression.Ushr;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 0
diff changeset
3 import dmd.common;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.Type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.Expression;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.Loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.TY;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.IntegerExp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 Expression Ushr(Type type, Expression e1, Expression e2)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 Expression e;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 Loc loc = e1.loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 uint count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 ulong value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 value = e1.toInteger();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 count = cast(uint)e2.toInteger();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 switch (e1.type.toBasetype().ty)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 case Tint8:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23 case Tuns8:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 assert(0); // no way to trigger this
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 value = (value & 0xFF) >> count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 case Tint16:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 case Tuns16:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 assert(0); // no way to trigger this
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31 value = (value & 0xFFFF) >> count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34 case Tint32:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 case Tuns32:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36 value = (value & 0xFFFFFFFF) >> count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39 case Tint64:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 case Tuns64:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 value = cast(ulong)(value) >> count;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
45 assert(0);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 e = new IntegerExp(loc, value, type);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50 return e;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 }