aboutsummaryrefslogtreecommitdiff
path: root/lua.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-05-31 15:51:50 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-05-31 15:51:50 -0300
commit616438fe9ab5e3ae7d73e9ad838e9b7bdea1ea59 (patch)
tree78322d820e3af1ca6645ed08eaa65a8f0aa04fec /lua.c
parent47eda6ebd83785908ac26f8dd06dff36a7d42664 (diff)
downloadlua-616438fe9ab5e3ae7d73e9ad838e9b7bdea1ea59.tar.gz
lua-616438fe9ab5e3ae7d73e9ad838e9b7bdea1ea59.tar.bz2
lua-616438fe9ab5e3ae7d73e9ad838e9b7bdea1ea59.zip
new way to use `vararg' parameters (with `...')
Diffstat (limited to 'lua.c')
-rw-r--r--lua.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/lua.c b/lua.c
index 05ffc88e..cabc5592 100644
--- a/lua.c
+++ b/lua.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lua.c,v 1.124 2003/10/23 18:06:22 roberto Exp roberto $ 2** $Id: lua.c,v 1.125 2004/04/30 20:13:38 roberto Exp roberto $
3** Lua stand-alone interpreter 3** Lua stand-alone interpreter
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -113,30 +113,32 @@ static void print_version (void) {
113} 113}
114 114
115 115
116static void getargs (char *argv[], int n) { 116static int getargs (char *argv[], int n) {
117 int i; 117 int i, narg;
118 for (i=n+1; argv[i]; i++) {
119 luaL_checkstack(L, 1, "too many arguments to script");
120 lua_pushstring(L, argv[i]);
121 }
122 narg = i-(n+1); /* number of arguments to the script (not to `lua.c') */
118 lua_newtable(L); 123 lua_newtable(L);
119 for (i=0; argv[i]; i++) { 124 for (i=0; argv[i]; i++) {
120 lua_pushnumber(L, i - n); 125 lua_pushnumber(L, i - n);
121 lua_pushstring(L, argv[i]); 126 lua_pushstring(L, argv[i]);
122 lua_rawset(L, -3); 127 lua_rawset(L, -3);
123 } 128 }
124} 129 return narg;
125
126
127static int docall (int status) {
128 if (status == 0) status = lcall(0, 1);
129 return report(status);
130} 130}
131 131
132 132
133static int file_input (const char *name) { 133static int file_input (const char *name) {
134 return docall(luaL_loadfile(L, name)); 134 int status = luaL_loadfile(L, name) || lcall(0, 1);
135 return report(status);
135} 136}
136 137
137 138
138static int dostring (const char *s, const char *name) { 139static int dostring (const char *s, const char *name) {
139 return docall(luaL_loadbuffer(L, s, strlen(s), name)); 140 int status = luaL_loadbuffer(L, s, strlen(s), name) || lcall(0, 1);
141 return report(status);
140} 142}
141 143
142 144
@@ -329,10 +331,17 @@ static int handle_argv (char *argv[], int *interactive) {
329 } endloop: 331 } endloop:
330 if (argv[i] != NULL) { 332 if (argv[i] != NULL) {
331 const char *filename = argv[i]; 333 const char *filename = argv[i];
332 getargs(argv, i); /* collect arguments */ 334 int narg = getargs(argv, i); /* collect arguments */
333 clearinteractive(interactive); 335 int status;
334 lua_setglobal(L, "arg"); 336 lua_setglobal(L, "arg");
335 return file_input(filename); /* stop scanning arguments */ 337 clearinteractive(interactive);
338 status = luaL_loadfile(L, filename);
339 lua_insert(L, -(narg+1));
340 if (status == 0)
341 status = lcall(narg, 0);
342 else
343 lua_pop(L, narg);
344 return report(status);
336 } 345 }
337 } 346 }
338 return 0; 347 return 0;