Mercurial > projects > ddmd
comparison dmd/RealExp.d @ 148:fe2e1b93e88f
phobos compiles now:
* fixed upgrade mistake in interpret.Util
+ implemented missing methods in RealExp,VarExp
author | Trass3r |
---|---|
date | Wed, 15 Sep 2010 03:58:55 +0200 |
parents | ea6325d0edd9 |
children | b7b61140701d |
comparison
equal
deleted
inserted
replaced
147:9a2a1ae6c8e5 | 148:fe2e1b93e88f |
---|---|
22 import dmd.backend.Util; | 22 import dmd.backend.Util; |
23 import dmd.backend.TYM; | 23 import dmd.backend.TYM; |
24 import dmd.backend.mTY; | 24 import dmd.backend.mTY; |
25 | 25 |
26 import std.stdio; | 26 import std.stdio; |
27 import std.string; | |
27 | 28 |
28 class RealExp : Expression | 29 class RealExp : Expression |
29 { | 30 { |
30 real value; | 31 real value; |
31 | 32 |
50 return true; | 51 return true; |
51 } | 52 } |
52 } | 53 } |
53 } | 54 } |
54 | 55 |
55 return 0; | 56 return false; |
56 } | 57 } |
57 | 58 |
58 override Expression semantic(Scope sc) | 59 override Expression semantic(Scope sc) |
59 { | 60 { |
60 if (!type) | 61 if (!type) |
64 return this; | 65 return this; |
65 } | 66 } |
66 | 67 |
67 override Expression interpret(InterState istate) | 68 override Expression interpret(InterState istate) |
68 { | 69 { |
69 assert(false); | 70 version(LOG) |
71 writef("RealExp::interpret() %s\n", toChars()); | |
72 | |
73 return this; | |
70 } | 74 } |
71 | 75 |
72 override string toChars() | 76 override string toChars() |
73 { | 77 { |
74 assert(false); | 78 return format(type.isimaginary() ? "%gi" : "%g", value); |
75 } | 79 } |
76 | 80 |
77 override ulong toInteger() | 81 override ulong toInteger() |
78 { | 82 { |
79 assert(false); | 83 version(IN_GCC) |
84 return toReal().toInt(); | |
85 else | |
86 return cast(ulong) toReal(); | |
80 } | 87 } |
81 | 88 |
82 override ulong toUInteger() | 89 override ulong toUInteger() |
83 { | 90 { |
84 assert(false); | 91 version(IN_GCC) |
92 return cast(ulong) toReal().toInt(); | |
93 else | |
94 return cast(ulong) toReal(); | |
85 } | 95 } |
86 | 96 |
87 override real toReal() | 97 override real toReal() |
88 { | 98 { |
89 return type.isreal() ? value : 0; | 99 return type.isreal() ? value : 0; |
127 return result ? (value != 0) : (value == 0); | 137 return result ? (value != 0) : (value == 0); |
128 } | 138 } |
129 | 139 |
130 override void toCBuffer(OutBuffer buf, HdrGenState* hgs) | 140 override void toCBuffer(OutBuffer buf, HdrGenState* hgs) |
131 { | 141 { |
132 floatToBuffer(buf, type, value); | 142 floatToBuffer(buf, type, value); |
133 } | 143 } |
134 | 144 |
135 override void toMangleBuffer(OutBuffer buf) | 145 override void toMangleBuffer(OutBuffer buf) |
136 { | 146 { |
137 buf.writeByte('e'); | 147 buf.writeByte('e'); |
174 | 184 |
175 default: | 185 default: |
176 print(); | 186 print(); |
177 ///type.print(); | 187 ///type.print(); |
178 ///type.toBasetype().print(); | 188 ///type.toBasetype().print(); |
179 printf("ty = %d, tym = %lx\n", type.ty, ty); | 189 printf("ty = %d, tym = %lx\n", type.ty, ty); |
180 assert(0); | 190 assert(0); |
181 } | 191 } |
182 return el_const(ty, &c); | 192 return el_const(ty, &c); |
183 } | 193 } |
184 | 194 |
220 break; | 230 break; |
221 } | 231 } |
222 return pdt; | 232 return pdt; |
223 } | 233 } |
224 } | 234 } |
225 |