diff truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java @ 22508:a619835e6709

SpecializationNode refactoring: update root field through generated setter
author Andreas Woess <andreas.woess@oracle.com>
date Thu, 17 Dec 2015 16:16:10 +0100
parents 23bdb1a46d0c
children 53d05fc21834
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java	Thu Dec 17 15:11:32 2015 +0100
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java	Thu Dec 17 16:16:10 2015 +0100
@@ -24,6 +24,11 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.concurrent.Callable;
+
 import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CompilerAsserts;
 import com.oracle.truffle.api.CompilerDirectives;
@@ -39,15 +44,9 @@
 import com.oracle.truffle.api.nodes.ExplodeLoop;
 import com.oracle.truffle.api.nodes.InvalidAssumptionException;
 import com.oracle.truffle.api.nodes.Node;
-import com.oracle.truffle.api.nodes.NodeClass;
 import com.oracle.truffle.api.nodes.NodeCost;
-import com.oracle.truffle.api.nodes.NodeFieldAccessor;
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.nodes.NodeUtil;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Arrays;
-import java.util.concurrent.Callable;
 
 /**
  * Internal implementation dependent base class for generated specialized nodes.
@@ -83,14 +82,7 @@
     }
 
     private static void updateRootImpl(SpecializationNode start, Node node) {
-        NodeFieldAccessor[] fields = NodeClass.get(start).getFields();
-        for (int i = fields.length - 1; i >= 0; i--) {
-            NodeFieldAccessor f = fields[i];
-            if (f.getName().equals("root")) {
-                f.putObject(start, node);
-                break;
-            }
-        }
+        start.setRoot(node);
         if (start.next != null) {
             updateRootImpl(start.next, node);
         }
@@ -115,6 +107,8 @@
         }
     }
 
+    protected abstract void setRoot(Node root);
+
     protected abstract Node[] getSuppliedChildren();
 
     protected SpecializationNode merge(SpecializationNode newNode, Frame frame) {