diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java index f6ed3cb7bcf2f67f597c05c346ba90a81ca9aa5e..b9f9e958a40479b7ca8956fb67702a1932d0351f 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java @@ -79,13 +79,13 @@ import com.oracle.truffle.r.runtime.env.*; * U = {@link UninitializedCallNode}: Forms the uninitialized end of the function PIC * D = {@link DispatchedCallNode}: Function fixed, no varargs * G = {@link GenericCallNode}: Function arbitrary, no varargs (generic case) - * + * * UV = {@link UninitializedCallNode} with varargs, * UVC = {@link UninitializedVarArgsCacheCallNode} with varargs, for varargs cache * DV = {@link DispatchedVarArgsCallNode}: Function fixed, with cached varargs * DGV = {@link DispatchedGenericVarArgsCallNode}: Function fixed, with arbitrary varargs (generic case) * GV = {@link GenericVarArgsCallNode}: Function arbitrary, with arbitrary varargs (generic case) - * + * * (RB = {@link RBuiltinNode}: individual functions that are builtins are represented by this node * which is not aware of caching). Due to {@link CachedCallNode} (see below) this is transparent to * the cache and just behaves like a D/DGV) @@ -98,11 +98,11 @@ import com.oracle.truffle.r.runtime.env.*; * non varargs, max depth: * | * D-D-D-U - * + * * no varargs, generic (if max depth is exceeded): * | * D-D-D-D-G - * + * * varargs: * | * DV-DV-UV <- function call target identity level cache @@ -110,7 +110,7 @@ import com.oracle.truffle.r.runtime.env.*; * DV * | * UVC <- varargs signature level cache - * + * * varargs, max varargs depth exceeded: * | * DV-DV-UV @@ -122,7 +122,7 @@ import com.oracle.truffle.r.runtime.env.*; * DV * | * DGV - * + * * varargs, max function depth exceeded: * | * DV-DV-DV-DV-GV @@ -303,6 +303,7 @@ public abstract class RCallNode extends RNode { @Child protected CallArgumentsNode args; @Child private PromiseHelperNode promiseHelper; private final ConditionProfile isPromiseProfile = ConditionProfile.createBinaryProfile(); + private final BranchProfile errorProfile = BranchProfile.create(); public RootCallNode(RNode function, CallArgumentsNode args) { this.functionNode = function; @@ -325,6 +326,7 @@ public abstract class RCallNode extends RNode { if (value instanceof RFunction) { return (RFunction) value; } else { + errorProfile.enter(); throw RError.error(getEncapsulatingSourceSection(), RError.Message.APPLY_NON_FUNCTION); } }