From 6e86ee950d98ebacef7e02515e34d758c4f836a1 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sat, 25 Mar 2017 17:40:18 +0800 Subject: [PATCH] fix typeof side-effects (#1669) `has_side_effects()` does not take `typeof`'s magical power of not tripping over undeclared variable into account. fixes #1668 --- lib/compress.js | 4 ++-- test/compress/typeof.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 47eb4d73..e12c5eb0 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3013,10 +3013,10 @@ merge(Compressor.prototype, { // typeof always returns a non-empty string, thus it's // always true in booleans compressor.warn("Boolean expression always true [{file}:{line},{col}]", self.start); - return make_node(AST_Seq, self, { + return (e instanceof AST_SymbolRef ? make_node(AST_True, self) : make_node(AST_Seq, self, { car: e, cdr: make_node(AST_True, self) - }).optimize(compressor); + })).optimize(compressor); } } // avoids infinite recursion of numerals diff --git a/test/compress/typeof.js b/test/compress/typeof.js index 7bf8e5e3..60f3d1d0 100644 --- a/test/compress/typeof.js +++ b/test/compress/typeof.js @@ -48,3 +48,15 @@ typeof_in_boolean_context: { foo(); } } + +issue_1668: { + options = { + booleans: true, + } + input: { + if (typeof bar); + } + expect: { + if (!0); + } +} -- 2.34.1