summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-07-22 11:21:00 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-07-22 11:21:00 +0900
commit3e9ed1cca2cbd5a4295846e001f3ee834e534ab1 (patch)
treeec5af0deee4a6a3c6a3a8a2c5a6819ab86e01247 /mrbgems/mruby-compiler/core
parente42f192827102a6aa7a398d0360e310ed2ae20d2 (diff)
downloadmruby-3e9ed1cca2cbd5a4295846e001f3ee834e534ab1.tar.gz
mruby-3e9ed1cca2cbd5a4295846e001f3ee834e534ab1.zip
codegen.c: compare symbol names directly avoiding string conversion.
Diffstat (limited to 'mrbgems/mruby-compiler/core')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c69
1 files changed, 32 insertions, 37 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 57b722cbf..4fd3feb08 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1321,46 +1321,41 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val, int safe)
}
push();pop();
pop_n(n+1);
- {
- mrb_int symlen;
- const char *symname = mrb_sym_name_len(s->mrb, sym, &symlen);
+ if (!noop && sym == MRB_OPSYM_2(s->mrb, add) && n == 1) {
+ gen_addsub(s, OP_ADD, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, sub) && n == 1) {
+ gen_addsub(s, OP_SUB, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, mul) && n == 1) {
+ genop_1(s, OP_MUL, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, div) && n == 1) {
+ genop_1(s, OP_DIV, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, lt) && n == 1) {
+ genop_1(s, OP_LT, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, le) && n == 1) {
+ genop_1(s, OP_LE, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, gt) && n == 1) {
+ genop_1(s, OP_GT, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, ge) && n == 1) {
+ genop_1(s, OP_GE, cursp());
+ }
+ else if (!noop && sym == MRB_OPSYM_2(s->mrb, eq) && n == 1) {
+ genop_1(s, OP_EQ, cursp());
+ }
+ else {
+ int idx = new_sym(s, sym);
- if (!noop && symlen == 1 && symname[0] == '+' && n == 1) {
- gen_addsub(s, OP_ADD, cursp());
- }
- else if (!noop && symlen == 1 && symname[0] == '-' && n == 1) {
- gen_addsub(s, OP_SUB, cursp());
- }
- else if (!noop && symlen == 1 && symname[0] == '*' && n == 1) {
- genop_1(s, OP_MUL, cursp());
- }
- else if (!noop && symlen == 1 && symname[0] == '/' && n == 1) {
- genop_1(s, OP_DIV, cursp());
- }
- else if (!noop && symlen == 1 && symname[0] == '<' && n == 1) {
- genop_1(s, OP_LT, cursp());
- }
- else if (!noop && symlen == 2 && symname[0] == '<' && symname[1] == '=' && n == 1) {
- genop_1(s, OP_LE, cursp());
- }
- else if (!noop && symlen == 1 && symname[0] == '>' && n == 1) {
- genop_1(s, OP_GT, cursp());
- }
- else if (!noop && symlen == 2 && symname[0] == '>' && symname[1] == '=' && n == 1) {
- genop_1(s, OP_GE, cursp());
- }
- else if (!noop && symlen == 2 && symname[0] == '=' && symname[1] == '=' && n == 1) {
- genop_1(s, OP_EQ, cursp());
+ if (sendv) {
+ genop_2(s, blk ? OP_SENDVB : OP_SENDV, cursp(), idx);
}
else {
- int idx = new_sym(s, sym);
-
- if (sendv) {
- genop_2(s, blk ? OP_SENDVB : OP_SENDV, cursp(), idx);
- }
- else {
- genop_3(s, blk ? OP_SENDB : OP_SEND, cursp(), idx, n);
- }
+ genop_3(s, blk ? OP_SENDB : OP_SEND, cursp(), idx, n);
}
}
if (safe) {