aboutsummaryrefslogtreecommitdiff
path: root/lua.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-11-22 11:12:07 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-11-22 11:12:07 -0200
commit29ede6aa13144ff7b69c57a87be1ee93f57ae896 (patch)
treeadcfb5dcff7db55481cd675349e23dec0e63c939 /lua.c
parent951897c09319ae5474a4b86bb7d615136577caa0 (diff)
downloadlua-29ede6aa13144ff7b69c57a87be1ee93f57ae896.tar.gz
lua-29ede6aa13144ff7b69c57a87be1ee93f57ae896.tar.bz2
lua-29ede6aa13144ff7b69c57a87be1ee93f57ae896.zip
first implementation of multiple states (reentrant code).
Diffstat (limited to 'lua.c')
-rw-r--r--lua.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/lua.c b/lua.c
index ac7d05e2..d3d716f2 100644
--- a/lua.c
+++ b/lua.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lua.c,v 1.25 1999/11/12 13:54:44 roberto Exp roberto $ 2** $Id: lua.c,v 1.26 1999/11/16 12:50:48 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*/
@@ -21,7 +21,6 @@
21static int isatty (int x) { return x==0; } /* assume stdin is a tty */ 21static int isatty (int x) { return x==0; } /* assume stdin is a tty */
22#endif 22#endif
23 23
24
25typedef void (*handler)(int); /* type for signal actions */ 24typedef void (*handler)(int); /* type for signal actions */
26 25
27static void laction (int i); 26static void laction (int i);
@@ -37,8 +36,8 @@ static handler lreset (void) {
37 36
38 37
39static void lstop (void) { 38static void lstop (void) {
40 lua_setlinehook(old_linehook); 39 lua_setlinehook(lua_state, old_linehook);
41 lua_setcallhook(old_callhook); 40 lua_setcallhook(lua_state, old_callhook);
42 lreset(); 41 lreset();
43 lua_error("interrupted!"); 42 lua_error("interrupted!");
44} 43}
@@ -48,15 +47,15 @@ static void laction (int i) {
48 (void)i; /* to avoid warnings */ 47 (void)i; /* to avoid warnings */
49 signal(SIGINT, SIG_DFL); /* if another SIGINT happens before lstop, 48 signal(SIGINT, SIG_DFL); /* if another SIGINT happens before lstop,
50 terminate process (default action) */ 49 terminate process (default action) */
51 old_linehook = lua_setlinehook((lua_LHFunction)lstop); 50 old_linehook = lua_setlinehook(lua_state, (lua_LHFunction)lstop);
52 old_callhook = lua_setcallhook((lua_CHFunction)lstop); 51 old_callhook = lua_setcallhook(lua_state, (lua_CHFunction)lstop);
53} 52}
54 53
55 54
56static int ldo (int (*f)(const char *), const char *name) { 55static int ldo (int (*f)(lua_State *L, const char *), const char *name) {
57 int res; 56 int res;
58 handler h = lreset(); 57 handler h = lreset();
59 res = f(name); /* dostring | dofile */ 58 res = f(lua_state, name); /* dostring | dofile */
60 signal(SIGINT, h); /* restore old action */ 59 signal(SIGINT, h); /* restore old action */
61 return res; 60 return res;
62} 61}
@@ -172,7 +171,7 @@ int main (int argc, char *argv[]) {
172 manual_input(0); 171 manual_input(0);
173 break; 172 break;
174 case 'd': 173 case 'd':
175 lua_setdebug(1); 174 lua_setdebug(lua_state, 1);
176 break; 175 break;
177 case 'v': 176 case 'v':
178 printf("%s %s\n(written by %s)\n", 177 printf("%s %s\n(written by %s)\n",