SYNOPSIS
void runtime_error( string err, string prg, string curobj, int line
, mixed culprit, int caught)
DESCRIPTION
This function has to announce a runtime error to the active
user. If the user has enough privileges, it might give him the
full error message together with the source line. Else it
should issue a decent message ("Your sensitive mind notices a
wrongness in the fabric of space").
<err> is the error message, <prg> is the program executed (which
might be an inherited program), <curobj> is the current object at
the time of the error. <line> is the linenumber within the program.
If the error is a normal runtime error, <culprit> is -1. Otherwise,
the error occurred during a heartbeat and <culprit> is the object which
heart_beat() function was executed. Also, in case of a heartbeat error,
the heartbeat for the <culprit> has been turned off.
If the error is caught on a higher level, <caught> is non-zero;
otherwise it is 0.
Note that any of the the objects or programs might be destructed, ie.
might be passed as 0.
One common pitfall in the implementation of runtime_error() is
that runtime_error() itself could run out of evaluation ticks,
causing a runtime error itself. The workaround is to use
limited() like this:
static void
handle_runtime_error ( string err, string prg, string curobj
, int line)
{ ... the actual error handler ... }
static void
call_runtime_error (string err, string prg, string curobj, int line)
{
limited(#'handle_runtime_error, ({ 200000 }), err, prg, curobj
, line);
}
void
runtime_error (string err, string prg, string curobj, int line)
{
limited(#'call_runtime_error, ({ LIMIT_UNLIMITED })
, err, prg, curobj, line);
}
HISTORY
LDMud 3.2.9 added the <culprit> argument.
LDMud 3.2.12/3.3.705 added the <caught> argument.
SEE ALSO
log_error(M), heart_beat_error(M), runtime_warning(M),
raise_error(E), expand_define(E)
|