diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java | 5 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 6 |
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;"); |
