diff --git a/lib/coffeescript/nodes.js b/lib/coffeescript/nodes.js index 3b9bc9b544..fc1c0d96b6 100644 --- a/lib/coffeescript/nodes.js +++ b/lib/coffeescript/nodes.js @@ -6987,7 +6987,11 @@ invert() { var allInvertable, curr, fst, op, ref1; if (this.isInOperator()) { - this.invertOperator = '!'; + if (this.invertOperator) { + this.invertOperator = void 0; + } else { + this.invertOperator = '!'; + } return this; } if (this.isChain()) { diff --git a/src/nodes.coffee b/src/nodes.coffee index e38f85ae23..c380941720 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -4686,7 +4686,10 @@ exports.Op = class Op extends Base invert: -> if @isInOperator() - @invertOperator = '!' + if @invertOperator + @invertOperator = undefined + else + @invertOperator = '!' return @ if @isChain() allInvertable = yes diff --git a/test/operators.coffee b/test/operators.coffee index aab8d03015..4910264c8f 100644 --- a/test/operators.coffee +++ b/test/operators.coffee @@ -451,3 +451,26 @@ test "'new' target", -> # classes must be called with `new`. In this case `new` applies to `get` only throws -> new get()() + +test "#5480: 'when a not in b'", -> + needle = "needle" + hayStack = [] + needleStack = [needle] + + switch + when needle in hayStack then ok false + switch + when needle not in hayStack then ok true + switch + when needle in needleStack then ok true + switch + when needle not in needleStack then ok false + + switch "with subject" and true + when needle in hayStack then ok false + switch "with subject" and true + when needle not in hayStack then ok true + switch "with subject" and true + when needle in needleStack then ok true + switch "with subject" and true + when needle not in needleStack then ok false