** Fix an expression to return one result. ** If expression is not a multi-ret expression (function call or ** vararg), it already returns one result, so nothing needs to be done. ** Function calls become VNONRELOC expressions (as its result comes ** fixed in the base register of the call), while vararg expressions ** become VRELOC (as OP_VARARG puts its results where it wants). ** (Calls are crea
| 790 | ** to be fixed.) |
| 791 | */ |
| 792 | void luaK_setoneret (FuncState *fs, expdesc *e) { |
| 793 | if (e->k == VCALL) { /* expression is an open function call? */ |
| 794 | /* already returns 1 value */ |
| 795 | lua_assert(GETARG_C(getinstruction(fs, e)) == 2); |
| 796 | e->k = VNONRELOC; /* result has fixed position */ |
| 797 | e->u.info = GETARG_A(getinstruction(fs, e)); |
| 798 | } |
| 799 | else if (e->k == VVARARG) { |
| 800 | SETARG_C(getinstruction(fs, e), 2); |
| 801 | e->k = VRELOC; /* can relocate its simple result */ |
| 802 | } |
| 803 | } |
| 804 | |
| 805 | /* |
| 806 | ** Change a vararg parameter into a regular local variable |
no outgoing calls
no test coverage detected