Mercurial > hg > truffle
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) {