Differences From
Artifact [60b64e2aea]:
160 160 end
161 161
162 162 terra m.decstr(val: intptr, buf: &int8): rawstring
163 163 -- works backwards to avoid copies. log10(2^64) ≈ 19.2 and we
164 164 -- need a byte for NUL so buf MUST point to THE END OF a buffer
165 165 -- at least 21 bytes long
166 166 @buf = 0
167 - if val > 0 then while val > 0 do
167 + if val ~= 0 then
168 + while val > 0 do
169 + buf = buf - 1
170 + var dgt = val % 10
171 + val = val / 10
172 + @buf = 0x30 + dgt
173 + end
174 + else
168 175 buf = buf - 1
169 - var dgt = val % 10
170 - val = val / 10
171 - @buf = 0x30 + dgt
172 - end else
176 + @buf = 0x30
177 + end
178 + return buf
179 +end
180 +
181 +terra m.decstrs(inval: ptrdiff, buf: &int8): rawstring
182 +-- works backwards to avoid copies. log10(2^64) ≈ 19.2 and we
183 +-- need a byte for NUL so buf MUST point to THE END OF a buffer
184 +-- at least 22 bytes long
185 + @buf = 0
186 + var val = inval
187 + if val ~= 0 then
188 + if val < 0 then
189 + val = -val
190 + end
191 + while val > 0 do
192 + buf = buf - 1
193 + var dgt = val % 10
194 + val = val / 10
195 + @buf = 0x30 + dgt
196 + end
197 + if inval < 0 then
198 + buf = buf - 1
199 + @buf = @"-"
200 + end
201 + else
173 202 buf = buf - 1
174 203 @buf = 0x30
175 204 end
176 205 return buf
177 206 end
178 207
179 208 terra m.decstr_friendly(val: intptr, buf: &int8): rawstring