} else if (node instanceof AST_Unary && node.write_only) {
sym = node.expression;
}
- while (sym instanceof AST_PropAccess && !sym.expression.may_throw_on_access(compressor)) {
- if (sym instanceof AST_Sub) props.unshift(sym.property);
- sym = sym.expression;
+ if (/strict/.test(compressor.option("pure_getters"))) {
+ while (sym instanceof AST_PropAccess && !sym.expression.may_throw_on_access(compressor)) {
+ if (sym instanceof AST_Sub) props.unshift(sym.property);
+ sym = sym.expression;
+ }
}
return sym;
};
}
expect_stdout: "PASS"
}
+
+issue_2938_1: {
+ options = {
+ pure_getters: true,
+ unused: true,
+ }
+ input: {
+ function f(a) {
+ a.b = "PASS";
+ }
+ var o = {};
+ f(o);
+ console.log(o.b);
+ }
+ expect: {
+ function f(a) {
+ a.b = "PASS";
+ }
+ var o = {};
+ f(o);
+ console.log(o.b);
+ }
+ expect_stdout: "PASS"
+}
+
+issue_2938_2: {
+ options = {
+ pure_getters: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ var Parser = function Parser() {};
+ var p = Parser.prototype;
+ p.initialContext = function initialContext() {
+ console.log("PASS");
+ };
+ p.braceIsBlock = function() {};
+ (new Parser).initialContext();
+ }
+ expect: {
+ var Parser = function() {};
+ var p = Parser.prototype;
+ p.initialContext = function() {
+ console.log("PASS");
+ };
+ p.braceIsBlock = function() {};
+ (new Parser).initialContext();
+ }
+ expect_stdout: "PASS"
+}
this.timeout(20 * 60 * 1000);
[
"-mc",
- "-mc keep_fargs=false,passes=3,unsafe,unsafe_comps,unsafe_math,unsafe_proto",
+ "-mc keep_fargs=false,passes=3,pure_getters,unsafe,unsafe_comps,unsafe_math,unsafe_proto",
].forEach(function(options) {
it("Should pass with options " + options, function(done) {
var args = options.split(/ /);