Skip to content

Commit c0b5220

Browse files
committed
Modify mrb_name_error() to use mrb_format().
1 parent e265d7c commit c0b5220

4 files changed

Lines changed: 19 additions & 22 deletions

File tree

src/class.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,7 +1473,7 @@ check_cv_name(mrb_state *mrb, mrb_sym id)
14731473

14741474
s = mrb_sym2name_len(mrb, id, &len);
14751475
if (len < 3 || !(s[0] == '@' && s[1] == '@')) {
1476-
mrb_name_error(mrb, id, "`%s' is not allowed as a class variable name", s);
1476+
mrb_name_error(mrb, id, "`%S' is not allowed as a class variable name", mrb_sym2str(mrb, id));
14771477
}
14781478
}
14791479

@@ -1595,12 +1595,12 @@ mrb_mod_remove_cvar(mrb_state *mrb, mrb_value mod)
15951595
if (!mrb_undef_p(val)) return val;
15961596

15971597
if (mrb_cv_defined(mrb, mod, id)){
1598-
mrb_name_error(mrb, id, "cannot remove %s for %s",
1599-
mrb_sym2name(mrb, id), mrb_class_name(mrb, mrb_class_ptr(mod)));
1598+
mrb_name_error(mrb, id, "cannot remove %S for %S",
1599+
mrb_sym2str(mrb, id), mod);
16001600
}
16011601

1602-
mrb_name_error(mrb, id, "class variable %s not defined for %s",
1603-
mrb_sym2name(mrb, id), mrb_class_name(mrb, mrb_class_ptr(mod)));
1602+
mrb_name_error(mrb, id, "class variable %S not defined for %S",
1603+
mrb_sym2str(mrb, id), mod);
16041604

16051605
/* not reached */
16061606
return mrb_nil_value();
@@ -1645,8 +1645,9 @@ mrb_mod_method_defined(mrb_state *mrb, mrb_value mod)
16451645
}
16461646

16471647
static void
1648-
remove_method(mrb_state *mrb, struct RClass *c, mrb_sym mid)
1648+
remove_method(mrb_state *mrb, mrb_value mod, mrb_sym mid)
16491649
{
1650+
struct RClass *c = mrb_class_ptr(mod);
16501651
khash_t(mt) *h = c->mt;
16511652
khiter_t k;
16521653

@@ -1658,8 +1659,8 @@ remove_method(mrb_state *mrb, struct RClass *c, mrb_sym mid)
16581659
}
16591660
}
16601661

1661-
mrb_name_error(mrb, mid, "method `%s' not defined in %s",
1662-
mrb_sym2name(mrb, mid), mrb_class_name(mrb, c));
1662+
mrb_name_error(mrb, mid, "method `%S' not defined in %S",
1663+
mrb_sym2str(mrb, mid), mod);
16631664
}
16641665

16651666
/* 15.2.2.4.41 */
@@ -1674,13 +1675,12 @@ remove_method(mrb_state *mrb, struct RClass *c, mrb_sym mid)
16741675
mrb_value
16751676
mrb_mod_remove_method(mrb_state *mrb, mrb_value mod)
16761677
{
1677-
struct RClass *c = mrb_class_ptr(mod);
16781678
int argc;
16791679
mrb_value *argv;
16801680

16811681
mrb_get_args(mrb, "*", &argv, &argc);
16821682
while (argc--) {
1683-
remove_method(mrb, c, mrb_symbol(*argv));
1683+
remove_method(mrb, mod, mrb_symbol(*argv));
16841684
argv++;
16851685
}
16861686
return mod;
@@ -1694,7 +1694,7 @@ check_const_name(mrb_state *mrb, mrb_sym id)
16941694

16951695
s = mrb_sym2name_len(mrb, id, &len);
16961696
if (len < 1 || !ISUPPER(*s)) {
1697-
mrb_name_error(mrb, id, "wrong constant name %s", s);
1697+
mrb_name_error(mrb, id, "wrong constant name %S", mrb_sym2str(mrb, id));
16981698
}
16991699
}
17001700

@@ -1743,7 +1743,7 @@ mrb_mod_remove_const(mrb_state *mrb, mrb_value mod)
17431743
check_const_name(mrb, id);
17441744
val = mrb_iv_remove(mrb, mod, id);
17451745
if (mrb_undef_p(val)) {
1746-
mrb_name_error(mrb, id, "constant %s not defined", mrb_sym2name(mrb, id));
1746+
mrb_name_error(mrb, id, "constant %S not defined", mrb_sym2str(mrb, id));
17471747
}
17481748
return val;
17491749
}

src/error.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -292,18 +292,14 @@ mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
292292
void
293293
mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
294294
{
295-
mrb_value exc, argv[2];
295+
mrb_value exc;
296+
mrb_value argv[2];
296297
va_list args;
297-
char buf[256];
298-
int n;
299298

300299
va_start(args, fmt);
301-
n = vsnprintf(buf, sizeof(buf), fmt, args);
300+
argv[0] = mrb_vformat(mrb, fmt, args);
302301
va_end(args);
303-
if (n < 0) {
304-
n = 0;
305-
}
306-
argv[0] = mrb_str_new(mrb, buf, n);
302+
307303
argv[1] = mrb_symbol_value(id); /* ignore now */
308304
exc = mrb_class_new_instance(mrb, 1, argv, E_NAME_ERROR);
309305
mrb_exc_raise(mrb, exc);

src/error.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ int sysexit_status(mrb_state *mrb, mrb_value err);
1212
mrb_value mrb_exc_new3(mrb_state *mrb, struct RClass* c, mrb_value str);
1313
mrb_value make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr);
1414
mrb_value mrb_make_exception(mrb_state *mrb, int argc, mrb_value *argv);
15+
mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
1516
void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...);
1617
void mrb_exc_print(mrb_state *mrb, struct RObject *exc);
1718

src/kernel.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ check_iv_name(mrb_state *mrb, mrb_sym id)
556556

557557
s = mrb_sym2name_len(mrb, id, &len);
558558
if (len < 2 || !(s[0] == '@' && s[1] != '@')) {
559-
mrb_name_error(mrb, id, "`%s' is not allowed as an instance variable name", s);
559+
mrb_name_error(mrb, id, "`%S' is not allowed as an instance variable name", mrb_sym2str(mrb, id));
560560
}
561561
}
562562

@@ -964,7 +964,7 @@ mrb_obj_remove_instance_variable(mrb_state *mrb, mrb_value self)
964964
check_iv_name(mrb, sym);
965965
val = mrb_iv_remove(mrb, self, sym);
966966
if (mrb_undef_p(val)) {
967-
mrb_name_error(mrb, sym, "instance variable %s not defined", mrb_sym2name(mrb, sym));
967+
mrb_name_error(mrb, sym, "instance variable %S not defined", mrb_sym2str(mrb, sym));
968968
}
969969
return val;
970970
}

0 commit comments

Comments
 (0)