From c219adffd51ddc5803b96764f792fddbd02f9637 Mon Sep 17 00:00:00 2001 From: Jeremy Ashkenas Date: Tue, 2 Mar 2010 00:43:01 -0500 Subject: [PATCH] removing special rule from rewriter for naked functions in arrays --- lib/lexer.js | 2 +- lib/rewriter.js | 2 +- src/lexer.coffee | 2 +- src/rewriter.coffee | 1 - test/test_functions.coffee | 7 ++++++- test/test_literals.coffee | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/lexer.js b/lib/lexer.js index 638dcff4..451087af 100644 --- a/lib/lexer.js +++ b/lib/lexer.js @@ -85,7 +85,7 @@ // The remainder of the source code. this.i = 0; // Current character position we're parsing. - this.line = 1; + this.line = 0; // The current line. this.indent = 0; // The current indent level. diff --git a/lib/rewriter.js b/lib/rewriter.js index a0e7e3bc..61fa86f8 100644 --- a/lib/rewriter.js +++ b/lib/rewriter.js @@ -252,7 +252,7 @@ idx += 1; tok = this.tokens[idx]; pre = this.tokens[idx - 1]; - if ((!tok || (SINGLE_CLOSERS.indexOf(tok[0]) >= 0 && tok[1] !== ';') || (pre[0] === ',' && tok[0] === 'PARAM_START') || (tok[0] === ')' && parens === 0)) && !(starter === 'ELSE' && tok[0] === 'ELSE')) { + if ((!tok || (SINGLE_CLOSERS.indexOf(tok[0]) >= 0 && tok[1] !== ';') || (tok[0] === ')' && parens === 0)) && !(starter === 'ELSE' && tok[0] === 'ELSE')) { insertion = pre[0] === "," ? idx - 1 : idx; this.tokens.splice(insertion, 0, ['OUTDENT', 2, token[2]]); break; diff --git a/src/lexer.coffee b/src/lexer.coffee index 02ca7f27..2417b2b2 100644 --- a/src/lexer.coffee +++ b/src/lexer.coffee @@ -115,7 +115,7 @@ exports.Lexer: class Lexer tokenize: (code) -> @code : code # The remainder of the source code. @i : 0 # Current character position we're parsing. - @line : 1 # The current line. + @line : 0 # The current line. @indent : 0 # The current indent level. @indents : [] # The stack of all indent levels we are currently within. @tokens : [] # Collection of all parsed tokens in the form ['TOKEN_TYPE', value, line] diff --git a/src/rewriter.coffee b/src/rewriter.coffee index ae5689c1..8e19b596 100644 --- a/src/rewriter.coffee +++ b/src/rewriter.coffee @@ -180,7 +180,6 @@ exports.Rewriter: class Rewriter pre: @tokens[idx - 1] if (not tok or (SINGLE_CLOSERS.indexOf(tok[0]) >= 0 and tok[1] isnt ';') or - (pre[0] is ',' and tok[0] is 'PARAM_START') or (tok[0] is ')' && parens is 0)) and not (starter is 'ELSE' and tok[0] is 'ELSE') insertion: if pre[0] is "," then idx - 1 else idx diff --git a/test/test_functions.coffee b/test/test_functions.coffee index 327ee6e8..86be8f57 100644 --- a/test/test_functions.coffee +++ b/test/test_functions.coffee @@ -14,6 +14,11 @@ ok y.x.name is 'x' () -> +# Multiple nested function declarations mixed with implicit calls should not +# cause a syntax error. +(one) -> (two) -> three four, (five) -> six seven, eight, (nine) -> + + obj: { name: "Fred" @@ -70,7 +75,7 @@ ok result is 10 # And even with strange things like this: -funcs: [(x) -> x, (x) -> x * x] +funcs: [((x) -> x), ((x) -> x * x)] result: funcs[1] 5 ok result is 25 diff --git a/test/test_literals.coffee b/test/test_literals.coffee index db0f9563..03e483b7 100644 --- a/test/test_literals.coffee +++ b/test/test_literals.coffee @@ -1,4 +1,4 @@ -a: [(x) -> x, (x) -> x * x] +a: [((x) -> x), ((x) -> x * x)] ok a.length is 2