fez-lisp 1.5.99 → 1.5.101
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/logo.svg +5 -5
- package/package.json +1 -1
- package/src/check.js +172 -176
- package/src/types.js +12 -4
package/logo.svg
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
<svg width="
|
2
|
-
<path d="
|
1
|
+
<svg width="60" height="88" viewBox="0 0 60 88" fill="none" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<path d="M56 58.4998C61.166 60.9107 63.7232 82.5984 43 86.4999C31.755 88.617 1.50018 90.3154 1.5 69C1.49978 42.7121 27.65 50.8529 43 58.4998C52 61 50.834 56.089 56 58.4998Z" fill="#F9B949"/>
|
3
3
|
<circle cx="25.5" cy="35.5" r="25.5" fill="#F9B949"/>
|
4
4
|
<circle cx="36.5" cy="31.5" r="2.5" fill="#1F1B1B"/>
|
5
5
|
<circle cx="9.5" cy="21.5" r="2.5" fill="#1F1B1B"/>
|
@@ -9,8 +9,8 @@
|
|
9
9
|
<circle cx="37" cy="31" r="1" fill="#EBEBEB"/>
|
10
10
|
<circle cx="37" cy="31" r="1" fill="#EBEBEB"/>
|
11
11
|
<circle cx="37" cy="31" r="1" fill="#EBEBEB"/>
|
12
|
-
<path d="
|
13
|
-
<path d="M49.8808 7.37404C50.5137 5.27388 40.491 0.514532 39.3766 1.22816C38.2623 1.
|
14
|
-
<path d="M49.8808 7.37404C50.5137 5.27388 40.491 0.514532 39.3766 1.22816C38.2623 1.94179 33.2308 11.7323 33.2308 11.7323L43.7349 17.8782C43.7349 17.8782 49.2479 9.47421 49.8808 7.37404Z" fill="#B44637"/>
|
12
|
+
<path d="M49.8808 7.37404C50.5137 5.27388 40.491 0.514532 39.3766 1.22816C38.2623 1.9418 33.2308 11.7323 33.2308 11.7323L43.7349 17.8782C43.7349 17.8782 49.2479 9.47421 49.8808 7.37404Z" fill="#B44637"/>
|
13
|
+
<path d="M49.8808 7.37404C50.5137 5.27388 40.491 0.514532 39.3766 1.22816C38.2623 1.9418 33.2308 11.7323 33.2308 11.7323L43.7349 17.8782C43.7349 17.8782 49.2479 9.47421 49.8808 7.37404Z" fill="#B44637"/>
|
15
14
|
<path d="M51 15C46 13.5 54.6472 7.06417 48.8171 5" stroke="#F9B949" stroke-width="2" stroke-linecap="round"/>
|
15
|
+
<path d="M19.5 27.1883C16.1667 26.3396 12 28.635 12 28.635C12 28.635 12.4167 30.7565 17.4167 32.7045C22.4167 34.6525 27 35 27 35C27 35 22.8333 28.037 19.5 27.1883Z" fill="#B44637"/>
|
16
16
|
</svg>
|
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -66,6 +66,10 @@ const deepLambdaReturn = (rest, condition) => {
|
|
66
66
|
const rem = hasBlock(body) ? body.at(-1) : body
|
67
67
|
return condition(rem) ? rem : deepLambdaReturn(rem, condition)
|
68
68
|
}
|
69
|
+
export const isUnknownNotAnyType = (stats) =>
|
70
|
+
stats && !isAnyType(stats) && isUnknownType(stats)
|
71
|
+
export const isUnknownNotAnyReturn = (stats) =>
|
72
|
+
stats && !isAnyReturn(stats) && isUnknownReturn(stats)
|
69
73
|
export const castType = (stats, type) =>
|
70
74
|
(stats[TYPE_PROP][0] = type[RETURNS][0])
|
71
75
|
export const castReturn = (stats, type) =>
|
@@ -234,7 +238,22 @@ const withScope = (name, scope) => {
|
|
234
238
|
const chain = getScopeNames(scope)
|
235
239
|
return `${chain.length === 1 ? '; ' : ''}${chain.join(' ')} ${name}`
|
236
240
|
}
|
237
|
-
|
241
|
+
const retry = (stats, stack, errors, cb) => {
|
242
|
+
if (
|
243
|
+
errors.size === 0 &&
|
244
|
+
(isUnknownNotAnyType(stats) || isUnknownNotAnyReturn(stats)) &&
|
245
|
+
stats.retried < MAX_RETRY_DEFINITION
|
246
|
+
) {
|
247
|
+
stats.retried += 1
|
248
|
+
stack.unshift(() => cb())
|
249
|
+
}
|
250
|
+
}
|
251
|
+
const retryArgs = (stats, stack, errors, cb) => {
|
252
|
+
if (errors.size === 0 && stats.counter < MAX_ARGUMENT_RETRY) {
|
253
|
+
stats.counter++
|
254
|
+
stack.unshift(cb)
|
255
|
+
}
|
256
|
+
}
|
238
257
|
const ifExpression = ({ re, env, ref }) => {
|
239
258
|
if (re[0][TYPE] === ATOM || re[1][TYPE] === ATOM) setReturnToAtom(ref[STATS])
|
240
259
|
// TODO check that both brancehs are predicates if one is
|
@@ -259,6 +278,19 @@ const ifExpression = ({ re, env, ref }) => {
|
|
259
278
|
}
|
260
279
|
}
|
261
280
|
}
|
281
|
+
const resolveApplyAssigment = (re, name, env) => {
|
282
|
+
if (re[0][TYPE] === APPLY) {
|
283
|
+
switch (re[0][VALUE]) {
|
284
|
+
case KEYWORDS.ANONYMOUS_FUNCTION:
|
285
|
+
// FN ASSIGMENT
|
286
|
+
env[name][STATS][TYPE_PROP] = [APPLY]
|
287
|
+
env[name][STATS][RETURNS] = [UNKNOWN]
|
288
|
+
env[name][STATS][ARG_COUNT] = re.length - 2
|
289
|
+
env[name][STATS][ARGUMENTS] = fillUknownArgs(re.length - 2)
|
290
|
+
break
|
291
|
+
}
|
292
|
+
}
|
293
|
+
}
|
262
294
|
const resolveIfAssigment = ({ rem, name, env, exp, errors, prop }) => {
|
263
295
|
const re = rem.slice(2)
|
264
296
|
checkPredicateName(
|
@@ -280,17 +312,7 @@ const resolveIfAssigment = ({ rem, name, env, exp, errors, prop }) => {
|
|
280
312
|
!isUnknownReturn(env[re[0][0][VALUE]][STATS])
|
281
313
|
) {
|
282
314
|
setPropToReturnRef(env[name][STATS], prop, env[re[0][0][VALUE]][STATS])
|
283
|
-
|
284
|
-
switch (re[0][0][VALUE]) {
|
285
|
-
case KEYWORDS.ANONYMOUS_FUNCTION:
|
286
|
-
// FN UKNONW ASSIGMENT
|
287
|
-
env[name][STATS][TYPE_PROP] = [APPLY]
|
288
|
-
env[name][STATS][RETURNS] = [UNKNOWN]
|
289
|
-
env[name][STATS][ARG_COUNT] = re[0].length - 2
|
290
|
-
env[name][STATS][ARGUMENTS] = fillUknownArgs(re[0].length - 2)
|
291
|
-
break
|
292
|
-
}
|
293
|
-
}
|
315
|
+
resolveApplyAssigment(re[0], name, env)
|
294
316
|
// env[name][STATS] = env[re[0][0][VALUE]][STATS]
|
295
317
|
} else if (
|
296
318
|
!isLeaf(re[1]) &&
|
@@ -298,17 +320,7 @@ const resolveIfAssigment = ({ rem, name, env, exp, errors, prop }) => {
|
|
298
320
|
!isUnknownReturn(env[re[1][0][VALUE]][STATS])
|
299
321
|
) {
|
300
322
|
setPropToReturnRef(env[name][STATS], prop, env[re[1][0][VALUE]][STATS])
|
301
|
-
|
302
|
-
switch (re[1][0][VALUE]) {
|
303
|
-
case KEYWORDS.ANONYMOUS_FUNCTION:
|
304
|
-
// FN ASSIGMENT
|
305
|
-
env[name][STATS][TYPE_PROP] = [APPLY]
|
306
|
-
env[name][STATS][RETURNS] = [UNKNOWN]
|
307
|
-
env[name][STATS][ARG_COUNT] = re[1].length - 2
|
308
|
-
env[name][STATS][ARGUMENTS] = fillUknownArgs(re[1].length - 2)
|
309
|
-
break
|
310
|
-
}
|
311
|
-
}
|
323
|
+
resolveApplyAssigment(re[1], name, env)
|
312
324
|
} else if (env[re[0][VALUE]])
|
313
325
|
// ASSIGMENT
|
314
326
|
setPropRef(env[name][STATS], prop, env[re[0][VALUE]][STATS])
|
@@ -319,6 +331,7 @@ const resolveIfAssigment = ({ rem, name, env, exp, errors, prop }) => {
|
|
319
331
|
const resolveCondition = ({ rem, name, env, exp, errors }) => {
|
320
332
|
const ret = rem[0]
|
321
333
|
const re = rem.slice(2)
|
334
|
+
resolveApplyAssigment(re, name, env)
|
322
335
|
const ref = env[name]
|
323
336
|
checkPredicateName(
|
324
337
|
exp,
|
@@ -443,117 +456,112 @@ export const typeCheck = (ast, error = true) => {
|
|
443
456
|
exp
|
444
457
|
)})`
|
445
458
|
)
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
459
|
+
const name = rest[0][VALUE]
|
460
|
+
// Predicate name consistency
|
461
|
+
const rightHand = rest.at(-1)
|
462
|
+
if (
|
463
|
+
rightHand &&
|
464
|
+
rightHand[0] &&
|
465
|
+
rightHand[0][TYPE] === APPLY &&
|
466
|
+
rightHand[0][VALUE] === KEYWORDS.ANONYMOUS_FUNCTION
|
467
|
+
) {
|
468
|
+
validateLambda(rightHand, name)
|
469
|
+
const n = rightHand.length
|
470
|
+
env[name] = {
|
471
|
+
[STATS]: {
|
472
|
+
[TYPE_PROP]: [APPLY],
|
473
|
+
[SIGNATURE]: name,
|
474
|
+
retried: 0,
|
475
|
+
counter: 0,
|
476
|
+
[ARG_COUNT]: n - 2,
|
477
|
+
[ARGUMENTS]: fillUknownArgs(n - 2),
|
478
|
+
[RETURNS]: [UNKNOWN]
|
479
|
+
}
|
480
|
+
}
|
450
481
|
if (
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
482
|
+
!checkReturnType({
|
483
|
+
stack,
|
484
|
+
exp,
|
485
|
+
env,
|
486
|
+
name,
|
487
|
+
errors
|
488
|
+
}) ||
|
489
|
+
isUnknownReturn(env[name][STATS])
|
455
490
|
) {
|
456
|
-
|
457
|
-
|
458
|
-
env[name] = {
|
459
|
-
[STATS]: {
|
460
|
-
[TYPE_PROP]: [APPLY],
|
461
|
-
[SIGNATURE]: name,
|
462
|
-
retried: 0,
|
463
|
-
counter: 0,
|
464
|
-
[ARG_COUNT]: n - 2,
|
465
|
-
[ARGUMENTS]: fillUknownArgs(n - 2),
|
466
|
-
[RETURNS]: [UNKNOWN]
|
467
|
-
}
|
468
|
-
}
|
469
|
-
if (
|
470
|
-
!checkReturnType({
|
491
|
+
retry(env[name][STATS], stack, errors, () => {
|
492
|
+
checkReturnType({
|
471
493
|
stack,
|
472
494
|
exp,
|
473
495
|
env,
|
474
496
|
name,
|
475
497
|
errors
|
476
|
-
}) ||
|
477
|
-
(isUnknownReturn(env[name][STATS]) &&
|
478
|
-
env[name][STATS].retried < MAX_RETRY_DEFINITION)
|
479
|
-
) {
|
480
|
-
env[name][STATS].retried += 1
|
481
|
-
stack.unshift(() => {
|
482
|
-
checkReturnType({
|
483
|
-
stack,
|
484
|
-
exp,
|
485
|
-
env,
|
486
|
-
name,
|
487
|
-
errors
|
488
|
-
})
|
489
|
-
check(rightHand, env, exp)
|
490
498
|
})
|
491
499
|
check(rightHand, env, exp)
|
492
|
-
}
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
500
|
+
})
|
501
|
+
check(rightHand, env, exp)
|
502
|
+
} else check(rightHand, env, exp)
|
503
|
+
} else {
|
504
|
+
checkPredicateName(exp, rest, errors)
|
505
|
+
const isLeafNode = isLeaf(rightHand)
|
506
|
+
if (isLeafNode && rightHand[TYPE] === WORD) {
|
507
|
+
// TODO make sure this prevents the assigment all together
|
508
|
+
if (env[rest[1][VALUE]] === undefined)
|
509
|
+
errors.add(
|
510
|
+
`Trying to access undefined variable ${rest[1][VALUE]} (check #22)`
|
511
|
+
)
|
512
|
+
// Used to be checkin if it's an assigment to a special form
|
513
|
+
// but this should not cause problems
|
514
|
+
// env[name] = SPECIAL_FORMS_SET.has(rest[1][VALUE])
|
515
|
+
// ? structuredClone(env[rest[1][VALUE]])
|
516
|
+
// : env[rest[1][VALUE]]
|
517
|
+
// FULL REFF ASSIGMENT
|
518
|
+
env[name] = env[rest[1][VALUE]]
|
519
|
+
} else if (isLeafNode && rightHand[TYPE] === ATOM) {
|
520
|
+
// DECLARATION of ATOM
|
521
|
+
env[name] = {
|
522
|
+
[STATS]: {
|
523
|
+
[SIGNATURE]: name,
|
524
|
+
retried: 0,
|
525
|
+
counter: 0,
|
526
|
+
[TYPE_PROP]: [ATOM],
|
527
|
+
[RETURNS]: [ATOM]
|
520
528
|
}
|
521
|
-
}
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
529
|
+
}
|
530
|
+
} else if (rightHand[0]) {
|
531
|
+
const right = rightHand[0]
|
532
|
+
// DECLARATION
|
533
|
+
env[name] = {
|
534
|
+
[STATS]: {
|
535
|
+
retried: 0,
|
536
|
+
counter: 0,
|
537
|
+
[SIGNATURE]: name,
|
538
|
+
[TYPE_PROP]: [
|
539
|
+
isLeafNode
|
540
|
+
? right[TYPE]
|
541
|
+
: env[right[VALUE]] == undefined
|
542
|
+
? UNKNOWN
|
543
|
+
: env[right[VALUE]][STATS][RETURNS][0]
|
544
|
+
],
|
545
|
+
[RETURNS]: [UNKNOWN]
|
538
546
|
}
|
539
|
-
const body = rightHand
|
540
|
-
const rem = hasBlock(body) ? body.at(-1) : body
|
541
|
-
const returns = isLeaf(rem) ? rem : rem[0]
|
542
|
-
resolveRetunType({
|
543
|
-
stack,
|
544
|
-
returns,
|
545
|
-
rem,
|
546
|
-
prop: TYPE_PROP,
|
547
|
-
exp,
|
548
|
-
env,
|
549
|
-
name,
|
550
|
-
errors
|
551
|
-
})
|
552
547
|
}
|
553
|
-
|
548
|
+
const body = rightHand
|
549
|
+
const rem = hasBlock(body) ? body.at(-1) : body
|
550
|
+
const returns = isLeaf(rem) ? rem : rem[0]
|
551
|
+
resolveRetunType({
|
552
|
+
stack,
|
553
|
+
returns,
|
554
|
+
rem,
|
555
|
+
prop: TYPE_PROP,
|
556
|
+
exp,
|
557
|
+
env,
|
558
|
+
name,
|
559
|
+
errors
|
560
|
+
})
|
554
561
|
}
|
555
|
-
|
562
|
+
check(rightHand, env, scope)
|
556
563
|
}
|
564
|
+
Types.set(withScope(name, env), () => formatType(name, env))
|
557
565
|
break
|
558
566
|
case KEYWORDS.ANONYMOUS_FUNCTION:
|
559
567
|
validateLambda(exp)
|
@@ -621,7 +629,6 @@ export const typeCheck = (ast, error = true) => {
|
|
621
629
|
if (copy[ret[VALUE]])
|
622
630
|
setReturnRef(ref[STATS], copy[ret[VALUE]][STATS])
|
623
631
|
})
|
624
|
-
|
625
632
|
break
|
626
633
|
}
|
627
634
|
}
|
@@ -931,12 +938,8 @@ export const typeCheck = (ast, error = true) => {
|
|
931
938
|
getReturn(actual[STATS])
|
932
939
|
)}) (${stringifyArgs(exp)}) (check #782)`
|
933
940
|
)
|
934
|
-
} else
|
935
|
-
actual[STATS]
|
936
|
-
) {
|
937
|
-
actual[STATS].retried += 1
|
938
|
-
stack.unshift(() => match1())
|
939
|
-
}
|
941
|
+
} else
|
942
|
+
retry(actual[STATS], stack, errors, () => match1())
|
940
943
|
}
|
941
944
|
match1()
|
942
945
|
for (
|
@@ -964,12 +967,14 @@ export const typeCheck = (ast, error = true) => {
|
|
964
967
|
getType(actual[STATS])
|
965
968
|
)}) (${stringifyArgs(exp)}) (check #781)`
|
966
969
|
)
|
967
|
-
else
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
970
|
+
else
|
971
|
+
retry(
|
972
|
+
actual[STATS],
|
973
|
+
stack,
|
974
|
+
errors,
|
975
|
+
|
976
|
+
() => match2()
|
977
|
+
)
|
973
978
|
}
|
974
979
|
match2()
|
975
980
|
}
|
@@ -991,34 +996,27 @@ export const typeCheck = (ast, error = true) => {
|
|
991
996
|
exp
|
992
997
|
)}) (check #30)`
|
993
998
|
)
|
994
|
-
} else if (
|
995
|
-
|
996
|
-
|
999
|
+
} else if (isUnknownType(args[i][STATS]))
|
1000
|
+
retry(args[i][STATS], stack, errors, () =>
|
1001
|
+
check(exp, env, scope)
|
1002
|
+
)
|
1003
|
+
else if (
|
1004
|
+
env[rest[i][VALUE]] &&
|
1005
|
+
!isUnknownType(args[i][STATS]) &&
|
1006
|
+
isUnknownType(env[rest[i][VALUE]][STATS]) &&
|
1007
|
+
getType(args[i][STATS]) !== APPLY
|
997
1008
|
) {
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
!isUnknownType(args[i][STATS]) &&
|
1004
|
-
isUnknownType(env[rest[i][VALUE]][STATS]) &&
|
1005
|
-
getType(args[i][STATS]) !== APPLY
|
1006
|
-
) {
|
1007
|
-
// REFF ASSIGMENT
|
1008
|
-
env[rest[i][VALUE]][STATS][TYPE_PROP] =
|
1009
|
-
args[i][STATS][TYPE_PROP]
|
1010
|
-
env[rest[i][VALUE]][STATS][RETURNS] =
|
1011
|
-
args[i][STATS][RETURNS]
|
1012
|
-
}
|
1009
|
+
// REFF ASSIGMENT
|
1010
|
+
env[rest[i][VALUE]][STATS][TYPE_PROP] =
|
1011
|
+
args[i][STATS][TYPE_PROP]
|
1012
|
+
env[rest[i][VALUE]][STATS][RETURNS] =
|
1013
|
+
args[i][STATS][RETURNS]
|
1013
1014
|
}
|
1014
1015
|
} else if (env[rest[i][0][VALUE]]) {
|
1015
1016
|
const match = () => {
|
1016
1017
|
const actual = env[rest[i][0][VALUE]][STATS]
|
1017
1018
|
const expected = args[i][STATS]
|
1018
|
-
|
1019
|
-
args[i][STATS].counter++
|
1020
|
-
stack.unshift(() => match())
|
1021
|
-
}
|
1019
|
+
retryArgs(args[i][STATS], stack, errors, () => match())
|
1022
1020
|
if (!isUnknownType(expected) && !isUnknownReturn(actual))
|
1023
1021
|
if (!compareTypeWithReturn(expected, actual))
|
1024
1022
|
errors.add(
|
@@ -1092,13 +1090,14 @@ export const typeCheck = (ast, error = true) => {
|
|
1092
1090
|
exp
|
1093
1091
|
)}) (check #779)`
|
1094
1092
|
)
|
1095
|
-
else
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1093
|
+
else
|
1094
|
+
retry(
|
1095
|
+
actual[STATS],
|
1096
|
+
stack,
|
1097
|
+
errors,
|
1098
|
+
|
1099
|
+
() => match1()
|
1100
|
+
)
|
1102
1101
|
}
|
1103
1102
|
match1()
|
1104
1103
|
for (
|
@@ -1134,13 +1133,14 @@ export const typeCheck = (ast, error = true) => {
|
|
1134
1133
|
exp
|
1135
1134
|
)}) (check #780)`
|
1136
1135
|
)
|
1137
|
-
else
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1136
|
+
else
|
1137
|
+
retry(
|
1138
|
+
actual[STATS],
|
1139
|
+
stack,
|
1140
|
+
errors,
|
1141
|
+
|
1142
|
+
() => match2()
|
1143
|
+
)
|
1144
1144
|
}
|
1145
1145
|
match2()
|
1146
1146
|
}
|
@@ -1155,19 +1155,15 @@ export const typeCheck = (ast, error = true) => {
|
|
1155
1155
|
// break
|
1156
1156
|
}
|
1157
1157
|
}
|
1158
|
-
else if (
|
1159
|
-
|
1160
|
-
args[i][STATS].retried < MAX_RETRY_DEFINITION
|
1161
|
-
) {
|
1162
|
-
args[i][STATS].retried += 1
|
1163
|
-
stack.unshift(() => match())
|
1164
|
-
}
|
1158
|
+
else if (isUnknownType(expected))
|
1159
|
+
retry(args[i][STATS], stack, errors, () => match())
|
1165
1160
|
}
|
1166
1161
|
match()
|
1167
1162
|
}
|
1168
1163
|
}
|
1169
1164
|
}
|
1170
1165
|
})
|
1166
|
+
|
1171
1167
|
for (let i = 0; i < rest.length; ++i) {
|
1172
1168
|
const r = rest[i]
|
1173
1169
|
if (isLeaf(r) && r[TYPE] !== ATOM)
|
package/src/types.js
CHANGED
@@ -23,7 +23,7 @@ export const PREDICATE = 4
|
|
23
23
|
export const ANY = 5
|
24
24
|
export const ANONYMOUS_FUNCTION_TYPE_PREFIX = 'lambda::annonymous::'
|
25
25
|
export const MAX_ARGUMENT_RETRY = 1
|
26
|
-
export const MAX_RETRY_DEFINITION =
|
26
|
+
export const MAX_RETRY_DEFINITION = 100
|
27
27
|
export const toTypeNames = (type) => {
|
28
28
|
switch (type) {
|
29
29
|
case APPLY:
|
@@ -42,6 +42,14 @@ export const toTypeNames = (type) => {
|
|
42
42
|
break
|
43
43
|
}
|
44
44
|
}
|
45
|
+
export const toTypeNamesAnyToUknown = (type) => {
|
46
|
+
switch (type) {
|
47
|
+
case ANY:
|
48
|
+
return toTypeNames(UNKNOWN)
|
49
|
+
default:
|
50
|
+
return toTypeNames(type)
|
51
|
+
}
|
52
|
+
}
|
45
53
|
export const SPECIAL_FORM_TYPES = {
|
46
54
|
[SCOPE_NAME]: ';',
|
47
55
|
// [ORDER]: 0,
|
@@ -1196,15 +1204,15 @@ export const formatType = (name, env) => {
|
|
1196
1204
|
`${
|
1197
1205
|
getType(x[STATS]) === APPLY
|
1198
1206
|
? `${formatType(i, stats[ARGUMENTS])}`
|
1199
|
-
: `${
|
1207
|
+
: `${toTypeNamesAnyToUknown(getType(x[STATS]))}`
|
1200
1208
|
}`
|
1201
1209
|
).join(' ') + ' '
|
1202
1210
|
: ''
|
1203
1211
|
// TODO format returned functions when type support is added
|
1204
|
-
}(${KEYWORDS.BLOCK} ${
|
1212
|
+
}(${KEYWORDS.BLOCK} ${toTypeNamesAnyToUknown(getReturn(stats))})${
|
1205
1213
|
isAnonymous ? '' : ')'
|
1206
1214
|
})`
|
1207
|
-
: `(let ${name} ${
|
1215
|
+
: `(let ${name} ${toTypeNamesAnyToUknown(getType(stats))})`
|
1208
1216
|
: name
|
1209
1217
|
}
|
1210
1218
|
|