source: EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-symbol-ext/src/symbol.c@ 439

Last change on this file since 439 was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 1.8 KB
Line 
1#include <mruby.h>
2#include <mruby/khash.h>
3#include <mruby/array.h>
4#include <mruby/string.h>
5
6/*
7 * call-seq:
8 * Symbol.all_symbols => array
9 *
10 * Returns an array of all the symbols currently in Ruby's symbol
11 * table.
12 *
13 * Symbol.all_symbols.size #=> 903
14 * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
15 * :chown, :EOFError, :$;, :String,
16 * :LOCK_SH, :"setuid?", :$<,
17 * :default_proc, :compact, :extend,
18 * :Tms, :getwd, :$=, :ThreadGroup,
19 * :wait2, :$>]
20 */
21#ifdef MRB_ENABLE_ALL_SYMBOLS
22static mrb_value
23mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
24{
25 mrb_sym i, lim;
26 mrb_value ary = mrb_ary_new_capa(mrb, mrb->symidx);
27
28 for (i=1, lim=mrb->symidx+1; i<lim; i++) {
29 mrb_sym sym = i<<1;
30 mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
31 }
32
33 return ary;
34}
35#endif
36
37/*
38 * call-seq:
39 * sym.length -> integer
40 *
41 * Same as <code>sym.to_s.length</code>.
42 */
43static mrb_value
44mrb_sym_length(mrb_state *mrb, mrb_value self)
45{
46 mrb_int len;
47#ifdef MRB_UTF8_STRING
48 mrb_int byte_len;
49 const char *name = mrb_sym_name_len(mrb, mrb_symbol(self), &byte_len);
50 len = mrb_utf8_strlen(name, byte_len);
51#else
52 mrb_sym_name_len(mrb, mrb_symbol(self), &len);
53#endif
54 return mrb_fixnum_value(len);
55}
56
57void
58mrb_mruby_symbol_ext_gem_init(mrb_state* mrb)
59{
60 struct RClass *s = mrb->symbol_class;
61#ifdef MRB_ENABLE_ALL_SYMBOLS
62 mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE());
63#endif
64 mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE());
65 mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE());
66}
67
68void
69mrb_mruby_symbol_ext_gem_final(mrb_state* mrb)
70{
71}
Note: See TracBrowser for help on using the repository browser.