diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-02 22:37:47 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-11-02 22:37:47 +0900 |
| commit | 9c5e28646b8c7fece19cf614cb05d6e14adca2f3 (patch) | |
| tree | a2915328c6b428db841d94343b1d6beb992b52e2 /src/symbol.c | |
| parent | 788e4388f86452c119e145b835e7853f39732811 (diff) | |
| parent | 6a6586ca84c6a9a691c9968320eed5e60e824b3c (diff) | |
| download | mruby-9c5e28646b8c7fece19cf614cb05d6e14adca2f3.tar.gz mruby-9c5e28646b8c7fece19cf614cb05d6e14adca2f3.zip | |
Merge pull request #4151 from take-cheeze/remove_op_symidx
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..8ec300e20 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" }, + { mrb_sym_null, NULL }, +}; + void mrb_init_symtbl(mrb_state *mrb) { + int i; mrb->name2sym = kh_init(n2s, mrb); + + for (i = 0; reserved_symbols[i].sym != mrb_sym_null; ++i) { + mrb_sym s = mrb_intern_static(mrb, reserved_symbols[i].str, strlen(reserved_symbols[i].str)); + mrb_assert(s == reserved_symbols[i].sym); + } } /********************************************************************** |
