summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-04-03 10:01:44 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-04-03 10:01:44 +0900
commit8193c0b566d78a1cf0e0e7b6b2c3a56e3e0dfac0 (patch)
treec7e590cd366e2b829fc0408c23b54c7df7fbf3ac /mrbgems/mruby-compiler/core/codegen.c
parenta49c9f86e73d76cbeba30e1affda874fcab0a504 (diff)
downloadmruby-8193c0b566d78a1cf0e0e7b6b2c3a56e3e0dfac0.tar.gz
mruby-8193c0b566d78a1cf0e0e7b6b2c3a56e3e0dfac0.zip
Check before generating special operators (e.g. OP_ADD); fix #3557
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 234a3a1ec..043004e2a 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -904,31 +904,31 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val, int safe)
mrb_int symlen;
const char *symname = mrb_sym2name_len(s->mrb, sym, &symlen);
- if (!noop && symlen == 1 && symname[0] == '+') {
+ if (!noop && symlen == 1 && symname[0] == '+' && n == 1) {
genop_peep(s, MKOP_ABC(OP_ADD, cursp(), idx, n), val);
}
- else if (!noop && symlen == 1 && symname[0] == '-') {
+ else if (!noop && symlen == 1 && symname[0] == '-' && n == 1) {
genop_peep(s, MKOP_ABC(OP_SUB, cursp(), idx, n), val);
}
- else if (!noop && symlen == 1 && symname[0] == '*') {
+ else if (!noop && symlen == 1 && symname[0] == '*' && n == 1) {
genop(s, MKOP_ABC(OP_MUL, cursp(), idx, n));
}
- else if (!noop && symlen == 1 && symname[0] == '/') {
+ else if (!noop && symlen == 1 && symname[0] == '/' && n == 1) {
genop(s, MKOP_ABC(OP_DIV, cursp(), idx, n));
}
- else if (!noop && symlen == 1 && symname[0] == '<') {
+ else if (!noop && symlen == 1 && symname[0] == '<' && n == 1) {
genop(s, MKOP_ABC(OP_LT, cursp(), idx, n));
}
- else if (!noop && symlen == 2 && symname[0] == '<' && symname[1] == '=') {
+ else if (!noop && symlen == 2 && symname[0] == '<' && symname[1] == '=' && n == 1) {
genop(s, MKOP_ABC(OP_LE, cursp(), idx, n));
}
- else if (!noop && symlen == 1 && symname[0] == '>') {
+ else if (!noop && symlen == 1 && symname[0] == '>' && n == 1) {
genop(s, MKOP_ABC(OP_GT, cursp(), idx, n));
}
- else if (!noop && symlen == 2 && symname[0] == '>' && symname[1] == '=') {
+ else if (!noop && symlen == 2 && symname[0] == '>' && symname[1] == '=' && n == 1) {
genop(s, MKOP_ABC(OP_GE, cursp(), idx, n));
}
- else if (!noop && symlen == 2 && symname[0] == '=' && symname[1] == '=') {
+ else if (!noop && symlen == 2 && symname[0] == '=' && symname[1] == '=' && n == 1) {
genop(s, MKOP_ABC(OP_EQ, cursp(), idx, n));
}
else {