Skip to content

Commit

Permalink
improve numeral compression (#3108)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexlamsl committed Apr 27, 2018
1 parent 70d4477 commit 22cea02
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 25 deletions.
30 changes: 17 additions & 13 deletions lib/output.js
Original file line number Diff line number Diff line change
Expand Up @@ -1459,23 +1459,27 @@ function OutputStream(options) {
}

function make_num(num) {
var str = num.toString(10), a = [ str.replace(/^0\./, ".").replace('e+', 'e') ], m;
var str = num.toString(10).replace(/^0\./, ".").replace("e+", "e");
var candidates = [ str ];
if (Math.floor(num) === num) {
if (num >= 0) {
a.push("0x" + num.toString(16).toLowerCase(), // probably pointless
"0" + num.toString(8)); // same.
if (num < 0) {
candidates.push("-0x" + (-num).toString(16).toLowerCase());
} else {
a.push("-0x" + (-num).toString(16).toLowerCase(), // probably pointless
"-0" + (-num).toString(8)); // same.
candidates.push("0x" + num.toString(16).toLowerCase());
}
if ((m = /^(.*?)(0+)$/.exec(num))) {
a.push(m[1] + "e" + m[2].length);
}
} else if ((m = /^0?\.(0+)(.*)$/.exec(num))) {
a.push(m[2] + "e-" + (m[1].length + m[2].length),
str.substr(str.indexOf(".")));
}
return best_of(a);
var match, len, digits;
if (match = /^\.0+/.exec(str)) {
len = match[0].length;
digits = str.slice(len);
candidates.push(digits + "e-" + (digits.length + len - 1));
} else if (match = /0+$/.exec(str)) {
len = match[0].length;
candidates.push(str.slice(0, -len) + "e" + len);
} else if (match = /^(\d)\.(\d+)e(-?\d+)$/.exec(str)) {
candidates.push(match[1] + match[2] + "e" + (match[3] - match[2].length));
}
return best_of(candidates);
}

function make_block(stmt, output) {
Expand Down
52 changes: 40 additions & 12 deletions test/compress/numbers.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,49 @@
hex_numbers_in_parentheses_for_prototype_functions: {
beautify = {
beautify: true,
}
input: {
(-2);
(-2).toFixed(0);
function f() {
(-2);
(-2).toFixed(0);

(2);
(2).toFixed(0);
(2);
(2).toFixed(0);

(0.2);
(0.2).toFixed(0);
(0.2);
(0.2).toFixed(0);

(0.00000002);
(0.00000002).toFixed(0);
(2.34e20);
(2.34e20).toFixed(0);

(1000000000000000128);
(1000000000000000128).toFixed(0);
}
expect_exact: "-2;(-2).toFixed(0);2;2..toFixed(0);.2;.2.toFixed(0);2e-8;2e-8.toFixed(0);0xde0b6b3a7640080;(0xde0b6b3a7640080).toFixed(0);"
(0.00000002);
(0.00000002).toFixed(0);

(1000000000000000128);
(1000000000000000128).toFixed(0);

(-1000000000000000128);
(-1000000000000000128).toFixed(0);
}
}
expect_exact: [
"function f() {",
" -2;",
" (-2).toFixed(0);",
" 2;",
" 2..toFixed(0);",
" .2;",
" .2.toFixed(0);",
" 234e18;",
" 234e18.toFixed(0);",
" 2e-8;",
" 2e-8.toFixed(0);",
" 0xde0b6b3a7640080;",
" (0xde0b6b3a7640080).toFixed(0);",
" -0xde0b6b3a7640080;",
" (-0xde0b6b3a7640080).toFixed(0);",
"}",
]
}

comparisons: {
Expand Down

0 comments on commit 22cea02

Please sign in to comment.