fixes #189: use dotted member access when --screw-ie8 option given
authorMichael Ficarra <mficarra@groupon.com>
Sat, 20 Apr 2013 20:11:05 +0000 (15:11 -0500)
committerMichael Ficarra <mficarra@groupon.com>
Sat, 20 Apr 2013 20:11:05 +0000 (15:11 -0500)
bin/uglifyjs
lib/compress.js
test/compress/properties.js

index f20976d..aecc072 100755 (executable)
@@ -114,20 +114,21 @@ if (ARGS.acorn) {
     acorn = require("acorn");
 }
 
-var COMPRESS = getOptions("c", true);
-var MANGLE = getOptions("m", true);
+var COMPRESS = getOptions("c", true) || {};
+var MANGLE = getOptions("m", true) || {};
 var BEAUTIFY = getOptions("b", true);
 
-if (COMPRESS && ARGS.d) {
+if (ARGS.d) {
     COMPRESS.global_defs = getOptions("d");
 }
 
-if (MANGLE && ARGS.r) {
-    MANGLE.except = ARGS.r.replace(/^\s+|\s+$/g).split(/\s*,+\s*/);
+if (ARGS.screw_ie8) {
+    COMPRESS.screw_ie8 = true;
+    MANGLE.screw_ie8 = true;
 }
 
-if (MANGLE && ARGS.screw_ie8) {
-    MANGLE.screw_ie8 = true;
+if (ARGS.r) {
+    MANGLE.except = ARGS.r.replace(/^\s+|\s+$/g).split(/\s*,+\s*/);
 }
 
 var OUTPUT_OPTIONS = {
index 216826d..ebd3dd7 100644 (file)
@@ -66,6 +66,7 @@ function Compressor(options, false_by_default) {
         join_vars     : !false_by_default,
         cascade       : !false_by_default,
         side_effects  : !false_by_default,
+        screw_ie8     : false,
 
         warnings      : true,
         global_defs   : {}
@@ -1961,7 +1962,7 @@ merge(Compressor.prototype, {
         var prop = self.property;
         if (prop instanceof AST_String && compressor.option("properties")) {
             prop = prop.getValue();
-            if (is_identifier(prop)) {
+            if (is_identifier(prop) || compressor.option("screw_ie8")) {
                 return make_node(AST_Dot, self, {
                     expression : self.expression,
                     property   : prop
index 72e245e..9b066ec 100644 (file)
@@ -23,3 +23,18 @@ dot_properties: {
         a["if"] = "if";
     }
 }
+
+dot_properties_es5: {
+    options = {
+        properties: true,
+        screw_ie8: true
+    };
+    input: {
+        a["foo"] = "bar";
+        a["if"] = "if";
+    }
+    expect: {
+        a.foo = "bar";
+        a.if = "if";
+    }
+}