aboutsummaryrefslogtreecommitdiff
path: root/builtin_metatables.lua
blob: e579e6ce70bed89e7d18a2354e90baae5628a9e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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)