|
63 | 63 | VALUE rb_iseqw_local_variables(VALUE iseqval);
|
64 | 64 | VALUE rb_iseqw_new(const rb_iseq_t *);
|
65 | 65 | int rb_str_end_with_asciichar(VALUE str, int c);
|
| 66 | +VALUE rb_ident_hash_new(void); |
66 | 67 |
|
67 | 68 | long rb_backtrace_length_limit = -1;
|
68 | 69 | VALUE rb_eEAGAIN;
|
@@ -161,18 +162,13 @@ rb_warning_category_mask(VALUE category)
|
161 | 162 | rb_warning_category_t
|
162 | 163 | rb_warning_category_from_name(VALUE category)
|
163 | 164 | {
|
164 |
| - rb_warning_category_t cat = RB_WARN_CATEGORY_NONE; |
| 165 | + VALUE cat_value; |
165 | 166 | Check_Type(category, T_SYMBOL);
|
166 |
| - if (category == ID2SYM(id_deprecated)) { |
167 |
| - cat = RB_WARN_CATEGORY_DEPRECATED; |
168 |
| - } |
169 |
| - else if (category == ID2SYM(id_experimental)) { |
170 |
| - cat = RB_WARN_CATEGORY_EXPERIMENTAL; |
171 |
| - } |
172 |
| - else { |
| 167 | + cat_value = rb_hash_aref(warning_categories, category); |
| 168 | + if (cat_value == Qnil) { |
173 | 169 | rb_raise(rb_eArgError, "unknown category: %"PRIsVALUE, category);
|
174 | 170 | }
|
175 |
| - return cat; |
| 171 | + return NUM2INT(cat_value); |
176 | 172 | }
|
177 | 173 |
|
178 | 174 | void
|
@@ -318,7 +314,7 @@ rb_warn_category(VALUE str, VALUE category)
|
318 | 314 | {
|
319 | 315 | if (category != Qnil) {
|
320 | 316 | category = rb_to_symbol_type(category);
|
321 |
| - if (rb_hash_aref(warning_categories, category) != Qtrue) { |
| 317 | + if (!RTEST(rb_hash_aref(warning_categories, category))) { |
322 | 318 | rb_raise(rb_eArgError, "invalid warning category used: %s", rb_id2name(SYM2ID(category)));
|
323 | 319 | }
|
324 | 320 | }
|
@@ -2836,16 +2832,17 @@ Init_Exception(void)
|
2836 | 2832 |
|
2837 | 2833 | sym_category = ID2SYM(id_category);
|
2838 | 2834 |
|
2839 |
| - warning_categories = rb_hash_new(); |
| 2835 | + warning_categories = rb_ident_hash_new(); |
2840 | 2836 | rb_gc_register_mark_object(warning_categories);
|
2841 |
| - rb_hash_aset(warning_categories, ID2SYM(rb_intern_const("deprecated")), Qtrue); |
| 2837 | + rb_hash_aset(warning_categories, ID2SYM(id_deprecated), INT2NUM(RB_WARN_CATEGORY_DEPRECATED)); |
| 2838 | + rb_hash_aset(warning_categories, ID2SYM(id_experimental), INT2NUM(RB_WARN_CATEGORY_EXPERIMENTAL)); |
2842 | 2839 | rb_obj_freeze(warning_categories);
|
2843 | 2840 |
|
2844 |
| - warning_category_t_map = rb_hash_new(); |
| 2841 | + warning_category_t_map = rb_ident_hash_new(); |
2845 | 2842 | rb_gc_register_mark_object(warning_category_t_map);
|
2846 | 2843 | rb_hash_aset(warning_category_t_map, INT2NUM(RB_WARN_CATEGORY_NONE), Qnil);
|
2847 |
| - rb_hash_aset(warning_category_t_map, INT2NUM(RB_WARN_CATEGORY_DEPRECATED), ID2SYM(rb_intern_const("deprecated"))); |
2848 |
| - rb_hash_aset(warning_category_t_map, INT2NUM(RB_WARN_CATEGORY_EXPERIMENTAL), ID2SYM(rb_intern_const("experimental"))); |
| 2844 | + rb_hash_aset(warning_category_t_map, INT2NUM(RB_WARN_CATEGORY_DEPRECATED), ID2SYM(id_deprecated)); |
| 2845 | + rb_hash_aset(warning_category_t_map, INT2NUM(RB_WARN_CATEGORY_EXPERIMENTAL), ID2SYM(id_experimental)); |
2849 | 2846 | rb_obj_freeze(warning_category_t_map);
|
2850 | 2847 | }
|
2851 | 2848 |
|
|
0 commit comments