diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java index 600bd243f8c58edbf75aea4ee69c0de38f84427d..32634f340058a8195c16d16ee6dea96c987d8017 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFiniteFunctions.java @@ -29,6 +29,7 @@ import java.util.Arrays; import java.util.function.DoublePredicate; import java.util.function.IntPredicate; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; @@ -82,6 +83,7 @@ public class IsFiniteFunctions { @Fallback protected Object doIsFiniteOther(Object x) { if (typeofNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); typeofNode = insert(TypeofNodeGen.create()); } String type = typeofNode.execute(x).getName(); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java index 94e23564e1b0ea5cec69774f9e699b2914ebf79d..f855a8a7742784c2890d0ca6347425d535591664 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rank.java @@ -31,13 +31,13 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; import java.util.function.Function; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.BranchProfile; import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.nodes.builtin.base.OrderNodeGen.CmpNodeGen; import com.oracle.truffle.r.nodes.builtin.base.OrderNodeGen.OrderVector1NodeGen; -import com.oracle.truffle.r.nodes.builtin.casts.Filter; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RDataFactory; @@ -79,6 +79,7 @@ public abstract class Rank extends RBuiltinNode { private Order.OrderVector1Node initOrderVector1() { if (orderVector1Node == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); orderVector1Node = insert(OrderVector1NodeGen.create(false)); } return orderVector1Node; @@ -86,6 +87,7 @@ public abstract class Rank extends RBuiltinNode { private Order.CmpNode initOrderCmp() { if (orderCmpNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); orderCmpNode = insert(CmpNodeGen.create()); } return orderCmpNode; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java index 1566030a477b880a0e45656fb3dd86916634e3be..fb44ec8b4184b8d33ff20cb10def54fade00a160 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/StandardGeneric.java @@ -84,6 +84,7 @@ public abstract class StandardGeneric extends RBuiltinNode { private String argClass(Object arg) { if (classNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); classNode = insert(ClassHierarchyScalarNodeGen.create()); } return classNode.executeString(arg); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java index 82702afdceeb9813bf4b089a3b33e0e5422ee455..b15d5556ee76210cfdb87d4af6be208289ea8fcb 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/GetNonSharedNode.java @@ -22,7 +22,6 @@ */ package com.oracle.truffle.r.nodes.unary; -import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.NodeChild; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.ValueProfile; @@ -39,12 +38,23 @@ public abstract class GetNonSharedNode extends RNode implements RSyntaxNode { private final ValueProfile shareableTypeProfile = ValueProfile.createClassProfile(); + protected abstract RNode getN(); + + @Override + protected RSyntaxNode getRSyntaxNode() { + return getN().asRSyntaxNode(); + } + @Specialization protected RTypedValue getNonShared(RShareable shareable) { return shareableTypeProfile.profile(shareable).getNonShared(); } - @Fallback + protected static boolean isRShareable(Object o) { + return o instanceof RShareable; + } + + @Specialization(guards = "!isRShareable(o)") protected Object getNonShared(Object o) { return o; }