u_char *p, *end;
int64_t n;
uint8_t radix;
- nxt_bool_t minus;
+ nxt_bool_t minus, test_prefix;
njs_string_prop_t string;
num = NAN;
p++;
}
- if (end - p > 1 && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
- p += 2;
- radix = 16;
+ test_prefix = (end - p > 1);
+
+ if (nargs > 2) {
+ radix = args[2].data.u.number;
+
+ if (radix < 2 || radix > 36) {
+ goto done;
+ }
+
+ if (radix != 16) {
+ test_prefix = 0;
+ }
} else {
radix = 10;
}
- if (nargs > 2) {
- n = args[2].data.u.number;
-
- if (n != 0) {
-
- if (n < 2 || n > 36) {
- goto done;
- }
+ if (test_prefix && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
+ p += 2;
+ radix = 16;
+ }
- radix = n;
- }
+ if (p == end) {
+ goto done;
}
n = njs_number_radix_parse(p, end, radix, 0);
{ nxt_string("parseInt('njscript', 36)"),
nxt_string("1845449130881") },
+ { nxt_string("parseInt('0x')"),
+ nxt_string("NaN") },
+
+ { nxt_string("parseInt('0x', 10)"),
+ nxt_string("0") },
+
+ { nxt_string("parseInt('0x', 16)"),
+ nxt_string("NaN") },
+
+ { nxt_string("parseInt('0x', 33)"),
+ nxt_string("0") },
+
+ { nxt_string("parseInt('0x', 34)"),
+ nxt_string("33") },
+
+ { nxt_string("parseInt('0', 1)"),
+ nxt_string("NaN") },
+
+ { nxt_string("parseInt('0', 37)"),
+ nxt_string("NaN") },
+
{ nxt_string("parseFloat('12345abc')"),
nxt_string("12345") },