From 77c9116c91e8a758263ab68a7a7f720dcb7e0214 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 16 Mar 2021 01:42:28 +0000 Subject: [PATCH] fix corner case in `unsafe` (#4783) --- lib/compress.js | 5 ++-- test/compress/pure_getters.js | 46 +++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 563d09d965..da756774de 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -8522,11 +8522,12 @@ merge(Compressor.prototype, { } else if (exp instanceof AST_Dot) switch (exp.property) { case "toString": // x.toString() ---> "" + x - if (self.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) { + var expr = exp.expression; + if (self.args.length == 0 && !(expr.may_throw_on_access(compressor) || expr instanceof AST_Super)) { return make_node(AST_Binary, self, { operator: "+", left: make_node(AST_String, self, { value: "" }), - right: exp.expression, + right: expr, }).optimize(compressor); } break; diff --git a/test/compress/pure_getters.js b/test/compress/pure_getters.js index 13f9d4feb1..bf6f73efe5 100644 --- a/test/compress/pure_getters.js +++ b/test/compress/pure_getters.js @@ -1490,3 +1490,49 @@ issue_4751: { }; } } + +super_toString: { + options = { + pure_getters: true, + unsafe: true, + } + input: { + console.log({ + f() { + return super.toString(); + }, + }.f()); + } + expect: { + console.log({ + f() { + return super.toString(); + }, + }.f()); + } + expect_stdout: "[object Object]" + node_version: ">=4" +} + +this_toString: { + options = { + pure_getters: true, + unsafe: true, + } + input: { + console.log({ + f() { + return this.toString(); + }, + }.f()); + } + expect: { + console.log({ + f() { + return "" + this; + }, + }.f()); + } + expect_stdout: "[object Object]" + node_version: ">=4" +}