From 7b9286b2c203b7548bcaf6fd9f11b05142896dd6 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Thu, 9 Dec 2010 21:03:41 -0500 Subject: [PATCH] Issue #905. Fixing soaked-value-as-a-comprehension-subject ... incorrect LEVEL_TOP. --- lib/nodes.js | 2 +- src/nodes.coffee | 2 +- test/test_comprehensions.coffee | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/nodes.js b/lib/nodes.js index 90ee23bc..3f1c2d15 100644 --- a/lib/nodes.js +++ b/lib/nodes.js @@ -1800,7 +1800,7 @@ step: this.step })); } else { - svar = this.source.compile(o, LEVEL_TOP); + svar = this.source.compile(o, LEVEL_PAREN); if ((name || this.own) && !IDENTIFIER.test(svar)) { defPart = "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n"; svar = ref; diff --git a/src/nodes.coffee b/src/nodes.coffee index 4c8c8133..56f67d64 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -1438,7 +1438,7 @@ exports.For = class For extends Base if @range forPart = source.compile merge(o, {index: ivar, @step}) else - svar = @source.compile o, LEVEL_TOP + svar = @source.compile o, LEVEL_PAREN if (name or @own) and not IDENTIFIER.test svar defPart = "#{@tab}#{ref = scope.freeVariable 'ref'} = #{svar};\n" svar = ref diff --git a/test/test_comprehensions.coffee b/test/test_comprehensions.coffee index 54f802e9..c3c74d6b 100644 --- a/test/test_comprehensions.coffee +++ b/test/test_comprehensions.coffee @@ -241,3 +241,11 @@ list = ['one', 'two'] eq typeof entity, 'undefined' eq facets['two'](), 'two' + + +# Issue #905. Soaks as the for loop subject. +a = {b: {c: [1, 2, 3]}} +for d in a.b?.c + e = d + +eq e, 3