improve numeral compression (#3108)
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user