From 0fb280adbfa2f2037d7f2fb167f1b4595fb12de6 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 1 May 2025 14:58:30 +0900 Subject: [PATCH] 10error.rb: move some error class definitions to error.c - Exception - ArgumentError - LocalJumpError - RangeErrpr - TypeError - IndexError - KeyError - NotImplementError - FrozenError - ZeroDivisionError --- mrblib/10error.rb | 46 ---------------------------------------------- src/error.c | 16 +++++++++++++--- 2 files changed, 13 insertions(+), 49 deletions(-) diff --git a/mrblib/10error.rb b/mrblib/10error.rb index 431f77809..24ed68d4b 100644 --- a/mrblib/10error.rb +++ b/mrblib/10error.rb @@ -1,28 +1,3 @@ -class Exception - ## - # call-seq: - # exception.message -> string - # - # Returns the result of invoking exception.to_s. - # Normally this returns the exception's message or name. - # - def message - to_s - end -end - -# ISO 15.2.24 -class ArgumentError < StandardError -end - -# ISO 15.2.25 -class LocalJumpError < StandardError -end - -# ISO 15.2.26 -class RangeError < StandardError -end - class FloatDomainError < RangeError end @@ -30,14 +5,6 @@ end class RegexpError < StandardError end -# ISO 15.2.29 -class TypeError < StandardError -end - -# ISO 15.2.30 -class ZeroDivisionError < StandardError -end - # ISO 15.2.31 class NameError < StandardError attr_accessor :name @@ -58,19 +25,6 @@ class NoMethodError < NameError end end -# ISO 15.2.33 -class IndexError < StandardError -end - -class KeyError < IndexError -end - -class NotImplementedError < ScriptError -end - -class FrozenError < RuntimeError -end - class StopIteration < IndexError attr_accessor :result end diff --git a/src/error.c b/src/error.c index 6199cdff1..9d92ed8b0 100644 --- a/src/error.c +++ b/src/error.c @@ -702,14 +702,24 @@ mrb_init_exception(mrb_state *mrb) mrb_define_method_id(mrb, exception, MRB_SYM(exception), exc_exception, MRB_ARGS_OPT(1)); mrb_define_method_id(mrb, exception, MRB_SYM(initialize), exc_initialize, MRB_ARGS_OPT(1)); mrb_define_method_id(mrb, exception, MRB_SYM(to_s), exc_to_s, MRB_ARGS_NONE()); + mrb_define_method_id(mrb, exception, MRB_SYM(message), exc_to_s, MRB_ARGS_NONE()); mrb_define_method_id(mrb, exception, MRB_SYM(inspect), mrb_exc_inspect, MRB_ARGS_NONE()); mrb_define_method_id(mrb, exception, MRB_SYM(backtrace), mrb_exc_backtrace, MRB_ARGS_NONE()); mrb_define_method_id(mrb, exception, MRB_SYM(set_backtrace), exc_set_backtrace, MRB_ARGS_REQ(1)); mrb->eStandardError_class = mrb_define_class_id(mrb, MRB_SYM(StandardError), mrb->eException_class); /* 15.2.23 */ - mrb_define_class_id(mrb, MRB_SYM(RuntimeError), E_STANDARD_ERROR); /* 15.2.28 */ - struct RClass *script_error = mrb_define_class_id(mrb, MRB_SYM(ScriptError), exception); /* 15.2.37 */ - mrb_define_class_id(mrb, MRB_SYM(SyntaxError), script_error); /* 15.2.38 */ + mrb_define_class_id(mrb, MRB_SYM(ArgumentError), E_STANDARD_ERROR); /* 15.2.24 */ + mrb_define_class_id(mrb, MRB_SYM(LocalJumpError), E_STANDARD_ERROR); /* 15.2.25 */ + mrb_define_class_id(mrb, MRB_SYM(RangeError), E_STANDARD_ERROR); /* 15.2.26 */ + struct RClass *runtime_error = mrb_define_class_id(mrb, MRB_SYM(RuntimeError), E_STANDARD_ERROR); /* 15.2.28 */ + mrb_define_class_id(mrb, MRB_SYM(FrozenError), runtime_error); + mrb_define_class_id(mrb, MRB_SYM(TypeError), E_STANDARD_ERROR); /* 15.2.29 */ + mrb_define_class_id(mrb, MRB_SYM(ZeroDivisionError), E_STANDARD_ERROR); /* 15.2.30 */ + struct RClass *script_error = mrb_define_class_id(mrb, MRB_SYM(ScriptError), exception); /* 15.2.37 */ + mrb_define_class_id(mrb, MRB_SYM(NotImplementedError), script_error); + mrb_define_class_id(mrb, MRB_SYM(SyntaxError), script_error); /* 15.2.38 */ + struct RClass *index_error = mrb_define_class_id(mrb, MRB_SYM(IndexError), E_STANDARD_ERROR); /* 15.2.33 */ + mrb_define_class_id(mrb, MRB_SYM(KeyError), index_error); struct RClass *stack_error = mrb_define_class_id(mrb, MRB_SYM(SystemStackError), exception); mrb->stack_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, stack_error, "stack level too deep"));