summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-symbol-ext/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-02-06 22:01:45 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-02-12 17:30:34 +0900
commit06ba5905f019ca1a8d8e498fe6dce7a94702c9ad (patch)
treeca7dacf0eee23b1256cda2fad2e7b69a975af47a /mrbgems/mruby-symbol-ext/src
parent3a95bf0ddb2ce9c15655afc14073669bf4968c12 (diff)
downloadmruby-06ba5905f019ca1a8d8e498fe6dce7a94702c9ad.tar.gz
mruby-06ba5905f019ca1a8d8e498fe6dce7a94702c9ad.zip
Implement inline packed symbols.
Small symbols with all alphanumeric characters (<5) are packed in 32bit symbol integer a la base64. This means those small symbols are not listed in `Symbol.all_symbols`.
Diffstat (limited to 'mrbgems/mruby-symbol-ext/src')
-rw-r--r--mrbgems/mruby-symbol-ext/src/symbol.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/mrbgems/mruby-symbol-ext/src/symbol.c b/mrbgems/mruby-symbol-ext/src/symbol.c
index 215226502..05e7d5b91 100644
--- a/mrbgems/mruby-symbol-ext/src/symbol.c
+++ b/mrbgems/mruby-symbol-ext/src/symbol.c
@@ -30,7 +30,8 @@ mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
mrb_value ary = mrb_ary_new_capa(mrb, mrb->symidx);
for (i=1, lim=mrb->symidx+1; i<lim; i++) {
- mrb_ary_push(mrb, ary, mrb_symbol_value(i));
+ mrb_sym sym = i<<1;
+ mrb_ary_push(mrb, ary, mrb_symbol_value(sym));
}
return ary;