}
// Look for octal, hex prefix.
- if s[0] == '0' && len(s) > 1 {
- if s[1] == 'x' || s[1] == 'X' {
- // hex
- return Btoui64(s[2:len(s)], 16);
- }
- // octal
- return Btoui64(s[1:len(s)], 8);
+ switch {
+ case s[0] == '0' && len(s) > 1 && (s[1] == 'x' || s[1] == 'X'):
+ n, err = Btoui64(s[2:len(s)], 16);
+ case s[0] == '0':
+ n, err = Btoui64(s, 8);
+ default:
+ n, err = Btoui64(s, 10);
+ }
+
+ if err != nil {
+ err.(*NumError).Num = s;
}
- // decimal
- return Btoui64(s, 10);
+ return;
}
}
// Pick off leading sign.
+ s0 := s;
neg := false;
if s[0] == '+' {
s = s[1:len(s)]
var un uint64;
un, err = Atoui64(s);
if err != nil && err.(*NumError).Error != os.ERANGE {
+ err.(*NumError).Num = s0;
return 0, err
}
if !neg && un >= 1<<63 {
- return 1<<63-1, &NumError{s, os.ERANGE}
+ return 1<<63-1, &NumError{s0, os.ERANGE}
}
if neg && un > 1<<63 {
- return -1<<63, &NumError{s, os.ERANGE}
+ return -1<<63, &NumError{s0, os.ERANGE}
}
n := int64(un);
if neg {
test := &atoui64tests[i];
out, err := strconv.Atoui64(test.in);
if test.out != out || !reflect.DeepEqual(test.err, err) {
- t.Errorf("strconv.Atoui64(%v) = %v, %v want %v, %v\n",
+ t.Errorf("strconv.Atoui64(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err);
}
}
test := &atoi64tests[i];
out, err := strconv.Atoi64(test.in);
if test.out != out || !reflect.DeepEqual(test.err, err) {
- t.Errorf("strconv.Atoi64(%v) = %v, %v want %v, %v\n",
+ t.Errorf("strconv.Atoi64(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err);
}
}
test := &atoui32tests[i];
out, err := strconv.Atoui(test.in);
if test.out != uint32(out) || !reflect.DeepEqual(test.err, err) {
- t.Errorf("strconv.Atoui(%v) = %v, %v want %v, %v\n",
+ t.Errorf("strconv.Atoui(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err);
}
}
test := &atoui64tests[i];
out, err := strconv.Atoui(test.in);
if test.out != uint64(out) || !reflect.DeepEqual(test.err, err) {
- t.Errorf("strconv.Atoui(%v) = %v, %v want %v, %v\n",
+ t.Errorf("strconv.Atoui(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err);
}
}
test := &atoi32tests[i];
out, err := strconv.Atoi(test.in);
if test.out != int32(out) || !reflect.DeepEqual(test.err, err) {
- t.Errorf("strconv.Atoi(%v) = %v, %v want %v, %v\n",
+ t.Errorf("strconv.Atoi(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err);
}
}
test := &atoi64tests[i];
out, err := strconv.Atoi(test.in);
if test.out != int64(out) || !reflect.DeepEqual(test.err, err) {
- t.Errorf("strconv.Atoi(%v) = %v, %v want %v, %v\n",
+ t.Errorf("strconv.Atoi(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err);
}
}