diff options
| author | take_cheeze <[email protected]> | 2014-05-28 23:14:28 +0900 |
|---|---|---|
| committer | take_cheeze <[email protected]> | 2014-05-28 23:14:28 +0900 |
| commit | 7bc4d08f71950f673d788653c50703263edb61df (patch) | |
| tree | b4a9e082a47d7c99fb097d3532131e3ae3454917 /mrbgems/mruby-struct/src | |
| parent | 0f432e90284e441c89faae9b5f183932750f469f (diff) | |
| download | mruby-7bc4d08f71950f673d788653c50703263edb61df.tar.gz mruby-7bc4d08f71950f673d788653c50703263edb61df.zip | |
Support string key in `Struct#[]=`.
Diffstat (limited to 'mrbgems/mruby-struct/src')
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index a15655dbb..adac60202 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -660,6 +660,14 @@ mrb_struct_aset(mrb_state *mrb, mrb_value s) mrb_get_args(mrb, "oo", &idx, &val); + if (mrb_string_p(idx)) { + mrb_value sym = mrb_check_intern_str(mrb, idx); + + if (mrb_nil_p(sym)) { + mrb_raisef(mrb, E_INDEX_ERROR, "no member '%S' in struct", idx); + } + idx = sym; + } if (mrb_symbol_p(idx)) { return mrb_struct_aset_sym(mrb, s, mrb_symbol(idx), val); } |
