diff options
| author | take-cheeze <[email protected]> | 2018-10-29 19:17:05 +0900 |
|---|---|---|
| committer | take-cheeze <[email protected]> | 2018-10-29 19:17:05 +0900 |
| commit | 3248de83b6754eecc99d9ab6fdef8bb3575fcd04 (patch) | |
| tree | 56f57e3526c89ff9581b0d7b71a0be742e09800d /src/symbol.c | |
| parent | eebb56713e27cde27a7b899da8636a0634704863 (diff) | |
| download | mruby-3248de83b6754eecc99d9ab6fdef8bb3575fcd04.tar.gz mruby-3248de83b6754eecc99d9ab6fdef8bb3575fcd04.zip | |
Reduce instruction size
Diffstat (limited to 'src/symbol.c')
| -rw-r--r-- | src/symbol.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/symbol.c b/src/symbol.c index 6b4c7200c..f7dbc1be1 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -11,6 +11,7 @@ #include <mruby/string.h> #include <mruby/dump.h> #include <mruby/class.h> +#include <mruby/symbol.h> /* ------------------------------------------------------ */ typedef struct symbol_name { @@ -170,10 +171,35 @@ mrb_free_symtbl(mrb_state *mrb) kh_destroy(n2s, mrb, mrb->name2sym); } +struct reserved_symbol_t { + mrb_reserved_symbol sym; + char const *str; +}; + +static struct reserved_symbol_t reserved_symbols[] = { + { mrb_sym_add, "+" }, + { mrb_sym_sub, "-" }, + { mrb_sym_mul, "*" }, + { mrb_sym_div, "/" }, + { mrb_sym_eq, "==" }, + { mrb_sym_lt, "<" }, + { mrb_sym_le, "<=" }, + { mrb_sym_gt, ">" }, + { mrb_sym_ge, ">=" }, + { mrb_sym_method_missing, "method_missing" }, + { 0, NULL }, +}; + void mrb_init_symtbl(mrb_state *mrb) { + int i; mrb->name2sym = kh_init(n2s, mrb); + + for (i = 0; reserved_symbols[i].sym != 0; ++i) { + mrb_sym s = mrb_intern_static(mrb, reserved_symbols[i].str, strlen(reserved_symbols[i].str)); + mrb_assert(s == reserved_symbols[i].sym); + } } /********************************************************************** |
