aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkzc <zaxxon2011@gmail.com>2015-10-07 13:10:53 -0400
committerkzc <zaxxon2011@gmail.com>2015-10-07 13:10:53 -0400
commit4d2f7d83af839d78a381fc4faa79dbea3b2c8070 (patch)
tree192e64515cecb95999ba87dc02204279e5566cdc
parent99945fcd040b3f28360d69f5b8ab7b679e7b3375 (diff)
downloadtracifyjs-4d2f7d83af839d78a381fc4faa79dbea3b2c8070.tar.gz
tracifyjs-4d2f7d83af839d78a381fc4faa79dbea3b2c8070.zip
Fix handling of "use asm" when no command line flags are passed to uglifyjs. SCOPE_IS_NEEDED is unconditionally true now. Refactored floating point literal parsing to be more in keeping with the AST class design.
-rwxr-xr-xbin/uglifyjs2
-rw-r--r--lib/ast.js5
-rw-r--r--lib/output.js6
-rw-r--r--lib/parse.js11
4 files changed, 14 insertions, 10 deletions
diff --git a/bin/uglifyjs b/bin/uglifyjs
index 00342b8f..eb970c60 100755
--- a/bin/uglifyjs
+++ b/bin/uglifyjs
@@ -401,7 +401,7 @@ async.eachLimit(files, 1, function (file, cb) {
writeNameCache("props", cache);
})();
- var SCOPE_IS_NEEDED = COMPRESS || MANGLE || BEAUTIFY || ARGS.lint;
+ var SCOPE_IS_NEEDED = true;
var TL_CACHE = readNameCache("vars");
if (SCOPE_IS_NEEDED) {
diff --git a/lib/ast.js b/lib/ast.js
index c5ec8163..e7952847 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -864,10 +864,11 @@ var AST_String = DEFNODE("String", "value quote", {
}
}, AST_Constant);
-var AST_Number = DEFNODE("Number", "value", {
+var AST_Number = DEFNODE("Number", "value literal", {
$documentation: "A number literal",
$propdoc: {
- value: "[number] the numeric value"
+ value: "[number] the numeric value",
+ literal: "[string] numeric value as string (optional)"
}
}, AST_Constant);
diff --git a/lib/output.js b/lib/output.js
index 06c1e429..c15f3b20 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -1158,8 +1158,10 @@ function OutputStream(options) {
output.print_string(self.getValue(), self.quote);
});
DEFPRINT(AST_Number, function(self, output){
- if (self.value_string !== undefined && self.scope && self.scope.has_directive('use asm')) {
- output.print(self.value_string);
+ if (self.literal !== undefined
+ && +self.literal === self.value /* paranoid check */
+ && self.scope && self.scope.has_directive('use asm')) {
+ output.print(self.literal);
} else {
output.print(make_num(self.getValue()));
}
diff --git a/lib/parse.js b/lib/parse.js
index 830b5227..1ab03589 100644
--- a/lib/parse.js
+++ b/lib/parse.js
@@ -335,7 +335,11 @@ function tokenizer($TEXT, filename, html5_comments, shebang) {
if (prefix) num = prefix + num;
var valid = parse_js_number(num);
if (!isNaN(valid)) {
- return token("num", valid);
+ var tok = token("num", valid);
+ if (num.indexOf('.') >= 0) {
+ tok.literal = num;
+ }
+ return tok;
} else {
parse_error("Invalid syntax: " + num);
}
@@ -1148,10 +1152,7 @@ function parse($TEXT, options) {
ret = _make_symbol(AST_SymbolRef);
break;
case "num":
- ret = new AST_Number({ start: tok, end: tok, value: tok.value });
- var value_string = $TEXT.substring(tok.pos, tok.endpos);
- if (value_string.indexOf('.') >= 0)
- ret.value_string = value_string;
+ ret = new AST_Number({ start: tok, end: tok, value: tok.value, literal: tok.literal });
break;
case "string":
ret = new AST_String({