Use `MRB_OPSYM()` instead of `mrb_intern_lit()`.
MODIFY
mrbgems/mruby-compiler/core/codegen.c
mrbgems/mruby-compiler/core/codegen.c
@@ -1742,7 +1742,7 @@ codegen(codegen_scope *s, node *tree, int val)
genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(__case_eqq)), 1);
}
else {
- genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "===")), 1);
+ genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_OPSYM(eqq)), 1);
}
}
else {
@@ -2545,7 +2545,7 @@ codegen(codegen_scope *s, node *tree, int val)
default:
if (val) {
- int sym = new_sym(s, mrb_intern_lit(s->mrb, "-@"));
+ int sym = new_sym(s, MRB_OPSYM(minus));
codegen(s, tree, VAL);
pop();
genop_3(s, OP_SEND, cursp(), sym, 0);
@@ -2637,7 +2637,7 @@ codegen(codegen_scope *s, node *tree, int val)
}
push(); /* for block */
pop_n(3);
- sym = new_sym(s, mrb_intern_lit(s->mrb, "`"));
+ sym = new_sym(s, MRB_OPSYM(tick)); /* ` */
genop_3(s, OP_SEND, cursp(), sym, 1);
if (val) push();
mrb_gc_arena_restore(s->mrb, ai);
@@ -2657,7 +2657,7 @@ codegen(codegen_scope *s, node *tree, int val)
genop_2(s, OP_STRING, cursp(), off);
push(); push();
pop_n(3);
- sym = new_sym(s, mrb_intern_lit(s->mrb, "`"));
+ sym = new_sym(s, MRB_OPSYM(tick)); /* ` */
genop_3(s, OP_SEND, cursp(), sym, 1);
if (val) push();
mrb_gc_arena_restore(s->mrb, ai);

MODIFY
mrbgems/mruby-compiler/core/parse.y
mrbgems/mruby-compiler/core/parse.y
@@ -311,14 +311,14 @@ static void
local_add_blk(parser_state *p, mrb_sym blk)
{
/* allocate register for block */
- local_add_f(p, blk ? blk : intern_lit("&"));
+ local_add_f(p, blk ? blk : MRB_OPSYM(and));
}
static void
local_add_kw(parser_state *p, mrb_sym kwd)
{
/* allocate register for keywords hash */
- local_add_f(p, kwd ? kwd : intern_lit("**"));
+ local_add_f(p, kwd ? kwd : MRB_OPSYM(pow));
}
static node*
@@ -1671,7 +1671,7 @@ command_asgn : lhs '=' command_rhs
}
| primary_value '[' opt_call_args ']' tOP_ASGN command_rhs
{
- $$ = new_op_asgn(p, new_call(p, $1, intern_lit("[]"), $3, '.'), $5, $6);
+ $$ = new_op_asgn(p, new_call(p, $1, MRB_OPSYM(aref), $3, '.'), $5, $6);
}
| primary_value call_op tIDENTIFIER tOP_ASGN command_rhs
{
@@ -1902,7 +1902,7 @@ mlhs_node : variable
}
| primary_value '[' opt_call_args ']'
{
- $$ = new_call(p, $1, intern_lit("[]"), $3, '.');
+ $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.');
}
| primary_value call_op tIDENTIFIER
{
@@ -1941,7 +1941,7 @@ lhs : variable
}
| primary_value '[' opt_call_args ']'
{
- $$ = new_call(p, $1, intern_lit("[]"), $3, '.');
+ $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.');
}
| primary_value call_op tIDENTIFIER
{
@@ -2029,36 +2029,36 @@ undef_list : fsym
}
;
-op : '|' { $$ = intern_lit("|"); }
- | '^' { $$ = intern_lit("^"); }
- | '&' { $$ = intern_lit("&"); }
- | tCMP { $$ = intern_lit("<=>"); }
- | tEQ { $$ = intern_lit("=="); }
- | tEQQ { $$ = intern_lit("==="); }
- | tMATCH { $$ = intern_lit("=~"); }
- | tNMATCH { $$ = intern_lit("!~"); }
- | '>' { $$ = intern_lit(">"); }
- | tGEQ { $$ = intern_lit(">="); }
- | '<' { $$ = intern_lit("<"); }
- | tLEQ { $$ = intern_lit("<="); }
- | tNEQ { $$ = intern_lit("!="); }
- | tLSHFT { $$ = intern_lit("<<"); }
- | tRSHFT { $$ = intern_lit(">>"); }
- | '+' { $$ = intern_lit("+"); }
- | '-' { $$ = intern_lit("-"); }
- | '*' { $$ = intern_lit("*"); }
- | tSTAR { $$ = intern_lit("*"); }
- | '/' { $$ = intern_lit("/"); }
- | '%' { $$ = intern_lit("%"); }
- | tPOW { $$ = intern_lit("**"); }
- | tDSTAR { $$ = intern_lit("**"); }
- | '!' { $$ = intern_lit("!"); }
- | '~' { $$ = intern_lit("~"); }
- | tUPLUS { $$ = intern_lit("+@"); }
- | tUMINUS { $$ = intern_lit("-@"); }
- | tAREF { $$ = intern_lit("[]"); }
- | tASET { $$ = intern_lit("[]="); }
- | '`' { $$ = intern_lit("`"); }
+op : '|' { $$ = MRB_OPSYM(or); }
+ | '^' { $$ = MRB_OPSYM(xor); }
+ | '&' { $$ = MRB_OPSYM(and); }
+ | tCMP { $$ = MRB_OPSYM(cmp); }
+ | tEQ { $$ = MRB_OPSYM(eq); }
+ | tEQQ { $$ = MRB_OPSYM(eqq); }
+ | tMATCH { $$ = MRB_OPSYM(match); }
+ | tNMATCH { $$ = MRB_OPSYM(nmatch); }
+ | '>' { $$ = MRB_OPSYM(gt); }
+ | tGEQ { $$ = MRB_OPSYM(ge); }
+ | '<' { $$ = MRB_OPSYM(lt); }
+ | tLEQ { $$ = MRB_OPSYM(le); }
+ | tNEQ { $$ = MRB_OPSYM(neq); }
+ | tLSHFT { $$ = MRB_OPSYM(lshift); }
+ | tRSHFT { $$ = MRB_OPSYM(rshift); }
+ | '+' { $$ = MRB_OPSYM(add); }
+ | '-' { $$ = MRB_OPSYM(sub); }
+ | '*' { $$ = MRB_OPSYM(mul); }
+ | tSTAR { $$ = MRB_OPSYM(mul); }
+ | '/' { $$ = MRB_OPSYM(div); }
+ | '%' { $$ = MRB_OPSYM(mod); }
+ | tPOW { $$ = MRB_OPSYM(pow); }
+ | tDSTAR { $$ = MRB_OPSYM(pow); }
+ | '!' { $$ = MRB_OPSYM(not); }
+ | '~' { $$ = MRB_OPSYM(neg); }
+ | tUPLUS { $$ = MRB_OPSYM(plus); }
+ | tUMINUS { $$ = MRB_OPSYM(minus); }
+ | tAREF { $$ = MRB_OPSYM(aref); }
+ | tASET { $$ = MRB_OPSYM(aset); }
+ | '`' { $$ = MRB_OPSYM(tick); }
;
reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
@@ -2288,8 +2288,8 @@ paren_args : '(' opt_call_args ')'
| '(' tDOT3 rparen
{
#if 1
- mrb_sym r = mrb_intern_lit(p->mrb, "*");
- mrb_sym b = mrb_intern_lit(p->mrb, "&");
+ mrb_sym r = MRB_OPSYM(mul);
+ mrb_sym b = MRB_OPSYM(and);
if (local_var_p(p, r) && local_var_p(p, b)) {
$$ = cons(list1(new_splat(p, new_lvar(p, r))),
new_block_arg(p, new_lvar(p, b)));

MODIFY
src/array.c
src/array.c
@@ -1086,7 +1086,7 @@ mrb_ary_splat(mrb_state *mrb, mrb_value v)
return mrb_obj_value(a);
}
- if (!mrb_respond_to(mrb, v, mrb_intern_lit(mrb, "to_a"))) {
+ if (!mrb_respond_to(mrb, v, MRB_SYM(to_a))) {
return mrb_ary_new_from_values(mrb, 1, &v);
}
@@ -1314,7 +1314,7 @@ init_ary_each(mrb_state *mrb, struct RClass *ary)
each_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*5);
each_irep->syms[0] = MRB_SYM(each);
each_irep->syms[1] = MRB_SYM(to_enum);
- each_irep->syms[2] = mrb_intern_lit(mrb, "[]");
+ each_irep->syms[2] = MRB_OPSYM(aref);
each_irep->syms[3] = MRB_SYM(call);
each_irep->syms[4] = MRB_SYM(length);
each_irep->slen = 5;

MODIFY
src/kernel.c
src/kernel.c
@@ -766,7 +766,7 @@ mrb_obj_ceqq(mrb_state *mrb, mrb_value self)
{
mrb_value v = mrb_get_arg1(mrb);
mrb_int i, len;
- mrb_sym eqq = mrb_intern_lit(mrb, "===");
+ mrb_sym eqq = MRB_OPSYM(eqq);
mrb_value ary;
if (mrb_array_p(self)) {

MODIFY
src/proc.c
src/proc.c
@@ -326,7 +326,7 @@ mrb_init_proc(mrb_state *mrb)
irep_obj->data = NULL;
MRB_METHOD_FROM_PROC(m, p);
mrb_define_method_raw(mrb, mrb->proc_class, MRB_SYM(call), m);
- mrb_define_method_raw(mrb, mrb->proc_class, mrb_intern_lit(mrb, "[]"), m);
+ mrb_define_method_raw(mrb, mrb->proc_class, MRB_OPSYM(aref), m);
mrb_define_class_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.2.6 */
mrb_define_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.3.27 */

MODIFY
src/vm.c
src/vm.c
@@ -2142,7 +2142,7 @@ RETRY_TRY_BLOCK:
OP_MATH_CASE_STRING_##op_name(); \
default: \
c = 1; \
- mid = mrb_intern_lit(mrb, MRB_STRINGIZE(OP_MATH_OP_##op_name)); \
+ mid = MRB_OPSYM(op_name); \
goto L_SEND_SYM; \
} \
NEXT;
@@ -2229,7 +2229,7 @@ RETRY_TRY_BLOCK:
#endif
default:
c = 1;
- mid = mrb_intern_lit(mrb, "/");
+ mid = MRB_OPSYM(div);
goto L_SEND_SYM;
}
@@ -2255,7 +2255,7 @@ RETRY_TRY_BLOCK:
default: \
SET_INT_VALUE(regs[a+1], b); \
c = 1; \
- mid = mrb_intern_lit(mrb, MRB_STRINGIZE(OP_MATH_OP_##op_name)); \
+ mid = MRB_OPSYM(op_name); \
goto L_SEND_SYM; \
} \
NEXT;
@@ -2292,7 +2292,7 @@ RETRY_TRY_BLOCK:
#define OP_CMP_BODY(op,v1,v2) (v1(regs[a]) op v2(regs[a+1]))
#ifdef MRB_WITHOUT_FLOAT
-#define OP_CMP(op) do {\
+#define OP_CMP(op,sym) do {\
int result;\
/* need to check if - is overridden */\
switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\
@@ -2301,7 +2301,7 @@ RETRY_TRY_BLOCK:
break;\
default:\
c = 1;\
- mid = mrb_intern_lit(mrb, # op);\
+ mid = MRB_OPSYM(sym);\
goto L_SEND_SYM;\
}\
if (result) {\
@@ -2312,7 +2312,7 @@ RETRY_TRY_BLOCK:
}\
} while(0)
#else
-#define OP_CMP(op) do {\
+#define OP_CMP(op, sym) do {\
int result;\
/* need to check if - is overridden */\
switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\
@@ -2330,7 +2330,7 @@ RETRY_TRY_BLOCK:
break;\
default:\
c = 1;\
- mid = mrb_intern_lit(mrb, # op);\
+ mid = MRB_OPSYM(sym);\
goto L_SEND_SYM;\
}\
if (result) {\
@@ -2347,28 +2347,28 @@ RETRY_TRY_BLOCK:
SET_TRUE_VALUE(regs[a]);
}
else {
- OP_CMP(==);
+ OP_CMP(==,eq);
}
NEXT;
}
CASE(OP_LT, B) {
- OP_CMP(<);
+ OP_CMP(<,lt);
NEXT;
}
CASE(OP_LE, B) {
- OP_CMP(<=);
+ OP_CMP(<=,le);
NEXT;
}
CASE(OP_GT, B) {
- OP_CMP(>);
+ OP_CMP(>,gt);
NEXT;
}
CASE(OP_GE, B) {
- OP_CMP(>=);
+ OP_CMP(>=,ge);
NEXT;
}

Use `MRB_OPSYM()` instead of `mrb_intern_lit()`.