@@ -5068,6 +5068,45 @@ local function init_globals(lax)
5068
5068
return t
5069
5069
end
5070
5070
5071
+ local function an_enum (keys )
5072
+ local t = a_type ({
5073
+ typename = " enum" ,
5074
+ enumset = {},
5075
+ })
5076
+ for _ , k in ipairs (keys ) do
5077
+ t .enumset [k ] = true
5078
+ end
5079
+ return t
5080
+ end
5081
+
5082
+
5083
+
5084
+
5085
+
5086
+
5087
+
5088
+
5089
+
5090
+ local file_reader_poly_types = {
5091
+ { ctor = VARARG , args = { UNION ({ NUMBER , an_enum ({ " *a" , " a" , " *l" , " l" , " *L" , " L" }) }) }, rets = { STRING } },
5092
+ { ctor = TUPLE , args = { an_enum ({ " *n" , " n" }) }, rets = { NUMBER , STRING } },
5093
+ { ctor = VARARG , args = { UNION ({ NUMBER , an_enum ({ " *a" , " a" , " *l" , " l" , " *L" , " L" , " *n" , " n" }) }) }, rets = { UNION ({ STRING , NUMBER }) } },
5094
+ { ctor = VARARG , args = { UNION ({ NUMBER , STRING }) }, rets = { STRING } },
5095
+ }
5096
+
5097
+ local function a_file_reader (fn )
5098
+ local t = a_type ({
5099
+ typename = " poly" ,
5100
+ types = {},
5101
+ })
5102
+ for _ , entry in ipairs (file_reader_poly_types ) do
5103
+ local args = shallow_copy_type (entry .args )
5104
+ local rets = shallow_copy_type (entry .rets )
5105
+ table.insert (t .types , fn (entry .ctor , args , rets ))
5106
+ end
5107
+ return t
5108
+ end
5109
+
5071
5110
local LOAD_FUNCTION = a_type ({ typename = " function" , args = {}, rets = TUPLE ({ STRING }) })
5072
5111
5073
5112
local OS_DATE_TABLE = a_type ({
@@ -5085,8 +5124,6 @@ local function init_globals(lax)
5085
5124
},
5086
5125
})
5087
5126
5088
- local OS_DATE_TABLE_FORMAT = a_type ({ typename = " enum" , enumset = { [" !*t" ] = true , [" *t" ] = true } })
5089
-
5090
5127
local DEBUG_GETINFO_TABLE = a_type ({
5091
5128
typename = " record" ,
5092
5129
fields = {
@@ -5107,16 +5144,8 @@ local function init_globals(lax)
5107
5144
},
5108
5145
})
5109
5146
5110
- local DEBUG_HOOK_EVENT = a_type ({
5111
- typename = " enum" ,
5112
- enumset = {
5113
- [" call" ] = true ,
5114
- [" tail call" ] = true ,
5115
- [" return" ] = true ,
5116
- [" line" ] = true ,
5117
- [" count" ] = true ,
5118
- },
5119
- })
5147
+ local DEBUG_HOOK_EVENT = an_enum ({ " call" , " tail call" , " return" , " line" , " count" })
5148
+
5120
5149
local DEBUG_HOOK_FUNCTION = a_type ({
5121
5150
typename = " function" ,
5122
5151
args = TUPLE ({ DEBUG_HOOK_EVENT , INTEGER }),
@@ -5161,9 +5190,9 @@ local function init_globals(lax)
5161
5190
[" collectgarbage" ] = a_type ({
5162
5191
typename = " poly" ,
5163
5192
types = {
5164
- a_type ({ typename = " function" , args = TUPLE ({ a_type ({ typename = " enum " , enumset = { [ " collect" ] = true , [ " count" ] = true , [ " stop" ] = true , [ " restart" ] = true } }) }), rets = TUPLE ({ NUMBER }) }),
5165
- a_type ({ typename = " function" , args = TUPLE ({ a_type ({ typename = " enum " , enumset = { [ " step" ] = true , [ " setpause" ] = true , [ " setstepmul" ] = true } }), NUMBER }), rets = TUPLE ({ NUMBER }) }),
5166
- a_type ({ typename = " function" , args = TUPLE ({ a_type ({ typename = " enum " , enumset = { [ " isrunning" ] = true } }) }), rets = TUPLE ({ BOOLEAN }) }),
5193
+ a_type ({ typename = " function" , args = TUPLE ({ an_enum ({ " collect" , " count" , " stop" , " restart" }) }), rets = TUPLE ({ NUMBER }) }),
5194
+ a_type ({ typename = " function" , args = TUPLE ({ an_enum ({ " step" , " setpause" , " setstepmul" }), NUMBER }), rets = TUPLE ({ NUMBER }) }),
5195
+ a_type ({ typename = " function" , args = TUPLE ({ an_enum ({ " isrunning" }) }), rets = TUPLE ({ BOOLEAN }) }),
5167
5196
a_type ({ typename = " function" , args = TUPLE ({ STRING , OPT (NUMBER ) }), rets = TUPLE ({ a_type ({ typename = " union" , types = { BOOLEAN , NUMBER } }) }) }),
5168
5197
},
5169
5198
}),
@@ -5226,10 +5255,16 @@ local function init_globals(lax)
5226
5255
fields = {
5227
5256
[" close" ] = a_type ({ typename = " function" , args = TUPLE ({ NOMINAL_FILE }), rets = TUPLE ({ BOOLEAN , STRING , INTEGER }) }),
5228
5257
[" flush" ] = a_type ({ typename = " function" , args = TUPLE ({ NOMINAL_FILE }), rets = TUPLE ({}) }),
5229
- [" lines" ] = a_type ({ typename = " function" , args = VARARG ({ NOMINAL_FILE , a_type ({ typename = " union" , types = { STRING , NUMBER } }) }), rets = TUPLE ({
5230
- a_type ({ typename = " function" , args = TUPLE ({}), rets = VARARG ({ STRING }) }),
5231
- }), }),
5232
- [" read" ] = a_type ({ typename = " function" , args = TUPLE ({ NOMINAL_FILE , UNION ({ STRING , NUMBER }) }), rets = TUPLE ({ STRING , STRING }) }),
5258
+ [" lines" ] = a_file_reader (function (ctor , args , rets )
5259
+ table.insert (args , 1 , NOMINAL_FILE )
5260
+ return a_type ({ typename = " function" , args = ctor (args ), rets = TUPLE ({
5261
+ a_type ({ typename = " function" , args = TUPLE ({}), rets = ctor (rets ) }),
5262
+ }), })
5263
+ end ),
5264
+ [" read" ] = a_file_reader (function (ctor , args , rets )
5265
+ table.insert (args , 1 , NOMINAL_FILE )
5266
+ return a_type ({ typename = " function" , args = ctor (args ), rets = ctor (rets ) })
5267
+ end ),
5233
5268
[" seek" ] = a_type ({ typename = " function" , args = TUPLE ({ NOMINAL_FILE , OPT (STRING ), OPT (NUMBER ) }), rets = TUPLE ({ INTEGER , STRING }) }),
5234
5269
[" setvbuf" ] = a_type ({ typename = " function" , args = TUPLE ({ NOMINAL_FILE , STRING , OPT (NUMBER ) }), rets = TUPLE ({}) }),
5235
5270
[" write" ] = a_type ({ typename = " function" , args = VARARG ({ NOMINAL_FILE , UNION ({ STRING , NUMBER }) }), rets = TUPLE ({ NOMINAL_FILE , STRING }) }),
@@ -5247,7 +5282,7 @@ local function init_globals(lax)
5247
5282
[" __gc" ] = a_type ({ typename = " function" , args = TUPLE ({ a }), rets = TUPLE ({}) }),
5248
5283
[" __index" ] = ANY ,
5249
5284
[" __len" ] = a_type ({ typename = " function" , args = TUPLE ({ a }), rets = TUPLE ({ ANY }) }),
5250
- [" __mode" ] = a_type ({ typename = " enum " , enumset = { [ " k " ] = true , [ " v" ] = true , [ " kv" ] = true } }),
5285
+ [" __mode" ] = an_enum ({ " k " , " v" , " kv" }),
5251
5286
[" __newindex" ] = ANY ,
5252
5287
[" __pairs" ] = a_gfunction (2 , function (k , v )
5253
5288
return {
@@ -5365,13 +5400,17 @@ local function init_globals(lax)
5365
5400
[" close" ] = a_type ({ typename = " function" , args = TUPLE ({ OPT (NOMINAL_FILE ) }), rets = TUPLE ({ BOOLEAN , STRING }) }),
5366
5401
[" flush" ] = a_type ({ typename = " function" , args = TUPLE ({}), rets = TUPLE ({}) }),
5367
5402
[" input" ] = a_type ({ typename = " function" , args = TUPLE ({ OPT (UNION ({ STRING , NOMINAL_FILE })) }), rets = TUPLE ({ NOMINAL_FILE }) }),
5368
- [" lines" ] = a_type ({ typename = " function" , args = VARARG ({ OPT (STRING ), a_type ({ typename = " union" , types = { STRING , NUMBER } }) }), rets = TUPLE ({
5369
- a_type ({ typename = " function" , args = TUPLE ({}), rets = VARARG ({ STRING }) }),
5370
- }), }),
5403
+ [" lines" ] = a_file_reader (function (ctor , args , rets )
5404
+ return a_type ({ typename = " function" , args = ctor (args ), rets = TUPLE ({
5405
+ a_type ({ typename = " function" , args = TUPLE ({}), rets = ctor (rets ) }),
5406
+ }), })
5407
+ end ),
5371
5408
[" open" ] = a_type ({ typename = " function" , args = TUPLE ({ STRING , STRING }), rets = TUPLE ({ NOMINAL_FILE , STRING }) }),
5372
5409
[" output" ] = a_type ({ typename = " function" , args = TUPLE ({ OPT (UNION ({ STRING , NOMINAL_FILE })) }), rets = TUPLE ({ NOMINAL_FILE }) }),
5373
5410
[" popen" ] = a_type ({ typename = " function" , args = TUPLE ({ STRING , STRING }), rets = TUPLE ({ NOMINAL_FILE , STRING }) }),
5374
- [" read" ] = a_type ({ typename = " function" , args = TUPLE ({ UNION ({ STRING , NUMBER }) }), rets = TUPLE ({ STRING , STRING }) }),
5411
+ [" read" ] = a_file_reader (function (ctor , args , rets )
5412
+ return a_type ({ typename = " function" , args = ctor (args ), rets = ctor (rets ) })
5413
+ end ),
5375
5414
[" stderr" ] = NOMINAL_FILE ,
5376
5415
[" stdin" ] = NOMINAL_FILE ,
5377
5416
[" stdout" ] = NOMINAL_FILE ,
@@ -5462,7 +5501,7 @@ local function init_globals(lax)
5462
5501
typename = " poly" ,
5463
5502
types = {
5464
5503
a_type ({ typename = " function" , args = TUPLE ({}), rets = TUPLE ({ STRING }) }),
5465
- a_type ({ typename = " function" , args = TUPLE ({ OS_DATE_TABLE_FORMAT , NUMBER }), rets = TUPLE ({ OS_DATE_TABLE }) }),
5504
+ a_type ({ typename = " function" , args = TUPLE ({ an_enum ({ " !*t " , " *t " }) , NUMBER }), rets = TUPLE ({ OS_DATE_TABLE }) }),
5466
5505
a_type ({ typename = " function" , args = TUPLE ({ OPT (STRING ), OPT (NUMBER ) }), rets = TUPLE ({ STRING }) }),
5467
5506
},
5468
5507
}),
0 commit comments