parsav  Diff

Differences From Artifact [60b64e2aea]:

To Artifact [cdf2deb1fe]:


   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