< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/DoWhileFactory.java
Print this page
@@ -21,25 +21,25 @@
* questions.
*/
package jdk.test.lib.jittester.factories;
-import jdk.test.lib.jittester.IRNode;
-import jdk.test.lib.jittester.Initialization;
+import jdk.test.lib.jittester.Block;
import jdk.test.lib.jittester.Literal;
import jdk.test.lib.jittester.LocalVariable;
-import jdk.test.lib.jittester.Nothing;
import jdk.test.lib.jittester.ProductionFailedException;
import jdk.test.lib.jittester.SymbolTable;
import jdk.test.lib.jittester.Type;
+import jdk.test.lib.jittester.TypeList;
import jdk.test.lib.jittester.loops.DoWhile;
import jdk.test.lib.jittester.loops.Loop;
import jdk.test.lib.jittester.types.TypeKlass;
-import jdk.test.lib.jittester.types.TypeInt;
import jdk.test.lib.jittester.utils.PseudoRandom;
-class DoWhileFactory extends SafeFactory {
+import java.util.LinkedList;
+
+class DoWhileFactory extends SafeFactory<DoWhile> {
private final Loop loop;
private final long complexityLimit;
private final int statementLimit;
private final int operatorLimit;
private boolean canHaveReturn = false;
@@ -60,11 +60,12 @@
this.canHaveReturn = canHaveReturn;
thisLoopIterLimit = 0;
}
@Override
- protected IRNode sproduce() throws ProductionFailedException {
+ protected DoWhile sproduce() throws ProductionFailedException {
+ Block emptyBlock = new Block(ownerClass, returnType, new LinkedList<>(), level - 1);
if (statementLimit > 0 && complexityLimit > 0) {
long complexity = complexityLimit;
// Loop header parameters
long headerComplLimit = (long) (0.005 * complexity * PseudoRandom.random());
complexity -= headerComplLimit;
@@ -87,11 +88,11 @@
IRNodeBuilder builder = new IRNodeBuilder()
.setOwnerKlass(ownerClass)
.setResultType(returnType)
.setOperatorLimit(operatorLimit);
loop.initialization = builder.getCounterInitializerFactory(0).produce();
- IRNode header;
+ Block header;
try {
header = builder.setComplexityLimit(headerComplLimit)
.setStatementLimit(headerStatementLimit)
.setLevel(level - 1)
.setSubBlock(true)
@@ -99,21 +100,21 @@
.setCanHaveContinues(false)
.setCanHaveReturn(false)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
- header = new Nothing();
+ header = emptyBlock;
}
// getChildren().set(DoWhile.DoWhilePart.HEADER.ordinal(), header);
- LocalVariable counter = new LocalVariable(((Initialization) loop.initialization).get());
- Literal limiter = new Literal(Integer.valueOf((int) thisLoopIterLimit), new TypeInt());
+ LocalVariable counter = new LocalVariable(loop.initialization.getVariableInfo());
+ Literal limiter = new Literal((int) thisLoopIterLimit, TypeList.INT);
loop.condition = builder.setComplexityLimit(condComplLimit)
.setLocalVariable(counter)
.getLoopingConditionFactory(limiter)
.produce();
SymbolTable.push();
- IRNode body1;
+ Block body1;
try {
body1 = builder.setComplexityLimit(body1ComplLimit)
.setStatementLimit(body1StatementLimit)
.setLevel(level)
.setSubBlock(true)
@@ -121,15 +122,15 @@
.setCanHaveContinues(false)
.setCanHaveReturn(false)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
- body1 = new Nothing();
+ body1 = emptyBlock;
}
// getChildren().set(DoWhile.DoWhilePart.BODY1.ordinal(), body1);
loop.manipulator = builder.setLocalVariable(counter).getCounterManipulatorFactory().produce();
- IRNode body2;
+ Block body2;
try {
body2 = builder.setComplexityLimit(body2ComplLimit)
.setStatementLimit(body2StatementLimit)
.setLevel(level)
.setSubBlock(true)
@@ -137,11 +138,11 @@
.setCanHaveContinues(false)
.setCanHaveReturn(canHaveReturn)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
- body2 = new Nothing();
+ body2 = emptyBlock;
}
// getChildren().set(DoWhile.DoWhilePart.BODY2.ordinal(), body2);
SymbolTable.pop();
return new DoWhile(level, loop, thisLoopIterLimit, header, body1, body2);
}
< prev index next >