Skip to content

Commit 8193c0b

Browse files
committed
Check before generating special operators (e.g. OP_ADD); fix #3557
1 parent a49c9f8 commit 8193c0b

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

mrbgems/mruby-compiler/core/codegen.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -904,31 +904,31 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val, int safe)
904904
mrb_int symlen;
905905
const char *symname = mrb_sym2name_len(s->mrb, sym, &symlen);
906906

907-
if (!noop && symlen == 1 && symname[0] == '+') {
907+
if (!noop && symlen == 1 && symname[0] == '+' && n == 1) {
908908
genop_peep(s, MKOP_ABC(OP_ADD, cursp(), idx, n), val);
909909
}
910-
else if (!noop && symlen == 1 && symname[0] == '-') {
910+
else if (!noop && symlen == 1 && symname[0] == '-' && n == 1) {
911911
genop_peep(s, MKOP_ABC(OP_SUB, cursp(), idx, n), val);
912912
}
913-
else if (!noop && symlen == 1 && symname[0] == '*') {
913+
else if (!noop && symlen == 1 && symname[0] == '*' && n == 1) {
914914
genop(s, MKOP_ABC(OP_MUL, cursp(), idx, n));
915915
}
916-
else if (!noop && symlen == 1 && symname[0] == '/') {
916+
else if (!noop && symlen == 1 && symname[0] == '/' && n == 1) {
917917
genop(s, MKOP_ABC(OP_DIV, cursp(), idx, n));
918918
}
919-
else if (!noop && symlen == 1 && symname[0] == '<') {
919+
else if (!noop && symlen == 1 && symname[0] == '<' && n == 1) {
920920
genop(s, MKOP_ABC(OP_LT, cursp(), idx, n));
921921
}
922-
else if (!noop && symlen == 2 && symname[0] == '<' && symname[1] == '=') {
922+
else if (!noop && symlen == 2 && symname[0] == '<' && symname[1] == '=' && n == 1) {
923923
genop(s, MKOP_ABC(OP_LE, cursp(), idx, n));
924924
}
925-
else if (!noop && symlen == 1 && symname[0] == '>') {
925+
else if (!noop && symlen == 1 && symname[0] == '>' && n == 1) {
926926
genop(s, MKOP_ABC(OP_GT, cursp(), idx, n));
927927
}
928-
else if (!noop && symlen == 2 && symname[0] == '>' && symname[1] == '=') {
928+
else if (!noop && symlen == 2 && symname[0] == '>' && symname[1] == '=' && n == 1) {
929929
genop(s, MKOP_ABC(OP_GE, cursp(), idx, n));
930930
}
931-
else if (!noop && symlen == 2 && symname[0] == '=' && symname[1] == '=') {
931+
else if (!noop && symlen == 2 && symname[0] == '=' && symname[1] == '=' && n == 1) {
932932
genop(s, MKOP_ABC(OP_EQ, cursp(), idx, n));
933933
}
934934
else {

0 commit comments

Comments
 (0)