diff options
| author | Alon Zakai <alonzakai@gmail.com> | 2013-01-19 14:32:14 -0800 | 
|---|---|---|
| committer | Alon Zakai <alonzakai@gmail.com> | 2013-01-19 14:32:14 -0800 | 
| commit | 7654dfe43471b752c80f6cb2976ace95d60a1319 (patch) | |
| tree | a5b59933fe6495f708e329683ed24dc8c28485eb /tools/js-optimizer.js | |
| parent | caf16eda45a7abc0397fa3bf4044bda16b36a606 (diff) | |
support 0x... numbers in +X to X.0 correction for asm
Diffstat (limited to 'tools/js-optimizer.js')
| -rw-r--r-- | tools/js-optimizer.js | 24 | 
1 files changed, 16 insertions, 8 deletions
| diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 8cd357cd..c779b4e6 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -2154,13 +2154,26 @@ function prepDotZero(ast) {    traverse(ast, function(node, type) {      if (type == 'unary-prefix' && node[1] == '+') {        if (node[2][0] == 'num') { -        return ['call', ['name', 'DOT$ZERO'], [['num', node[2][1]]]]; +        return ['call', ['name', 'DOT$ZERO'], [node[2]]];        } else if (node[2][0] == 'unary-prefix' && node[2][1] == '-' && node[2][2][0] == 'num') { -        return ['call', ['name', 'DOT$ZERO'], [['num', -node[2][2][1]]]]; +        node[2][2][1] = -node[2][2][1]; +        return ['call', ['name', 'DOT$ZERO'], [node[2][2]]];        }      }    });  } +function fixDotZero(js) { +  return js.replace(/DOT\$ZERO\(((0x)?[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)\)/g, function(m, num) { +    if (num.substr(0, 2) == '0x') { +      if (num[2] == '-') num = '-0x' + num.substr(3); // uglify generates 0x-8000 for some reason +      return eval(num) + '.0'; +    } +    if (num.indexOf('.') >= 0) return num; +    var e = num.indexOf('e'); +    if (e < 0) return num + '.0'; +    return num.substr(0, e) + '.0' + num.substr(e); +  }); +}  // Passes table @@ -2204,12 +2217,7 @@ if (asm && last) {  }  var js = astToSrc(ast, compress), old;  if (asm && last) { -  js = js.replace(/DOT\$ZERO\(([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)\)/g, function(m, num) { -    if (num.indexOf('.') >= 0) return num; -    var e = num.indexOf('e'); -    if (e < 0) return num + '.0'; -    return num.substr(0, e) + '.0' + num.substr(e); -  }); +  js = fixDotZero(js);  }  // remove unneeded newlines+spaces, and print | 
