Don't use luaL_checkstring to read node names, it's only for arguments
authorShadowNinja <shadowninja@minetest.net>
Sun, 8 Mar 2015 01:01:59 +0000 (20:01 -0500)
committerShadowNinja <shadowninja@minetest.net>
Sun, 8 Mar 2015 01:04:01 +0000 (20:04 -0500)
This caused confusing error messages like "argument #4 to set_node is not a string."

src/script/common/c_content.cpp

index ff9aee8eda707a9be586bcbb1fa54850e7f783af..8bb22186b9bf2ea86b2347a26edc068d0b600950 100644 (file)
@@ -546,22 +546,23 @@ NodeBox read_nodebox(lua_State *L, int index)
 MapNode readnode(lua_State *L, int index, INodeDefManager *ndef)
 {
        lua_getfield(L, index, "name");
-       const char *name = luaL_checkstring(L, -1);
+       if (!lua_isstring(L, -1))
+               throw LuaError("Node name is not set or is not a string!");
+       const char *name = lua_tostring(L, -1);
        lua_pop(L, 1);
-       u8 param1;
+
+       u8 param1 = 0;
        lua_getfield(L, index, "param1");
-       if(lua_isnil(L, -1))
-               param1 = 0;
-       else
+       if (!lua_isnil(L, -1))
                param1 = lua_tonumber(L, -1);
        lua_pop(L, 1);
-       u8 param2;
+
+       u8 param2 = 0;
        lua_getfield(L, index, "param2");
-       if(lua_isnil(L, -1))
-               param2 = 0;
-       else
+       if (!lua_isnil(L, -1))
                param2 = lua_tonumber(L, -1);
        lua_pop(L, 1);
+
        return MapNode(ndef, name, param1, param2);
 }