Lines Matching refs:L
63 static void lstop (lua_State *L, lua_Debug *ar) { in lstop() argument
65 lua_sethook(L, NULL, 0, 0); /* reset hook */ in lstop()
66 luaL_error(L, "interrupted!"); in lstop()
121 static int report (lua_State *L, int status) { in report() argument
123 const char *msg = lua_tostring(L, -1); in report()
125 lua_pop(L, 1); /* remove message */ in report()
134 static int msghandler (lua_State *L) { in msghandler() argument
135 const char *msg = lua_tostring(L, 1); in msghandler()
137 if (luaL_callmeta(L, 1, "__tostring") && /* does it have a metamethod */ in msghandler()
138 lua_type(L, -1) == LUA_TSTRING) /* that produces a string? */ in msghandler()
141 msg = lua_pushfstring(L, "(error object is a %s value)", in msghandler()
142 luaL_typename(L, 1)); in msghandler()
144 luaL_traceback(L, L, msg, 1); /* append a standard traceback */ in msghandler()
153 static int docall (lua_State *L, int narg, int nres) { in docall() argument
155 int base = lua_gettop(L) - narg; /* function index */ in docall()
156 lua_pushcfunction(L, msghandler); /* push message handler */ in docall()
157 lua_insert(L, base); /* put it under function and args */ in docall()
158 globalL = L; /* to be available to 'laction' */ in docall()
160 status = lua_pcall(L, narg, nres, base); in docall()
162 lua_remove(L, base); /* remove message handler from the stack */ in docall()
183 static void createargtable (lua_State *L, char **argv, int argc, int script) { in createargtable() argument
186 lua_createtable(L, narg, script + 1); in createargtable()
188 lua_pushstring(L, argv[i]); in createargtable()
189 lua_rawseti(L, -2, i - script); in createargtable()
191 lua_setglobal(L, "arg"); in createargtable()
195 static int dochunk (lua_State *L, int status) { in dochunk() argument
196 if (status == LUA_OK) status = docall(L, 0, 0); in dochunk()
197 return report(L, status); in dochunk()
201 static int dofile (lua_State *L, const char *name) { in dofile() argument
202 return dochunk(L, luaL_loadfile(L, name)); in dofile()
206 static int dostring (lua_State *L, const char *s, const char *name) { in dostring() argument
207 return dochunk(L, luaL_loadbuffer(L, s, strlen(s), name)); in dostring()
214 static int dolibrary (lua_State *L, char *globname) { in dolibrary() argument
223 lua_getglobal(L, "require"); in dolibrary()
224 lua_pushstring(L, modname); in dolibrary()
225 status = docall(L, 1, 1); /* call 'require(modname)' */ in dolibrary()
227 lua_setglobal(L, globname); /* globname = require(modname) */ in dolibrary()
228 return report(L, status); in dolibrary()
235 static int pushargs (lua_State *L) { in pushargs() argument
237 if (lua_getglobal(L, "arg") != LUA_TTABLE) in pushargs()
238 luaL_error(L, "'arg' is not a table"); in pushargs()
239 n = (int)luaL_len(L, -1); in pushargs()
240 luaL_checkstack(L, n + 3, "too many arguments to script"); in pushargs()
242 lua_rawgeti(L, -i, i); in pushargs()
243 lua_remove(L, -i); /* remove table from the stack */ in pushargs()
248 static int handle_script (lua_State *L, char **argv) { in handle_script() argument
253 status = luaL_loadfile(L, fname); in handle_script()
255 int n = pushargs(L); /* push arguments to script */ in handle_script()
256 status = docall(L, n, LUA_MULTRET); in handle_script()
258 return report(L, status); in handle_script()
339 static int runargs (lua_State *L, char **argv, int n) { in runargs() argument
351 ? dostring(L, extra, "=(command line)") in runargs()
352 : dolibrary(L, extra); in runargs()
357 lua_warning(L, "@on", 0); /* warnings on */ in runargs()
365 static int handle_luainit (lua_State *L) { in handle_luainit() argument
374 return dofile(L, init+1); in handle_luainit()
376 return dostring(L, init, name); in handle_luainit()
436 #define lua_initreadline(L) ((void)L, rl_readline_name="lua") argument
437 #define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) argument
438 #define lua_saveline(L,line) ((void)L, add_history(line)) argument
439 #define lua_freeline(L,b) ((void)L, free(b)) argument
443 #define lua_initreadline(L) ((void)L) argument
444 #define lua_readline(L,b,p) \ argument
445 ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \
447 #define lua_saveline(L,line) { (void)L; (void)line; } argument
448 #define lua_freeline(L,b) { (void)L; (void)b; } argument
460 static const char *get_prompt (lua_State *L, int firstline) { in get_prompt() argument
461 if (lua_getglobal(L, firstline ? "_PROMPT" : "_PROMPT2") == LUA_TNIL) in get_prompt()
464 const char *p = luaL_tolstring(L, -1, NULL); in get_prompt()
465 lua_remove(L, -2); /* remove original value */ in get_prompt()
480 static int incomplete (lua_State *L, int status) { in incomplete() argument
483 const char *msg = lua_tolstring(L, -1, &lmsg); in incomplete()
485 lua_pop(L, 1); in incomplete()
496 static int pushline (lua_State *L, int firstline) { in pushline() argument
500 const char *prmt = get_prompt(L, firstline); in pushline()
501 int readstatus = lua_readline(L, b, prmt); in pushline()
504 lua_pop(L, 1); /* remove prompt */ in pushline()
509 lua_pushfstring(L, "return %s", b + 1); /* change '=' to 'return' */ in pushline()
511 lua_pushlstring(L, b, l); in pushline()
512 lua_freeline(L, b); in pushline()
521 static int addreturn (lua_State *L) { in addreturn() argument
522 const char *line = lua_tostring(L, -1); /* original line */ in addreturn()
523 const char *retline = lua_pushfstring(L, "return %s;", line); in addreturn()
524 int status = luaL_loadbuffer(L, retline, strlen(retline), "=stdin"); in addreturn()
526 lua_remove(L, -2); /* remove modified line */ in addreturn()
528 lua_saveline(L, line); /* keep history */ in addreturn()
531 lua_pop(L, 2); /* pop result from 'luaL_loadbuffer' and modified line */ in addreturn()
539 static int multiline (lua_State *L) { in multiline() argument
542 const char *line = lua_tolstring(L, 1, &len); /* get what it has */ in multiline()
543 int status = luaL_loadbuffer(L, line, len, "=stdin"); /* try it */ in multiline()
544 if (!incomplete(L, status) || !pushline(L, 0)) { in multiline()
545 lua_saveline(L, line); /* keep history */ in multiline()
548 lua_pushliteral(L, "\n"); /* add newline... */ in multiline()
549 lua_insert(L, -2); /* ...between the two lines */ in multiline()
550 lua_concat(L, 3); /* join them */ in multiline()
561 static int loadline (lua_State *L) { in loadline() argument
563 lua_settop(L, 0); in loadline()
564 if (!pushline(L, 1)) in loadline()
566 if ((status = addreturn(L)) != LUA_OK) /* 'return ...' did not work? */ in loadline()
567 status = multiline(L); /* try as command, maybe with continuation lines */ in loadline()
568 lua_remove(L, 1); /* remove line from the stack */ in loadline()
569 lua_assert(lua_gettop(L) == 1); in loadline()
577 static void l_print (lua_State *L) { in l_print() argument
578 int n = lua_gettop(L); in l_print()
580 luaL_checkstack(L, LUA_MINSTACK, "too many results to print"); in l_print()
581 lua_getglobal(L, "print"); in l_print()
582 lua_insert(L, 1); in l_print()
583 if (lua_pcall(L, n, 0, 0) != LUA_OK) in l_print()
584 l_message(progname, lua_pushfstring(L, "error calling 'print' (%s)", in l_print()
585 lua_tostring(L, -1))); in l_print()
594 static void doREPL (lua_State *L) { in doREPL() argument
598 lua_initreadline(L); in doREPL()
599 while ((status = loadline(L)) != -1) { in doREPL()
601 status = docall(L, 0, LUA_MULTRET); in doREPL()
602 if (status == LUA_OK) l_print(L); in doREPL()
603 else report(L, status); in doREPL()
605 lua_settop(L, 0); /* clear stack */ in doREPL()
617 static int pmain (lua_State *L) { in pmain() argument
618 int argc = (int)lua_tointeger(L, 1); in pmain()
619 char **argv = (char **)lua_touserdata(L, 2); in pmain()
623 luaL_checkversion(L); /* check that interpreter has correct version */ in pmain()
631 lua_pushboolean(L, 1); /* signal for libraries to ignore env. vars. */ in pmain()
632 lua_setfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); in pmain()
634 luaL_openlibs(L); /* open standard libraries */ in pmain()
635 createargtable(L, argv, argc, script); /* create table 'arg' */ in pmain()
636 lua_gc(L, LUA_GCRESTART); /* start GC... */ in pmain()
637 lua_gc(L, LUA_GCGEN, 0, 0); /* ...in generational mode */ in pmain()
639 if (handle_luainit(L) != LUA_OK) /* run LUA_INIT */ in pmain()
642 if (!runargs(L, argv, optlim)) /* execute arguments -e and -l */ in pmain()
645 if (handle_script(L, argv + script) != LUA_OK) in pmain()
649 doREPL(L); /* do read-eval-print loop */ in pmain()
653 doREPL(L); /* do read-eval-print loop */ in pmain()
655 else dofile(L, NULL); /* executes stdin as a file */ in pmain()
657 lua_pushboolean(L, 1); /* signal no errors */ in pmain()
664 lua_State *L = luaL_newstate(); /* create state */ in main() local
665 if (L == NULL) { in main()
669 lua_gc(L, LUA_GCSTOP); /* stop GC while building state */ in main()
670 lua_pushcfunction(L, &pmain); /* to call 'pmain' in protected mode */ in main()
671 lua_pushinteger(L, argc); /* 1st argument */ in main()
672 lua_pushlightuserdata(L, argv); /* 2nd argument */ in main()
673 status = lua_pcall(L, 2, 1, 0); /* do the call */ in main()
674 result = lua_toboolean(L, -1); /* get result */ in main()
675 report(L, status); in main()
676 lua_close(L); in main()