< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/ClassDefinitionBlockFactory.java
Print this page
*** 36,46 ****
import jdk.test.lib.jittester.classes.ClassDefinitionBlock;
import jdk.test.lib.jittester.classes.Klass;
import jdk.test.lib.jittester.types.TypeKlass;
import jdk.test.lib.jittester.utils.PseudoRandom;
! class ClassDefinitionBlockFactory extends Factory {
private final String prefix;
private final long complexityLimit;
private final int classesLimit;
private final int statementLimit;
private final int operatorLimit;
--- 36,46 ----
import jdk.test.lib.jittester.classes.ClassDefinitionBlock;
import jdk.test.lib.jittester.classes.Klass;
import jdk.test.lib.jittester.types.TypeKlass;
import jdk.test.lib.jittester.utils.PseudoRandom;
! class ClassDefinitionBlockFactory extends Factory<ClassDefinitionBlock> {
private final String prefix;
private final long complexityLimit;
private final int classesLimit;
private final int statementLimit;
private final int operatorLimit;
*** 60,70 ****
this.operatorLimit = operatorLimit;
this.level = level;
}
@Override
! public IRNode produce() throws ProductionFailedException {
ArrayList<IRNode> content = new ArrayList<>();
int limit = (int) Math.ceil(PseudoRandom.random() * classesLimit);
if (limit > 0) {
long classCompl = complexityLimit / limit;
IRNodeBuilder builder = new IRNodeBuilder().setLevel(level)
--- 60,70 ----
this.operatorLimit = operatorLimit;
this.level = level;
}
@Override
! public ClassDefinitionBlock produce() throws ProductionFailedException {
ArrayList<IRNode> content = new ArrayList<>();
int limit = (int) Math.ceil(PseudoRandom.random() * classesLimit);
if (limit > 0) {
long classCompl = complexityLimit / limit;
IRNodeBuilder builder = new IRNodeBuilder().setLevel(level)
*** 72,84 ****
.setStatementLimit(statementLimit)
.setOperatorLimit(operatorLimit)
.setComplexityLimit(classCompl);
for (int i = 0; i < limit; i++) {
try {
! Rule rule = new Rule("class");
rule.add("basic_class", builder.setName(prefix + "_Class_" + i)
- .setPrinterName(prefix + ".Printer")
.setMemberFunctionsLimit(memberFunctionsLimit)
.getKlassFactory());
if (!ProductionParams.disableInterfaces.value()) {
rule.add("interface", builder.setName(prefix + "_Interface_" + i)
.setMemberFunctionsLimit((int) (memberFunctionsLimit * 0.2))
--- 72,83 ----
.setStatementLimit(statementLimit)
.setOperatorLimit(operatorLimit)
.setComplexityLimit(classCompl);
for (int i = 0; i < limit; i++) {
try {
! Rule<IRNode> rule = new Rule<>("class");
rule.add("basic_class", builder.setName(prefix + "_Class_" + i)
.setMemberFunctionsLimit(memberFunctionsLimit)
.getKlassFactory());
if (!ProductionParams.disableInterfaces.value()) {
rule.add("interface", builder.setName(prefix + "_Interface_" + i)
.setMemberFunctionsLimit((int) (memberFunctionsLimit * 0.2))
*** 108,124 ****
while (!childs.isEmpty() && IRNode.countDepth(content) < minDepth) {
PseudoRandom.shuffle(childs);
IRNode randomChild = childs.get(0);
List<IRNode> leaves = randomChild.getStackableLeaves();
if (!leaves.isEmpty()) {
! PseudoRandom.shuffle(leaves);
! Block randomLeaf = (Block) leaves.get(0);
! TypeKlass klass = (TypeKlass) randomChild.getKlass();
int newLevel = randomLeaf.getLevel() + 1;
! Type retType = randomLeaf.getReturnType();
IRNodeBuilder b = new IRNodeBuilder()
! .setOwnerKlass(klass)
.setResultType(retType)
.setComplexityLimit(complexityLimit)
.setStatementLimit(statementLimit)
.setOperatorLimit(operatorLimit)
.setLevel(newLevel);
--- 107,122 ----
while (!childs.isEmpty() && IRNode.countDepth(content) < minDepth) {
PseudoRandom.shuffle(childs);
IRNode randomChild = childs.get(0);
List<IRNode> leaves = randomChild.getStackableLeaves();
if (!leaves.isEmpty()) {
! Block randomLeaf = (Block) leaves.get(PseudoRandom.randomNotNegative(leaves.size()));
! TypeKlass owner = randomChild.getOwner();
int newLevel = randomLeaf.getLevel() + 1;
! Type retType = randomLeaf.getResultType();
IRNodeBuilder b = new IRNodeBuilder()
! .setOwnerKlass(owner)
.setResultType(retType)
.setComplexityLimit(complexityLimit)
.setStatementLimit(statementLimit)
.setOperatorLimit(operatorLimit)
.setLevel(newLevel);
*** 135,145 ****
int maxDepth = ProductionParams.maxCfgDepth.value();
List<IRNode> childs = content.stream()
.filter(c -> c instanceof Klass && c.countDepth() > maxDepth)
.collect(Collectors.toList());
for (IRNode ch : childs) {
! List<IRNode> leaves = null;
do {
long depth = Math.max(ch.countDepth(), maxDepth + 1);
leaves = ch.getDeviantBlocks(depth);
if(leaves.size() > 0) {
leaves.get(0).removeSelf();
--- 133,143 ----
int maxDepth = ProductionParams.maxCfgDepth.value();
List<IRNode> childs = content.stream()
.filter(c -> c instanceof Klass && c.countDepth() > maxDepth)
.collect(Collectors.toList());
for (IRNode ch : childs) {
! List<IRNode> leaves;
do {
long depth = Math.max(ch.countDepth(), maxDepth + 1);
leaves = ch.getDeviantBlocks(depth);
if(leaves.size() > 0) {
leaves.get(0).removeSelf();
< prev index next >