** '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
| 616 | ** stack before we have the space guaranteed.) |
| 617 | */ |
| 618 | LUALIB_API void luaL_addvalue (luaL_Buffer *B) { |
| 619 | lua_State *L = B->L; |
| 620 | size_t len; |
| 621 | const char *s = lua_tolstring(L, -1, &len); |
| 622 | char *b = prepbuffsize(B, len, -2); |
| 623 | memcpy(b, s, len * sizeof(char)); |
| 624 | luaL_addsize(B, len); |
| 625 | lua_pop(L, 1); /* pop string */ |
| 626 | } |
| 627 | |
| 628 | |
| 629 | LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { |
no test coverage detected