Disable `Symbol.all_symbols`.

parent 06ba5905
...@@ -120,6 +120,7 @@ ...@@ -120,6 +120,7 @@
/* -DMRB_ENABLE_XXXX to enable following features */ /* -DMRB_ENABLE_XXXX to enable following features */
//#define MRB_ENABLE_DEBUG_HOOK /* hooks for debugger */ //#define MRB_ENABLE_DEBUG_HOOK /* hooks for debugger */
//#define MRB_ENABLE_ALL_SYMBOLS /* Symbols.all_symbols */
/* end of configuration */ /* end of configuration */
......
...@@ -3,11 +3,6 @@ ...@@ -3,11 +3,6 @@
#include <mruby/array.h> #include <mruby/array.h>
#include <mruby/string.h> #include <mruby/string.h>
typedef struct symbol_name {
size_t len;
const char *name;
} symbol_name;
/* /*
* call-seq: * call-seq:
* Symbol.all_symbols => array * Symbol.all_symbols => array
...@@ -23,6 +18,7 @@ typedef struct symbol_name { ...@@ -23,6 +18,7 @@ typedef struct symbol_name {
* :Tms, :getwd, :$=, :ThreadGroup, * :Tms, :getwd, :$=, :ThreadGroup,
* :wait2, :$>] * :wait2, :$>]
*/ */
#ifdef MRB_ENABLE_ALL_SYMBOLS
static mrb_value static mrb_value
mrb_sym_all_symbols(mrb_state *mrb, mrb_value self) mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
{ {
...@@ -36,6 +32,7 @@ mrb_sym_all_symbols(mrb_state *mrb, mrb_value self) ...@@ -36,6 +32,7 @@ mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
return ary; return ary;
} }
#endif
/* /*
* call-seq: * call-seq:
...@@ -61,7 +58,9 @@ void ...@@ -61,7 +58,9 @@ void
mrb_mruby_symbol_ext_gem_init(mrb_state* mrb) mrb_mruby_symbol_ext_gem_init(mrb_state* mrb)
{ {
struct RClass *s = mrb->symbol_class; struct RClass *s = mrb->symbol_class;
#ifdef MRB_ENABLE_ALL_SYMBOLS
mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE()); mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE());
#endif
mrb_define_method(mrb, s, "length", mrb_sym_length, 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()); mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE());
} }
......
# coding: utf-8
## ##
# Symbol(Ext) Test # Symbol(Ext) Test
assert('Symbol.all_symbols') do if Symbol.respond_to?(:all_symbols)
foo = [:__symbol_test_1, :__symbol_test_2, :__symbol_test_3].sort assert('Symbol.all_symbols') do
symbols = Symbol.all_symbols.select{|sym|sym.to_s.include? '__symbol_test'}.sort foo = [:__symbol_test_1, :__symbol_test_2, :__symbol_test_3].sort
assert_equal foo, symbols symbols = Symbol.all_symbols.select{|sym|sym.to_s.include? '__symbol_test'}.sort
assert_equal foo, symbols
end
end end
%w[size length].each do |n| %w[size length].each do |n|
......
...@@ -28,6 +28,7 @@ sym_validate_len(mrb_state *mrb, size_t len) ...@@ -28,6 +28,7 @@ sym_validate_len(mrb_state *mrb, size_t len)
} }
} }
#ifndef MRB_ENABLE_ALL_SYMBOLS
static char pack_table[] = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static char pack_table[] = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
static mrb_sym static mrb_sym
...@@ -100,6 +101,7 @@ sym_inline_unpack(mrb_sym sym, char *buf) ...@@ -100,6 +101,7 @@ sym_inline_unpack(mrb_sym sym, char *buf)
buf[i] = '\0'; buf[i] = '\0';
return buf; return buf;
} }
#endif
uint8_t uint8_t
symhash(const char *key, size_t len) symhash(const char *key, size_t len)
...@@ -123,9 +125,11 @@ find_symbol(mrb_state *mrb, const char *name, uint16_t len, uint8_t hash) ...@@ -123,9 +125,11 @@ find_symbol(mrb_state *mrb, const char *name, uint16_t len, uint8_t hash)
mrb_sym i; mrb_sym i;
symbol_name *sname; symbol_name *sname;
#ifndef MRB_ENABLE_ALL_SYMBOLS
/* inline symbol */ /* inline symbol */
i = sym_inline_pack(name, len); i = sym_inline_pack(name, len);
if (i > 0) return i; if (i > 0) return i;
#endif
i = mrb->symhash[hash]; i = mrb->symhash[hash];
if (i == 0) return 0; if (i == 0) return 0;
...@@ -247,11 +251,13 @@ mrb_check_intern_str(mrb_state *mrb, mrb_value str) ...@@ -247,11 +251,13 @@ mrb_check_intern_str(mrb_state *mrb, mrb_value str)
MRB_API const char* MRB_API const char*
mrb_sym2name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp) mrb_sym2name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp)
{ {
#ifndef MRB_ENABLE_ALL_SYMBOLS
if (sym & 1) { /* inline packed symbol */ if (sym & 1) { /* inline packed symbol */
sym_inline_unpack(sym, mrb->symbuf); sym_inline_unpack(sym, mrb->symbuf);
if (lenp) *lenp = strlen(mrb->symbuf); if (lenp) *lenp = strlen(mrb->symbuf);
return mrb->symbuf; return mrb->symbuf;
} }
#endif
sym >>= 1; sym >>= 1;
if (sym == 0 || mrb->symidx < sym) { if (sym == 0 || mrb->symidx < sym) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment