summaryrefslogtreecommitdiffhomepage
path: root/src/symbol.c
diff options
context:
space:
mode:
authortake-cheeze <[email protected]>2018-10-29 19:17:05 +0900
committertake-cheeze <[email protected]>2018-10-29 19:17:05 +0900
commit3248de83b6754eecc99d9ab6fdef8bb3575fcd04 (patch)
tree56f57e3526c89ff9581b0d7b71a0be742e09800d /src/symbol.c
parenteebb56713e27cde27a7b899da8636a0634704863 (diff)
downloadmruby-3248de83b6754eecc99d9ab6fdef8bb3575fcd04.tar.gz
mruby-3248de83b6754eecc99d9ab6fdef8bb3575fcd04.zip
Reduce instruction size
Diffstat (limited to 'src/symbol.c')
-rw-r--r--src/symbol.c26
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);
+ }
}
/**********************************************************************