From 0497c0742ff537b0e6c6bc133ef3921d025e4349 Mon Sep 17 00:00:00 2001 From: Jann Horn Date: Sun, 27 Mar 2011 19:46:44 +0200 Subject: [PATCH 1/3] fixes #1099: instead of nothing, compile to false "if a in []" --- lib/nodes.js | 3 +++ src/nodes.coffee | 1 + 2 files changed, 4 insertions(+) diff --git a/lib/nodes.js b/lib/nodes.js index 7b2ccd5e..4d956795 100644 --- a/lib/nodes.js +++ b/lib/nodes.js @@ -1719,6 +1719,9 @@ } return _results; }).call(this); + if (tests.length === 0) { + return 'false'; + } tests = tests.join(cnj); if (o.level < LEVEL_OP) { return tests; diff --git a/src/nodes.coffee b/src/nodes.coffee index 99370609..4c43430b 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -1340,6 +1340,7 @@ exports.In = class In extends Base [cmp, cnj] = if @negated then [' !== ', ' && '] else [' === ', ' || '] tests = for item, i in @array.base.objects (if i then ref else sub) + cmp + item.compile o, LEVEL_OP + return 'false' if tests.length is 0 tests = tests.join cnj if o.level < LEVEL_OP then tests else "(#{tests})" From 9d72208d9e6a0bb14ab5756dc6161ccc6f060b18 Mon Sep 17 00:00:00 2001 From: Jann Horn Date: Sun, 27 Mar 2011 21:35:29 +0200 Subject: [PATCH 2/3] added a test (issue #1099) --- test/operators.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/operators.coffee b/test/operators.coffee index 97ea24eb..39768e92 100644 --- a/test/operators.coffee +++ b/test/operators.coffee @@ -184,6 +184,9 @@ test "#768: `in` should preserve evaluation order", -> ok a() not in [b(),c()] eq 3, share +test "#1099: empty array after `in` should compile to `false`", -> + eq 5 in [], false + # Chained Comparison From f03bcc24add88611af0e24f7e80ee39622195893 Mon Sep 17 00:00:00 2001 From: Michael Ficarra Date: Sun, 27 Mar 2011 23:42:49 -0400 Subject: [PATCH 3/3] enhanced tests for #1099 fix --- test/operators.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/operators.coffee b/test/operators.coffee index 39768e92..87a0a6f5 100644 --- a/test/operators.coffee +++ b/test/operators.coffee @@ -185,7 +185,8 @@ test "#768: `in` should preserve evaluation order", -> eq 3, share test "#1099: empty array after `in` should compile to `false`", -> - eq 5 in [], false + eq 1, [5 in []].length + eq false, do -> return 0 in [] # Chained Comparison