diff --git a/src/vm/wren_compiler.c b/src/vm/wren_compiler.c index 92b16cac0..2bc6f54cc 100644 --- a/src/vm/wren_compiler.c +++ b/src/vm/wren_compiler.c @@ -1747,6 +1747,7 @@ typedef struct // Forward declarations since the grammar is recursive. static GrammarRule* getRule(TokenType type); static void expression(Compiler* compiler); +static void maybeTuple(Compiler* compiler); static void statement(Compiler* compiler); static void definition(Compiler* compiler); static void parsePrecedence(Compiler* compiler, Precedence precedence); @@ -2138,7 +2139,7 @@ static void loadCoreVariable(Compiler* compiler, const char* name) // A parenthesized expression. static void grouping(Compiler* compiler, bool canAssign) { - expression(compiler); + maybeTuple(compiler); consume(compiler, TOKEN_RIGHT_PAREN, "Expect ')' after expression."); } @@ -2857,6 +2858,16 @@ void expression(Compiler* compiler) parsePrecedence(compiler, PREC_LOWEST); } +void maybeTuple(Compiler* compiler) +{ + expression(compiler); + + if (peek(compiler) == TOKEN_COMMA) + { + error(compiler, "Cannot create a tuple."); + } +} + // Returns the number of bytes for the arguments to the instruction // at [ip] in [fn]'s bytecode. static int getByteCountForArguments(const uint8_t* bytecode,