Selaa lähdekoodia

new scheme for buffers, centralized in auxlib.

Roberto Ierusalimschy 28 vuotta sitten
vanhempi
commit
502343b402
15 muutettua tiedostoa jossa 181 lisäystä ja 172 poistoa
  1. 70 1
      lauxlib.c
  2. 8 1
      lauxlib.h
  3. 2 2
      lbuiltin.c
  4. 1 2
      lgc.c
  5. 5 4
      liolib.c
  6. 29 35
      llex.c
  7. 1 8
      llex.h
  8. 1 18
      lmem.c
  9. 1 3
      lmem.h
  10. 3 1
      lstate.c
  11. 5 3
      lstate.h
  12. 44 81
      lstrlib.c
  13. 1 4
      lualib.h
  14. 3 3
      lvm.c
  15. 7 6
      makefile

+ 70 - 1
lauxlib.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lauxlib.c,v 1.4 1997/11/21 19:00:46 roberto Exp roberto $
+** $Id: lauxlib.c,v 1.5 1997/12/09 13:35:19 roberto Exp roberto $
 ** Auxiliar functions for building Lua libraries
 ** See Copyright Notice in lua.h
 */
@@ -10,6 +10,8 @@
 #include <string.h>
 
 #include "lauxlib.h"
+#include "lmem.h"
+#include "lstate.h"
 #include "lua.h"
 #include "luadebug.h"
 
@@ -99,3 +101,70 @@ void luaL_verror (char *fmt, ...)
 }
 
 
+/*-------------------------------------------------------
+**  Auxiliar buffer
+-------------------------------------------------------*/
+
+#define BUFF_STEP	32
+
+#define openspace(size)  if (L->Mbuffnext+(size) > L->Mbuffsize) Openspace(size)
+
+static void Openspace (int size)
+{
+  LState *l = L;  /* to optimize */
+  int base = l->Mbuffbase-l->Mbuffer;
+  l->Mbuffsize *= 2;
+  if (l->Mbuffnext+size > l->Mbuffsize)  /* still not big enough? */
+    l->Mbuffsize = l->Mbuffnext+size;
+  l->Mbuffer = luaM_realloc(l->Mbuffer, l->Mbuffsize);
+  l->Mbuffbase = l->Mbuffer+base;
+}
+
+
+char *luaL_openspace (int size)
+{
+  openspace(size);
+  return L->Mbuffer+L->Mbuffnext;
+}
+
+
+void luaL_addchar (int c)
+{
+  openspace(BUFF_STEP);
+  L->Mbuffer[L->Mbuffnext++] = c;
+}
+
+
+void luaL_resetbuffer (void)
+{
+  L->Mbuffnext = L->Mbuffbase-L->Mbuffer;
+}
+
+
+void luaL_addsize (int n)
+{
+  L->Mbuffnext += n;
+}
+
+
+int luaL_newbuffer (int size)
+{
+  int old = L->Mbuffbase-L->Mbuffer;
+  openspace(size);
+  L->Mbuffbase = L->Mbuffer+L->Mbuffnext;
+  return old;
+}
+
+
+void luaL_oldbuffer (int old)
+{
+  L->Mbuffnext = L->Mbuffbase-L->Mbuffer;
+  L->Mbuffbase = L->Mbuffer+old;
+}
+
+
+char *luaL_buffer (void)
+{
+  return L->Mbuffbase;
+}
+

+ 8 - 1
lauxlib.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lauxlib.h,v 1.3 1997/11/21 19:00:46 roberto Exp roberto $
+** $Id: lauxlib.h,v 1.4 1997/12/09 13:35:19 roberto Exp roberto $
 ** Auxiliar functions for building Lua libraries
 ** See Copyright Notice in lua.h
 */
@@ -27,6 +27,13 @@ lua_Object luaL_functionarg (int arg);
 lua_Object luaL_tablearg (int arg);
 lua_Object luaL_nonnullarg (int numArg);
 void luaL_verror (char *fmt, ...);
+char *luaL_openspace (int size);
+void luaL_resetbuffer (void);
+void luaL_addchar (int c);
+void luaL_addsize (int n);
+int luaL_newbuffer (int size);
+void luaL_oldbuffer (int old);
+char *luaL_buffer (void);
 
 
 #endif

+ 2 - 2
lbuiltin.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lbuiltin.c,v 1.16 1997/12/11 17:21:11 roberto Exp roberto $
+** $Id: lbuiltin.c,v 1.17 1997/12/15 16:17:20 roberto Exp roberto $
 ** Built-in functions
 ** See Copyright Notice in lua.h
 */
@@ -131,7 +131,7 @@ static void internaldofile (void)
 
 static char *to_string (lua_Object obj)
 {
-  char *buff = luaM_buffer(30);
+  char *buff = luaL_openspace(30);
   TObject *o = luaA_Address(obj);
   switch (ttype(o)) {
     case LUA_T_NUMBER:  case LUA_T_STRING:

+ 1 - 2
lgc.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.c,v 1.12 1997/12/11 14:48:46 roberto Exp roberto $
+** $Id: lgc.c,v 1.13 1997/12/15 16:17:20 roberto Exp roberto $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
@@ -272,7 +272,6 @@ long lua_collectgarbage (long limit)
   luaS_free(freestr);
   luaF_freeproto(freefunc);
   luaF_freeclosure(freeclos);
-  luaM_clearbuffer();
   recovered = recovered-L->nblocks;
   L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit;
   return recovered;

+ 5 - 4
liolib.c

@@ -1,5 +1,5 @@
 /*
-** $Id: liolib.c,v 1.8 1997/11/28 12:40:37 roberto Exp roberto $
+** $Id: liolib.c,v 1.9 1997/12/09 13:50:08 roberto Exp roberto $
 ** Standard I/O (and system) library
 ** See Copyright Notice in lua.h
 */
@@ -190,7 +190,7 @@ static void io_read (void)
   char *p = luaL_opt_string(arg, "[^\n]*{\n}");
   int inskip = 0;  /* to control {skips} */
   int c = NEED_OTHER;
-  luaI_emptybuff();
+  luaL_resetbuffer();
   while (*p) {
     if (*p == '{') {
       inskip++;
@@ -208,7 +208,7 @@ static void io_read (void)
       if (c == NEED_OTHER) c = getc(f);
       m = luaI_singlematch((c == EOF) ? 0 : (char)c, p, &ep);
       if (m) {
-        if (inskip == 0) luaI_addchar(c);
+        if (inskip == 0) luaL_addchar(c);
         c = NEED_OTHER;
       }
       switch (*ep) {
@@ -227,7 +227,8 @@ static void io_read (void)
   } break_while:
   if (c >= 0)  /* not EOF nor NEED_OTHER? */
      ungetc(c, f);
-  buff = luaI_addchar(0);
+  luaL_addchar(0);
+  buff = luaL_buffer();
   if (*buff != 0 || *p == 0)  /* read something or did not fail? */
     lua_pushstring(buff);
 }

+ 29 - 35
llex.c

@@ -1,5 +1,5 @@
 /*
-** $Id: llex.c,v 1.9 1997/12/02 12:43:54 roberto Exp roberto $
+** $Id: llex.c,v 1.10 1997/12/09 13:35:19 roberto Exp roberto $
 ** Lexical Analizer
 ** See Copyright Notice in lua.h
 */
@@ -8,6 +8,7 @@
 #include <ctype.h>
 #include <string.h>
 
+#include "lauxlib.h"
 #include "llex.h"
 #include "lmem.h"
 #include "lobject.h"
@@ -66,8 +67,7 @@ void luaX_setinput (ZIO *z)
   LS->ifstate[0].elsepart = 1;  /* to avoid a free $else */
   LS->lex_z = z;
   firstline(LS);
-  LS->textbuff.buffsize = 20;
-  LS->textbuff.text = luaM_buffer(LS->textbuff.buffsize);
+  luaL_resetbuffer();
 }
 
 
@@ -201,31 +201,24 @@ static void inclinenumber (LexState *LS)
 
 
 
-static void save (LexState *LS, int c)
-{
-  if (LS->textbuff.tokensize >= LS->textbuff.buffsize)
-    LS->textbuff.text = luaM_buffer(LS->textbuff.buffsize *= 2);
-  LS->textbuff.text[LS->textbuff.tokensize++] = c;
-}
+#define save(c)	luaL_addchar(c)
+#define save_and_next(LS)  (save(LS->current), next(LS))
 
 
 char *luaX_lasttoken (void)
 {
-  save(L->lexstate, 0);
-  return L->lexstate->textbuff.text;
+  save(0);
+  return luaL_buffer();
 }
 
 
-#define save_and_next(LS)  (save(LS, LS->current), next(LS))
-
-
 static int read_long_string (LexState *LS, YYSTYPE *l)
 {
   int cont = 0;
   while (1) {
     switch (LS->current) {
       case EOZ:
-        save(LS, 0);
+        save(0);
         return WRONGTOKEN;
       case '[':
         save_and_next(LS);
@@ -243,7 +236,7 @@ static int read_long_string (LexState *LS, YYSTYPE *l)
         }
         continue;
       case '\n':
-        save(LS, '\n');
+        save('\n');
         inclinenumber(LS);
         continue;
       default:
@@ -251,9 +244,9 @@ static int read_long_string (LexState *LS, YYSTYPE *l)
     }
   } endloop:
   save_and_next(LS);  /* pass the second ']' */
-  LS->textbuff.text[LS->textbuff.tokensize-2] = 0;  /* erases ']]' */
-  l->pTStr = luaS_new(LS->textbuff.text+2);
-  LS->textbuff.text[LS->textbuff.tokensize-2] = ']';  /* restores ']]' */
+  L->Mbuffer[L->Mbuffnext-2] = 0;  /* erases ']]' */
+  l->pTStr = luaS_new(L->Mbuffbase+2);
+  L->Mbuffer[L->Mbuffnext-2] = ']';  /* restores ']]' */
   return STRING;
 }
 
@@ -267,7 +260,7 @@ int luaY_lex (YYSTYPE *l)
 {
   LexState *LS = L->lexstate;
   double a;
-  LS->textbuff.tokensize = 0;
+  luaL_resetbuffer();
   if (lua_debug)
     luaY_codedebugline(LS->linelasttoken);
   LS->linelasttoken = LS->linenumber;
@@ -286,7 +279,7 @@ int luaY_lex (YYSTYPE *l)
         save_and_next(LS);
         if (LS->current != '-') return '-';
         do { next(LS); } while (LS->current != '\n' && LS->current != EOZ);
-        LS->textbuff.tokensize = 0;
+        luaL_resetbuffer();
         continue;
 
       case '[':
@@ -325,15 +318,15 @@ int luaY_lex (YYSTYPE *l)
           switch (LS->current) {
             case EOZ:
             case '\n':
-              save(LS, 0);
+              save(0);
               return WRONGTOKEN;
             case '\\':
               next(LS);  /* do not save the '\' */
               switch (LS->current) {
-                case 'n': save(LS, '\n'); next(LS); break;
-                case 't': save(LS, '\t'); next(LS); break;
-                case 'r': save(LS, '\r'); next(LS); break;
-                case '\n': save(LS, '\n'); inclinenumber(LS); break;
+                case 'n': save('\n'); next(LS); break;
+                case 't': save('\t'); next(LS); break;
+                case 'r': save('\r'); next(LS); break;
+                case '\n': save('\n'); inclinenumber(LS); break;
                 default : save_and_next(LS); break;
               }
               break;
@@ -342,9 +335,9 @@ int luaY_lex (YYSTYPE *l)
           }
         }
         next(LS);  /* skip delimiter */
-        save(LS, 0);
-        l->pTStr = luaS_new(LS->textbuff.text+1);
-        LS->textbuff.text[LS->textbuff.tokensize-1] = del;  /* restore delimiter */
+        save(0);
+        l->pTStr = luaS_new(L->Mbuffbase+1);
+        L->Mbuffer[L->Mbuffnext-1] = del;  /* restore delimiter */
         return STRING;
       }
 
@@ -375,7 +368,7 @@ int luaY_lex (YYSTYPE *l)
         if (LS->current == '.') {
           save_and_next(LS);
           if (LS->current == '.') {
-            save(LS, 0);
+            save(0);
             luaY_error(
               "ambiguous syntax (decimal point x string concatenation)");
           }
@@ -396,7 +389,7 @@ int luaY_lex (YYSTYPE *l)
 	    neg=(LS->current=='-');
             if (LS->current == '+' || LS->current == '-') save_and_next(LS);
             if (!isdigit(LS->current)) {
-              save(LS, 0); return WRONGTOKEN; }
+              save(0); return WRONGTOKEN; }
             do {
               e=10.0*e+(LS->current-'0');
               save_and_next(LS);
@@ -412,23 +405,24 @@ int luaY_lex (YYSTYPE *l)
         }
 
       case EOZ:
-        save(LS, 0);
+        save(0);
         if (LS->iflevel > 0)
           luaY_syntaxerror("input ends inside a $if", "");
         return 0;
 
       default:
         if (LS->current != '_' && !isalpha(LS->current)) {
+          int c = LS->current;
           save_and_next(LS);
-          return LS->textbuff.text[0];
+          return c;
         }
         else {  /* identifier or reserved word */
           TaggedString *ts;
           do {
             save_and_next(LS);
           } while (isalnum(LS->current) || LS->current == '_');
-          save(LS, 0);
-          ts = luaS_new(LS->textbuff.text);
+          save(0);
+          ts = luaS_new(L->Mbuffbase);
           if (ts->head.marked > 255)
             return ts->head.marked;  /* reserved word */
           l->pTStr = ts;

+ 1 - 8
llex.h

@@ -1,5 +1,5 @@
 /*
-** $Id: llex.h,v 1.4 1997/11/26 18:53:45 roberto Exp roberto $
+** $Id: llex.h,v 1.5 1997/12/02 12:43:44 roberto Exp roberto $
 ** Lexical Analizer
 ** See Copyright Notice in lua.h
 */
@@ -21,18 +21,11 @@ struct ifState {
   int skip;  /* true if part must be skiped */
 };
 
-struct textBuff {
-  char *text;  /* always points to luaM_buffer */
-  int tokensize;
-  int buffsize;
-};
-
 
 typedef struct LexState {
   int current;  /* look ahead character */
   struct zio *lex_z;  /* input stream */
   int linenumber;  /* input line counter */
-  struct textBuff textbuff;  /* buffer for tokens */
   int linelasttoken;  /* line where last token was read */
   int lastline;  /* last line wherein a SETLINE was generated */
   struct ifState ifstate[MAX_IFS];

+ 1 - 18
lmem.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lmem.c,v 1.2 1997/11/19 17:29:23 roberto Exp roberto $
+** $Id: lmem.c,v 1.3 1997/12/01 20:30:44 roberto Exp roberto $
 ** Interface to Memory Manager
 ** See Copyright Notice in lua.h
 */
@@ -27,23 +27,6 @@ int luaM_growaux (void **block, unsigned long nelems, int size,
 
 
 
-void *luaM_buffer (unsigned long size)
-{
-  if (size > L->Mbuffsize) {
-    L->Mbuffsize = size;
-    L->Mbuffer = luaM_realloc(L->Mbuffer, L->Mbuffsize);
-  }
-  return L->Mbuffer;
-}
-
-
-void luaM_clearbuffer (void)
-{
-  L->Mbuffsize /= 2;
-  L->Mbuffer = luaM_realloc(L->Mbuffer, L->Mbuffsize);
-}
-
-
 #ifndef DEBUG
 
 /*

+ 1 - 3
lmem.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lmem.h,v 1.3 1997/11/26 20:44:52 roberto Exp roberto $
+** $Id: lmem.h,v 1.4 1997/12/01 20:30:44 roberto Exp roberto $
 ** Interface to Memory Manager
 ** See Copyright Notice in lua.h
 */
@@ -20,8 +20,6 @@
 #define tableEM  "table overflow"
 #define memEM "not enough memory"
 
-void *luaM_buffer (unsigned long size);
-void luaM_clearbuffer (void);
 void *luaM_realloc (void *oldblock, unsigned long size);
 int luaM_growaux (void **block, unsigned long nelems, int size,
                        char *errormsg, unsigned long limit);

+ 3 - 1
lstate.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.c,v 1.3 1997/12/01 20:31:25 roberto Exp roberto $
+** $Id: lstate.c,v 1.4 1997/12/11 14:48:46 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -40,6 +40,8 @@ void lua_open (void)
   L->refArray = NULL;
   L->refSize = 0;
   L->Mbuffsize = 0;
+  L->Mbuffnext = 0;
+  L->Mbuffbase = NULL;
   L->Mbuffer = NULL;
   L->GCthreshold = GARBAGE_BLOCK;
   L->nblocks = 0;

+ 5 - 3
lstate.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.h,v 1.4 1997/11/27 15:59:25 roberto Exp roberto $
+** $Id: lstate.h,v 1.5 1997/11/28 16:56:05 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -65,8 +65,10 @@ typedef struct LState {
   int refSize;  /* size of refArray */
   unsigned long GCthreshold;
   unsigned long nblocks;  /* number of 'blocks' currently allocated */
-  char *Mbuffer;  /* global buffer, used by luaM_buffer */
-  unsigned long Mbuffsize;  /* size of Mbuffer */
+  char *Mbuffer;  /* global buffer */
+  char *Mbuffbase;  /* current first position of Mbuffer */
+  int Mbuffsize;  /* size of Mbuffer */
+  int Mbuffnext;  /* next position to fill in Mbuffer */
 } LState;
 
 

+ 44 - 81
lstrlib.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lstrlib.c,v 1.3 1997/12/09 13:35:19 roberto Exp roberto $
+** $Id: lstrlib.c,v 1.4 1997/12/15 17:58:49 roberto Exp roberto $
 ** Standard library for strings and pattern-matching
 ** See Copyright Notice in lua.h
 */
@@ -15,56 +15,12 @@
 #include "lualib.h"
 
 
-struct lbuff {
-  char *b;
-  size_t max;
-  size_t size;
-};
-
-static struct lbuff lbuffer = {NULL, 0, 0};
-
-
-static char *strbuffer (unsigned long size)
-{
-  if (size > lbuffer.max) {
-    /* ANSI "realloc" doesn't need this test, but some machines (Sun!)
-       don't follow ANSI */
-    lbuffer.b = (lbuffer.b) ? realloc(lbuffer.b, lbuffer.max=size) :
-                              malloc(lbuffer.max=size);
-    if (lbuffer.b == NULL)
-      lua_error("memory overflow");
-  }
-  return lbuffer.b;
-}
-
-
-static char *openspace (unsigned long size)
-{
-  char *buff = strbuffer(lbuffer.size+size);
-  return buff+lbuffer.size;
-}
-
-
-char *luaI_addchar (int c)
-{
-  if (lbuffer.size >= lbuffer.max)
-    strbuffer(lbuffer.max == 0 ? 100 : lbuffer.max*2);
-  lbuffer.b[lbuffer.size++] = c;
-  return lbuffer.b;
-}
-
-
-void luaI_emptybuff (void)
-{
-  lbuffer.size = 0;  /* prepare for next string */
-}
-
 
 static void addnchar (char *s, int n)
 {
-  char *b = openspace(n);
+  char *b = luaL_openspace(n);
   strncpy(b, s, n);
-  lbuffer.size += n;
+  luaL_addsize(n);
 }
 
 
@@ -80,6 +36,13 @@ static void str_len (void)
 }
 
 
+static void closeandpush (void)
+{
+  luaL_addchar(0);
+  lua_pushstring(luaL_buffer());
+}
+
+
 static void str_sub (void)
 {
   char *s = luaL_check_string(1);
@@ -89,9 +52,9 @@ static void str_sub (void)
   if (start < 0) start = l+start+1;
   if (end < 0) end = l+end+1;
   if (1 <= start && start <= end && end <= l) {
-    luaI_emptybuff();
+    luaL_resetbuffer();
     addnchar(s+start-1, end-start+1);
-    lua_pushstring(luaI_addchar(0));
+    closeandpush();
   }
   else lua_pushstring("");
 }
@@ -100,30 +63,30 @@ static void str_sub (void)
 static void str_lower (void)
 {
   char *s;
-  luaI_emptybuff();
+  luaL_resetbuffer();
   for (s = luaL_check_string(1); *s; s++)
-    luaI_addchar(tolower((unsigned char)*s));
-  lua_pushstring(luaI_addchar(0));
+    luaL_addchar(tolower((unsigned char)*s));
+  closeandpush();
 }
 
 
 static void str_upper (void)
 {
   char *s;
-  luaI_emptybuff();
+  luaL_resetbuffer();
   for (s = luaL_check_string(1); *s; s++)
-    luaI_addchar(toupper((unsigned char)*s));
-  lua_pushstring(luaI_addchar(0));
+    luaL_addchar(toupper((unsigned char)*s));
+  closeandpush();
 }
 
 static void str_rep (void)
 {
   char *s = luaL_check_string(1);
   int n = (int)luaL_check_number(2);
-  luaI_emptybuff();
+  luaL_resetbuffer();
   while (n-- > 0)
     addstr(s);
-  lua_pushstring(luaI_addchar(0));
+  closeandpush();
 }
 
 
@@ -163,7 +126,7 @@ static void push_captures (struct Capture *cap)
   int i;
   for (i=0; i<cap->level; i++) {
     int l = cap->capture[i].len;
-    char *buff = openspace(l+1);
+    char *buff = luaL_openspace(l+1);
     if (l == -1) lua_error("unfinished capture");
     strncpy(buff, cap->capture[i].init, l);
     buff[l] = 0;
@@ -395,7 +358,7 @@ static void add_s (lua_Object newp, struct Capture *cap)
     char *news = lua_getstring(newp);
     while (*news) {
       if (*news != ESC || !isdigit((unsigned char)*++news))
-        luaI_addchar(*news++);
+        luaL_addchar(*news++);
       else {
         int l = check_cap(*news++, cap);
         addnchar(cap->capture[l].init, cap->capture[l].len);
@@ -404,24 +367,24 @@ static void add_s (lua_Object newp, struct Capture *cap)
   }
   else if (lua_isfunction(newp)) {
     lua_Object res;
-    struct lbuff oldbuff;
     int status;
+    int oldbuff;
     lua_beginblock();
     push_captures(cap);
-    /* function may use lbuffer, so save it and create a luaM_new one */
-    oldbuff = lbuffer;
-    lbuffer.b = NULL; lbuffer.max = lbuffer.size = 0;
+    /* function may use buffer, so save it and create a new one */
+    oldbuff = luaL_newbuffer(0);
     status = lua_callfunction(newp);
     /* restore old buffer */
-    free(lbuffer.b);
-    lbuffer = oldbuff;
-    if (status != 0)
+    luaL_oldbuffer(oldbuff);
+    if (status != 0) {
+      lua_endblock();
       lua_error(NULL);
+    }
     res = lua_getresult(1);
     addstr(lua_isstring(res) ? lua_getstring(res) : "");
     lua_endblock();
   }
-  else luaL_arg_check(0, 3, NULL);
+  else luaL_arg_check(0, 3, "string or function expected");
 }
 
 
@@ -433,7 +396,7 @@ static void str_gsub (void)
   int max_s = (int)luaL_opt_number(4, strlen(src)+1);
   int anchor = (*p == '^') ? (p++, 1) : 0;
   int n = 0;
-  luaI_emptybuff();
+  luaL_resetbuffer();
   while (n < max_s) {
     struct Capture cap;
     char *e;
@@ -446,25 +409,25 @@ static void str_gsub (void)
     if (e && e>src) /* non empty match? */
       src = e;  /* skip it */
     else if (*src)
-      luaI_addchar(*src++);
+      luaL_addchar(*src++);
     else break;
     if (anchor) break;
   }
   addstr(src);
-  lua_pushstring(luaI_addchar(0));
+  closeandpush();
   lua_pushnumber(n);  /* number of substitutions */
 }
 
 
 static void luaI_addquoted (char *s)
 {
-  luaI_addchar('"');
+  luaL_addchar('"');
   for (; *s; s++) {
     if (strchr("\"\\\n", *s))
-      luaI_addchar('\\');
-    luaI_addchar(*s);
+      luaL_addchar('\\');
+    luaL_addchar(*s);
   }
-  luaI_addchar('"');
+  luaL_addchar('"');
 }
 
 #define MAX_FORMAT 200
@@ -473,12 +436,12 @@ static void str_format (void)
 {
   int arg = 1;
   char *strfrmt = luaL_check_string(arg);
-  luaI_emptybuff();  /* initialize */
+  luaL_resetbuffer();
   while (*strfrmt) {
     if (*strfrmt != '%')
-      luaI_addchar(*strfrmt++);
+      luaL_addchar(*strfrmt++);
     else if (*++strfrmt == '%')
-      luaI_addchar(*strfrmt++);  /* %% */
+      luaL_addchar(*strfrmt++);  /* %% */
     else { /* format item */
       char form[MAX_FORMAT];      /* store the format ('%...') */
       struct Capture cap;
@@ -496,14 +459,14 @@ static void str_format (void)
       arg++;
       strncpy(form+1, initf, strfrmt-initf+1); /* +1 to include convertion */
       form[strfrmt-initf+2] = 0;
-      buff = openspace(1000);  /* to store the formatted value */
+      buff = luaL_openspace(1000);  /* to store the formatted value */
       switch (*strfrmt++) {
         case 'q':
           luaI_addquoted(luaL_check_string(arg));
           continue;
         case 's': {
           char *s = luaL_check_string(arg);
-          buff = openspace(strlen(s));
+          buff = luaL_openspace(strlen(s));
           sprintf(buff, form, s);
           break;
         }
@@ -517,10 +480,10 @@ static void str_format (void)
         default:  /* also treat cases 'pnLlh' */
           lua_error("invalid option in `format'");
       }
-      lbuffer.size += strlen(buff);
+      luaL_addsize(strlen(buff));
     }
   }
-  lua_pushstring(luaI_addchar(0));  /* push the result */
+  closeandpush();  /* push the result */
 }
 
 

+ 1 - 4
lualib.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lualib.h,v 1.1 1997/09/16 19:25:59 roberto Exp roberto $
+** $Id: lualib.h,v 1.2 1997/11/26 18:53:45 roberto Exp roberto $
 ** Lua standard libraries
 ** See Copyright Notice in lua.h
 */
@@ -28,9 +28,6 @@ void lua_mathlibopen (void);
 
 /* auxiliar functions (private) */
 
-char *luaI_addchar (int c);
-void luaI_emptybuff (void);
-
 int luaI_singlematch (int c, char *p, char **ep);
 
 #endif

+ 3 - 3
lvm.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lvm.c,v 1.16 1997/12/09 13:35:19 roberto Exp roberto $
+** $Id: lvm.c,v 1.17 1997/12/15 16:17:20 roberto Exp roberto $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
 */
@@ -27,7 +27,7 @@
 #define next_word(pc)   (pc+=2, get_word(pc-2))
 
 
-/* Extra stack to run a function: LUA_T_LINE(1), TM calls(2), ... */
+/* Extra stack size to run a function: LUA_T_LINE(1), TM calls(2), ... */
 #define	EXTRA_STACK	5
 
 
@@ -35,7 +35,7 @@
 static TaggedString *strconc (char *l, char *r)
 {
   size_t nl = strlen(l);
-  char *buffer = luaM_buffer(nl+strlen(r)+1);
+  char *buffer = luaL_openspace(nl+strlen(r)+1);
   strcpy(buffer, l);
   strcpy(buffer+nl, r);
   return luaS_new(buffer);

+ 7 - 6
makefile

@@ -1,5 +1,5 @@
 #
-## $Id: makefile,v 1.5 1997/11/07 15:09:49 roberto Exp roberto $
+## $Id: makefile,v 1.6 1997/11/19 17:29:23 roberto Exp roberto $
 ## Makefile
 ## See Copyright Notice in lua.h
 #
@@ -94,7 +94,8 @@ clear	:
 
 lapi.o: lapi.c lapi.h lua.h lobject.h lauxlib.h ldo.h lstate.h lfunc.h \
  lgc.h lmem.h lstring.h ltable.h ltm.h luadebug.h lvm.h
-lauxlib.o: lauxlib.c lauxlib.h lua.h luadebug.h
+lauxlib.o: lauxlib.c lauxlib.h lua.h lmem.h lstate.h lobject.h \
+ luadebug.h
 lbuiltin.o: lbuiltin.c lapi.h lua.h lobject.h lauxlib.h lbuiltin.h \
  ldo.h lstate.h lfunc.h lmem.h lstring.h ltable.h ltm.h
 ldo.o: ldo.c ldo.h lobject.h lua.h lstate.h lfunc.h lgc.h lmem.h \
@@ -103,13 +104,13 @@ lfunc.o: lfunc.c lfunc.h lobject.h lua.h lmem.h lstate.h
 lgc.o: lgc.c ldo.h lobject.h lua.h lstate.h lfunc.h lgc.h lmem.h \
  lstring.h ltable.h ltm.h
 liolib.o: liolib.c lauxlib.h lua.h luadebug.h lualib.h
-llex.o: llex.c llex.h lobject.h lua.h lzio.h lmem.h lparser.h lstate.h \
- lstring.h lstx.h luadebug.h
+llex.o: llex.c lauxlib.h lua.h llex.h lobject.h lzio.h lmem.h \
+ lparser.h lstate.h lstring.h lstx.h luadebug.h
 lmathlib.o: lmathlib.c lauxlib.h lua.h lualib.h
 lmem.o: lmem.c lmem.h lstate.h lobject.h lua.h
 lobject.o: lobject.c lobject.h lua.h
-lstate.o: lstate.c lbuiltin.h ldo.h lobject.h lua.h lstate.h llex.h \
- lzio.h lmem.h lstring.h ltable.h ltm.h
+lstate.o: lstate.c lbuiltin.h ldo.h lobject.h lua.h lstate.h lfunc.h \
+ lgc.h llex.h lzio.h lmem.h lstring.h ltable.h ltm.h
 lstring.o: lstring.c lmem.h lobject.h lua.h lstate.h lstring.h
 lstrlib.o: lstrlib.c lauxlib.h lua.h lualib.h
 lstx.o: lstx.c lauxlib.h lua.h ldo.h lobject.h lstate.h lfunc.h llex.h \