forked from JavaTX/JavaCompilerCore
Fix single expressions not converting to blocks. Fixes #123
This commit is contained in:
parent
f11d4b0716
commit
59585296b0
13
resources/bytecode/javFiles/Bug123.jav
Normal file
13
resources/bytecode/javFiles/Bug123.jav
Normal file
@ -0,0 +1,13 @@
|
||||
import java.lang.Boolean;
|
||||
import java.lang.Integer;
|
||||
|
||||
class Bug123 {
|
||||
Boolean works(){
|
||||
if(true) return true;
|
||||
else return false;
|
||||
}
|
||||
void fails(){
|
||||
Boolean a = true;
|
||||
if(true) a = false;
|
||||
}
|
||||
}
|
@ -633,7 +633,6 @@ public class StatementGenerator {
|
||||
/*
|
||||
*************** + Expression Conversions:
|
||||
*/
|
||||
|
||||
private Expression convert(Java17Parser.ExpressionContext expression) {
|
||||
switch (expression) {
|
||||
case PrimaryExpression2Context primary:
|
||||
|
@ -380,6 +380,13 @@ public class ASTToTargetAST {
|
||||
return new TargetBlock(block.statements.stream().map(this::convert).toList());
|
||||
}
|
||||
|
||||
protected TargetBlock convertWrapInBlock(Expression expression) {
|
||||
var res = convert(expression);
|
||||
if (!(res instanceof TargetBlock))
|
||||
return new TargetBlock(List.of(res));
|
||||
return (TargetBlock) res;
|
||||
}
|
||||
|
||||
protected TargetExpression convert(Expression expr) {
|
||||
var converter = new StatementToTargetExpression(this);
|
||||
expr.accept(converter);
|
||||
|
@ -145,18 +145,18 @@ public class StatementToTargetExpression implements ASTVisitor {
|
||||
forStmt.initializer.stream().map(converter::convert).toList(),
|
||||
forStmt.condition != null ? converter.convert(forStmt.condition) : null,
|
||||
forStmt.loopExpr.stream().map(converter::convert).toList(),
|
||||
converter.convert(forStmt.block)
|
||||
converter.convertWrapInBlock(forStmt.block)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(ForEachStmt forEachStmt) {
|
||||
result = new TargetForEach(converter.convert(forEachStmt.statement), converter.convert(forEachStmt.expression), converter.convert(forEachStmt.block));
|
||||
result = new TargetForEach(converter.convert(forEachStmt.statement), converter.convert(forEachStmt.expression), converter.convertWrapInBlock(forEachStmt.block));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(IfStmt ifStmt) {
|
||||
result = new TargetIf(converter.convert(ifStmt.expr), converter.convert(ifStmt.then_block), ifStmt.else_block != null ? converter.convert(ifStmt.else_block) : null);
|
||||
result = new TargetIf(converter.convert(ifStmt.expr), converter.convertWrapInBlock(ifStmt.then_block), ifStmt.else_block != null ? converter.convertWrapInBlock(ifStmt.else_block) : null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -848,4 +848,11 @@ public class TestComplete {
|
||||
var clazz = classFiles.get("Bug122");
|
||||
var instance = clazz.getDeclaredConstructor().newInstance();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBug123() throws Exception {
|
||||
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug123.jav");
|
||||
var clazz = classFiles.get("Bug123");
|
||||
var instance = clazz.getDeclaredConstructor().newInstance();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user