Add builtin.lua
authorPerttu Ahola <celeron55@gmail.com>
Fri, 25 Nov 2011 19:52:09 +0000 (21:52 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:52 +0000 (19:13 +0200)
data/builtin.lua [new file with mode: 0644]

diff --git a/data/builtin.lua b/data/builtin.lua
new file mode 100644 (file)
index 0000000..ead1ed3
--- /dev/null
@@ -0,0 +1,102 @@
+function basic_dump2(o)
+       if type(o) == "number" then
+               return tostring(o)
+       elseif type(o) == "string" then
+               return string.format("%q", o)
+       elseif type(o) == "boolean" then
+               return tostring(o)
+       elseif type(o) == "function" then
+               return "<function>"
+       elseif type(o) == "userdata" then
+               return "<userdata>"
+       elseif type(o) == "nil" then
+               return "nil"
+       else
+               error("cannot dump a " .. type(o))
+               return nil
+       end
+end
+
+function dump2(o, name, dumped)
+       name = name or "_"
+       dumped = dumped or {}
+       io.write(name, " = ")
+       if type(o) == "number" or type(o) == "string" or type(o) == "boolean"
+                       or type(o) == "function" or type(o) == "nil"
+                       or type(o) == "userdata" then
+               io.write(basic_dump2(o), "\n")
+       elseif type(o) == "table" then
+               if dumped[o] then
+                       io.write(dumped[o], "\n")
+               else
+                       dumped[o] = name
+                       io.write("{}\n") -- new table
+                       for k,v in pairs(o) do
+                               local fieldname = string.format("%s[%s]", name, basic_dump2(k))
+                               dump2(v, fieldname, dumped)
+                       end
+               end
+       else
+               error("cannot dump a " .. type(o))
+               return nil
+       end
+end
+
+function dump(o, dumped)
+       dumped = dumped or {}
+       if type(o) == "number" then
+               return tostring(o)
+       elseif type(o) == "string" then
+               return string.format("%q", o)
+       elseif type(o) == "table" then
+               if dumped[o] then
+                       return "<circular reference>"
+               end
+               dumped[o] = true
+               local t = {}
+               for k,v in pairs(o) do
+                       t[#t+1] = "" .. k .. " = " .. dump(v, dumped)
+               end
+               return "{" .. table.concat(t, ", ") .. "}"
+       elseif type(o) == "boolean" then
+               return tostring(o)
+       elseif type(o) == "function" then
+               return "<function>"
+       elseif type(o) == "userdata" then
+               return "<userdata>"
+       elseif type(o) == "nil" then
+               return "nil"
+       else
+               error("cannot dump a " .. type(o))
+               return nil
+       end
+end
+
+--
+-- Built-in node types. Also defined in C.
+--
+
+minetest.register_node("air", {
+       drawtype = "airlike",
+       paramtype = "light",
+       light_propagates = true,
+       sunlight_propagates = true,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = false,
+       air_equivalent = true,
+})
+
+minetest.register_node("ignore", {
+       drawtype = "airlike",
+       paramtype = "none",
+       light_propagates = false,
+       sunlight_propagates = false,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true, -- A way to remove accidentally placed ignores
+       air_equivalent = true,
+})
+