diff options
author | Jeremy Evans <[email protected]> | 2025-04-29 00:38:35 +0900 |
---|---|---|
committer | <[email protected]> | 2025-04-28 08:38:35 -0700 |
commit | 926411171d296859839745a536aa86bc1e18aa76 () | |
tree | bcdd6470cb594af4906e57bdedcf9d97f5e64362 | |
parent | 80a1a1bb8ae8435b916ae4f66a483e91ad31356a (diff) |
Support Marshal.{dump,load} for core Set
This was missed when adding core Set, because it's handled implicitly for T_OBJECT. Keep marshal compatibility between core Set and stdlib Set, so you can unmarshal core Set with stdlib Set and vice versa. Co-authored-by: Nobuyoshi Nakada <[email protected]>
Notes: Merged: https://.com/ruby/ruby/pull/13185 Merged-By: jeremyevans <[email protected]>
-rw-r--r-- | hash.c | 2 | ||||
-rw-r--r-- | internal/hash.h | 1 | ||||
-rw-r--r-- | set.c | 67 | ||||
-rw-r--r-- | test/ruby/test_set.rb | 26 |
4 files changed, 95 insertions, 1 deletions
@@ -2253,7 +2253,7 @@ rb_hash_default(int argc, VALUE *argv, VALUE hash) * See {Hash Default}[rdoc-ref:Hash@Hash+Default]. */ -static VALUE rb_hash_set_default(VALUE hash, VALUE ifnone) { rb_hash_modify_check(hash); @@ -72,6 +72,7 @@ struct RHash { /* hash.c */ void rb_hash_st_table_set(VALUE hash, st_table *st); VALUE rb_hash_default_value(VALUE hash, VALUE key); VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc); long rb_dbl_long_hash(double d); st_table *rb_init_identtable(void); @@ -99,6 +99,7 @@ VALUE rb_cSet; static ID id_each_entry; static ID id_any_p; static ID id_new; static ID id_set_iter_lev; #define RSET_INITIALIZED FL_USER1 @@ -1850,6 +1851,66 @@ set_i_hash(VALUE set) return ST2FIX(hval); } /* * Document-class: Set * @@ -2068,6 +2129,7 @@ Init_Set(void) id_each_entry = rb_intern_const("each_entry"); id_any_p = rb_intern_const("any?"); id_new = rb_intern_const("new"); id_set_iter_lev = rb_make_internal_id(); rb_define_alloc_func(rb_cSet, set_s_alloc); @@ -2132,7 +2194,12 @@ Init_Set(void) rb_define_method(rb_cSet, "superset?", set_i_superset, 1); rb_define_alias(rb_cSet, ">=", "superset?"); rb_define_method(rb_cSet, "to_a", set_i_to_a, 0); rb_define_method(rb_cSet, "to_set", set_i_to_set, -1); rb_provide("set.rb"); } @@ -6,6 +6,32 @@ class TC_Set < Test::Unit::TestCase class Set2 < Set end def test_aref assert_nothing_raised { Set[] |