Skip to content

Commit 8392f62

Browse files
fix parsing number literals large enough to be perceived as Infinity
1 parent 14d81c5 commit 8392f62

2 files changed

Lines changed: 27 additions & 6 deletions

File tree

lib/parse.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ import {
101101
AST_If,
102102
AST_Import,
103103
AST_ImportMeta,
104+
AST_Infinity,
104105
AST_IterationStatement,
105106
AST_Label,
106107
AST_LabeledStatement,
@@ -2313,12 +2314,22 @@ function parse($TEXT, options) {
23132314
ret = _make_symbol(AST_SymbolRef);
23142315
break;
23152316
case "num":
2316-
ret = new AST_Number({
2317-
start: tok,
2318-
end: tok,
2319-
value: tok.value,
2320-
raw: LATEST_RAW
2321-
});
2317+
if (tok.value === Infinity) {
2318+
// very large float values are parsed as Infinity
2319+
ret = new AST_Infinity({
2320+
start: tok,
2321+
end: tok,
2322+
value: tok.value,
2323+
raw: LATEST_RAW
2324+
});
2325+
} else {
2326+
ret = new AST_Number({
2327+
start: tok,
2328+
end: tok,
2329+
value: tok.value,
2330+
raw: LATEST_RAW
2331+
});
2332+
}
23222333
break;
23232334
case "big_int":
23242335
ret = new AST_BigInt({

test/compress/numbers.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,3 +304,13 @@ numeric_separator_double_underscore: {
304304
message: "Only one underscore is allowed as numeric separator"
305305
})
306306
}
307+
308+
large_numbers_converted_to_infinity: {
309+
input: {
310+
console.log(Infinity),console.log(1e500),console.log(-1e500);
311+
}
312+
expect: {
313+
console.log(1/0),console.log(1/0),console.log(-1/0);
314+
}
315+
expect_stdout: true
316+
}

0 commit comments

Comments
 (0)