From d97af0de26cc4eabe5ff9d1b851a6a5110473d1a Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 15 Jun 1998 18:34:14 -0300 Subject: [PATCH] "lua_dobuffer" gets an extra argument, with the chunk name --- ldo.c | 19 +++++++------------ lua.h | 4 ++-- manual.tex | 23 +++++++++++++++-------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/ldo.c b/ldo.c index 03126473..fe644c7b 100644 --- a/ldo.c +++ b/ldo.c @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 1.24 1998/01/29 15:59:35 roberto Exp roberto $ +** $Id: ldo.c,v 1.25 1998/05/31 22:22:00 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -392,30 +392,25 @@ int lua_dofile (char *filename) #define SSIZE_PREF "20" -int lua_dostring (char *str) -{ - int status; +int lua_dostring (char *str) { char name[SIZE_PREF+25]; char *temp; - ZIO z; - if (str == NULL) return 1; + if (str == NULL || *str == ID_CHUNK) return 1; sprintf(name, "(dostring) >> \"%." SSIZE_PREF "s\"", str); temp = strchr(name, '\n'); if (temp) { /* end string after first line */ *temp = '"'; *(temp+1) = 0; } - luaZ_sopen(&z, str, name); - status = do_main(&z, 0); - return status; + return lua_dobuffer(str, strlen(str), name); } -int lua_dobuffer (char *buff, int size) { +int lua_dobuffer (char *buff, int size, char *name) { int status; ZIO z; - luaZ_mopen(&z, buff, size, "(buffer)"); - status = do_main(&z, 1); + luaZ_mopen(&z, buff, size, (name==NULL) ? "(buffer)" : name); + status = do_main(&z, buff[0]==ID_CHUNK); return status; } diff --git a/lua.h b/lua.h index 66d0f1dd..c30bd4cf 100644 --- a/lua.h +++ b/lua.h @@ -1,5 +1,5 @@ /* -** $Id: lua.h,v 1.20 1998/06/05 22:17:44 roberto Exp roberto $ +** $Id: lua.h,v 1.21 1998/06/06 21:05:52 roberto Exp roberto $ ** Lua - An Extensible Extension Language ** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil ** e-mail: lua@tecgraf.puc-rio.br @@ -41,7 +41,7 @@ void lua_settag (int tag); /* In: object */ void lua_error (char *s); int lua_dofile (char *filename); /* Out: returns */ int lua_dostring (char *string); /* Out: returns */ -int lua_dobuffer (char *buff, int size); +int lua_dobuffer (char *buff, int size, char *name); /* Out: returns */ int lua_callfunction (lua_Object f); /* In: parameters; Out: returns */ diff --git a/manual.tex b/manual.tex index 6725b893..5bc36b80 100644 --- a/manual.tex +++ b/manual.tex @@ -1,4 +1,4 @@ -% $Id: manual.tex,v 1.12 1998/06/02 20:37:04 roberto Exp roberto $ +% $Id: manual.tex,v 1.13 1998/06/06 21:05:52 roberto Exp roberto $ \documentclass[11pt]{article} \usepackage{fullpage,bnf} @@ -39,7 +39,7 @@ Waldemar Celes \tecgraf\ --- Computer Science Department --- PUC-Rio } -%\date{\small \verb$Date: 1998/06/02 20:37:04 $} +%\date{\small \verb$Date: 1998/06/06 21:05:52 $} \maketitle @@ -1575,7 +1575,7 @@ using the following functions: \begin{verbatim} int lua_dofile (char *filename); int lua_dostring (char *string); -int lua_dobuffer (char *buff, int size); +int lua_dobuffer (char *buff, int size, char *name); \end{verbatim} All these functions return an error code: 0, in case of success; non zero, in case of errors. @@ -1583,11 +1583,18 @@ More specifically, \verb|lua_dofile| returns 2 if for any reason it could not open the file. The function \verb|lua_dofile|, if called with argument \verb|NULL|, executes the \verb|stdin| stream. -Function \verb|lua_dofile| is also able to execute pre-compiled chunks. -It automatically detects whether the file is text or binary, -and loads it accordingly (see program \IndexVerb{luac}). -Function \verb|lua_dostring| executes only source code, -and function \verb|lua_dobuffer| executes only pre-compiled chunks. +Functions \verb|lua_dofile| and \verb|lua_dobuffer| +are both able to execute pre-compiled chunks. +They automatically detect whether the chunk is text or binary, +and load it accordingly (see program \IndexVerb{luac}). +Function \verb|lua_dostring| executes only source code. + +The third parameter to \verb|lua_dobuffer| (\verb|name|) +is the ``name of the chunk'', +used in error messages and debug information. +In files this name is the file name, +and \verb|lua_dostring| uses a small prefix +of the string as the chunk name. These functions return, in structure lua2C, any values eventually returned by the chunks.