Skip to content

Commit cb63ab9

Browse files
committed
allow changing the tag proc hash during iteration
1 parent 8b0e46e commit cb63ab9

1 file changed

Lines changed: 10 additions & 13 deletions

File tree

src/mrb_cbor.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,13 +1012,13 @@ static void encode_value(CborWriter* w, mrb_value obj);
10121012
static void
10131013
encode_array(CborWriter* w, mrb_value ary)
10141014
{
1015-
struct RBasic *basic_ptr = mrb_basic_ptr(ary);
1016-
unsigned int was_frozen = basic_ptr->frozen;
1017-
basic_ptr->frozen = TRUE;
1015+
struct RBasic *basic_ary = mrb_basic_ptr(ary);
1016+
unsigned int was_frozen = basic_ary->frozen;
1017+
basic_ary->frozen = TRUE;
10181018
mrb_int len = RARRAY_LEN(ary);
10191019
encode_len(w, 4, (uint64_t)len);
10201020
for (mrb_int i = 0; i < len; i++) encode_value(w, mrb_ary_ref(w->mrb, ary, i));
1021-
basic_ptr->frozen = was_frozen;
1021+
basic_ary->frozen = was_frozen;
10221022
}
10231023

10241024
static int
@@ -1034,13 +1034,14 @@ static void
10341034
encode_map(CborWriter* w, mrb_value hash)
10351035
{
10361036
mrb_state *mrb = w->mrb;
1037-
struct RBasic *basic_ptr = mrb_basic_ptr(hash);
1038-
unsigned int was_frozen = basic_ptr->frozen;
1039-
basic_ptr->frozen = TRUE;
1037+
struct RBasic *basic_hash = mrb_basic_ptr(hash);
1038+
unsigned int was_frozen = basic_hash->frozen;
1039+
basic_hash->frozen = TRUE;
1040+
struct RHash *h = mrb_hash_ptr(hash);
10401041
mrb_int len = mrb_hash_size(mrb, hash);
10411042
encode_len(w, 5, (uint64_t)len);
1042-
mrb_hash_foreach(mrb, mrb_hash_ptr(hash), encode_map_foreach, w);
1043-
basic_ptr->frozen = was_frozen;
1043+
mrb_hash_foreach(mrb, h, encode_map_foreach, w);
1044+
basic_hash->frozen = was_frozen;
10441045
}
10451046

10461047
static void
@@ -1160,11 +1161,7 @@ encode_proc_tag(mrb_state *mrb, CborWriter *w, mrb_value obj)
11601161
{
11611162
mrb_value proc_rev = cbor_proc_tag_rev_registry(mrb);
11621163
struct proc_tag_foreach_arg a = {w, obj, FALSE };
1163-
struct RBasic *basic_ptr = mrb_basic_ptr(proc_rev);
1164-
unsigned int was_frozen = basic_ptr->frozen;
1165-
basic_ptr->frozen = TRUE;
11661164
mrb_hash_foreach(mrb, mrb_hash_ptr(proc_rev), proc_tag_foreach_cb, &a);
1167-
basic_ptr->frozen = was_frozen;
11681165
return a.found;
11691166
}
11701167

0 commit comments

Comments
 (0)