{
double num;
size_t size;
+ uint32_t u;
njs_bool_t minus;
const u_char *p, *start, *end;
end = p + size;
while (p < end) {
- if (*p != ' ' && *p != '\t') {
+ start = p;
+ u = njs_utf8_decode(&p, end);
+
+ if (!njs_utf8_is_whitespace(u)) {
+ p = start;
break;
}
-
- p++;
}
if (p == end) {
- return 0.0;
+ return parse_float ? NAN : 0.0;
}
minus = 0;
{ njs_str("5 - '\t 0x2 \t'"),
njs_str("3") },
+ { njs_str("5 - '\t\\u000c0x2 \t'"),
+ njs_str("3") },
+
{ njs_str("5 - '0x2 z'"),
njs_str("NaN") },
"Array.prototype.slice.call(Array.prototype.fill.call(o, 1))"),
njs_str("1,1") },
+ { njs_str("var o = {}; Object.defineProperty(o, 'length', {get:()=>'0x0002'}); "
+ "Array.prototype.slice.call(Array.prototype.fill.call(o, 1))"),
+ njs_str("1,1") },
+
{ njs_str("var o = {}; Object.defineProperty(o, 'length', {get:()=> {throw TypeError('Boom')}}); "
"Array.prototype.fill.call(o, 1)"),
njs_str("TypeError: Boom") },
{ njs_str("parseFloat('12345abc')"),
njs_str("12345") },
+ { njs_str("parseFloat('')"),
+ njs_str("NaN") },
+
+ { njs_str("parseFloat(' \t')"),
+ njs_str("NaN") },
+
+ { njs_str("parseFloat('\\u20281')"),
+ njs_str("1") },
+
+ { njs_str("parseFloat('e11')"),
+ njs_str("NaN") },
+
+ { njs_str("parseFloat({toString(){return ' 1'}})"),
+ njs_str("1") },
+
{ njs_str("parseFloat('1e2147483647')"),
njs_str("Infinity") },