From d62be82778211ad0edee565d848205ee739d8efb Mon Sep 17 00:00:00 2001 From: Robert de Forest Date: Wed, 3 Jun 2026 00:19:37 -0700 Subject: [PATCH 1/2] Fixes #5480: clear when re-inverting an 'in' Op --- lib/coffeescript/nodes.js | 6 +++++- src/nodes.coffee | 5 ++++- test/operators.coffee | 23 +++++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) 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..a1cdebfee9 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" + when needle in hayStack then ok false + switch "with subject" + when needle not in hayStack then ok true + switch "with subject" + when needle in needleStack then ok true + switch "with subject" + when needle not in needleStack then ok false From 4b48f357a4b6fa37407912e4f943c30ba5fcd81d Mon Sep 17 00:00:00 2001 From: Robert de Forest Date: Fri, 5 Jun 2026 23:23:58 -0700 Subject: [PATCH 2/2] test/operators: change switch subjects to boolean so they match the tests --- test/operators.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/operators.coffee b/test/operators.coffee index a1cdebfee9..4910264c8f 100644 --- a/test/operators.coffee +++ b/test/operators.coffee @@ -466,11 +466,11 @@ test "#5480: 'when a not in b'", -> switch when needle not in needleStack then ok false - switch "with subject" + switch "with subject" and true when needle in hayStack then ok false - switch "with subject" + switch "with subject" and true when needle not in hayStack then ok true - switch "with subject" + switch "with subject" and true when needle in needleStack then ok true - switch "with subject" + switch "with subject" and true when needle not in needleStack then ok false