aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-03-15 22:52:21 +0000
committerGitHub <noreply@github.com>2021-03-16 06:52:21 +0800
commitaa6e33e2085da5ee9254910726a5bd7caac43dcc (patch)
tree0a4c5832062cc30b013671cda324ed7600d24ae6
parent176581d732276df1578f1eb98e722ec3b5f52bbd (diff)
downloadtracifyjs-aa6e33e2085da5ee9254910726a5bd7caac43dcc.tar.gz
tracifyjs-aa6e33e2085da5ee9254910726a5bd7caac43dcc.zip
parse out-of-range numerals correctly (#4781)
-rw-r--r--lib/parse.js33
-rw-r--r--test/compress/numbers.js7
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,