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