1 | #include <mruby.h>
|
---|
2 | #include <mruby/khash.h>
|
---|
3 | #include <mruby/array.h>
|
---|
4 |
|
---|
5 | typedef struct symbol_name {
|
---|
6 | size_t len;
|
---|
7 | const char *name;
|
---|
8 | } symbol_name;
|
---|
9 |
|
---|
10 | /*
|
---|
11 | * call-seq:
|
---|
12 | * Symbol.all_symbols => array
|
---|
13 | *
|
---|
14 | * Returns an array of all the symbols currently in Ruby's symbol
|
---|
15 | * table.
|
---|
16 | *
|
---|
17 | * Symbol.all_symbols.size #=> 903
|
---|
18 | * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
|
---|
19 | * :chown, :EOFError, :$;, :String,
|
---|
20 | * :LOCK_SH, :"setuid?", :$<,
|
---|
21 | * :default_proc, :compact, :extend,
|
---|
22 | * :Tms, :getwd, :$=, :ThreadGroup,
|
---|
23 | * :wait2, :$>]
|
---|
24 | */
|
---|
25 | static mrb_value
|
---|
26 | mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
|
---|
27 | {
|
---|
28 | mrb_sym i, lim;
|
---|
29 | mrb_value ary = mrb_ary_new_capa(mrb, mrb->symidx);
|
---|
30 |
|
---|
31 | for (i=1, lim=mrb->symidx+1; i<lim; i++) {
|
---|
32 | mrb_ary_push(mrb, ary, mrb_symbol_value(i));
|
---|
33 | }
|
---|
34 |
|
---|
35 | return ary;
|
---|
36 | }
|
---|
37 |
|
---|
38 | /*
|
---|
39 | * call-seq:
|
---|
40 | * sym.length -> integer
|
---|
41 | *
|
---|
42 | * Same as <code>sym.to_s.length</code>.
|
---|
43 | */
|
---|
44 | static mrb_value
|
---|
45 | mrb_sym_length(mrb_state *mrb, mrb_value self)
|
---|
46 | {
|
---|
47 | mrb_int len;
|
---|
48 | mrb_sym2name_len(mrb, mrb_symbol(self), &len);
|
---|
49 | return mrb_fixnum_value(len);
|
---|
50 | }
|
---|
51 |
|
---|
52 | void
|
---|
53 | mrb_mruby_symbol_ext_gem_init(mrb_state* mrb)
|
---|
54 | {
|
---|
55 | struct RClass *s = mrb->symbol_class;
|
---|
56 | mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE());
|
---|
57 | mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE());
|
---|
58 | mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE());
|
---|
59 | }
|
---|
60 |
|
---|
61 | void
|
---|
62 | mrb_mruby_symbol_ext_gem_final(mrb_state* mrb)
|
---|
63 | {
|
---|
64 | }
|
---|