diff --git a/clox/src/compiler.c b/clox/src/compiler.c index ea40d7e..b1e4811 100644 --- a/clox/src/compiler.c +++ b/clox/src/compiler.c @@ -444,6 +444,20 @@ static void printStatement() { emitByte(OP_PRINT); } +static void returnStatement() { + if (current->type == TYPE_SCRIPT) { + error("Can't return from top-level code."); + } + + if (match(TOKEN_SEMICOLON)) { + emitReturn(); + } else { + expression(); + consume(TOKEN_SEMICOLON, "Expect ';' after return value."); + emitByte(OP_RETURN); + } +} + static void whileStatement() { int loopStart = currentChunk()->count; consume(TOKEN_LEFT_PAREN, "Expect '(' after 'while'."); @@ -503,6 +517,8 @@ static void statement() { forStatement(); } else if (match(TOKEN_IF)) { ifStatement(); + } else if (match(TOKEN_RETURN)) { + returnStatement(); } else if (match(TOKEN_WHILE)) { whileStatement(); } else if (match(TOKEN_LEFT_BRACE)) {