** 'luaL_addvalue' is the only function in the Buffer system where the ** box (if existent) is not on the top of the stack. So, instead of ** calling 'luaL_addlstring', it replicates the code using -2 as the ** last argument to 'prepbuffsize', signaling that the box is (or will ** be) bellow the string being added to the buffer. (Box creation can ** trigger an emergency GC, so we should not remove
| 605 | ** stack before we have the space guaranteed.) |
| 606 | */ |
| 607 | LUALIB_API void luaL_addvalue (luaL_Buffer *B) { |
| 608 | lua_State *L = B->L; |
| 609 | size_t len; |
| 610 | const char *s = lua_tolstring(L, -1, &len); |
| 611 | char *b = prepbuffsize(B, len, -2); |
| 612 | memcpy(b, s, len * sizeof(char)); |
| 613 | luaL_addsize(B, len); |
| 614 | lua_pop(L, 1); /* pop string */ |
| 615 | } |
| 616 | |
| 617 | |
| 618 | LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { |
no test coverage detected