aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/parser
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-09 12:20:13 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-09 12:20:13 +0100
commite87797aff31cd99a6a08e46cb52aff61e1c7d75d (patch)
treefd437278318272bbf0deeb027f457f9106b141d7 /src/main/java/org/shedlang/compiler/parser
parent85be56d890f100b72dde8e011d7421e597888363 (diff)
Handle block returns properly
Diffstat (limited to 'src/main/java/org/shedlang/compiler/parser')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java9
1 files changed, 2 insertions, 7 deletions
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);
}