diff --git a/lib/coffee-script/nodes.js b/lib/coffee-script/nodes.js index ad92b08809..006eed02e1 100644 --- a/lib/coffee-script/nodes.js +++ b/lib/coffee-script/nodes.js @@ -189,10 +189,11 @@ Base.prototype.traverseChildren = function(crossScope, func) { return this.eachChild(function(child) { - if (func(child) === false) { - return false; + var recur; + recur = func(child); + if (recur !== false) { + return child.traverseChildren(crossScope, func); } - return child.traverseChildren(crossScope, func); }); }; diff --git a/src/nodes.coffee b/src/nodes.coffee index f71df43ba3..f475a706b0 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -146,8 +146,8 @@ exports.Base = class Base traverseChildren: (crossScope, func) -> @eachChild (child) -> - return false if func(child) is false - child.traverseChildren crossScope, func + recur = func(child) + child.traverseChildren(crossScope, func) unless recur is no invert: -> new Op '!', this diff --git a/test/classes.coffee b/test/classes.coffee index ffe95fe278..a8cdebf242 100644 --- a/test/classes.coffee +++ b/test/classes.coffee @@ -337,6 +337,18 @@ test "#2502: parenthesizing inner object values", -> eq (new A).sections.default, 0 +test "conditional prototype property assignment", -> + debug = false + + class Person + if debug + age: -> 10 + else + age: -> 20 + + eq (new Person).age(), 20 + + test "mild metaprogramming", -> class Base