]> granicus.if.org Git - nethack/commitdiff
Add in_lua flag
authorPasi Kallinen <paxed@alt.org>
Wed, 10 Feb 2021 15:06:08 +0000 (17:06 +0200)
committerPasi Kallinen <paxed@alt.org>
Wed, 10 Feb 2021 15:06:12 +0000 (17:06 +0200)
In preparation of making config errors available to lua scripts,
instead outputting them via pline.

include/extern.h
include/flag.h
src/dungeon.c
src/mklev.c
src/nhlua.c
src/questpgr.c

index a6302da2c25482a72e0bdb7a5d6f404b0d9c2344..9fe5f369debba03437de6d920e37c817e44c81f6 100644 (file)
@@ -1646,6 +1646,7 @@ extern int l_obj_register(lua_State *);
 
 #if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET)
 extern lua_State * nhl_init(void);
+extern void nhl_done(lua_State *);
 extern boolean nhl_loadlua(lua_State *, const char *);
 extern boolean load_lua(const char *);
 extern void nhl_error(lua_State *, const char *) NORETURN;
index 1e45e948a46a812bb954f564e475c5ec5cd67c47..98c4bc0d144241eb87971cdf15b6f4d4bab427ce 100644 (file)
@@ -174,6 +174,7 @@ struct instance_flags {
      * a structure of their own elsewhere some day.
      */
     boolean debug_fuzzer;  /* fuzz testing */
+    boolean in_lua;        /* executing a lua script */
     boolean defer_plname;  /* X11 hack: askname() might not set g.plname */
     boolean herecmd_menu;  /* use menu when mouseclick on yourself */
     boolean invis_goldsym; /* gold symbol is ' '? */
index f70dcf6bf5222eec4a5fc9e7533efd975c6daa35..f1953448490a8fafe83eb1ac81e3764794a2bbd6 100644 (file)
@@ -1175,7 +1175,7 @@ init_dungeons(void)
            so that it's hidden from '#wizwhere' feedback. */
     }
 
-    lua_close(L);
+    nhl_done(L);
 
     for (i = 0; i < pd.n_brs; i++) {
         free((genericptr_t) pd.tmpbranch[i].name);
index a3d53cdff0cb78daf5493030944af4f31ba5a097..5d88fc0dfdb52afa54ca374105edc8410446c2ba 100644 (file)
@@ -259,7 +259,7 @@ free_luathemes(boolean keependgame) /* False: exiting, True: discarding main dun
         if (keependgame && i == astral_level.dnum)
             continue;
         if (g.luathemes[i]) {
-            lua_close((lua_State *) g.luathemes[i]);
+            nhl_done((lua_State *) g.luathemes[i]);
             g.luathemes[i] = (lua_State *) 0;
         }
     }
@@ -277,7 +277,7 @@ makerooms(void)
         if ((themes = nhl_init()) != 0) {
             if (!nhl_loadlua(themes, fname)) {
                 /* loading lua failed, don't use themed rooms */
-                lua_close(themes);
+                nhl_done(themes);
                 themes = (lua_State *) 0;
             } else {
                 /* success; save state for this dungeon branch */
index 1e25fc7f46efd27c757f9f4a79e7b078fb384dd9..e92aed64b2ea2fe34f05c8d91cc154e7181a979c 100644 (file)
@@ -1110,6 +1110,7 @@ nhl_init(void)
 {
     lua_State *L = luaL_newstate();
 
+    iflags.in_lua = TRUE;
     luaL_openlibs(L);
     nhl_set_package_path(L, "./?.lua");
 
@@ -1130,13 +1131,20 @@ nhl_init(void)
     l_obj_register(L);
 
     if (!nhl_loadlua(L, "nhlib.lua")) {
-        lua_close(L);
+        nhl_done(L);
         return (lua_State *) 0;
     }
 
     return L;
 }
 
+void
+nhl_done(lua_State *L)
+{
+    lua_close(L);
+    iflags.in_lua = FALSE;
+}
+
 boolean
 load_lua(const char *name)
 {
@@ -1154,7 +1162,7 @@ load_lua(const char *name)
     }
 
  give_up:
-    lua_close(L);
+    nhl_done(L);
 
     return ret;
 }
index 895b42c5c3fe0cc56c40db0f50a4924a156da6da..d04f7768ac447e75408dfb30bc3c88376288c684 100644 (file)
@@ -542,7 +542,7 @@ com_pager_core(const char *section, const char *msgid, boolean showerror)
         free((genericptr_t) synopsis);
     if (fallback_msgid)
         free((genericptr_t) fallback_msgid);
-    lua_close(L);
+    nhl_done(L);
     return res;
 }