summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/class.c17
-rw-r--r--src/load.c2
-rw-r--r--src/variable.c2
3 files changed, 15 insertions, 6 deletions
diff --git a/src/class.c b/src/class.c
index 7f11dc25c..cf2f6df50 100644
--- a/src/class.c
+++ b/src/class.c
@@ -852,9 +852,12 @@ mrb_method_search(mrb_state *mrb, struct RClass* c, mrb_sym mid)
m = mrb_method_search_vm(mrb, &c, mid);
if (!m) {
+ mrb_value inspect = mrb_funcall(mrb, mrb_obj_value(c), "inspect", 0);
+ if (RSTRING_LEN(inspect) > 64) {
+ inspect = mrb_any_to_s(mrb, mrb_obj_value(c));
+ }
mrb_raisef(mrb, E_NAME_ERROR, "undefined method '%s' for class %s",
- mrb_sym2name(mrb, mid),
- RSTRING_PTR(mrb_funcall(mrb, mrb_obj_value(c), "inspect", 0)));
+ mrb_sym2name(mrb, mid), RSTRING_PTR(inspect));
}
return m;
}
@@ -1005,14 +1008,20 @@ mrb_bob_missing(mrb_state *mrb, mrb_value mod)
{
mrb_value name, *a;
int alen;
+ mrb_value inspect;
mrb_get_args(mrb, "o*", &name, &a, &alen);
if (!mrb_symbol_p(name)) {
mrb_raise(mrb, E_TYPE_ERROR, "name should be a symbol");
}
+
+ inspect = mrb_funcall(mrb, mod, "inspect", 0);
+ if (RSTRING_LEN(inspect) > 64) {
+ inspect = mrb_any_to_s(mrb, mod);
+ }
+
mrb_raisef(mrb, E_NOMETHOD_ERROR, "undefined method '%s' for %s",
- mrb_sym2name(mrb, mrb_symbol(name)),
- RSTRING_PTR(mrb_funcall(mrb, mod, "inspect", 0)));
+ mrb_sym2name(mrb, mrb_symbol(name)), RSTRING_PTR(inspect));
/* not reached */
return mrb_nil_value();
}
diff --git a/src/load.c b/src/load.c
index 65b6004d3..142c6fdf7 100644
--- a/src/load.c
+++ b/src/load.c
@@ -613,6 +613,7 @@ hex_to_str(char *hex, char *str, uint16_t *str_len)
{
char *src, *dst, buf[4];
int escape = 0, base = 0;
+ char *err_ptr;
*str_len = 0;
for (src = hex, dst = str; *src != '\0'; src++) {
@@ -639,7 +640,6 @@ hex_to_str(char *hex, char *str, uint16_t *str_len)
strncpy(buf, src, 2);
}
- char *err_ptr;
*dst++ = (unsigned char) strtol(buf, &err_ptr, base) & 0xff;
src += (err_ptr - buf - 1);
break;
diff --git a/src/variable.c b/src/variable.c
index 2978637b4..b3b3b3d87 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -580,7 +580,7 @@ iv_i(mrb_state *mrb, mrb_sym sym, mrb_value v, void *p)
ary = *(mrb_value*)p;
s = mrb_sym2name_len(mrb, sym, &len);
- if (len > 1 && s[0] == '@') {
+ if (len > 1 && s[0] == '@' && s[1] != '@') {
mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
}
return 0;