aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java1
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java9
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java22
3 files changed, 22 insertions, 10 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
index 39bd058..5cd55d2 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
@@ -19,6 +19,7 @@ import static org.zwobble.couscous.backends.python.PythonSerializer.serialize;
public class PythonBackend implements Backend {
private static final List<String> RUNTIME_FILES = asList(
"java.lang.Object",
+ "java.lang.Boolean",
"java.lang.Integer",
"_couscous");
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index a54ca55..4f07149 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -4,11 +4,12 @@ import org.eclipse.jdt.core.dom.*;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ClassNodeBuilder;
import org.zwobble.couscous.ast.StatementNode;
+import org.zwobble.couscous.ast.TypeName;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.Optional;
-import static org.zwobble.couscous.frontends.java.JavaStatementReader.readStatement;
import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
public class JavaReader {
@@ -63,8 +64,12 @@ public class JavaReader {
SingleVariableDeclaration parameter = (SingleVariableDeclaration)parameterObject;
builder.argument(parameter.resolveBinding().getKey(), parameter.getName().getIdentifier(), typeOf(parameter.resolveBinding()));
}
+ Optional<TypeName> returnType = method.getReturnType2() == null
+ ? Optional.empty()
+ : Optional.of(typeOf(method.getReturnType2()));
+ JavaStatementReader statementReader = new JavaStatementReader(returnType);
for (Object statement : method.getBody().statements()) {
- for (StatementNode intermediateStatement : readStatement((Statement)statement)) {
+ for (StatementNode intermediateStatement : statementReader.readStatement((Statement)statement)) {
builder.statement(intermediateStatement);
}
}
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 c5194b4..a766cce 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
@@ -5,6 +5,7 @@ import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.values.BooleanValue;
import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
import static java.util.Arrays.asList;
@@ -16,8 +17,14 @@ import static org.zwobble.couscous.frontends.java.JavaExpressionReader.readExpre
import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
import static org.zwobble.couscous.util.ExtraLists.eagerMap;
-public class JavaStatementReader {
- static List<StatementNode> readStatement(Statement statement) {
+class JavaStatementReader {
+ private final Optional<TypeName> returnType;
+
+ JavaStatementReader(Optional<TypeName> returnType) {
+ this.returnType = returnType;
+ }
+
+ List<StatementNode> readStatement(Statement statement) {
switch (statement.getNodeType()) {
case ASTNode.BLOCK:
return readBlock((Block)statement);
@@ -42,7 +49,7 @@ public class JavaStatementReader {
}
}
- private static List<StatementNode> readBlock(Block block) {
+ private List<StatementNode> readBlock(Block block) {
@SuppressWarnings("unchecked")
List<Statement> statements = block.statements();
return statements.stream()
@@ -50,23 +57,22 @@ public class JavaStatementReader {
.collect(Collectors.toList());
}
- private static StatementNode readReturnStatement(ReturnStatement statement) {
- // TODO: set target type
- return ReturnNode.returns(readExpressionWithoutBoxing(statement.getExpression()));
+ private StatementNode readReturnStatement(ReturnStatement statement) {
+ return ReturnNode.returns(readExpression(returnType.get(), statement.getExpression()));
}
private static StatementNode readExpressionStatement(ExpressionStatement statement) {
return expressionStatement(readExpressionWithoutBoxing(statement.getExpression()));
}
- private static StatementNode readIfStatement(IfStatement statement) {
+ private StatementNode readIfStatement(IfStatement statement) {
return IfStatementNode.ifStatement(
readExpression(BooleanValue.REF, statement.getExpression()),
readStatement(statement.getThenStatement()),
readStatement(statement.getElseStatement()));
}
- private static WhileNode readWhileStatement(WhileStatement statement) {
+ private WhileNode readWhileStatement(WhileStatement statement) {
return whileLoop(
readExpression(BooleanValue.REF, statement.getExpression()),
readStatement(statement.getBody()));