From c3a032c9d0ffb0c005f81d4dcba477408142914e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 2 Nov 2023 23:15:38 +0000 Subject: Support type-checking return statements with no expression --- .../shedlang/compiler/typechecker/TypeChecker.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index d00cc352..6dd1a3f3 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -435,6 +435,19 @@ public class TypeChecker { }; } + private static TypeCheckerResult typeCheckExpressionOptional( + Optional untyped, + Optional hint, + Source source, + TypeCheckerContext context + ) { + if (untyped.isPresent()) { + return typeCheckExpression(untyped.get(), hint, context); + } else { + return context.toResult(new TypedUnitLiteralNode(source)); + } + } + private static TypeCheckerResult typeCheckExpressionStatement( UntypedExpressionStatementNode untyped, TypeCheckerContext context @@ -768,7 +781,12 @@ public class TypeChecker { TypeCheckerContext context ) { // TODO: pass return type as hint if available - var expressionResult = typeCheckExpression(untyped.expression().orElseThrow(), Optional.empty(), context); + var expressionResult = typeCheckExpressionOptional( + untyped.expression(), + Optional.empty(), + untyped.source(), + context + ); var expression = expressionResult.value(); context = expressionResult.context(); -- cgit v1.2.3