fez-lisp 1.5.145 → 1.5.147
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/baked/std.js +1 -1
- package/package.json +1 -1
- package/src/check.js +63 -26
- package/src/compiler.js +8 -0
- package/src/enhance.js +25 -1
- package/src/interpreter.js +9 -3
- package/src/keywords.js +5 -4
- package/src/macros.js +5 -2
- package/src/types.js +108 -2
package/package.json
CHANGED
package/src/check.js
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
VALUE,
|
|
18
18
|
WORD
|
|
19
19
|
} from './keywords.js'
|
|
20
|
-
import { isLeaf } from './parser.js'
|
|
20
|
+
import { isLeaf, LISP } from './parser.js'
|
|
21
21
|
import {
|
|
22
22
|
SPECIAL_FORM_TYPES,
|
|
23
23
|
toTypeNames,
|
|
@@ -304,7 +304,7 @@ export const isAtomType = (stats) =>
|
|
|
304
304
|
isAnyType(stats) || stats[TYPE_PROP][0] === ATOM
|
|
305
305
|
export const isAtomReturn = (stats) =>
|
|
306
306
|
isAnyType(stats) || stats[RETURNS][0] === ATOM
|
|
307
|
-
export const
|
|
307
|
+
export const equalTypes = (a, b) => {
|
|
308
308
|
const isAnyAny = isAnyType(a) || isAnyType(b)
|
|
309
309
|
if (isAnyAny) return true
|
|
310
310
|
const isSameType = a[TYPE_PROP][0] === b[TYPE_PROP][0]
|
|
@@ -312,7 +312,7 @@ export const equalsTypes = (a, b) => {
|
|
|
312
312
|
return true
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
-
export const
|
|
315
|
+
export const equalReturns = (a, b) =>
|
|
316
316
|
isAnyReturn(a) || isAnyReturn(b) || a[RETURNS][0] === b[RETURNS][0]
|
|
317
317
|
export const equalsTypeWithReturn = (a, b) =>
|
|
318
318
|
isAnyType(a) || isAnyReturn(b) || a[TYPE_PROP][0] === b[RETURNS][0]
|
|
@@ -338,6 +338,39 @@ const notABooleanType = (a, b) => {
|
|
|
338
338
|
(hasSubType(b) && getSubType(a).difference(getSubType(b)).size !== 0))
|
|
339
339
|
)
|
|
340
340
|
}
|
|
341
|
+
const equalSubTypes = (a, b) => {
|
|
342
|
+
return (
|
|
343
|
+
!hasSubType(a) ||
|
|
344
|
+
!hasSubType(b) ||
|
|
345
|
+
getSubType(a).has(UNKNOWN) ||
|
|
346
|
+
getSubType(b).has(UNKNOWN) ||
|
|
347
|
+
getSubType(a).has(ANY) ||
|
|
348
|
+
getSubType(b).has(ANY) ||
|
|
349
|
+
getSubType(a).difference(getSubType(b)).size === 0
|
|
350
|
+
)
|
|
351
|
+
}
|
|
352
|
+
const eualSubReturn = (a, b) => {
|
|
353
|
+
return (
|
|
354
|
+
!hasSubReturn(a) ||
|
|
355
|
+
!hasSubReturn(b) ||
|
|
356
|
+
getSubReturn(a).has(UNKNOWN) ||
|
|
357
|
+
getSubReturn(b).has(UNKNOWN) ||
|
|
358
|
+
getSubReturn(a).has(ANY) ||
|
|
359
|
+
getSubReturn(b).has(ANY) ||
|
|
360
|
+
getSubReturn(a).difference(getSubReturn(b)).size === 0
|
|
361
|
+
)
|
|
362
|
+
}
|
|
363
|
+
const equalSubTypesWithSubReturn = (a, b) => {
|
|
364
|
+
return (
|
|
365
|
+
!hasSubType(a) ||
|
|
366
|
+
!hasSubReturn(b) ||
|
|
367
|
+
getSubType(a).has(UNKNOWN) ||
|
|
368
|
+
getSubReturn(b).has(UNKNOWN) ||
|
|
369
|
+
getSubType(a).has(ANY) ||
|
|
370
|
+
getSubReturn(b).has(ANY) ||
|
|
371
|
+
getSubType(a).difference(getSubReturn(b)).size === 0
|
|
372
|
+
)
|
|
373
|
+
}
|
|
341
374
|
const notABooleanTypeWithReturn = (a, b) => {
|
|
342
375
|
return (
|
|
343
376
|
hasSubType(a) &&
|
|
@@ -498,7 +531,6 @@ const IfApplyBranch = ({ leaf, branch, re, prop, ref, env }) => {
|
|
|
498
531
|
}
|
|
499
532
|
}
|
|
500
533
|
const ifExpression = ({ re, env, ref, prop }) => {
|
|
501
|
-
// console.log(ref, JSON.stringify(env[KEYWORDS.IF][STATS][RETURNS]))
|
|
502
534
|
if (re[0][TYPE] === ATOM || re[1][TYPE] === ATOM)
|
|
503
535
|
return setPropToAtom(ref[STATS], prop)
|
|
504
536
|
// TODO check that both brancehs are predicates if one is
|
|
@@ -669,7 +701,7 @@ const initArrayType = ({ rem, env }) => {
|
|
|
669
701
|
? env[x[VALUE]]
|
|
670
702
|
? getTypes(env[x[VALUE]][STATS])
|
|
671
703
|
: [UNKNOWN]
|
|
672
|
-
: [x[TYPE]]
|
|
704
|
+
: [x[TYPE], x[TYPE] === ATOM ? NUMBER_SUBTYPE() : new Set([UNKNOWN])]
|
|
673
705
|
: env[x[0][VALUE]]
|
|
674
706
|
? getReturns(env[x[0][VALUE]][STATS])
|
|
675
707
|
: [UNKNOWN]
|
|
@@ -688,7 +720,7 @@ const initArrayType = ({ rem, env }) => {
|
|
|
688
720
|
} else
|
|
689
721
|
return {
|
|
690
722
|
[TYPE_PROP]: [APPLY],
|
|
691
|
-
[RETURNS]: [COLLECTION, new Set([])]
|
|
723
|
+
[RETURNS]: [COLLECTION, new Set([UNKNOWN])]
|
|
692
724
|
}
|
|
693
725
|
}
|
|
694
726
|
const resolveReturnType = ({
|
|
@@ -848,7 +880,6 @@ const checkReturnType = ({ exp, stack, name, env, check }) => {
|
|
|
848
880
|
})
|
|
849
881
|
}
|
|
850
882
|
const stagger = (stack, method, data, fn) => {
|
|
851
|
-
// console.log(data[0], data[1])
|
|
852
883
|
stack[method]({ data, fn })
|
|
853
884
|
}
|
|
854
885
|
export const typeCheck = (ast) => {
|
|
@@ -877,7 +908,7 @@ export const typeCheck = (ast) => {
|
|
|
877
908
|
exp
|
|
878
909
|
)}) (check #16)`
|
|
879
910
|
)
|
|
880
|
-
else if (
|
|
911
|
+
else if (!equalSubTypesWithSubReturn(expected, actual)) {
|
|
881
912
|
throw new TypeError(
|
|
882
913
|
`Incorrect type of argument (${i}) for (${
|
|
883
914
|
first[VALUE]
|
|
@@ -929,7 +960,7 @@ export const typeCheck = (ast) => {
|
|
|
929
960
|
if (
|
|
930
961
|
!isUnknownReturn(expected[STATS]) &&
|
|
931
962
|
!isUnknownReturn(actual[STATS]) &&
|
|
932
|
-
!
|
|
963
|
+
!equalReturns(expected[STATS], actual[STATS])
|
|
933
964
|
)
|
|
934
965
|
throw new TypeError(
|
|
935
966
|
`Incorrect return type for (${
|
|
@@ -970,7 +1001,7 @@ export const typeCheck = (ast) => {
|
|
|
970
1001
|
if (
|
|
971
1002
|
!isUnknownType(actual[STATS]) &&
|
|
972
1003
|
!isUnknownType(expected[STATS]) &&
|
|
973
|
-
!
|
|
1004
|
+
!equalTypes(actual[STATS], expected[STATS])
|
|
974
1005
|
)
|
|
975
1006
|
throw new TypeError(
|
|
976
1007
|
`Incorrect type for (${
|
|
@@ -1137,8 +1168,8 @@ export const typeCheck = (ast) => {
|
|
|
1137
1168
|
[SIGNATURE]: name,
|
|
1138
1169
|
retried: 0,
|
|
1139
1170
|
counter: 0,
|
|
1140
|
-
[TYPE_PROP]: [ATOM],
|
|
1141
|
-
[RETURNS]: [ATOM]
|
|
1171
|
+
[TYPE_PROP]: [ATOM, NUMBER_SUBTYPE()],
|
|
1172
|
+
[RETURNS]: [ATOM, NUMBER_SUBTYPE()]
|
|
1142
1173
|
}
|
|
1143
1174
|
}
|
|
1144
1175
|
} else if (rightHand[0]) {
|
|
@@ -1266,6 +1297,10 @@ export const typeCheck = (ast) => {
|
|
|
1266
1297
|
case STATIC_TYPES.BOOLEAN:
|
|
1267
1298
|
case STATIC_TYPES.ANY:
|
|
1268
1299
|
case STATIC_TYPES.NUMBER:
|
|
1300
|
+
case STATIC_TYPES.NUMBERS:
|
|
1301
|
+
case STATIC_TYPES.ABSTRACTIONS:
|
|
1302
|
+
case STATIC_TYPES.BOOLEANS:
|
|
1303
|
+
case STATIC_TYPES.COLLECTIONS:
|
|
1269
1304
|
{
|
|
1270
1305
|
const ret = isLeaf(rest[0]) ? rest[0] : rest[0][0]
|
|
1271
1306
|
const ref = env[ret[VALUE]]
|
|
@@ -1397,10 +1432,15 @@ export const typeCheck = (ast) => {
|
|
|
1397
1432
|
)
|
|
1398
1433
|
}
|
|
1399
1434
|
}
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1435
|
+
const eqTypes = equalTypes(
|
|
1436
|
+
args[i][STATS],
|
|
1437
|
+
env[name][STATS]
|
|
1438
|
+
)
|
|
1439
|
+
const eqSubTypes = equalSubTypes(
|
|
1440
|
+
args[i][STATS],
|
|
1441
|
+
env[name][STATS]
|
|
1403
1442
|
)
|
|
1443
|
+
if (isKnown && !eqTypes)
|
|
1404
1444
|
throw new TypeError(
|
|
1405
1445
|
`Incorrect type of argument (${i}) for (${
|
|
1406
1446
|
first[VALUE]
|
|
@@ -1410,11 +1450,7 @@ export const typeCheck = (ast) => {
|
|
|
1410
1450
|
getType(env[name][STATS])
|
|
1411
1451
|
)}) (${stringifyArgs(exp)}) (check #3)`
|
|
1412
1452
|
)
|
|
1413
|
-
else if (
|
|
1414
|
-
isKnown &&
|
|
1415
|
-
notABooleanType(args[i][STATS], env[name][STATS])
|
|
1416
|
-
// TODO: Add a check if subtype is a UKNOWN (for uknown array)
|
|
1417
|
-
)
|
|
1453
|
+
else if (isKnown && eqTypes && !eqSubTypes) {
|
|
1418
1454
|
throw new TypeError(
|
|
1419
1455
|
`Incorrect type of argument (${i}) for (${
|
|
1420
1456
|
first[VALUE]
|
|
@@ -1424,6 +1460,7 @@ export const typeCheck = (ast) => {
|
|
|
1424
1460
|
getTypes(env[name][STATS])
|
|
1425
1461
|
)}) (${stringifyArgs(exp)}) (check #202)`
|
|
1426
1462
|
)
|
|
1463
|
+
}
|
|
1427
1464
|
}
|
|
1428
1465
|
break
|
|
1429
1466
|
case ATOM:
|
|
@@ -1510,7 +1547,7 @@ export const typeCheck = (ast) => {
|
|
|
1510
1547
|
if (
|
|
1511
1548
|
!isUnknownReturn(expected[STATS]) &&
|
|
1512
1549
|
!isUnknownReturn(actual[STATS]) &&
|
|
1513
|
-
!
|
|
1550
|
+
!equalReturns(expected[STATS], actual[STATS])
|
|
1514
1551
|
) {
|
|
1515
1552
|
throw new TypeError(
|
|
1516
1553
|
`Incorrect return type for (${
|
|
@@ -1545,7 +1582,7 @@ export const typeCheck = (ast) => {
|
|
|
1545
1582
|
if (
|
|
1546
1583
|
!isUnknownType(actual[STATS]) &&
|
|
1547
1584
|
!isUnknownType(expected[STATS]) &&
|
|
1548
|
-
!
|
|
1585
|
+
!equalTypes(actual[STATS], expected[STATS])
|
|
1549
1586
|
)
|
|
1550
1587
|
throw new TypeError(
|
|
1551
1588
|
`Incorrect type for (${
|
|
@@ -1580,8 +1617,8 @@ export const typeCheck = (ast) => {
|
|
|
1580
1617
|
// when it's a special form and it's not equal
|
|
1581
1618
|
// or failed the boolean subtype case
|
|
1582
1619
|
isSpecial &&
|
|
1583
|
-
(!
|
|
1584
|
-
!
|
|
1620
|
+
(!equalTypes(args[i][STATS], env[name][STATS]) ||
|
|
1621
|
+
!equalSubTypes(args[i][STATS], env[name][STATS]))
|
|
1585
1622
|
)
|
|
1586
1623
|
setType(env[name][STATS], args[i][STATS])
|
|
1587
1624
|
else if (
|
|
@@ -1616,8 +1653,8 @@ export const typeCheck = (ast) => {
|
|
|
1616
1653
|
if (isSpecial && name === KEYWORDS.IF) {
|
|
1617
1654
|
const concequent = [...rest]
|
|
1618
1655
|
const alternative = [...rest]
|
|
1619
|
-
concequent[i] = rest[i][
|
|
1620
|
-
alternative[i] = rest[i][
|
|
1656
|
+
concequent[i] = rest[i][2]
|
|
1657
|
+
alternative[i] = rest[i][3]
|
|
1621
1658
|
check([first, ...concequent], env, scope)
|
|
1622
1659
|
check([first, ...alternative], env, scope)
|
|
1623
1660
|
}
|
package/src/compiler.js
CHANGED
|
@@ -49,6 +49,10 @@ const keywordToHelper = (name) => {
|
|
|
49
49
|
case STATIC_TYPES.BOOLEAN:
|
|
50
50
|
case STATIC_TYPES.ANY:
|
|
51
51
|
case STATIC_TYPES.NUMBER:
|
|
52
|
+
case STATIC_TYPES.NUMBERS:
|
|
53
|
+
case STATIC_TYPES.ABSTRACTIONS:
|
|
54
|
+
case STATIC_TYPES.BOOLEANS:
|
|
55
|
+
case STATIC_TYPES.COLLECTIONS:
|
|
52
56
|
case DEBUG.ASSERT:
|
|
53
57
|
case DEBUG.LOG:
|
|
54
58
|
case DEBUG.STRING:
|
|
@@ -287,6 +291,10 @@ const comp = (tree, Drill) => {
|
|
|
287
291
|
case STATIC_TYPES.BOOLEAN:
|
|
288
292
|
case STATIC_TYPES.ANY:
|
|
289
293
|
case STATIC_TYPES.NUMBER:
|
|
294
|
+
case STATIC_TYPES.NUMBERS:
|
|
295
|
+
case STATIC_TYPES.ABSTRACTIONS:
|
|
296
|
+
case STATIC_TYPES.BOOLEANS:
|
|
297
|
+
case STATIC_TYPES.COLLECTIONS:
|
|
290
298
|
case DEBUG.ASSERT:
|
|
291
299
|
case DEBUG.LOG:
|
|
292
300
|
case DEBUG.STRING:
|
package/src/enhance.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { AST, isLeaf } from './parser.js'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
APPLY,
|
|
4
|
+
ATOM,
|
|
5
|
+
KEYWORDS,
|
|
6
|
+
STATIC_TYPES,
|
|
7
|
+
TYPE,
|
|
8
|
+
VALUE,
|
|
9
|
+
WORD
|
|
10
|
+
} from './keywords.js'
|
|
3
11
|
import { getPrefix, shake, wrapInBlock } from './utils.js'
|
|
4
12
|
import std from '../lib/baked/std.js'
|
|
5
13
|
export const OPTIMIZATIONS = {
|
|
@@ -28,6 +36,22 @@ const opt = (ast) => {
|
|
|
28
36
|
case APPLY:
|
|
29
37
|
{
|
|
30
38
|
switch (first[VALUE]) {
|
|
39
|
+
case STATIC_TYPES.ABSTRACTION:
|
|
40
|
+
case STATIC_TYPES.COLLECTION:
|
|
41
|
+
case STATIC_TYPES.UNKNOWN:
|
|
42
|
+
case STATIC_TYPES.ATOM:
|
|
43
|
+
case STATIC_TYPES.BOOLEAN:
|
|
44
|
+
case STATIC_TYPES.ANY:
|
|
45
|
+
case STATIC_TYPES.NUMBER:
|
|
46
|
+
case STATIC_TYPES.NUMBERS:
|
|
47
|
+
case STATIC_TYPES.ABSTRACTIONS:
|
|
48
|
+
case STATIC_TYPES.BOOLEANS:
|
|
49
|
+
case STATIC_TYPES.COLLECTIONS:
|
|
50
|
+
case STATIC_TYPES.AS_NUMBER:
|
|
51
|
+
exp.length = 0
|
|
52
|
+
for (let i = 0; i < rest.length; ++i) exp.push(...rest[i])
|
|
53
|
+
evaluate(exp)
|
|
54
|
+
break
|
|
31
55
|
case KEYWORDS.DEFINE_VARIABLE:
|
|
32
56
|
{
|
|
33
57
|
const last = exp.at(-1)
|
package/src/interpreter.js
CHANGED
|
@@ -833,11 +833,17 @@ export const keywords = {
|
|
|
833
833
|
throw new Error(expression.map((x) => String.fromCharCode(x)).join(''))
|
|
834
834
|
},
|
|
835
835
|
|
|
836
|
-
[STATIC_TYPES.
|
|
836
|
+
[STATIC_TYPES.UNKNOWN]: (args, env) => evaluate(args[0], env),
|
|
837
|
+
[STATIC_TYPES.ANY]: (args, env) => evaluate(args[0], env),
|
|
838
|
+
|
|
837
839
|
[STATIC_TYPES.ATOM]: (args, env) => evaluate(args[0], env),
|
|
840
|
+
[STATIC_TYPES.ABSTRACTION]: (args, env) => evaluate(args[0], env),
|
|
838
841
|
[STATIC_TYPES.COLLECTION]: (args, env) => evaluate(args[0], env),
|
|
842
|
+
|
|
839
843
|
[STATIC_TYPES.BOOLEAN]: (args, env) => evaluate(args[0], env),
|
|
840
844
|
[STATIC_TYPES.NUMBER]: (args, env) => evaluate(args[0], env),
|
|
841
|
-
[STATIC_TYPES.
|
|
842
|
-
[STATIC_TYPES.
|
|
845
|
+
[STATIC_TYPES.NUMBERS]: (args, env) => evaluate(args[0], env),
|
|
846
|
+
[STATIC_TYPES.COLLECTIONS]: (args, env) => evaluate(args[0], env),
|
|
847
|
+
[STATIC_TYPES.ABSTRACTIONS]: (args, env) => evaluate(args[0], env),
|
|
848
|
+
[STATIC_TYPES.BOOLEANS]: (args, env) => evaluate(args[0], env)
|
|
843
849
|
}
|
package/src/keywords.js
CHANGED
|
@@ -15,6 +15,11 @@ export const STATIC_TYPES = {
|
|
|
15
15
|
ATOM: 'Atom',
|
|
16
16
|
COLLECTION: 'Collection',
|
|
17
17
|
BOOLEAN: 'Boolean',
|
|
18
|
+
NUMBERS: 'Numbers',
|
|
19
|
+
BOOLEANS: 'Booleans',
|
|
20
|
+
ABSTRACTIONS: 'Abstractions',
|
|
21
|
+
COLLECTIONS: 'Collections',
|
|
22
|
+
AS_NUMBER: 'numberp',
|
|
18
23
|
ANY: 'Any'
|
|
19
24
|
}
|
|
20
25
|
export const KEYWORDS = {
|
|
@@ -104,10 +109,6 @@ export const MUTATORS_SET = new Set([
|
|
|
104
109
|
'matrix:set-and-get!',
|
|
105
110
|
'array:set-and-get!',
|
|
106
111
|
'var:set-and-get!',
|
|
107
|
-
'map:set-and-get!',
|
|
108
|
-
'set:add-and-get!',
|
|
109
|
-
'set:add!',
|
|
110
|
-
'map:set!',
|
|
111
112
|
'array:set!',
|
|
112
113
|
'array:append!',
|
|
113
114
|
'array:push!',
|
package/src/macros.js
CHANGED
|
@@ -324,8 +324,11 @@ export const deSuggarAst = (ast, scope) => {
|
|
|
324
324
|
break
|
|
325
325
|
case KEYWORDS.DIVISION:
|
|
326
326
|
if (!rest.length) {
|
|
327
|
-
exp[0][
|
|
328
|
-
exp[
|
|
327
|
+
exp[0][VALUE] = KEYWORDS.NOT
|
|
328
|
+
exp[1] = [
|
|
329
|
+
[APPLY, KEYWORDS.NOT],
|
|
330
|
+
[ATOM, FALSE]
|
|
331
|
+
]
|
|
329
332
|
} else if (rest.length === 1) {
|
|
330
333
|
exp.length = 1
|
|
331
334
|
exp.push([ATOM, 1], rest[0])
|
package/src/types.js
CHANGED
|
@@ -33,10 +33,12 @@ export const FALSE_WORD = 'false'
|
|
|
33
33
|
export const BOOLEAN_SUBTYPE = () => new Set([BOOLEAN])
|
|
34
34
|
export const COLLECTION_SUBTYPE = () => new Set([COLLECTION])
|
|
35
35
|
export const NUMBER_SUBTYPE = () => new Set([NUMBER])
|
|
36
|
+
export const ABSTRACTION_SUBTYPE = () => new Set([APPLY])
|
|
36
37
|
|
|
37
38
|
const SPECIAL_BOOLEAN = BOOLEAN_SUBTYPE()
|
|
38
39
|
const SPECIAL_COLLECTION = COLLECTION_SUBTYPE()
|
|
39
40
|
const SPECIAL_NUMBER = NUMBER_SUBTYPE()
|
|
41
|
+
const SPECIAL_ABSTRACTION = ABSTRACTION_SUBTYPE()
|
|
40
42
|
export const toTypeNames = (type) => {
|
|
41
43
|
switch (type) {
|
|
42
44
|
case APPLY:
|
|
@@ -85,7 +87,6 @@ export const SPECIAL_FORM_TYPES = {
|
|
|
85
87
|
[SIGNATURE]: PLACEHOLDER,
|
|
86
88
|
[TYPE_PROP]: [UNKNOWN],
|
|
87
89
|
[RETURNS]: [UNKNOWN],
|
|
88
|
-
|
|
89
90
|
[ARGUMENTS]: [],
|
|
90
91
|
[ARG_COUNT]: 0
|
|
91
92
|
}
|
|
@@ -94,6 +95,27 @@ export const SPECIAL_FORM_TYPES = {
|
|
|
94
95
|
[RETURNS]: [APPLY]
|
|
95
96
|
}
|
|
96
97
|
},
|
|
98
|
+
[STATIC_TYPES.ABSTRACTIONS]: {
|
|
99
|
+
[STATS]: {
|
|
100
|
+
[TYPE_PROP]: [APPLY],
|
|
101
|
+
[SIGNATURE]: STATIC_TYPES.ABSTRACTIONS,
|
|
102
|
+
retried: Infinity,
|
|
103
|
+
[ARG_COUNT]: 1,
|
|
104
|
+
[ARGUMENTS]: [
|
|
105
|
+
{
|
|
106
|
+
[STATS]: {
|
|
107
|
+
retried: Infinity,
|
|
108
|
+
[SIGNATURE]: PLACEHOLDER,
|
|
109
|
+
[TYPE_PROP]: [UNKNOWN],
|
|
110
|
+
[RETURNS]: [UNKNOWN],
|
|
111
|
+
[ARGUMENTS]: [],
|
|
112
|
+
[ARG_COUNT]: 0
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
[RETURNS]: [COLLECTION, SPECIAL_ABSTRACTION]
|
|
117
|
+
}
|
|
118
|
+
},
|
|
97
119
|
[STATIC_TYPES.ATOM]: {
|
|
98
120
|
[STATS]: {
|
|
99
121
|
[TYPE_PROP]: [APPLY],
|
|
@@ -107,7 +129,6 @@ export const SPECIAL_FORM_TYPES = {
|
|
|
107
129
|
[SIGNATURE]: PLACEHOLDER,
|
|
108
130
|
[TYPE_PROP]: [UNKNOWN],
|
|
109
131
|
[RETURNS]: [UNKNOWN],
|
|
110
|
-
|
|
111
132
|
[ARGUMENTS]: [],
|
|
112
133
|
[ARG_COUNT]: 0
|
|
113
134
|
}
|
|
@@ -116,6 +137,27 @@ export const SPECIAL_FORM_TYPES = {
|
|
|
116
137
|
[RETURNS]: [ATOM]
|
|
117
138
|
}
|
|
118
139
|
},
|
|
140
|
+
[STATIC_TYPES.AS_NUMBER]: {
|
|
141
|
+
[STATS]: {
|
|
142
|
+
[TYPE_PROP]: [APPLY],
|
|
143
|
+
[SIGNATURE]: STATIC_TYPES.AS_NUMBER,
|
|
144
|
+
retried: Infinity,
|
|
145
|
+
[ARG_COUNT]: 1,
|
|
146
|
+
[ARGUMENTS]: [
|
|
147
|
+
{
|
|
148
|
+
[STATS]: {
|
|
149
|
+
retried: Infinity,
|
|
150
|
+
[SIGNATURE]: PLACEHOLDER,
|
|
151
|
+
[TYPE_PROP]: [ATOM, SPECIAL_BOOLEAN],
|
|
152
|
+
[RETURNS]: [ATOM, SPECIAL_BOOLEAN],
|
|
153
|
+
[ARGUMENTS]: [],
|
|
154
|
+
[ARG_COUNT]: 0
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
[RETURNS]: [ATOM, SPECIAL_NUMBER]
|
|
159
|
+
}
|
|
160
|
+
},
|
|
119
161
|
[STATIC_TYPES.BOOLEAN]: {
|
|
120
162
|
[STATS]: {
|
|
121
163
|
[TYPE_PROP]: [APPLY],
|
|
@@ -137,6 +179,27 @@ export const SPECIAL_FORM_TYPES = {
|
|
|
137
179
|
[RETURNS]: [ATOM, SPECIAL_BOOLEAN]
|
|
138
180
|
}
|
|
139
181
|
},
|
|
182
|
+
[STATIC_TYPES.BOOLEANS]: {
|
|
183
|
+
[STATS]: {
|
|
184
|
+
[TYPE_PROP]: [APPLY],
|
|
185
|
+
[SIGNATURE]: STATIC_TYPES.BOOLEANS,
|
|
186
|
+
retried: Infinity,
|
|
187
|
+
[ARG_COUNT]: 1,
|
|
188
|
+
[ARGUMENTS]: [
|
|
189
|
+
{
|
|
190
|
+
[STATS]: {
|
|
191
|
+
retried: Infinity,
|
|
192
|
+
[SIGNATURE]: PLACEHOLDER,
|
|
193
|
+
[TYPE_PROP]: [UNKNOWN],
|
|
194
|
+
[RETURNS]: [UNKNOWN],
|
|
195
|
+
[ARGUMENTS]: [],
|
|
196
|
+
[ARG_COUNT]: 0
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
],
|
|
200
|
+
[RETURNS]: [COLLECTION, SPECIAL_BOOLEAN]
|
|
201
|
+
}
|
|
202
|
+
},
|
|
140
203
|
[STATIC_TYPES.NUMBER]: {
|
|
141
204
|
[STATS]: {
|
|
142
205
|
[TYPE_PROP]: [APPLY],
|
|
@@ -158,6 +221,27 @@ export const SPECIAL_FORM_TYPES = {
|
|
|
158
221
|
[RETURNS]: [ATOM, SPECIAL_NUMBER]
|
|
159
222
|
}
|
|
160
223
|
},
|
|
224
|
+
[STATIC_TYPES.NUMBERS]: {
|
|
225
|
+
[STATS]: {
|
|
226
|
+
[TYPE_PROP]: [APPLY],
|
|
227
|
+
[SIGNATURE]: STATIC_TYPES.NUMBERS,
|
|
228
|
+
retried: Infinity,
|
|
229
|
+
[ARG_COUNT]: 1,
|
|
230
|
+
[ARGUMENTS]: [
|
|
231
|
+
{
|
|
232
|
+
[STATS]: {
|
|
233
|
+
retried: Infinity,
|
|
234
|
+
[SIGNATURE]: PLACEHOLDER,
|
|
235
|
+
[TYPE_PROP]: [UNKNOWN],
|
|
236
|
+
[RETURNS]: [UNKNOWN],
|
|
237
|
+
[ARGUMENTS]: [],
|
|
238
|
+
[ARG_COUNT]: 0
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
[RETURNS]: [COLLECTION, SPECIAL_NUMBER]
|
|
243
|
+
}
|
|
244
|
+
},
|
|
161
245
|
[STATIC_TYPES.COLLECTION]: {
|
|
162
246
|
[STATS]: {
|
|
163
247
|
[TYPE_PROP]: [APPLY],
|
|
@@ -180,6 +264,28 @@ export const SPECIAL_FORM_TYPES = {
|
|
|
180
264
|
[RETURNS]: [COLLECTION]
|
|
181
265
|
}
|
|
182
266
|
},
|
|
267
|
+
[STATIC_TYPES.COLLECTIONS]: {
|
|
268
|
+
[STATS]: {
|
|
269
|
+
[TYPE_PROP]: [APPLY],
|
|
270
|
+
[SIGNATURE]: STATIC_TYPES.COLLECTIONS,
|
|
271
|
+
retried: Infinity,
|
|
272
|
+
[ARG_COUNT]: 1,
|
|
273
|
+
[ARGUMENTS]: [
|
|
274
|
+
{
|
|
275
|
+
[STATS]: {
|
|
276
|
+
retried: Infinity,
|
|
277
|
+
[SIGNATURE]: PLACEHOLDER,
|
|
278
|
+
[TYPE_PROP]: [UNKNOWN],
|
|
279
|
+
[RETURNS]: [UNKNOWN],
|
|
280
|
+
|
|
281
|
+
[ARGUMENTS]: [],
|
|
282
|
+
[ARG_COUNT]: 0
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
[RETURNS]: [COLLECTION, SPECIAL_COLLECTION]
|
|
287
|
+
}
|
|
288
|
+
},
|
|
183
289
|
[STATIC_TYPES.UNKNOWN]: {
|
|
184
290
|
[STATS]: {
|
|
185
291
|
[TYPE_PROP]: [APPLY],
|