< 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 >