aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-04-16 03:15:56 +0000
committermarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-04-16 03:15:56 +0000
commit33399fe8248a25132343b1b5be3a35357c3d9099 (patch)
tree39d9c83014369d7e485272ac16506b90fe41a079
parentf92be2c01a7417c88b47373a4e43aabd7918f225 (diff)
downloadruby-33399fe8248a25132343b1b5be3a35357c3d9099.tar.gz
* object.c: Add NilClass#to_h [Feature #6276]
[ref #5008] [rubyspec:dc5ecddbd608] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35340 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--NEWS4
-rw-r--r--object.c18
2 files changed, 22 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 61b56b3ad1..87c9dcf743 100644
--- a/NEWS
+++ b/NEWS
@@ -43,6 +43,10 @@ with all sufficient information, see the ChangeLog file.
* added LoadError#path method to return the file name that could not be
loaded.
+ * NilClass
+ * added method:
+ * added nil.to_h which returns {}
+
* Signal
* incompatible changes:
* Signal.trap raises ArgumentError when :SEGV, :BUS, :ILL, :FPE, :VTALRM
diff --git a/object.c b/object.c
index 59bdea0c18..3c4445cb59 100644
--- a/object.c
+++ b/object.c
@@ -1058,6 +1058,23 @@ nil_to_a(VALUE obj)
}
/*
+ * Document-method: to_h
+ *
+ * call-seq:
+ * nil.to_h -> {}
+ *
+ * Always returns an empty hash.
+ *
+ * nil.to_h #=> {}
+ */
+
+static VALUE
+nil_to_h(VALUE obj)
+{
+ return rb_hash_new();
+}
+
+/*
* call-seq:
* nil.inspect -> "nil"
*
@@ -2896,6 +2913,7 @@ Init_Object(void)
rb_define_method(rb_cNilClass, "to_f", nil_to_f, 0);
rb_define_method(rb_cNilClass, "to_s", nil_to_s, 0);
rb_define_method(rb_cNilClass, "to_a", nil_to_a, 0);
+ rb_define_method(rb_cNilClass, "to_h", nil_to_h, 0);
rb_define_method(rb_cNilClass, "inspect", nil_inspect, 0);
rb_define_method(rb_cNilClass, "&", false_and, 1);
rb_define_method(rb_cNilClass, "|", false_or, 1);