From baedf99f635735c50936bb555e4a77058ec9e2e0 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Tue, 22 Mar 2022 16:45:48 -0700 Subject: [PATCH] Chapter 24.6 --- clox/src/compiler.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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)) {