diff --git a/lib/lexer.js b/lib/lexer.js index ccf8cac1..f04d36ec 100644 --- a/lib/lexer.js +++ b/lib/lexer.js @@ -434,7 +434,8 @@ } else if (_a === ')') { tok[0] = 'PARAM_END'; } else if (_a === '(') { - return (tok[0] = 'PARAM_START'); + tok[0] = 'PARAM_START'; + return tok[0]; } } return true; @@ -548,7 +549,8 @@ return null; } if ((typeof tag !== "undefined" && tag !== null)) { - return (tok[0] = tag); + tok[0] = tag; + return tok[0]; } return tok[0]; }; @@ -559,7 +561,8 @@ return null; } if ((typeof val !== "undefined" && val !== null)) { - return (tok[1] = val); + tok[1] = val; + return tok[1]; } return tok[1]; }; diff --git a/lib/nodes.js b/lib/nodes.js index a0a4fc2f..e3852299 100644 --- a/lib/nodes.js +++ b/lib/nodes.js @@ -346,7 +346,16 @@ }; __extends(ReturnNode, BaseNode); ReturnNode.prototype.type = 'Return'; + ReturnNode.prototype.top_sensitive = function top_sensitive() { + return true; + }; ReturnNode.prototype.compile_node = function compile_node(o) { + var expr; + expr = this.expression.make_return(); + if (!(expr instanceof ReturnNode)) { + return expr.compile(o); + } + del(o, 'top'); if (this.expression.is_statement()) { o.as_statement = true; } diff --git a/src/nodes.coffee b/src/nodes.coffee index d05e70a4..717d95f0 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -243,7 +243,13 @@ exports.ReturnNode: class ReturnNode extends BaseNode constructor: (expression) -> @children: [@expression: expression] + top_sensitive: -> + true + compile_node: (o) -> + expr: @expression.make_return() + return expr.compile(o) unless expr instanceof ReturnNode + del o, 'top' o.as_statement: true if @expression.is_statement() "${@tab}return ${@expression.compile(o)};"