fixnum
fixnum copied to clipboard
fixnum: standardize parse methods.
<img src="https://avatars.githubusercontent.com/u/2108821?v=3" align="left" width="96" height="96"hspace="10"> Issue by rakudrama Originally opened as dart-lang/sdk#21915
Int64.parseInt, Int64.parseRadix and Int64.parseHex should be marked as deprecated and replaced with a single Int64.parse method modeled after int.parse
static Int64 parse(String source {int radix, Int64 onError(String source)});
This method would also handle the 0x, +0x, -0x prefixes when a radix is not specified. None of the current methods can parse these.
It might be desirable to add a way to detect overflow, perhaps another named optional argument
Int64 onOverflow(String source, Int64 value, bool is64BitUnsigned)
value is the truncated value, is64BitUnsigned is true if the value overflowed but only set the sign bit.
<img src="https://avatars.githubusercontent.com/u/2108821?v=3" align="left" width="48" height="48"hspace="10"> Comment by rakudrama
Ditto for the analogous Int32 methods
Comment by lrhn
I'm not sure I'd recommend that.
I would even consider adding parseRadix, parseHex and parseDecimal to int. It's an annoying overhead on int.parse that it has to guess the format before parsing, and try trimming the string for leading/trailing whitespace even if there isn't any. If it had more specialized parsers without that overhead, I think it could be even faster than it is today.
I'd also consider toStringAsRadix on int, instead of having toString take a radix argument, but it's too late to remove the argument now.
I'm all for adding an Int64.parse for convenience, but do consider keeping the specialized versions.
(Nor sure whether to accept a leading +, even int.parse doesn't do that. But then, the stated goal of int.parse is to parse the output of any int.toString() and any valid Dart integer literal. Choose your own goal here.)
<img src="https://avatars.githubusercontent.com/u/2108821?v=3" align="left" width="48" height="48"hspace="10"> Comment by rakudrama
I'm surprised that int.parse accepts surrounding whitespace. The documentation does not describe that at all.
"I'd also consider toStringAsRadix on int, instead of having toString take a radix argument, but it's too late to remove the argument now." That is JavaScript. Dart's int interface has 'toRadixString(int radix)'.