Esempio n. 1
0
void luaL_addvalue (luaL_Buffer *B) {
  LuaThread *L = B->L;
  size_t l;
  const char *s = lua_tolstring(L, -1, &l);
  if (buffonstack(B))
    lua_insert(L, -2);  /* put value below buffer */
  luaL_addlstring(B, s, l);
  L->stack_.remove((buffonstack(B)) ? -2 : -1);  /* remove value */
}
Esempio n. 2
0
LUALIB_API void luaL_addvalue (luaL_Buffer *B) {
  lua_State *L = B->L;
  size_t l;
  const char *s = lua_tolstring(L, -1, &l);
  if (buffonstack(B))
	lua_insert(L, -2);  /* put value below buffer */
  luaL_addlstring(B, s, l);
  lua_remove(L, (buffonstack(B)) ? -2 : -1);  /* remove value */
}
Esempio n. 3
0
LUALIB_API void luaL_pushresult (luaL_Buffer *B)
{
    lua_State *L = B->L;
    lua_pushlstring(L, B->b, B->n);
    if (buffonstack(B))
        lua_remove(L, -2);  /* remove old buffer */
}
Esempio n. 4
0
File: lauxlib.c Progetto: goolic/tup
LUALIB_API void luaL_pushresult (luaL_Buffer *B) {
  lua_State *L = B->L;
  lua_pushlstring(L, B->b, B->n);
  if (buffonstack(B)) {
    resizebox(L, -2, 0);  /* delete old buffer */
    lua_remove(L, -2);  /* remove its header from the stack */
  }
}
Esempio n. 5
0
File: lauxlib.c Progetto: lua/lua
LUALIB_API void luaL_pushresult (luaL_Buffer *B) {
  lua_State *L = B->L;
  lua_pushlstring(L, B->b, B->n);
  if (buffonstack(B)) {
    lua_copy(L, -1, -3);  /* move string to reserved slot */
    lua_pop(L, 2);  /* pop string and box (closing the box) */
  }
}
Esempio n. 6
0
/*
** returns a pointer to a free area with at least 'sz' bytes
*/
LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) {
  lua_State *L = B->L;
  if (B->size - B->n < sz) {  /* not enough space? */
	char *newbuff;
	size_t newsize = B->size * 2;  /* double buffer size */
	if (newsize - B->n < sz)  /* not bit enough? */
	  newsize = B->n + sz;
	if (newsize < B->n || newsize - B->n < sz)
	  luaL_error(L, "buffer too large");
	/* create larger buffer */
	newbuff = (char *)lua_newuserdata(L, newsize * sizeof(char));
	/* move content to new buffer */
	memcpy(newbuff, B->b, B->n * sizeof(char));
	if (buffonstack(B))
	  lua_remove(L, -2);  /* remove old buffer */
	B->b = newbuff;
	B->size = newsize;
  }
  return &B->b[B->n];
}
Esempio n. 7
0
File: lauxlib.c Progetto: goolic/tup
/*
** returns a pointer to a free area with at least 'sz' bytes
*/
LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) {
  lua_State *L = B->L;
  if (B->size - B->n < sz) {  /* not enough space? */
    char *newbuff;
    size_t newsize = B->size * 2;  /* double buffer size */
    if (newsize - B->n < sz)  /* not big enough? */
      newsize = B->n + sz;
    if (newsize < B->n || newsize - B->n < sz)
      luaL_error(L, "buffer too large");
    /* create larger buffer */
    if (buffonstack(B))
      newbuff = (char *)resizebox(L, -1, newsize);
    else {  /* no buffer yet */
      newbuff = (char *)newbox(L, newsize);
      memcpy(newbuff, B->b, B->n * sizeof(char));  /* copy original content */
    }
    B->b = newbuff;
    B->size = newsize;
  }
  return &B->b[B->n];
}
Esempio n. 8
0
File: lauxlib.c Progetto: lua/lua
/*
** Returns a pointer to a free area with at least 'sz' bytes in buffer
** 'B'. 'boxidx' is the relative position in the stack where the
** buffer's box is or should be.
*/
static char *prepbuffsize (luaL_Buffer *B, size_t sz, int boxidx) {
  if (B->size - B->n >= sz)  /* enough space? */
    return B->b + B->n;
  else {
    lua_State *L = B->L;
    char *newbuff;
    size_t newsize = newbuffsize(B, sz);
    /* create larger buffer */
    if (buffonstack(B))  /* buffer already has a box? */
      newbuff = (char *)resizebox(L, boxidx, newsize);  /* resize it */
    else {  /* no box yet */
      lua_pushnil(L);  /* reserve slot for final result */
      newbox(L);  /* create a new box */
      /* move box (and slot) to its intended position */
      lua_rotate(L, boxidx - 1, 2);
      lua_toclose(L, boxidx);
      newbuff = (char *)resizebox(L, boxidx, newsize);
      memcpy(newbuff, B->b, B->n * sizeof(char));  /* copy original content */
    }
    B->b = newbuff;
    B->size = newsize;
    return newbuff + B->n;
  }
}
Esempio n. 9
0
void luaL_pushresult (luaL_Buffer *B) {
  LuaThread *L = B->L;
  lua_pushlstring(L, B->b, B->n);
  if (buffonstack(B))
    L->stack_.remove(-2);  /* remove old buffer */
}