aboutsummaryrefslogtreecommitdiffstats
path: root/error.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-18 04:32:50 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-18 04:32:50 +0000
commit51de63dfb94d1f33ac09c7272a077192d733c5e4 (patch)
treee501cd17dc08c0cada200a8d6b46799d59e9e66a /error.c
parent4219194730604d49d9347a9f31c4990e5054dac3 (diff)
downloadruby-51de63dfb94d1f33ac09c7272a077192d733c5e4.tar.gz
error.c: NameError#receiver
* error.c (name_err_receiver): add NameError#receiver method. [Feature #10881] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'error.c')
-rw-r--r--error.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/error.c b/error.c
index 07b04a1036..602ee401c7 100644
--- a/error.c
+++ b/error.c
@@ -1249,6 +1249,22 @@ name_err_mesg_load(VALUE klass, VALUE str)
/*
* call-seq:
+ * name_error.receiver -> object
+ *
+ * Return the receiver associated with this NameError exception.
+ */
+
+static VALUE
+name_err_receiver(VALUE self)
+{
+ VALUE *ptr, mesg = rb_attr_get(self, id_mesg);
+
+ TypedData_Get_Struct(mesg, VALUE, &name_err_mesg_data_type, ptr);
+ return ptr[1];
+}
+
+/*
+ * call-seq:
* no_method_error.args -> obj
*
* Return the arguments passed in as the third parameter to
@@ -1878,6 +1894,7 @@ Init_Exception(void)
rb_eNameError = rb_define_class("NameError", rb_eStandardError);
rb_define_method(rb_eNameError, "initialize", name_err_initialize, -1);
rb_define_method(rb_eNameError, "name", name_err_name, 0);
+ rb_define_method(rb_eNameError, "receiver", name_err_receiver, 0);
rb_cNameErrorMesg = rb_define_class_under(rb_eNameError, "message", rb_cData);
rb_define_singleton_method(rb_cNameErrorMesg, "!", rb_name_err_mesg_new, NAME_ERR_MESG_COUNT);
rb_define_method(rb_cNameErrorMesg, "==", name_err_mesg_equal, 1);