summaryrefslogtreecommitdiffhomepage
path: root/src/symbol.c
diff options
context:
space:
mode:
authorYukihiro Matz Matsumoto <[email protected]>2013-03-27 23:41:23 +0900
committerYukihiro Matz Matsumoto <[email protected]>2013-03-27 23:41:23 +0900
commit18b2683b97ae54d4f2f15c19076f33aa29eaf2b7 (patch)
treef6afd41abfd7b0ad8b76bb5e618e6ee0fbdc6723 /src/symbol.c
parent8ce842a5d978132c5733cacb7c15bb3d0f5ce66d (diff)
downloadmruby-18b2683b97ae54d4f2f15c19076f33aa29eaf2b7.tar.gz
mruby-18b2683b97ae54d4f2f15c19076f33aa29eaf2b7.zip
use new mrb_format API from mrb_raisef; its only format specifier is "%S" (stringify) and takes mrb_value; close #1062
Diffstat (limited to 'src/symbol.c')
-rw-r--r--src/symbol.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/symbol.c b/src/symbol.c
index 37090111a..2612e0d15 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -348,6 +348,21 @@ sym_inspect(mrb_state *mrb, mrb_value sym)
return str;
}
+mrb_value
+mrb_sym2str(mrb_state *mrb, mrb_sym sym)
+{
+ size_t len;
+ const char *name = mrb_sym2name_len(mrb, sym, &len);
+
+ if (!name) return mrb_undef_value(); /* can't happen */
+ if (symname_p(name) && strlen(name) == len) {
+ return mrb_str_new(mrb, name, len);
+ }
+ else {
+ return mrb_str_dump(mrb, mrb_str_new(mrb, name, len));
+ }
+}
+
const char*
mrb_sym2name(mrb_state *mrb, mrb_sym sym)
{