aboutsummaryrefslogtreecommitdiff
path: root/builtin_metatables.moon
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2019-01-25 15:49:29 -0800
committerBruce Hill <bruce@bruce-hill.com>2019-01-25 15:50:51 -0800
commita1b559a3a269bbee1ae9a33061b08a868ea52f5c (patch)
tree51f2368c6542efe47dd2a4007ba92e22650236b9 /builtin_metatables.moon
parent1713a0e38f12f8ed167575ac5a84a0eb8dd59a44 (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.moon')
-rw-r--r--builtin_metatables.moon44
1 files changed, 44 insertions, 0 deletions
diff --git a/builtin_metatables.moon b/builtin_metatables.moon
new file mode 100644
index 0000000..bc3ec7c
--- /dev/null
+++ b/builtin_metatables.moon
@@ -0,0 +1,44 @@
+-- This file defines some methods on Lua numbers
+require "text"
+
+number_mt =
+ __type: "a Number"
+ as_lua: tostring
+ as_nomsu: tostring
+ as_text: tostring
+ as_a_number: => @
+ rounded: => math.floor(@ + .5)
+ rounded_down: math.floor
+ rounded_up: math.ceil
+ to_the_nearest: (rounder)=> rounder * math.floor(@/rounder + 0.5)
+ base16: => ("%X")\format(@)
+number_mt.__index = number_mt
+debug.setmetatable 0, number_mt
+
+bool_mt =
+ __type: "a Boolean"
+ as_lua: tostring
+ as_nomsu: => @ and "yes" or "no"
+ as_text: => @ and "yes" or "no"
+bool_mt.__index = bool_mt
+debug.setmetatable true, bool_mt
+
+fn_mt =
+ __type: "an Action"
+ as_text: => (tostring(@)\gsub("function", "Action"))
+fn_mt.__index = fn_mt
+debug.setmetatable (->), fn_mt
+
+co_mt =
+ __type: "a Coroutine"
+ as_text: => (tostring(@)\gsub("thread", "Coroutine"))
+co_mt.__index = co_mt
+debug.setmetatable(coroutine.create(->), co_mt)
+
+nil_mt =
+ __type: "Nil"
+ as_lua: => "nil"
+ as_nomsu: => "nil"
+ as_text: => "nil"
+nil_mt.__index = nil_mt
+debug.setmetatable nil, nil_mt