parse out-of-range numerals correctly (#4781)
This commit is contained in:
61
lib/parse.js
61
lib/parse.js
@@ -1763,40 +1763,45 @@ function parse($TEXT, options) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function as_atom_node() {
|
function as_atom_node() {
|
||||||
var tok = S.token, ret;
|
var ret, tok = S.token, value = tok.value;
|
||||||
switch (tok.type) {
|
switch (tok.type) {
|
||||||
case "num":
|
case "num":
|
||||||
ret = new AST_Number({ start: tok, end: tok, value: tok.value });
|
if (isFinite(value)) {
|
||||||
break;
|
ret = new AST_Number({ value: value });
|
||||||
case "bigint":
|
} else {
|
||||||
ret = new AST_BigInt({ start: tok, end: tok, value: tok.value });
|
ret = new AST_Infinity();
|
||||||
break;
|
if (value < 0) ret = new AST_UnaryPrefix({ operator: "-", expression: ret });
|
||||||
case "string":
|
|
||||||
ret = new AST_String({
|
|
||||||
start : tok,
|
|
||||||
end : tok,
|
|
||||||
value : tok.value,
|
|
||||||
quote : tok.quote
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
case "regexp":
|
|
||||||
ret = new AST_RegExp({ start: tok, end: tok, value: tok.value });
|
|
||||||
break;
|
|
||||||
case "atom":
|
|
||||||
switch (tok.value) {
|
|
||||||
case "false":
|
|
||||||
ret = new AST_False({ start: tok, end: tok });
|
|
||||||
break;
|
|
||||||
case "true":
|
|
||||||
ret = new AST_True({ start: tok, end: tok });
|
|
||||||
break;
|
|
||||||
case "null":
|
|
||||||
ret = new AST_Null({ start: tok, end: tok });
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "bigint":
|
||||||
|
ret = new AST_BigInt({ value: value });
|
||||||
|
break;
|
||||||
|
case "string":
|
||||||
|
ret = new AST_String({ value : value, quote : tok.quote });
|
||||||
|
break;
|
||||||
|
case "regexp":
|
||||||
|
ret = new AST_RegExp({ value: value });
|
||||||
|
break;
|
||||||
|
case "atom":
|
||||||
|
switch (value) {
|
||||||
|
case "false":
|
||||||
|
ret = new AST_False();
|
||||||
|
break;
|
||||||
|
case "true":
|
||||||
|
ret = new AST_True();
|
||||||
|
break;
|
||||||
|
case "null":
|
||||||
|
ret = new AST_Null();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
unexpected();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
unexpected();
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
|
ret.start = ret.end = tok;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
literal_infinity: {
|
||||||
|
input: {
|
||||||
|
console.log(2e308, -1e2345);
|
||||||
|
}
|
||||||
|
expect_exact: "console.log(1/0,-(1/0));"
|
||||||
|
}
|
||||||
|
|
||||||
parentheses_for_prototype_functions: {
|
parentheses_for_prototype_functions: {
|
||||||
beautify = {
|
beautify = {
|
||||||
beautify: true,
|
beautify: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user