aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-27 21:56:02 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-27 21:56:02 +0100
commitd310a8cf9487f253fbc4152d182dfdef460aeb6d (patch)
treeb20dc5d9d250556ce68ca98191e4d83d0a9a274d /src
parentcaa7e3a069fa0dfe81834d48850384c38594dd3a (diff)
Read return statements without value
Diffstat (limited to 'src')
-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;");