aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-10 23:01:00 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-10 23:01:00 +0100
commit5c9e88bc03f9dbc9701391ae6196ec039adbbee8 (patch)
treeb2bdd42c61580284693560e44e449c1b12df7193 /src/main
parent85bcbfd70fff22169916c9fc1464afd00c376a2a (diff)
Handle lambdas that return void properly
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java
index 75391f7..7a4d52b 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaLambdaExpressionReader.java
@@ -1,14 +1,17 @@
package org.zwobble.couscous.frontends.java;
import org.eclipse.jdt.core.dom.*;
+import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.FormalArgumentNode;
import org.zwobble.couscous.ast.StatementNode;
import org.zwobble.couscous.ast.sugar.Lambda;
import org.zwobble.couscous.types.Type;
+import org.zwobble.couscous.types.Types;
import java.util.List;
import java.util.Optional;
+import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement;
import static org.zwobble.couscous.ast.ReturnNode.returns;
import static org.zwobble.couscous.ast.sugar.Lambda.lambda;
import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
@@ -50,7 +53,12 @@ public class JavaLambdaExpressionReader {
return reader.readStatements(scope, statements, Optional.of(returnType));
} else {
Expression body = (Expression) expression.getBody();
- return list(returns(reader.readExpression(scope, returnType, body)));
+ ExpressionNode value = reader.readExpression(scope, returnType, body);
+ if (returnType.equals(Types.VOID)) {
+ return list(expressionStatement(value));
+ } else {
+ return list(returns(value));
+ }
}
}
}