aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java5
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java6
2 files changed, 10 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
index e75585f..6b71684 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
@@ -93,7 +93,10 @@ class JavaStatementReader {
}
private StatementNode readReturnStatement(ReturnStatement statement) {
- return ReturnNode.returns(readExpression(returnType.get(), statement.getExpression()));
+ ExpressionNode value = statement.getExpression() == null
+ ? LiteralNode.UNIT
+ : readExpression(returnType.get(), statement.getExpression());
+ return ReturnNode.returns(value);
}
private StatementNode readThrowStatement(ThrowStatement statement) {
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
index 35756f5..d455301 100644
--- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
@@ -43,6 +43,12 @@ import static org.zwobble.couscous.util.ExtraSets.set;
public class JavaReaderTests {
@Test
+ public void canReadReturnWithoutValue() {
+ StatementNode statement = readStatement("void", "return;");
+ assertEquals(statement, returns(LiteralNode.UNIT));
+ }
+
+ @Test
public void canDeclareAndReferenceLocalVariables() {
List<StatementNode> statements = readStatements("int", "int x = 4; return x;");