lua_pushvalue
lua_pushvalue(L, -1);
lua_pushvalue(L, obj);
lua_pushvalue(L, idx);
if (idx) lua_pushvalue(L, idx);
lua_pushvalue(L, -2);
lua_pushvalue(L, -1);
lua_pushvalue(L, -nup);
lua_pushvalue(L, -1); /* copy to be left at top */
lua_pushvalue(L, -2); /* make copy of module (call result) */
lua_pushvalue(L, -1); /* copy of 'mod' */
lua_pushvalue(L, 1); /* state, */
lua_pushvalue(L, 1); /* argument 'self' to metamethod */
lua_pushvalue(L, 1);
lua_pushvalue(L, 1); /* move function to top */
lua_pushvalue(L, -2); /* copy table */
lua_pushvalue(L, -2); /* get string library */
lua_pushvalue(L, 3);
lua_pushvalue(L, 1);
lua_pushvalue(L, 2);
lua_pushvalue(L, a-1); /* -1 to compensate function */
lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */
lua_pushvalue(L, -1);
LUA_API void (lua_pushvalue) (lua_State *L, int idx);
lua_pushvalue(state, 1);