From e87797aff31cd99a6a08e46cb52aff61e1c7d75d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 9 Jul 2023 12:20:13 +0100 Subject: Handle block returns properly --- src/main/java/org/shedlang/compiler/parser/Parser.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'src/main/java/org/shedlang/compiler/parser') diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index 8462d937..bfb9c822 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -118,7 +118,7 @@ public class Parser { body.add(statement); - if (tokens.isNext(TokenType.SYMBOL_BRACE_CLOSE) || statement instanceof UntypedFunctionReturnNode) { + if (tokens.isNext(TokenType.SYMBOL_BRACE_CLOSE) || statement instanceof UntypedBlockReturnNode) { tokens.skip(TokenType.SYMBOL_BRACE_CLOSE); return body; } @@ -193,18 +193,13 @@ public class Parser { var expression = parseTopLevelExpression(tokens); - // TODO: if we're not at the top level of a function (e.g. inside an - // if), then we're not going to return (from the function). What's - // better terminology for this? Java uses yield, but that has other - // meanings in other languages. Perhaps explicitly distinguish - // "block return" and "function return"? var isReturn = !tokens.trySkip(TokenType.SYMBOL_SEMICOLON); var end = tokens.position(); var source = start.to(end); return isReturn - ? new UntypedFunctionReturnNode(expression, source) + ? new UntypedBlockReturnNode(expression, source) : new UntypedExpressionStatementNode(expression, source); } -- cgit v1.2.3