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.moon | |
| 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.moon')
| -rw-r--r-- | builtin_metatables.moon | 44 |
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 |
