** Create code for '(e1 .. e2)'. ** For '(e1 .. e2.1 .. e2.2)' (which is '(e1 .. (e2.1 .. e2.2))', ** because concatenation is right associative), merge both CONCATs. */
| 1620 | ** because concatenation is right associative), merge both CONCATs. |
| 1621 | */ |
| 1622 | static void codeconcat (FuncState *fs, expdesc *e1, expdesc *e2, int line) { |
| 1623 | Instruction *ie2 = previousinstruction(fs); |
| 1624 | if (GET_OPCODE(*ie2) == OP_CONCAT) { /* is 'e2' a concatenation? */ |
| 1625 | int n = GETARG_B(*ie2); /* # of elements concatenated in 'e2' */ |
| 1626 | lua_assert(e1->u.info + 1 == GETARG_A(*ie2)); |
| 1627 | freeexp(fs, e2); |
| 1628 | SETARG_A(*ie2, e1->u.info); /* correct first element ('e1') */ |
| 1629 | SETARG_B(*ie2, n + 1); /* will concatenate one more element */ |
| 1630 | } |
| 1631 | else { /* 'e2' is not a concatenation */ |
| 1632 | luaK_codeABC(fs, OP_CONCAT, e1->u.info, 2, 0); /* new concat opcode */ |
| 1633 | freeexp(fs, e2); |
| 1634 | luaK_fixline(fs, line); |
| 1635 | } |
| 1636 | } |
| 1637 | |
| 1638 | |
| 1639 | /* |
no test coverage detected