diff options
Diffstat (limited to 'eval_error.c')
-rw-r--r-- | eval_error.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/eval_error.c b/eval_error.c index e02f54e8e6..948a205dd9 100644 --- a/eval_error.c +++ b/eval_error.c @@ -291,6 +291,17 @@ show_cause(VALUE errinfo, VALUE str, VALUE opt, VALUE highlight, VALUE reverse, } void +rb_exc_check_circular_cause(VALUE exc) +{ + VALUE cause = exc, shown_causes = 0; + do { + if (shown_cause_p(cause, &shown_causes)) { + rb_raise(rb_eArgError, "circular causes"); + } + } while (!NIL_P(cause = rb_attr_get(cause, id_cause))); +} + +void rb_error_write(VALUE errinfo, VALUE emesg, VALUE errat, VALUE str, VALUE opt, VALUE highlight, VALUE reverse) { volatile VALUE eclass; |