aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-02 06:50:41 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-02 06:50:41 +0000
commitc240547e79fd6f5bb3a9496335a3876079c0b6be (patch)
treea572ab97f31de22615014d97920ee7012d4710cd
parent5d441f06f9a142a8824c3da2cf93058748351391 (diff)
downloadruby-c240547e79fd6f5bb3a9496335a3876079c0b6be.tar.gz
marshal.c: lookup and remove
* marshal.c (r_fixup_compat): delete compatible object with lookup. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--marshal.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/marshal.c b/marshal.c
index 752f0531b6..74d66a208a 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1420,15 +1420,14 @@ static VALUE
r_fixup_compat(VALUE v, struct load_arg *arg)
{
st_data_t data;
- if (arg->compat_tbl && st_lookup(arg->compat_tbl, v, &data)) {
+ st_data_t key = (st_data_t)v;
+ if (arg->compat_tbl && st_delete(arg->compat_tbl, &key, &data)) {
VALUE real_obj = (VALUE)data;
rb_alloc_func_t allocator = rb_get_alloc_func(CLASS_OF(real_obj));
- st_data_t key = v;
if (st_lookup(compat_allocator_tbl, (st_data_t)allocator, &data)) {
marshal_compat_t *compat = (marshal_compat_t*)data;
compat->loader(real_obj, v);
}
- st_delete(arg->compat_tbl, &key, 0);
v = real_obj;
}
return v;