Lines Matching refs:L

43 static void lstop (lua_State *L, lua_Debug *ar) {  in lstop()  argument
45 lua_sethook(L, NULL, 0, 0); /* reset hook */ in lstop()
46 luaL_error(L, "interrupted!"); in lstop()
100 static int report (lua_State *L, int status) { in report() argument
102 const char *msg = lua_tostring(L, -1); in report()
104 lua_pop(L, 1); /* remove message */ in report()
113 static int msghandler (lua_State *L) { in msghandler() argument
114 const char *msg = lua_tostring(L, 1); in msghandler()
116 if (luaL_callmeta(L, 1, "__tostring") && /* does it have a metamethod */ in msghandler()
117 lua_type(L, -1) == LUA_TSTRING) /* that produces a string? */ in msghandler()
120 msg = lua_pushfstring(L, "(error object is a %s value)", in msghandler()
121 luaL_typename(L, 1)); in msghandler()
123 luaL_traceback(L, L, msg, 1); /* append a standard traceback */ in msghandler()
132 static int docall (lua_State *L, int narg, int nres) { in docall() argument
134 int base = lua_gettop(L) - narg; /* function index */ in docall()
135 lua_pushcfunction(L, msghandler); /* push message handler */ in docall()
136 lua_insert(L, base); /* put it under function and args */ in docall()
137 globalL = L; /* to be available to 'laction' */ in docall()
139 status = lua_pcall(L, narg, nres, base); in docall()
141 lua_remove(L, base); /* remove message handler from the stack */ in docall()
160 static void createargtable (lua_State *L, char **argv, int argc, int script) { in createargtable() argument
164 lua_createtable(L, narg, script + 1); in createargtable()
166 lua_pushstring(L, argv[i]); in createargtable()
167 lua_rawseti(L, -2, i - script); in createargtable()
169 lua_setglobal(L, "arg"); in createargtable()
173 static int dochunk (lua_State *L, int status) { in dochunk() argument
174 if (status == LUA_OK) status = docall(L, 0, 0); in dochunk()
175 return report(L, status); in dochunk()
179 static int dofile (lua_State *L, const char *name) { in dofile() argument
180 return dochunk(L, luaL_loadfile(L, name)); in dofile()
184 static int dostring (lua_State *L, const char *s, const char *name) { in dostring() argument
185 return dochunk(L, luaL_loadbuffer(L, s, strlen(s), name)); in dostring()
193 static int dolibrary (lua_State *L, const char *name) { in dolibrary() argument
195 lua_getglobal(L, "require"); in dolibrary()
196 lua_pushstring(L, name); in dolibrary()
197 status = docall(L, 1, 1); /* call 'require(name)' */ in dolibrary()
199 lua_setglobal(L, name); /* global[name] = require return */ in dolibrary()
200 return report(L, status); in dolibrary()
207 static int pushargs (lua_State *L) { in pushargs() argument
209 if (lua_getglobal(L, "arg") != LUA_TTABLE) in pushargs()
210 luaL_error(L, "'arg' is not a table"); in pushargs()
211 n = (int)luaL_len(L, -1); in pushargs()
212 luaL_checkstack(L, n + 3, "too many arguments to script"); in pushargs()
214 lua_rawgeti(L, -i, i); in pushargs()
215 lua_remove(L, -i); /* remove table from the stack */ in pushargs()
220 static int handle_script (lua_State *L, char **argv) { in handle_script() argument
225 status = luaL_loadfile(L, fname); in handle_script()
227 int n = pushargs(L); /* push arguments to script */ in handle_script()
228 status = docall(L, n, LUA_MULTRET); in handle_script()
230 return report(L, status); in handle_script()
302 static int runargs (lua_State *L, char **argv, int n) { in runargs() argument
314 ? dostring(L, extra, "=(command line)") in runargs()
315 : dolibrary(L, extra); in runargs()
320 lua_warning(L, "@on", 0); /* warnings on */ in runargs()
328 static int handle_luainit (lua_State *L) { in handle_luainit() argument
337 return dofile(L, init+1); in handle_luainit()
339 return dostring(L, init, name); in handle_luainit()
399 #define lua_initreadline(L) ((void)L, rl_readline_name="lua") argument
400 #define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) argument
401 #define lua_saveline(L,line) ((void)L, add_history(line)) argument
402 #define lua_freeline(L,b) ((void)L, free(b)) argument
406 #define lua_initreadline(L) ((void)L) argument
407 #define lua_readline(L,b,p) \ argument
408 ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \
410 #define lua_saveline(L,line) { (void)L; (void)line; } argument
411 #define lua_freeline(L,b) { (void)L; (void)b; } argument
423 static const char *get_prompt (lua_State *L, int firstline) { in get_prompt() argument
424 if (lua_getglobal(L, firstline ? "_PROMPT" : "_PROMPT2") == LUA_TNIL) in get_prompt()
427 const char *p = luaL_tolstring(L, -1, NULL); in get_prompt()
428 lua_remove(L, -2); /* remove original value */ in get_prompt()
443 static int incomplete (lua_State *L, int status) { in incomplete() argument
446 const char *msg = lua_tolstring(L, -1, &lmsg); in incomplete()
448 lua_pop(L, 1); in incomplete()
459 static int pushline (lua_State *L, int firstline) { in pushline() argument
463 const char *prmt = get_prompt(L, firstline); in pushline()
464 int readstatus = lua_readline(L, b, prmt); in pushline()
467 lua_pop(L, 1); /* remove prompt */ in pushline()
472 lua_pushfstring(L, "return %s", b + 1); /* change '=' to 'return' */ in pushline()
474 lua_pushlstring(L, b, l); in pushline()
475 lua_freeline(L, b); in pushline()
484 static int addreturn (lua_State *L) { in addreturn() argument
485 const char *line = lua_tostring(L, -1); /* original line */ in addreturn()
486 const char *retline = lua_pushfstring(L, "return %s;", line); in addreturn()
487 int status = luaL_loadbuffer(L, retline, strlen(retline), "=stdin"); in addreturn()
489 lua_remove(L, -2); /* remove modified line */ in addreturn()
491 lua_saveline(L, line); /* keep history */ in addreturn()
494 lua_pop(L, 2); /* pop result from 'luaL_loadbuffer' and modified line */ in addreturn()
502 static int multiline (lua_State *L) { in multiline() argument
505 const char *line = lua_tolstring(L, 1, &len); /* get what it has */ in multiline()
506 int status = luaL_loadbuffer(L, line, len, "=stdin"); /* try it */ in multiline()
507 if (!incomplete(L, status) || !pushline(L, 0)) { in multiline()
508 lua_saveline(L, line); /* keep history */ in multiline()
511 lua_pushliteral(L, "\n"); /* add newline... */ in multiline()
512 lua_insert(L, -2); /* ...between the two lines */ in multiline()
513 lua_concat(L, 3); /* join them */ in multiline()
524 static int loadline (lua_State *L) { in loadline() argument
526 lua_settop(L, 0); in loadline()
527 if (!pushline(L, 1)) in loadline()
529 if ((status = addreturn(L)) != LUA_OK) /* 'return ...' did not work? */ in loadline()
530 status = multiline(L); /* try as command, maybe with continuation lines */ in loadline()
531 lua_remove(L, 1); /* remove line from the stack */ in loadline()
532 lua_assert(lua_gettop(L) == 1); in loadline()
540 static void l_print (lua_State *L) { in l_print() argument
541 int n = lua_gettop(L); in l_print()
543 luaL_checkstack(L, LUA_MINSTACK, "too many results to print"); in l_print()
544 lua_getglobal(L, "print"); in l_print()
545 lua_insert(L, 1); in l_print()
546 if (lua_pcall(L, n, 0, 0) != LUA_OK) in l_print()
547 l_message(progname, lua_pushfstring(L, "error calling 'print' (%s)", in l_print()
548 lua_tostring(L, -1))); in l_print()
557 static void doREPL (lua_State *L) { in doREPL() argument
561 lua_initreadline(L); in doREPL()
562 while ((status = loadline(L)) != -1) { in doREPL()
564 status = docall(L, 0, LUA_MULTRET); in doREPL()
565 if (status == LUA_OK) l_print(L); in doREPL()
566 else report(L, status); in doREPL()
568 lua_settop(L, 0); /* clear stack */ in doREPL()
580 static int pmain (lua_State *L) { in pmain() argument
581 int argc = (int)lua_tointeger(L, 1); in pmain()
582 char **argv = (char **)lua_touserdata(L, 2); in pmain()
585 luaL_checkversion(L); /* check that interpreter has correct version */ in pmain()
594 lua_pushboolean(L, 1); /* signal for libraries to ignore env. vars. */ in pmain()
595 lua_setfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); in pmain()
597 luaL_openlibs(L); /* open standard libraries */ in pmain()
598 createargtable(L, argv, argc, script); /* create table 'arg' */ in pmain()
599 lua_gc(L, LUA_GCGEN, 0, 0); /* GC in generational mode */ in pmain()
601 if (handle_luainit(L) != LUA_OK) /* run LUA_INIT */ in pmain()
604 if (!runargs(L, argv, script)) /* execute arguments -e and -l */ in pmain()
607 handle_script(L, argv + script) != LUA_OK) in pmain()
610 doREPL(L); /* do read-eval-print loop */ in pmain()
614 doREPL(L); /* do read-eval-print loop */ in pmain()
616 else dofile(L, NULL); /* executes stdin as a file */ in pmain()
618 lua_pushboolean(L, 1); /* signal no errors */ in pmain()
625 lua_State *L = luaL_newstate(); /* create state */ in main() local
626 if (L == NULL) { in main()
630 lua_pushcfunction(L, &pmain); /* to call 'pmain' in protected mode */ in main()
631 lua_pushinteger(L, argc); /* 1st argument */ in main()
632 lua_pushlightuserdata(L, argv); /* 2nd argument */ in main()
633 status = lua_pcall(L, 2, 1, 0); /* do the call */ in main()
634 result = lua_toboolean(L, -1); /* get result */ in main()
635 report(L, status); in main()
636 lua_close(L); in main()