From ebdd57a2feee6dbf394d1517fab2daa685cf42d7 Mon Sep 17 00:00:00 2001 From: satyr Date: Sat, 9 Oct 2010 04:00:07 +0900 Subject: [PATCH] rewriter: detectEnd no longer passes `undefined` as token, fixing #750 --- lib/rewriter.js | 6 +++--- src/rewriter.coffee | 4 ++-- test/test_compilation.coffee | 7 +++++++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/rewriter.js b/lib/rewriter.js index 84c32b7d..3c17ccc8 100644 --- a/lib/rewriter.js +++ b/lib/rewriter.js @@ -29,10 +29,10 @@ return true; }; exports.Rewriter.prototype.detectEnd = function(i, condition, action) { - var levels, token; + var levels, token, tokens; + tokens = this.tokens; levels = 0; - while (true) { - token = this.tokens[i]; + while (token = tokens[i]) { if (levels === 0 && condition.call(this, token, i)) { return action.call(this, token, i); } diff --git a/src/rewriter.coffee b/src/rewriter.coffee index 4d1a7c20..e9a78b6b 100644 --- a/src/rewriter.coffee +++ b/src/rewriter.coffee @@ -46,9 +46,9 @@ class exports.Rewriter true detectEnd: (i, condition, action) -> + {tokens} = this levels = 0 - loop - token = @tokens[i] + while token = tokens[i] return action.call this, token, i if levels is 0 and condition.call this, token, i return action.call this, token, i - 1 if not token or levels < 0 if include EXPRESSION_START, token[0] diff --git a/test/test_compilation.coffee b/test/test_compilation.coffee index e5b4ec49..5c78c3b2 100644 --- a/test/test_compilation.coffee +++ b/test/test_compilation.coffee @@ -13,3 +13,10 @@ CoffeeScript.run("resultArray.push i for i of global", {noWrap: on, globals: on, ok 'setInterval' in global.resultArray ok 'passed' is CoffeeScript.eval '"passed"', noWrap: on, globals: on, fileName: 'tests' + +#750 +try + CoffeeScript.nodes 'f(->' + ok no +catch e + eq e.message, 'unclosed CALL_START on line 1'