Skip to content

Commit a5c3b64

Browse files
committed
whimsical
1 parent 1cc261f commit a5c3b64

File tree

3 files changed

+155
-0
lines changed

3 files changed

+155
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
/meta/*
55
!/meta/template
66
!/meta/3rd
7+
!/meta/whimsical
78
/bin*

meta/whimsical/basic.lua

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---@meta _
2+
3+
---#DES 'arg'
4+
---@type string[]
5+
arg = {}
6+
7+
---#DES 'assert'
8+
---@generic T
9+
---@param v? T
10+
---@param message? any
11+
---@param ... any
12+
---@return T
13+
---@return any ... => args[reti + 1]
14+
---@error => args[1].istruly
15+
---@narrow v => args[1].truly
16+
function assert(v, message, ...) end
17+
18+
--[[@@@
19+
---@overload fun(opt: 'collect') # ---#DESTAIL 'cgopt.collect'
20+
---@overload fun(opt: 'stop') # ---#DESTAIL 'cgopt.stop'
21+
---@overload fun(opt: 'restart') # ---#DESTAIL 'cgopt.restart'
22+
---@overload fun(opt: 'count'): integer # ---#DESTAIL 'cgopt.count'
23+
---@overload fun(opt: 'step'): boolean # ---#DESTAIL 'cgopt.step'
24+
---@overload fun(opt: 'isrunning'): boolean # ---#DESTAIL 'cgopt.isrunning'
25+
---#if VERSION >= 5.4 then
26+
---@overload fun(opt: 'incremental'
27+
, pause?: integer
28+
, stepmul?: integer
29+
, stepsize?: integer) # ---#DESTAIL 'cgopt.incremental'
30+
---@overload fun(opt: 'generational'
31+
, minor?: integer
32+
, major?: integer) # ---#DESTAIL 'cgopt.generational'
33+
---#end
34+
---@overload fun(opt: 'setpause', arg: integer) # ---#DESTAIL 'cgopt.setpause'
35+
---@overload fun(opt: 'setstepmul', arg: integer) # ---#DESTAIL 'cgopt.setstepmul'
36+
---@prototype
37+
]]
38+
function collectgarbage(...) end

meta/whimsical/builtin.lua

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
---@meta _
2+
3+
--[[@@@
4+
---@inner class -> {
5+
self.istruly = true
6+
self.truly = self
7+
self.falsy = Class 'never'
8+
self.view = self.name
9+
}
10+
---@inner integer -> {
11+
self.istruly = true
12+
self.truly = self
13+
self.falsy = Class 'never'
14+
self.view = tostring(self.value)
15+
}
16+
---@inner string -> {
17+
self.istruly = true
18+
self.truly = self
19+
self.falsy = Class 'never'
20+
self.view = cat.util.viewString(self.value, self.quotation)
21+
}
22+
---@inner union -> {
23+
self.istruly = function (subs)
24+
local istruly = subs[1].istruly
25+
if istruly == nil then
26+
return nil
27+
end
28+
if istruly == true then
29+
for i = 2, #subs do
30+
if subs[i].istruly ~= true then
31+
return nil
32+
end
33+
end
34+
return true
35+
else
36+
for i = 2, #subs do
37+
if subs[i].istruly ~= false then
38+
return nil
39+
end
40+
end
41+
return false
42+
end
43+
return nil
44+
end
45+
self.truly = function (subs)
46+
local union = Union()
47+
for i = 1, #subs do
48+
union:add(subs[i].truly)
49+
end
50+
if union:len() == 0 then
51+
return Class 'never'
52+
end
53+
if union:len() == 1 then
54+
return union:first()
55+
end
56+
return union
57+
end
58+
self.falsy = function (subs)
59+
local union = Union()
60+
for i = 1, #subs do
61+
union:add(subs[i].falsy)
62+
end
63+
if union:len() == 0 then
64+
return Class 'never'
65+
end
66+
if union:len() == 1 then
67+
return union:first()
68+
end
69+
return union
70+
end
71+
self.view = function (subs)
72+
local views = {}
73+
for i = 1, #subs do
74+
views[i] = subs[i].view
75+
end
76+
if #views == 0 then
77+
return 'never'
78+
end
79+
return table.concat(views, '|')
80+
end
81+
}
82+
---@class nil -> {
83+
self.istruly = false
84+
self.truly = Class 'never'
85+
self.falsy = self
86+
}
87+
---@class never -> {
88+
self.istruly = nil
89+
}
90+
---@class true -> {
91+
self.istruly = true
92+
self.truly = self
93+
self.falsy = Class 'never'
94+
}
95+
---@class false -> {
96+
self.istruly = false
97+
self.truly = Class 'never'
98+
self.falsy = self
99+
}
100+
---@class any: { [unknown]: any } -> {
101+
self.istruly = nil
102+
self.truly = Class 'truly'
103+
self.falsy = Class 'false' | Class 'nil'
104+
}
105+
---@class truly: { [unknown]: any }
106+
---@class unknown: truly | false
107+
---@class boolean: true | false
108+
---@class number
109+
---@class thread
110+
---@class table: { [unknown]: any }
111+
---@class table<K, V>: { [K]: V }
112+
---@class string: stringlib
113+
---@class userdata: { [unknown]: any }
114+
---@class lightuserdata
115+
---@class function: fun(...): ...
116+
]]

0 commit comments

Comments
 (0)