From aa6e33e2085da5ee9254910726a5bd7caac43dcc Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 15 Mar 2021 22:52:21 +0000 Subject: [PATCH] parse out-of-range numerals correctly (#4781) --- lib/parse.js | 33 +++++++++++++++++++-------------- test/compress/numbers.js | 7 +++++++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/lib/parse.js b/lib/parse.js index 06f3f840..aaaa7148 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -1763,40 +1763,45 @@ function parse($TEXT, options) { }; function as_atom_node() { - var tok = S.token, ret; + var ret, tok = S.token, value = tok.value; switch (tok.type) { case "num": - ret = new AST_Number({ start: tok, end: tok, value: tok.value }); + if (isFinite(value)) { + ret = new AST_Number({ value: value }); + } else { + ret = new AST_Infinity(); + if (value < 0) ret = new AST_UnaryPrefix({ operator: "-", expression: ret }); + } break; case "bigint": - ret = new AST_BigInt({ start: tok, end: tok, value: tok.value }); + ret = new AST_BigInt({ value: value }); break; case "string": - ret = new AST_String({ - start : tok, - end : tok, - value : tok.value, - quote : tok.quote - }); + ret = new AST_String({ value : value, quote : tok.quote }); break; case "regexp": - ret = new AST_RegExp({ start: tok, end: tok, value: tok.value }); + ret = new AST_RegExp({ value: value }); break; case "atom": - switch (tok.value) { + switch (value) { case "false": - ret = new AST_False({ start: tok, end: tok }); + ret = new AST_False(); break; case "true": - ret = new AST_True({ start: tok, end: tok }); + ret = new AST_True(); break; case "null": - ret = new AST_Null({ start: tok, end: tok }); + ret = new AST_Null(); break; + default: + unexpected(); } break; + default: + unexpected(); } next(); + ret.start = ret.end = tok; return ret; } diff --git a/test/compress/numbers.js b/test/compress/numbers.js index d7c0360c..dced3f16 100644 --- a/test/compress/numbers.js +++ b/test/compress/numbers.js @@ -1,3 +1,10 @@ +literal_infinity: { + input: { + console.log(2e308, -1e2345); + } + expect_exact: "console.log(1/0,-(1/0));" +} + parentheses_for_prototype_functions: { beautify = { beautify: true, -- 2.34.1