/** * Handles an R error with the most general argument signature. All other facade variants delegate * to this method. * * <p>Note that the method never actually returns a result, but the throws the error directly. * However, the signature has a return type of {@link RError} to allow callers to use the idiom * {@code throw error(...)} to indicate the control transfer. It is entirely possible that, due to * condition handlers, the error will not actually be thrown. * * @param node {@code RNode} of the code throwing the error, or {@link #NO_NODE} if not available. * If {@code NO_NODE} an attempt will be made to identify the call context from the currently * active frame. * @param msg a {@link Message} instance specifying the error * @param args arguments for format specifiers in the message string */ @TruffleBoundary private static RError error0(RBaseNode node, Message msg, Object... args) { assert node != null; // thrown from a builtin specified by "node" RErrorHandling.signalError(node, msg, args); return RErrorHandling.errorcallDflt(node, msg, args); }
@TruffleBoundary protected RErrorException(RError.Message msg, Object[] args) { super(RErrorHandling.formatMessage(msg, args), null); this.msg = msg; this.args = args; }
@TruffleBoundary public static RError stop(boolean showCall, RBaseNode node, Message msg, Object arg) { assert node != null; RErrorHandling.signalError(node, msg, arg); return RErrorHandling.errorcallDflt(showCall, node, msg, arg); }
@TruffleBoundary public static void warning(RBaseNode node, Message msg, Object... args) { assert node != null; RErrorHandling.warningcall(true, node, msg, args); }