[Pkg-javascript-commits] [uglifyjs] 17/28: Evaluate "foo".length ==> 3
Jonas Smedegaard
dr at jones.dk
Thu Oct 16 11:57:31 UTC 2014
This is an automated email from the git hooks/post-receive script.
js pushed a commit to branch master
in repository uglifyjs.
commit 8511e80f489b4b7e3de8122009d492123a314ca8
Author: Dan Wolff <dan.d.wolff at gmail.com>
Date: Tue Jul 1 00:51:42 2014 +0200
Evaluate "foo".length ==> 3
---
lib/compress.js | 14 +++++++++++++-
test/compress/properties.js | 20 ++++++++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/lib/compress.js b/lib/compress.js
index b589aca..fd3f7a2 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -775,6 +775,14 @@ merge(Compressor.prototype, {
if (d && d.constant && d.init) return ev(d.init, compressor);
throw def;
});
+ def(AST_Dot, function(compressor){
+ if (compressor.option("unsafe") && this.property == "length") {
+ var str = ev(this.expression, compressor);
+ if (typeof str == "string")
+ return str.length;
+ }
+ throw def;
+ });
})(function(node, func){
node.DEFMETHOD("_eval", func);
});
@@ -2349,7 +2357,7 @@ merge(Compressor.prototype, {
return make_node(AST_Dot, self, {
expression : self.expression,
property : prop
- });
+ }).optimize(compressor);
}
var v = parseFloat(prop);
if (!isNaN(v) && v.toString() == prop) {
@@ -2361,6 +2369,10 @@ merge(Compressor.prototype, {
return self;
});
+ OPT(AST_Dot, function(self, compressor){
+ return self.evaluate(compressor)[0];
+ });
+
function literals_in_boolean_context(self, compressor) {
if (compressor.option("booleans") && compressor.in_boolean_context()) {
return make_node(AST_True, self);
diff --git a/test/compress/properties.js b/test/compress/properties.js
index 736d9d8..3947073 100644
--- a/test/compress/properties.js
+++ b/test/compress/properties.js
@@ -52,3 +52,23 @@ dot_properties_es5: {
a[""] = "whitespace";
}
}
+
+evaluate_length: {
+ options = {
+ properties: true,
+ unsafe: true,
+ evaluate: true
+ };
+ input: {
+ a = "foo".length;
+ a = ("foo" + "bar")["len" + "gth"];
+ a = b.length;
+ a = ("foo" + b).length;
+ }
+ expect: {
+ a = 3;
+ a = 6;
+ a = b.length;
+ a = ("foo" + b).length;
+ }
+}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/uglifyjs.git
More information about the Pkg-javascript-commits
mailing list