From 3248de83b6754eecc99d9ab6fdef8bb3575fcd04 Mon Sep 17 00:00:00 2001 From: take-cheeze Date: Mon, 29 Oct 2018 19:17:05 +0900 Subject: Reduce instruction size --- src/symbol.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/symbol.c') 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 #include #include +#include /* ------------------------------------------------------ */ 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); + } } /********************************************************************** -- cgit v1.2.3 From e022080390107e6d746bc24a3651eb6b65daa509 Mon Sep 17 00:00:00 2001 From: take-cheeze Date: Mon, 29 Oct 2018 19:22:43 +0900 Subject: Define null symbol --- include/mruby/symbol.h | 1 + src/symbol.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src/symbol.c') diff --git a/include/mruby/symbol.h b/include/mruby/symbol.h index 595caeefd..f11346830 100644 --- a/include/mruby/symbol.h +++ b/include/mruby/symbol.h @@ -15,6 +15,7 @@ MRB_BEGIN_DECL typedef enum mrb_reserved_symbol { + mrb_sym_null = 0, // NULL symbol mrb_sym_add = 1, // + mrb_sym_sub = 2, // - mrb_sym_mul = 3, // * diff --git a/src/symbol.c b/src/symbol.c index f7dbc1be1..8ec300e20 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -187,7 +187,7 @@ static struct reserved_symbol_t reserved_symbols[] = { { mrb_sym_gt, ">" }, { mrb_sym_ge, ">=" }, { mrb_sym_method_missing, "method_missing" }, - { 0, NULL }, + { mrb_sym_null, NULL }, }; void @@ -196,7 +196,7 @@ mrb_init_symtbl(mrb_state *mrb) int i; mrb->name2sym = kh_init(n2s, mrb); - for (i = 0; reserved_symbols[i].sym != 0; ++i) { + 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); } -- cgit v1.2.3