feat: migrate all function literals from fn syntax to new Fn block syntax

Replace all occurrences of the old `fn` function literal syntax with the new `new Fn {|params| body}` block syntax across benchmark, test, and source files. Update the Wren compiler to handle the pipe operator as a block argument delimiter by removing `TOKEN_PIPE` from the newline-swallowing token list and adding explicit newline matching in `infixOp`. Adjust test expectations in `conditional/precedence.wren` to remove `fn`-based expressions and update `test/assignment/local.wren` to use the new syntax.
This commit is contained in:
Bob Nystrom
2014-04-03 02:41:53 +00:00
parent 81f20caf33
commit e20da2f070
61 changed files with 124 additions and 127 deletions
+7 -1
View File
@@ -855,7 +855,6 @@ static void nextToken(Parser* parser)
case TOKEN_PERCENT:
case TOKEN_PLUS:
case TOKEN_MINUS:
case TOKEN_PIPE:
case TOKEN_PIPEPIPE:
case TOKEN_AMP:
case TOKEN_AMPAMP:
@@ -1987,6 +1986,13 @@ void infixOp(Compiler* compiler, bool allowAssignment)
{
GrammarRule* rule = &rules[compiler->parser->previous.type];
// The pipe operator does not swallow a newline after it because when it's
// used as a block argument delimiter, the newline is significant. So,
// discard it here.
// TODO: Do something cleaner. Having the newline handling be context
// sensitive is super gross.
match(compiler, TOKEN_LINE);
// Compile the right-hand side.
parsePrecedence(compiler, false, rule->precedence + 1);