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