< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/FunctionDefinitionFactory.java
Print this page
@@ -26,24 +26,25 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import jdk.test.lib.jittester.IRNode;
+import jdk.test.lib.jittester.Nothing;
import jdk.test.lib.jittester.ProductionFailedException;
import jdk.test.lib.jittester.Symbol;
import jdk.test.lib.jittester.SymbolTable;
import jdk.test.lib.jittester.Type;
import jdk.test.lib.jittester.TypeList;
import jdk.test.lib.jittester.VariableInfo;
import jdk.test.lib.jittester.functions.ArgumentDeclaration;
import jdk.test.lib.jittester.functions.FunctionDefinition;
import jdk.test.lib.jittester.functions.FunctionInfo;
+import jdk.test.lib.jittester.functions.Return;
import jdk.test.lib.jittester.types.TypeKlass;
-import jdk.test.lib.jittester.types.TypeVoid;
import jdk.test.lib.jittester.utils.PseudoRandom;
-class FunctionDefinitionFactory extends Factory {
+class FunctionDefinitionFactory extends Factory<FunctionDefinition> {
private final Type resultType;
private final String name;
private final long complexityLimit;
private final int statementLimit;
private final int operatorLimit;
@@ -65,15 +66,15 @@
this.level = level;
this.flags = flags;
}
@Override
- public IRNode produce() throws ProductionFailedException {
+ public FunctionDefinition produce() throws ProductionFailedException {
Type resType = resultType;
if (resType == null) {
List<Type> types = new ArrayList<>(TypeList.getAll());
- types.add(new TypeVoid());
+ types.add(TypeList.VOID);
resType = PseudoRandom.randomElement(types);
}
int argNumber = (int) (PseudoRandom.random() * memberFunctionsArgLimit);
ArrayList<VariableInfo> argumentsInfo;
if ((flags & FunctionInfo.STATIC) > 0) {
@@ -84,11 +85,11 @@
VariableInfo.FINAL | VariableInfo.LOCAL | VariableInfo.INITIALIZED));
}
ArrayList<ArgumentDeclaration> argumentsDeclaration = new ArrayList<>(argNumber);
SymbolTable.push();
IRNode body;
- IRNode returnNode;
+ Return returnNode;
FunctionInfo functionInfo;
try {
IRNodeBuilder builder = new IRNodeBuilder().setArgumentType(ownerClass);
int i = 0;
for (; i < argNumber; i++) {
@@ -125,17 +126,17 @@
.setCanHaveBreaks(false)
.setCanHaveContinues(false)
.setCanHaveReturn(true)
.getBlockFactory()
.produce();
- if (!resType.equals(new TypeVoid())) {
+ if (!resType.equals(TypeList.VOID)) {
returnNode = builder.setComplexityLimit(complexityLimit - blockComplLimit)
.setExceptionSafe(false)
.getReturnFactory()
.produce();
} else {
- returnNode = null;
+ returnNode = new Return(new Nothing());
}
} finally {
SymbolTable.pop();
}
// addChildren(argumentsDeclaration); // not neccessary while complexity() doesn't use it
< prev index next >