diff options
| author | take_cheeze <[email protected]> | 2014-06-20 21:56:03 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-06-23 19:51:27 +0900 |
| commit | 7015493efbc2efe6820d65eabad387f3fea4a414 (patch) | |
| tree | a75f6669a2624083c535ce549eca4403429b6409 /mrbgems/mruby-symbol-ext/src | |
| parent | 0a6b54acd63f0f396eda6e1e5e2366ce91a35d79 (diff) | |
| download | mruby-7015493efbc2efe6820d65eabad387f3fea4a414.tar.gz mruby-7015493efbc2efe6820d65eabad387f3fea4a414.zip | |
Reduce string creation of `length`, `size`, `empty?` method of `Symbol` extension.
Diffstat (limited to 'mrbgems/mruby-symbol-ext/src')
| -rw-r--r-- | mrbgems/mruby-symbol-ext/src/symbol.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/mrbgems/mruby-symbol-ext/src/symbol.c b/mrbgems/mruby-symbol-ext/src/symbol.c index 4ed5d83c6..7ca749999 100644 --- a/mrbgems/mruby-symbol-ext/src/symbol.c +++ b/mrbgems/mruby-symbol-ext/src/symbol.c @@ -42,11 +42,27 @@ mrb_sym_all_symbols(mrb_state *mrb, mrb_value self) return ary; } +/* + * call-seq: + * sym.length -> integer + * + * Same as <code>sym.to_s.length</code>. + */ +static mrb_value +mrb_sym_length(mrb_state *mrb, mrb_value self) +{ + mrb_int len; + mrb_sym2name_len(mrb, mrb_symbol(self), &len); + return mrb_fixnum_value(len); +} + void mrb_mruby_symbol_ext_gem_init(mrb_state* mrb) { struct RClass *s = mrb->symbol_class; mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE()); + mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE()); + mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE()); } void |
