Hi, I'm looking for a way to generate a "full stop" that will not be caught by signal handlers, cf. .Internal(.dfltStop(msg, call)).
RATIONALE: In the R.oo package I have throw() which (leaving out some details) basically does what stop() does but appends a stack trace string to the error message that shows up at the R prompt. Example: bar <- function() throw("A foo error"); foo <- function() bar(); > foo() Error: A foo error at foo() at bar() versus bar <- function() stop("A foo error"); foo <- function() bar(); > stop("A foo error") Error: A foo error CURRENT SOLUTION: throw() does this in a way such that the stack trace is *not* part of the getMessage() of the 'error' condition object, which is important when catching the error in signal handlers. Here is a stub what is done, leaving out the details how to retrieve the stack trace (call history): throw <- function(msg, ...) { cond <- simpleError(msg); signalCondition(cond); # A dummy stracktrack / call history stackTraceStr <- "at foo()\nat bar()\n"; call <- NULL; # Also a dummy for this example # If the condition is not caught, do a "full stop" showing error message and stacktrace fullmsg <- paste(msg, "\n", stackTraceStr, sep=""); .Internal(.dfltStop(fullmsg, call)); } # throw() QUESTION: Is it possible to achieve this without using an .Internal() call? Note that stop() will use the same message string for both signalCondition() and .Internal(.dfltStop(...)), cf. > base::stop function (..., call. = TRUE, domain = NULL) { ... message <- conditionMessage(cond) call <- conditionCall(cond) .Internal(.signalCondition(cond, message, call)) .Internal(.dfltStop(message, call)) ... } ALTERNATIVE?: Is there an alternative way to have the stack trace/traceback() being automatically displayed after the error message being displayed at the prompt? /Henrik ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel