< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/DoWhileFactory.java
Print this page
*** 21,45 ****
* questions.
*/
package jdk.test.lib.jittester.factories;
! import jdk.test.lib.jittester.IRNode;
! import jdk.test.lib.jittester.Initialization;
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.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 {
private final Loop loop;
private final long complexityLimit;
private final int statementLimit;
private final int operatorLimit;
private boolean canHaveReturn = false;
--- 21,45 ----
* questions.
*/
package jdk.test.lib.jittester.factories;
! import jdk.test.lib.jittester.Block;
import jdk.test.lib.jittester.Literal;
import jdk.test.lib.jittester.LocalVariable;
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.utils.PseudoRandom;
! 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,70 ****
this.canHaveReturn = canHaveReturn;
thisLoopIterLimit = 0;
}
@Override
! protected IRNode sproduce() throws ProductionFailedException {
if (statementLimit > 0 && complexityLimit > 0) {
long complexity = complexityLimit;
// Loop header parameters
long headerComplLimit = (long) (0.005 * complexity * PseudoRandom.random());
complexity -= headerComplLimit;
--- 60,71 ----
this.canHaveReturn = canHaveReturn;
thisLoopIterLimit = 0;
}
@Override
! 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,97 ****
IRNodeBuilder builder = new IRNodeBuilder()
.setOwnerKlass(ownerClass)
.setResultType(returnType)
.setOperatorLimit(operatorLimit);
loop.initialization = builder.getCounterInitializerFactory(0).produce();
! IRNode header;
try {
header = builder.setComplexityLimit(headerComplLimit)
.setStatementLimit(headerStatementLimit)
.setLevel(level - 1)
.setSubBlock(true)
--- 88,98 ----
IRNodeBuilder builder = new IRNodeBuilder()
.setOwnerKlass(ownerClass)
.setResultType(returnType)
.setOperatorLimit(operatorLimit);
loop.initialization = builder.getCounterInitializerFactory(0).produce();
! Block header;
try {
header = builder.setComplexityLimit(headerComplLimit)
.setStatementLimit(headerStatementLimit)
.setLevel(level - 1)
.setSubBlock(true)
*** 99,119 ****
.setCanHaveContinues(false)
.setCanHaveReturn(false)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
! header = new Nothing();
}
// 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());
loop.condition = builder.setComplexityLimit(condComplLimit)
.setLocalVariable(counter)
.getLoopingConditionFactory(limiter)
.produce();
SymbolTable.push();
! IRNode body1;
try {
body1 = builder.setComplexityLimit(body1ComplLimit)
.setStatementLimit(body1StatementLimit)
.setLevel(level)
.setSubBlock(true)
--- 100,120 ----
.setCanHaveContinues(false)
.setCanHaveReturn(false)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
! header = emptyBlock;
}
// getChildren().set(DoWhile.DoWhilePart.HEADER.ordinal(), header);
! 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();
! Block body1;
try {
body1 = builder.setComplexityLimit(body1ComplLimit)
.setStatementLimit(body1StatementLimit)
.setLevel(level)
.setSubBlock(true)
*** 121,135 ****
.setCanHaveContinues(false)
.setCanHaveReturn(false)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
! body1 = new Nothing();
}
// getChildren().set(DoWhile.DoWhilePart.BODY1.ordinal(), body1);
loop.manipulator = builder.setLocalVariable(counter).getCounterManipulatorFactory().produce();
! IRNode body2;
try {
body2 = builder.setComplexityLimit(body2ComplLimit)
.setStatementLimit(body2StatementLimit)
.setLevel(level)
.setSubBlock(true)
--- 122,136 ----
.setCanHaveContinues(false)
.setCanHaveReturn(false)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
! body1 = emptyBlock;
}
// getChildren().set(DoWhile.DoWhilePart.BODY1.ordinal(), body1);
loop.manipulator = builder.setLocalVariable(counter).getCounterManipulatorFactory().produce();
! Block body2;
try {
body2 = builder.setComplexityLimit(body2ComplLimit)
.setStatementLimit(body2StatementLimit)
.setLevel(level)
.setSubBlock(true)
*** 137,147 ****
.setCanHaveContinues(false)
.setCanHaveReturn(canHaveReturn)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
! body2 = new Nothing();
}
// getChildren().set(DoWhile.DoWhilePart.BODY2.ordinal(), body2);
SymbolTable.pop();
return new DoWhile(level, loop, thisLoopIterLimit, header, body1, body2);
}
--- 138,148 ----
.setCanHaveContinues(false)
.setCanHaveReturn(canHaveReturn)
.getBlockFactory()
.produce();
} catch (ProductionFailedException e) {
! body2 = emptyBlock;
}
// getChildren().set(DoWhile.DoWhilePart.BODY2.ordinal(), body2);
SymbolTable.pop();
return new DoWhile(level, loop, thisLoopIterLimit, header, body1, body2);
}
< prev index next >