< prev index next >

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

Print this page

        

*** 31,41 **** import jdk.test.lib.jittester.Type; import jdk.test.lib.jittester.TypeList; import jdk.test.lib.jittester.types.TypeKlass; import jdk.test.lib.jittester.utils.PseudoRandom; ! class CastOperatorFactory extends OperatorFactory { private final Type resultType; private final Type ownerClass; CastOperatorFactory(long complexityLimit, int operatorLimit, TypeKlass ownerClass, Type resultType, boolean exceptionSafe, boolean noconsts) { --- 31,41 ---- import jdk.test.lib.jittester.Type; import jdk.test.lib.jittester.TypeList; import jdk.test.lib.jittester.types.TypeKlass; import jdk.test.lib.jittester.utils.PseudoRandom; ! class CastOperatorFactory extends OperatorFactory<CastOperator> { private final Type resultType; private final Type ownerClass; CastOperatorFactory(long complexityLimit, int operatorLimit, TypeKlass ownerClass, Type resultType, boolean exceptionSafe, boolean noconsts) {
*** 43,74 **** this.resultType = resultType; this.ownerClass = ownerClass; } @Override ! public IRNode produce() throws ProductionFailedException { ArrayList<Type> argType = new ArrayList<>(TypeList.getAll()); PseudoRandom.shuffle(argType); for (Type type : argType) { try { ! ExpressionFactory expressionFactory = new IRNodeBuilder() .setComplexityLimit(complexityLimit - 1) .setOperatorLimit(operatorLimit - 1) .setOwnerKlass((TypeKlass) ownerClass) .setExceptionSafe(exceptionSafe) .setNoConsts(noconsts) .setResultType(type) .getExpressionFactory(); SymbolTable.push(); ! if (type.equals(resultType)) { ! IRNode expr = expressionFactory.produce(); ! SymbolTable.merge(); ! return expr; ! } else if ((!exceptionSafe || exceptionSafe && !(type instanceof TypeKlass)) ! && type.canExplicitlyCastTo(resultType)) { // In safe mode we cannot explicitly cast an object, because it may throw. ! IRNode castOperator = new CastOperator(resultType, expressionFactory.produce()); SymbolTable.merge(); return castOperator; } throw new ProductionFailedException(); } catch (ProductionFailedException e) { --- 43,71 ---- this.resultType = resultType; this.ownerClass = ownerClass; } @Override ! public CastOperator produce() throws ProductionFailedException { ArrayList<Type> argType = new ArrayList<>(TypeList.getAll()); PseudoRandom.shuffle(argType); for (Type type : argType) { try { ! Factory<IRNode> expressionFactory = new IRNodeBuilder() .setComplexityLimit(complexityLimit - 1) .setOperatorLimit(operatorLimit - 1) .setOwnerKlass((TypeKlass) ownerClass) .setExceptionSafe(exceptionSafe) .setNoConsts(noconsts) .setResultType(type) .getExpressionFactory(); SymbolTable.push(); ! if (type.equals(resultType) || ! ((!exceptionSafe || exceptionSafe && !(type instanceof TypeKlass)) ! && type.canExplicitlyCastTo(resultType))) { // In safe mode we cannot explicitly cast an object, because it may throw. ! CastOperator castOperator = new CastOperator(resultType, expressionFactory.produce()); SymbolTable.merge(); return castOperator; } throw new ProductionFailedException(); } catch (ProductionFailedException e) {
< prev index next >