comparison dmd/ComplexExp.d @ 174:af724d3510d7

lot os toCBuffer methods implemented moved shared Type.* stuff into Global
author korDen
date Sun, 10 Oct 2010 03:47:23 +0400
parents 010eb8f0e18d
children 94b6033c07f3
comparison
equal deleted inserted replaced
173:d237b38b5858 174:af724d3510d7
87 { 87 {
88 Expression e = this; 88 Expression e = this;
89 if (type != t) 89 if (type != t)
90 { 90 {
91 if (type.iscomplex() && t.iscomplex()) 91 if (type.iscomplex() && t.iscomplex())
92 { 92 {
93 e = copy(); 93 e = copy();
94 e.type = t; 94 e.type = t;
95 } 95 }
96 else 96 else
97 e = Expression.castTo(sc, t); 97 e = Expression.castTo(sc, t);
112 return value == Complex!(real).zero; 112 return value == Complex!(real).zero;
113 } 113 }
114 114
115 override void toCBuffer(OutBuffer buf, HdrGenState* hgs) 115 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
116 { 116 {
117 assert(false); 117 /* Print as:
118 * (re+imi)
119 */
120 version (IN_GCC) {
121 char buf1[sizeof(value) * 3 + 8 + 1];
122 char buf2[sizeof(value) * 3 + 8 + 1];
123 creall(value).format(buf1, sizeof(buf1));
124 cimagl(value).format(buf2, sizeof(buf2));
125 buf.printf("(%s+%si)", buf1, buf2);
126 } else {
127 buf.writeByte('(');
128 floatToBuffer(buf, type, value.re);
129 buf.writeByte('+');
130 floatToBuffer(buf, type, value.im);
131 buf.writestring("i)");
132 }
118 } 133 }
119 134
120 override void toMangleBuffer(OutBuffer buf) 135 override void toMangleBuffer(OutBuffer buf)
121 { 136 {
122 buf.writeByte('c'); 137 buf.writeByte('c');
124 realToMangleBuffer(buf, r); 139 realToMangleBuffer(buf, r);
125 buf.writeByte('c'); // separate the two 140 buf.writeByte('c'); // separate the two
126 r = toImaginary(); 141 r = toImaginary();
127 realToMangleBuffer(buf, r); 142 realToMangleBuffer(buf, r);
128 } 143 }
129 144
130 version (_DH) { 145 version (_DH) {
131 OutBuffer hexp; 146 OutBuffer hexp;
132 } 147 }
133 148
134 override elem* toElem(IRState* irs) 149 override elem* toElem(IRState* irs)
202 default: 217 default:
203 assert(0); 218 assert(0);
204 } 219 }
205 return el_const(ty, &c); 220 return el_const(ty, &c);
206 } 221 }
207 222
208 static private char[6] zeropad; 223 static private char[6] zeropad;
209 224
210 override dt_t** toDt(dt_t** pdt) 225 override dt_t** toDt(dt_t** pdt)
211 { 226 {
212 //printf("ComplexExp.toDt() '%s'\n", toChars()); 227 //printf("ComplexExp.toDt() '%s'\n", toChars());