diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-22 06:22:00 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-22 06:22:00 +0000 |
commit | 8837f5948551444299fe5a13d06fa210dce01c65 (patch) | |
tree | 216cbc3dab14a166b6faff8fbcc51dfdc0469a3a /gc.c | |
parent | 48df11da1c6a53a34881649d49fa1bfaf9abdb61 (diff) |
merge revision(s) 19078,20097:
* gc.c (rb_mark_set): new function to mark keys.
* marshal.c (struct dump_arg, struct load_arg): added wrappers to mark
data entries. backport from trunk r13527,r13528,r13961,r16533.
[ruby-dev:36082]
* marshal.c (marshal_load): arg.data is no longer a VALUE but a
st_table, and freed in load_ensure. pointed out by pegacorn.
[ruby-dev:37008]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@21731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -724,6 +724,31 @@ rb_mark_tbl(tbl) } static int +mark_key(key, value, lev) + VALUE key, value; + int lev; +{ + gc_mark(key, lev); + return ST_CONTINUE; +} + +static void +mark_set(tbl, lev) + st_table *tbl; + int lev; +{ + if (!tbl) return; + st_foreach(tbl, mark_key, lev); +} + +void +rb_mark_set(tbl) + st_table *tbl; +{ + mark_set(tbl, 0); +} + +static int mark_keyvalue(key, value, lev) VALUE key; VALUE value; |