From d1b17df38ce80806f258265570b18ca68442a13e Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Thu, 29 Jul 2010 21:33:35 -0400 Subject: [PATCH] better output when trying to force a pure statment to become a return --- lib/nodes.js | 3 +++ src/nodes.coffee | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/nodes.js b/lib/nodes.js index 0fbe0f22..5459193d 100644 --- a/lib/nodes.js +++ b/lib/nodes.js @@ -261,6 +261,9 @@ }; __extends(LiteralNode, BaseNode); LiteralNode.prototype['class'] = 'LiteralNode'; + LiteralNode.prototype.makeReturn = function() { + return this.isStatement() ? this : LiteralNode.__superClass__.makeReturn.call(this); + }; LiteralNode.prototype.isStatement = function() { return this.value === 'break' || this.value === 'continue'; }; diff --git a/src/nodes.coffee b/src/nodes.coffee index fecdbcd7..7d659e3d 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -238,6 +238,9 @@ exports.LiteralNode = class LiteralNode extends BaseNode constructor: (@value) -> + makeReturn: -> + if @isStatement() then this else super() + # Break and continue must be treated as pure statements -- they lose their # meaning when wrapped in a closure. isStatement: -> @@ -258,10 +261,10 @@ exports.LiteralNode = class LiteralNode extends BaseNode # make sense. exports.ReturnNode = class ReturnNode extends BaseNode - class: 'ReturnNode' - isStatement: -> yes + class: 'ReturnNode' + isStatement: -> yes isPureStatement: -> yes - children: ['expression'] + children: ['expression'] constructor: (@expression) ->