Allow non-string arguments for minetest.is_yes()
authorPilzAdam <pilzadam@minetest.net>
Tue, 10 Sep 2013 17:24:17 +0000 (19:24 +0200)
committerPilzAdam <pilzadam@minetest.net>
Tue, 10 Sep 2013 19:38:44 +0000 (21:38 +0200)
doc/lua_api.txt
doc/menu_lua_api.txt
src/script/lua_api/l_util.cpp
src/script/lua_api/l_util.h

index ebd70ea6e47f6bf13c21313e661983fba00ffabb..028669c62c5cc998fcbc31805ca9226b8a603d5b 100644 (file)
@@ -1069,8 +1069,8 @@ minetest.pos_to_string({x=X,y=Y,z=Z}) -> "(X,Y,Z)"
 minetest.string_to_pos(string) -> position
 ^ Same but in reverse
 ^ escapes characters [ ] \ , ;  that can not be used in formspecs
-minetest.is_yes(string)
-^ returns whether string can be interpreted as yes
+minetest.is_yes(arg)
+^ returns whether arg can be interpreted as yes
 
 minetest namespace reference
 -----------------------------
index 5763f875c2ac571844aee83a0f9816dfc1a873a9..ca815862e29e08f7ed9a47472d643cb51c5136c6 100644 (file)
@@ -182,8 +182,8 @@ string:split(separator)
 ^ eg. string:split("a,b", ",") == {"a","b"}
 string:trim()
 ^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar"
-minetest.is_yes(string)
-^ returns whether string can be interpreted as yes
+minetest.is_yes(arg)
+^ returns whether arg can be interpreted as yes
 
 Class reference
 ----------------
index 34788accd811fb56e38945625f0fdd63c25040fd..af9c19210360bb321b7b693e097462ab4da24960 100644 (file)
@@ -220,11 +220,17 @@ int ModApiUtil::l_get_password_hash(lua_State *L)
        return 1;
 }
 
-// is_yes(string)
+// is_yes(arg)
 int ModApiUtil::l_is_yes(lua_State *L)
 {
        NO_MAP_LOCK_REQUIRED;
-       std::string str = luaL_checkstring(L, 1);
+
+       lua_getglobal(L, "tostring"); // function to be called
+       lua_pushvalue(L, 1); // 1st argument
+       lua_call(L, 1, 1); // execute function
+       std::string str(lua_tostring(L, -1)); // get result
+       lua_pop(L, 1);
+
        bool yes = is_yes(str);
        lua_pushboolean(L, yes);
        return 1;
index ae2163ec8041c7ec920efe9f52aa5f6100752a1a..bb99e1562827fe39ff19330e2f4ba3759c2ee337 100644 (file)
@@ -71,7 +71,7 @@ private:
        // get_password_hash(name, raw_password)
        static int l_get_password_hash(lua_State *L);
 
-       // is_yes(string)
+       // is_yes(arg)
        static int l_is_yes(lua_State *L);
 
 public: