From dce33a4fcb5567c14f778f387fc6d87b1ed2dfd3 Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Wed, 8 Jun 2016 11:55:46 +0200
Subject: [PATCH] simplify ArgumentsStatePush

---
 .../r/nodes/function/ArgumentStatePush.java   | 21 ++++++-------------
 .../function/PreProcessArgumentsNode.java     |  2 +-
 .../r/nodes/function/WrapArgumentNode.java    |  2 +-
 3 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java
index f027b71616..a45022312c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ArgumentStatePush.java
@@ -24,27 +24,24 @@ package com.oracle.truffle.r.nodes.function;
 
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.dsl.NodeChild;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.nodes.access.WriteLocalFrameVariableNode;
 import com.oracle.truffle.r.runtime.FastROptions;
 import com.oracle.truffle.r.runtime.RArguments;
 import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.data.RLanguage;
-import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RShareable;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
-import com.oracle.truffle.r.runtime.nodes.RNode;
 
 /**
  * A {@link ArgumentStatePush} is used to bump up state transition for function arguments.
  */
-@NodeChild(value = "op")
-public abstract class ArgumentStatePush extends RNode {
+public abstract class ArgumentStatePush extends Node {
 
-    public abstract Object executeObject(VirtualFrame frame, Object shareable);
+    public abstract void executeObject(VirtualFrame frame, Object shareable);
 
     private final ConditionProfile isRefCountUpdateable = ConditionProfile.createBinaryProfile();
 
@@ -64,7 +61,8 @@ public abstract class ArgumentStatePush extends RNode {
         return mask > 0;
     }
 
-    private void transitionStateExp(VirtualFrame frame, RShareable shareable) {
+    @Specialization
+    public void transitionState(VirtualFrame frame, RShareable shareable) {
         if (isRefCountUpdateable.profile(!shareable.isSharedPermanent())) {
             shareable.incRefCount();
         }
@@ -114,14 +112,8 @@ public abstract class ArgumentStatePush extends RNode {
         }
     }
 
-    @Specialization
-    public RNull transitionState(VirtualFrame frame, RShareable shareable) {
-        transitionStateExp(frame, shareable);
-        return RNull.instance;
-    }
-
     @Specialization(guards = "!isShareable(o)")
-    public RNull transitionStateNonShareable(VirtualFrame frame, @SuppressWarnings("unused") Object o) {
+    public void transitionStateNonShareable(VirtualFrame frame, @SuppressWarnings("unused") Object o) {
         if (mask > 0) {
             // this argument used to be reference counted but is no longer
             CompilerDirectives.transferToInterpreterAndInvalidate();
@@ -133,7 +125,6 @@ public abstract class ArgumentStatePush extends RNode {
             fdn.getArgPostProcess().transArgsBitSet = transArgsBitSet & (~mask);
             mask = -1;
         }
-        return RNull.instance;
     }
 
     protected boolean isShareable(Object o) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java
index c5fc1a9e8e..309d854b53 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PreProcessArgumentsNode.java
@@ -52,7 +52,7 @@ final class PreProcessArgumentsNode extends RNode {
     static PreProcessArgumentsNode create(int length) {
         ArgumentStatePush[] argStatePushNodes = new ArgumentStatePush[length];
         for (int i = 0; i < length; i++) {
-            argStatePushNodes[i] = ArgumentStatePushNodeGen.create(i, null);
+            argStatePushNodes[i] = ArgumentStatePushNodeGen.create(i);
         }
         return new PreProcessArgumentsNode(argStatePushNodes);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java
index c6d3ff6620..7ed844a144 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentNode.java
@@ -50,7 +50,7 @@ public final class WrapArgumentNode extends WrapArgumentBaseNode {
         super(operand, modeChange);
         this.modeChange = modeChange;
         this.index = index;
-        this.argPushStateNode = modeChange ? ArgumentStatePushNodeGen.create(index, null) : null;
+        this.argPushStateNode = modeChange ? ArgumentStatePushNodeGen.create(index) : null;
     }
 
     public boolean modeChange() {
-- 
GitLab