fez-lisp 1.6.63 → 1.6.65
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 +35 -18
- package/src/macros.js +6 -9
- package/src/types.js +1 -0
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -72,7 +72,6 @@ export const identity = (name) => [
|
|
72
72
|
]
|
73
73
|
export const typeSetDefaultFunction = (Types, name, env, exp) =>
|
74
74
|
Types.set(withScope(name, env), () => formatType(name, env))
|
75
|
-
|
76
75
|
const returnType = (rest) => {
|
77
76
|
const body = rest.at(-1)
|
78
77
|
const rem = hasBlock(body) ? body.at(-1) : body
|
@@ -218,6 +217,12 @@ export const setReturnToTypeRef = (stats, value) => {
|
|
218
217
|
)
|
219
218
|
}
|
220
219
|
export const setStats = (a, b) => (a[STATS] = b[STATS])
|
220
|
+
export const cloneStats = (name, x) => ({
|
221
|
+
[STATS]: {
|
222
|
+
...x[STATS],
|
223
|
+
[SIGNATURE]: name
|
224
|
+
}
|
225
|
+
})
|
221
226
|
export const setStatsRef = (a, b) => (a[STATS] = b[STATS])
|
222
227
|
export const setTypeToReturnRef = (stats, value) => {
|
223
228
|
// To prevent getters overwritting the array subtype
|
@@ -687,11 +692,17 @@ const resolveSetter = (first, rest, env, stack) => {
|
|
687
692
|
case WORD:
|
688
693
|
if (env[right[VALUE]]) {
|
689
694
|
if (hasSubType(env[right[VALUE]][STATS])) {
|
690
|
-
if (currentSubType.has(UNKNOWN))
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
+
if (currentSubType.has(UNKNOWN)) {
|
696
|
+
if (env[right[VALUE]][STATS][TYPE_PROP][0] === COLLECTION) {
|
697
|
+
current[STATS][TYPE_PROP][1] = new SubType([
|
698
|
+
COLLECTION,
|
699
|
+
...getSubType(env[right[VALUE]][STATS]).types
|
700
|
+
])
|
701
|
+
} else
|
702
|
+
current[STATS][TYPE_PROP][1] = new SubType(
|
703
|
+
getSubType(env[right[VALUE]][STATS]).types
|
704
|
+
)
|
705
|
+
} else if (!equalSubTypes(current[STATS], env[right[VALUE]][STATS]))
|
695
706
|
throw new TypeError(
|
696
707
|
`Incorrect array type at (${
|
697
708
|
first[VALUE]
|
@@ -701,9 +712,9 @@ const resolveSetter = (first, rest, env, stack) => {
|
|
701
712
|
getTypes(env[right[VALUE]][STATS])
|
702
713
|
)}) (${stringifyArgs([first, rest])}) (check #198)`
|
703
714
|
)
|
704
|
-
current[STATS][TYPE_PROP][1] = new SubType(
|
705
|
-
|
706
|
-
)
|
715
|
+
// current[STATS][TYPE_PROP][1] = new SubType(
|
716
|
+
// getSubType(env[right[VALUE]][STATS])
|
717
|
+
// )
|
707
718
|
} else
|
708
719
|
retry(env[right[VALUE]][STATS], [first[VALUE], rest], stack, () =>
|
709
720
|
resolveSetter(first, rest, env, stack)
|
@@ -722,11 +733,17 @@ const resolveSetter = (first, rest, env, stack) => {
|
|
722
733
|
break
|
723
734
|
}
|
724
735
|
if (hasSubReturn(env[right[VALUE]][STATS])) {
|
725
|
-
if (currentSubType.has(UNKNOWN))
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
736
|
+
if (currentSubType.has(UNKNOWN)) {
|
737
|
+
if (env[right[VALUE]][STATS][RETURNS][0] === COLLECTION) {
|
738
|
+
current[STATS][TYPE_PROP][1] = new SubType([
|
739
|
+
COLLECTION,
|
740
|
+
...getSubReturn(env[right[VALUE]][STATS]).types
|
741
|
+
])
|
742
|
+
} else
|
743
|
+
current[STATS][TYPE_PROP][1] = new SubType(
|
744
|
+
getSubReturn(env[right[VALUE]][STATS]).types
|
745
|
+
)
|
746
|
+
} else if (
|
730
747
|
!equalSubTypesWithSubReturn(
|
731
748
|
current[STATS],
|
732
749
|
env[right[VALUE]][STATS]
|
@@ -741,9 +758,9 @@ const resolveSetter = (first, rest, env, stack) => {
|
|
741
758
|
getReturns(env[right[VALUE]][STATS])
|
742
759
|
)}) (${stringifyArgs([first, rest])}) (check #198)`
|
743
760
|
)
|
744
|
-
current[STATS][TYPE_PROP][1] = new SubType([
|
745
|
-
|
746
|
-
])
|
761
|
+
// current[STATS][TYPE_PROP][1] = new SubType([
|
762
|
+
// ...getSubReturn(env[right[VALUE]][STATS])
|
763
|
+
// ])
|
747
764
|
}
|
748
765
|
// else
|
749
766
|
// retry(env[right[VALUE]][STATS], [first[VALUE], rest], stack, () =>
|
@@ -753,6 +770,7 @@ const resolveSetter = (first, rest, env, stack) => {
|
|
753
770
|
break
|
754
771
|
}
|
755
772
|
setTypeToCollection(current[STATS])
|
773
|
+
|
756
774
|
// // Retry setting the sub-type if infered it out later
|
757
775
|
// if (!hasSubType(current[STATS]) || getSubType(current[STATS]).has(UNKNOWN))
|
758
776
|
// retry(current[STATS], [first[VALUE], rest], stack, () =>
|
@@ -1421,7 +1439,6 @@ export const typeCheck = (
|
|
1421
1439
|
check(rightHand, env, scope)
|
1422
1440
|
}
|
1423
1441
|
typeSet(Types, name, env, exp)
|
1424
|
-
// Types.set(withScope(name, env), () => formatType(name, env))
|
1425
1442
|
break
|
1426
1443
|
case KEYWORDS.ANONYMOUS_FUNCTION:
|
1427
1444
|
{
|
package/src/macros.js
CHANGED
@@ -48,7 +48,8 @@ export const SUGGAR = {
|
|
48
48
|
DECREMENT_BY: '-=',
|
49
49
|
BOOLEAN_VARIABLE: 'boolean',
|
50
50
|
BOOLEAN_VARIABLE_GET: 'boole',
|
51
|
-
BOOLEAN_VARIABLE_SET: 'boole-set'
|
51
|
+
BOOLEAN_VARIABLE_SET: 'boole-set',
|
52
|
+
GET_ARRAY: 'array:get'
|
52
53
|
}
|
53
54
|
export const deSuggarAst = (ast, scope) => {
|
54
55
|
if (scope === undefined) scope = ast
|
@@ -569,7 +570,7 @@ export const deSuggarAst = (ast, scope) => {
|
|
569
570
|
let wrap = right
|
570
571
|
for (let i = 0; i < n; ++i) {
|
571
572
|
wrap = [
|
572
|
-
[APPLY,
|
573
|
+
[APPLY, SUGGAR.GET_ARRAY],
|
573
574
|
wrap,
|
574
575
|
[ATOM, 1]
|
575
576
|
]
|
@@ -577,17 +578,13 @@ export const deSuggarAst = (ast, scope) => {
|
|
577
578
|
return [
|
578
579
|
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
579
580
|
name,
|
580
|
-
[[APPLY,
|
581
|
+
[[APPLY, SUGGAR.GET_ARRAY], wrap, [ATOM, 0]]
|
581
582
|
]
|
582
583
|
})
|
583
584
|
if (lastLeft[VALUE] !== PLACEHOLDER) {
|
584
585
|
let wrap = right
|
585
586
|
for (let i = 0; i < vars.length; ++i) {
|
586
|
-
wrap = [
|
587
|
-
[APPLY, KEYWORDS.GET_ARRAY],
|
588
|
-
wrap,
|
589
|
-
[ATOM, 1]
|
590
|
-
]
|
587
|
+
wrap = [[APPLY, SUGGAR.GET_ARRAY], wrap, [ATOM, 1]]
|
591
588
|
}
|
592
589
|
newScope.push([
|
593
590
|
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
@@ -619,7 +616,7 @@ export const deSuggarAst = (ast, scope) => {
|
|
619
616
|
.map(([i]) => [
|
620
617
|
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
621
618
|
vars[i],
|
622
|
-
[[APPLY,
|
619
|
+
[[APPLY, SUGGAR.GET_ARRAY], right, [ATOM, i]]
|
623
620
|
])
|
624
621
|
if (isSlicing)
|
625
622
|
newScope.push([
|