** Emit code for equality comparisons ('==', '~='). ** 'e1' was already put as RK by 'luaK_infix'. */
| 1520 | ** 'e1' was already put as RK by 'luaK_infix'. |
| 1521 | */ |
| 1522 | static void codeeq (FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e2) { |
| 1523 | int r1, r2; |
| 1524 | int im; |
| 1525 | int isfloat = 0; /* not needed here, but kept for symmetry */ |
| 1526 | OpCode op; |
| 1527 | if (e1->k != VNONRELOC) { |
| 1528 | lua_assert(e1->k == VK || e1->k == VKINT || e1->k == VKFLT); |
| 1529 | swapexps(e1, e2); |
| 1530 | } |
| 1531 | r1 = luaK_exp2anyreg(fs, e1); /* 1st expression must be in register */ |
| 1532 | if (isSCnumber(e2, &im, &isfloat)) { |
| 1533 | op = OP_EQI; |
| 1534 | r2 = im; /* immediate operand */ |
| 1535 | } |
| 1536 | else if (luaK_exp2RK(fs, e2)) { /* 1st expression is constant? */ |
| 1537 | op = OP_EQK; |
| 1538 | r2 = e2->u.info; /* constant index */ |
| 1539 | } |
| 1540 | else { |
| 1541 | op = OP_EQ; /* will compare two registers */ |
| 1542 | r2 = luaK_exp2anyreg(fs, e2); |
| 1543 | } |
| 1544 | freeexps(fs, e1, e2); |
| 1545 | e1->u.info = condjump(fs, op, r1, r2, isfloat, (opr == OPR_EQ)); |
| 1546 | e1->k = VJMP; |
| 1547 | } |
| 1548 | |
| 1549 | |
| 1550 | /* |
no test coverage detected