diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2019-01-25 15:49:29 -0800 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2019-01-25 15:50:51 -0800 |
| commit | a1b559a3a269bbee1ae9a33061b08a868ea52f5c (patch) | |
| tree | 51f2368c6542efe47dd2a4007ba92e22650236b9 /builtin_metatables.lua | |
| parent | 1713a0e38f12f8ed167575ac5a84a0eb8dd59a44 (diff) | |
Added metatables for bool, number, function, coroutine. Added
run-time check to make sure precompiled code used the same version of
Lua. Methods can now be used in (* compiles to *), etc.
Diffstat (limited to 'builtin_metatables.lua')
| -rw-r--r-- | builtin_metatables.lua | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/builtin_metatables.lua b/builtin_metatables.lua new file mode 100644 index 0000000..e579e6c --- /dev/null +++ b/builtin_metatables.lua @@ -0,0 +1,65 @@ +require("text") +local number_mt = { + __type = "a Number", + as_lua = tostring, + as_nomsu = tostring, + as_text = tostring, + as_a_number = function(self) + return self + end, + rounded = function(self) + return math.floor(self + .5) + end, + rounded_down = math.floor, + rounded_up = math.ceil, + to_the_nearest = function(self, rounder) + return rounder * math.floor(self / rounder + 0.5) + end, + base16 = function(self) + return ("%X"):format(self) + end +} +number_mt.__index = number_mt +debug.setmetatable(0, number_mt) +local bool_mt = { + __type = "a Boolean", + as_lua = tostring, + as_nomsu = function(self) + return self and "yes" or "no" + end, + as_text = function(self) + return self and "yes" or "no" + end +} +bool_mt.__index = bool_mt +debug.setmetatable(true, bool_mt) +local fn_mt = { + __type = "an Action", + as_text = function(self) + return (tostring(self):gsub("function", "Action")) + end +} +fn_mt.__index = fn_mt +debug.setmetatable((function() end), fn_mt) +local co_mt = { + __type = "a Coroutine", + as_text = function(self) + return (tostring(self):gsub("thread", "Coroutine")) + end +} +co_mt.__index = co_mt +debug.setmetatable(coroutine.create(function() end), co_mt) +local nil_mt = { + __type = "Nil", + as_lua = function(self) + return "nil" + end, + as_nomsu = function(self) + return "nil" + end, + as_text = function(self) + return "nil" + end +} +nil_mt.__index = nil_mt +return debug.setmetatable(nil, nil_mt) |
