public void testMakeSureThatJsrWhichCallsItselfDoesNotRecurseForever() throws Exception { Block main = new Block("main"); Block sub = new Block("sub"); main.addOp(new JSR(0, sub)); main.addOp(new JSR(0, sub)); sub.addOp(new RetSub(1)); sub.addNextBlock(main); Stack2Turing converter = new Stack2Turing(main); converter.translate(); // Assert no exceptions and that we don't get into infinite recursion }
public void testJSRMultiBlock() throws Exception { Block main = new Block("main"); Block sub = new Block("sub"); Block sub1 = new Block("sub1"); Block sub2 = new Block("sub2"); sub.addNextBlock(sub1); sub1.addNextBlock(sub2); main.addOp(new JSR(0, sub)); Stack2Turing converter = new Stack2Turing(main); converter.translate(); // Assert no exceptions }
public void testJSRSingleBlock() throws Exception { Block main = new Block("main"); Block sub = new Block("sub"); main.addOp(new Load(0, new Variable("this", JavaType.OBJECT, false, false))); main.addOp(new JSR(0, sub)); main.addOp(new PutField(0, new FieldInfo(null, "a", JavaType.INT, false, false, false))); sub.addOp(new Load(0, new Constant(1, JavaType.INT))); sub.addOp(new Return(0, JavaType.VOID)); Stack2Turing converter = new Stack2Turing(main); List<Operation> operations = converter.translate(); assertEquals(1, operations.size()); assertEquals("null.a{int} <- 1{int}", operations.get(0).toString()); }