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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
-- definitions for Lua 5.1 basic library
--# -- TODO return generics
--# assume global `assert`:
--# --[[ [assert] ]] function(v: any, message: string?)
--#
--# assume global `collectgarbage`:
--# function(opt: string?, arg: any?) --> any
--#
--# assume global `dofile`:
--# [geval] function(filename: string?) --> any
--#
--# assume global `error`:
--# function(message: string, level: integer?) --> !
--#
--# assume global `_G`:
--# [genv] table
--#
--# assume global `getfenv`:
--# function(f: function|integer?) --> table
--#
--# assume global `getmetatable`:
--# function(object: any) --> table
--#
--# assume global `ipairs`:
--# [generic_pairs]
--# function(t: vector<const WHATEVER>) -->
--# (function(vector<const WHATEVER>, integer) --> (integer?, any),
--# vector<const WHATEVER>, integer)
--#
--# -- TODO sequence conditional union: (function) | (nil, string)
--# assume global `load`:
--# [geval] function(func: function() --> string?, chunkname: string?) --> (function, string)
--#
--# -- TODO sequence conditional union: (function) | (nil, string)
--# assume global `loadfile`:
--# [geval] function(filename: string?) --> (function, string)
--#
--# -- TODO sequence conditional union: (function) | (nil, string)
--# assume global `loadstring`:
--# [geval] function(string: string, chunkname: string?) --> (function, string)
--#
--# -- TODO genericity
--# assume global `next`:
--# function(table: table, index: any?) --> (integer, any)
--#
--# assume global `pairs`:
--# [generic_pairs] function(t: table) --> (function(table, any) --> (any?, any), table, any)
--#
--# -- TODO `f` should be once function
--# -- TODO genericity
--# assume global `pcall`:
--# function(f: function, any...) --> (boolean, any...)
--#
--# assume global `print`:
--# function(any...)
--#
--# assume global `rawequal`:
--# function(v1: any, v2: any) --> boolean
--#
--# assume global `rawget`:
--# function(table: table, index: any) --> any
--#
--# assume global `rawset`:
--# function(table: table, index: any, value: any) --> table
--#
--# -- TODO genericity
--# assume global `select`:
--# function(index: number|'#', any...) --> (any...)
--#
--# assume global `setfenv`:
--# function(f: function|integer?, table: table) --> function
--#
--# assume global `setmetatable`:
--# function(table: table, metatable: any?) --> table
--#
--# assume global `tonumber`:
--# function(e: any, base: integer?) --> number
--#
--# assume global `tostring`:
--# function(e: any) --> string
--#
--# -- TODO enumerate all the possibility?
--# assume global `type`:
--# [type] function(v: any) --> string
--#
--# -- TODO genericity
--# assume global `unpack`:
--# function(list: table, i: integer?, j: integer?) --> (any...)
--#
--# assume global `_VERSION`:
--# string
--#
--# -- TODO `f` and `err` should be once function
--# -- TODO genericity
--# assume global `xpcall`:
--# function(f: function, err: function) --> (boolean, any...)
--#
--# assume global `coroutine`:
--# {
--# -- TODO genericity
--# `create`: function(f: function) --> thread;
--# `resume`: function(co: thread, any...) --> (boolean, any...);
--# `running`: function() --> thread;
--# `status`: function(co: thread) --> string;
--# -- TODO genericity
--# `wrap`: function(f: function) --> thread;
--# `yield`: function(any...) --> (any...);
--# ...
--# }