From a1b559a3a269bbee1ae9a33061b08a868ea52f5c Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Fri, 25 Jan 2019 15:49:29 -0800 Subject: 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. --- builtin_metatables.moon | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 builtin_metatables.moon (limited to 'builtin_metatables.moon') 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 -- cgit v1.2.3