< prev index next >

test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/BlockFactory.java

Print this page

        

*** 36,52 **** import jdk.test.lib.jittester.utils.TypeUtil; import jdk.test.lib.jittester.loops.DoWhile; import jdk.test.lib.jittester.loops.For; import jdk.test.lib.jittester.loops.While; import jdk.test.lib.jittester.types.TypeKlass; - import jdk.test.lib.jittester.types.TypeVoid; import jdk.test.lib.jittester.utils.PseudoRandom; import java.util.ArrayList; import java.util.List; ! class BlockFactory extends Factory { private final Type returnType; private final long complexityLimit; private final int statementLimit; private final int operatorLimit; private final boolean subBlock; --- 36,51 ---- import jdk.test.lib.jittester.utils.TypeUtil; import jdk.test.lib.jittester.loops.DoWhile; import jdk.test.lib.jittester.loops.For; import jdk.test.lib.jittester.loops.While; import jdk.test.lib.jittester.types.TypeKlass; import jdk.test.lib.jittester.utils.PseudoRandom; import java.util.ArrayList; import java.util.List; ! class BlockFactory extends Factory<Block> { private final Type returnType; private final long complexityLimit; private final int statementLimit; private final int operatorLimit; private final boolean subBlock;
*** 72,82 **** this.canHaveReturn = canHaveReturn; this.canHaveThrow = canHaveThrows; } @Override ! public IRNode produce() throws ProductionFailedException { if (statementLimit > 0 && complexityLimit > 0) { List<IRNode> content = new ArrayList<>(); int slimit = PseudoRandom.randomNotZero(statementLimit); long climit = complexityLimit; IRNodeBuilder builder = new IRNodeBuilder() --- 71,81 ---- this.canHaveReturn = canHaveReturn; this.canHaveThrow = canHaveThrows; } @Override ! public Block produce() throws ProductionFailedException { if (statementLimit > 0 && complexityLimit > 0) { List<IRNode> content = new ArrayList<>(); int slimit = PseudoRandom.randomNotZero(statementLimit); long climit = complexityLimit; IRNodeBuilder builder = new IRNodeBuilder()
*** 87,102 **** .setCanHaveThrow(canHaveThrow) .setCanHaveBreaks(canHaveBreaks) .setCanHaveContinues(canHaveContinues) .setExceptionSafe(false) .setNoConsts(false); ! Rule rule; SymbolTable.push(); for (int i = 0; i < slimit && climit > 0; ) { int subLimit = (int) (PseudoRandom.random() * (slimit - i - 1)); builder.setComplexityLimit((long) (PseudoRandom.random() * climit)); ! rule = new Rule("block"); rule.add("statement", builder.getStatementFactory(), 5); if (!ProductionParams.disableVarsInBlock.value()) { rule.add("decl", builder.setIsLocal(true).getDeclarationFactory()); } if (subLimit > 0) { --- 86,101 ---- .setCanHaveThrow(canHaveThrow) .setCanHaveBreaks(canHaveBreaks) .setCanHaveContinues(canHaveContinues) .setExceptionSafe(false) .setNoConsts(false); ! Rule<IRNode> rule; SymbolTable.push(); for (int i = 0; i < slimit && climit > 0; ) { int subLimit = (int) (PseudoRandom.random() * (slimit - i - 1)); builder.setComplexityLimit((long) (PseudoRandom.random() * climit)); ! rule = new Rule<>("block"); rule.add("statement", builder.getStatementFactory(), 5); if (!ProductionParams.disableVarsInBlock.value()) { rule.add("decl", builder.setIsLocal(true).getDeclarationFactory()); } if (subLimit > 0) {
*** 129,146 **** } catch (ProductionFailedException e) { i++; } } // Ok, if the block can end with break and continue. Generate the appropriate productions. ! rule = new Rule("block_ending"); if (canHaveBreaks && !subBlock) { rule.add("break", builder.getBreakFactory()); } if (canHaveContinues && !subBlock) { rule.add("continue", builder.getContinueFactory()); } ! if (canHaveReturn && !subBlock && !returnType.equals(new TypeVoid())) { rule.add("return", builder.setComplexityLimit(climit).getReturnFactory()); } if (canHaveThrow && !subBlock) { Type rtException = TypeList.find("java.lang.RuntimeException"); rtException = PseudoRandom.randomElement(TypeUtil.getImplicitlyCastable(TypeList.getAll(), rtException)); --- 128,145 ---- } catch (ProductionFailedException e) { i++; } } // Ok, if the block can end with break and continue. Generate the appropriate productions. ! rule = new Rule<>("block_ending"); if (canHaveBreaks && !subBlock) { rule.add("break", builder.getBreakFactory()); } if (canHaveContinues && !subBlock) { rule.add("continue", builder.getContinueFactory()); } ! if (canHaveReturn && !subBlock && !returnType.equals(TypeList.VOID)) { rule.add("return", builder.setComplexityLimit(climit).getReturnFactory()); } if (canHaveThrow && !subBlock) { Type rtException = TypeList.find("java.lang.RuntimeException"); rtException = PseudoRandom.randomElement(TypeUtil.getImplicitlyCastable(TypeList.getAll(), rtException));
*** 164,174 **** return new Block(ownerClass, returnType, content, level); } throw new ProductionFailedException(); } ! private void addControlFlowDeviation(Rule rule, IRNodeBuilder builder) { if (!ProductionParams.disableIf.value()) { rule.add("if", builder.getIfFactory()); } if (!ProductionParams.disableWhile.value()) { rule.add("while", builder.getWhileFactory()); --- 163,173 ---- return new Block(ownerClass, returnType, content, level); } throw new ProductionFailedException(); } ! private void addControlFlowDeviation(Rule<IRNode> rule, IRNodeBuilder builder) { if (!ProductionParams.disableIf.value()) { rule.add("if", builder.getIfFactory()); } if (!ProductionParams.disableWhile.value()) { rule.add("while", builder.getWhileFactory());
< prev index next >