From e6a263a16212b3d8c4768c0d3808eaafcb2e7f60 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Thu, 29 May 2014 22:08:33 +0900 Subject: Raise `NameError` as defined in specification when `Struct` member isn't found. --- mrbgems/mruby-struct/src/struct.c | 8 ++++---- mrbgems/mruby-struct/test/struct.rb | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 930384806..85e1ce0ee 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -512,7 +512,7 @@ struct_aref_sym(mrb_state *mrb, mrb_value s, mrb_sym id) return ptr[i]; } } - mrb_raisef(mrb, E_INDEX_ERROR, "no member '%S' in struct", mrb_sym2str(mrb, id)); + mrb_name_error(mrb, id, "no member '%S' in struct", mrb_sym2str(mrb, id)); return mrb_nil_value(); /* not reached */ } @@ -560,7 +560,7 @@ mrb_struct_aref(mrb_state *mrb, mrb_value s) 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); + mrb_name_error(mrb, mrb_intern_str(mrb, idx), "no member '%S' in struct", idx); } idx = sym; } @@ -591,7 +591,7 @@ mrb_struct_aset_sym(mrb_state *mrb, mrb_value s, mrb_sym id, mrb_value val) return val; } } - mrb_raisef(mrb, E_INDEX_ERROR, "no member '%S' in struct", mrb_sym2str(mrb, id)); + mrb_name_error(mrb, id, "no member '%S' in struct", mrb_sym2str(mrb, id)); return val; /* not reach */ } @@ -630,7 +630,7 @@ mrb_struct_aset(mrb_state *mrb, mrb_value s) 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); + mrb_name_error(mrb, mrb_intern_str(mrb, idx), "no member '%S' in struct", idx); } idx = sym; } diff --git a/mrbgems/mruby-struct/test/struct.rb b/mrbgems/mruby-struct/test/struct.rb index 17220b1be..172058ecd 100644 --- a/mrbgems/mruby-struct/test/struct.rb +++ b/mrbgems/mruby-struct/test/struct.rb @@ -34,6 +34,7 @@ assert('Struct#[]', '15.2.18.4.2') do assert_equal 2, cc[-1] assert_raise(TypeError) { cc[[]] } assert_raise(IndexError) { cc[2] } + assert_raise(NameError) { cc['tama'] } end assert('Struct#[]=', '15.2.18.4.3') do @@ -49,6 +50,7 @@ assert('Struct#[]=', '15.2.18.4.3') do assert_equal 5, cc[-1] assert_raise(TypeError) { cc[[]] = 3 } assert_raise(IndexError) { cc[2] = 7 } + assert_raise(NameError) { cc['pochi'] = 8 } end assert('Struct#each', '15.2.18.4.4') do -- cgit v1.2.3