summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'string.c')
-rw-r--r--string.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/string.c b/string.c
index 4e30cb338a..1e26a25bb7 100644
--- a/string.c
+++ b/string.c
@@ -8231,6 +8231,27 @@ str_scrub_bang(int argc, VALUE *argv, VALUE str)
/*
* call-seq:
+ * Symbol.find(str) -> symbol or nil
+ *
+ * Return the related symbol if the symbol already exists.
+ * Return nil if not.
+ */
+
+static VALUE
+sym_find(VALUE dummy, VALUE sym)
+{
+ ID id = rb_check_id(&sym);
+
+ if (id) {
+ return ID2SYM(id);
+ }
+ else {
+ return Qnil;
+ }
+}
+
+/*
+ * call-seq:
* sym == obj -> true or false
*
* Equality---If <i>sym</i> and <i>obj</i> are exactly the same
@@ -8787,6 +8808,7 @@ Init_String(void)
rb_undef_alloc_func(rb_cSymbol);
rb_undef_method(CLASS_OF(rb_cSymbol), "new");
rb_define_singleton_method(rb_cSymbol, "all_symbols", rb_sym_all_symbols, 0); /* in parse.y */
+ rb_define_singleton_method(rb_cSymbol, "find", sym_find, 1);
rb_define_method(rb_cSymbol, "==", sym_equal, 1);
rb_define_method(rb_cSymbol, "===", sym_equal, 1);