diff options
| author | cremno <[email protected]> | 2014-04-14 03:52:17 +0200 |
|---|---|---|
| committer | cremno <[email protected]> | 2014-04-14 03:52:17 +0200 |
| commit | 7a8ed0fa3a46eb0716345eefe1408c80e4443210 (patch) | |
| tree | 9be5efe4246e7bc1d870e96a660f9f04f46ecd23 | |
| parent | 65678f11b427e11c33ffef5ba7adabd87bd4f530 (diff) | |
| download | mruby-7a8ed0fa3a46eb0716345eefe1408c80e4443210.tar.gz mruby-7a8ed0fa3a46eb0716345eefe1408c80e4443210.zip | |
exc_inspect: dup file and check mesg only once
| -rw-r--r-- | src/error.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/error.c b/src/error.c index c344509b9..64851bb56 100644 --- a/src/error.c +++ b/src/error.c @@ -122,28 +122,30 @@ static mrb_value exc_inspect(mrb_state *mrb, mrb_value exc) { mrb_value str, mesg, file, line; + mrb_bool append_mesg; mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg")); file = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "file")); line = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "line")); + append_mesg = !mrb_nil_p(mesg) && RSTRING_LEN(mesg) > 0; if (!mrb_nil_p(file) && !mrb_nil_p(line)) { - str = file; + str = mrb_str_dup(mrb, file); mrb_str_cat_lit(mrb, str, ":"); mrb_str_append(mrb, str, line); mrb_str_cat_lit(mrb, str, ": "); - if (!mrb_nil_p(mesg) && RSTRING_LEN(mesg) > 0) { + if (append_mesg) { mrb_str_append(mrb, str, mesg); mrb_str_cat_lit(mrb, str, " ("); } mrb_str_cat_cstr(mrb, str, mrb_obj_classname(mrb, exc)); - if (!mrb_nil_p(mesg) && RSTRING_LEN(mesg) > 0) { + if (append_mesg) { mrb_str_cat_lit(mrb, str, ")"); } } else { str = mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc)); - if (!mrb_nil_p(mesg) && RSTRING_LEN(mesg) > 0) { + if (append_mesg) { mrb_str_cat_lit(mrb, str, ": "); mrb_str_append(mrb, str, mesg); } |
