Mercurial > projects > ddmd
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()); |