fez-lisp 1.5.34 → 1.5.36
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/package.json +1 -1
- package/src/check.js +163 -19
- package/src/macros.js +2 -3
- package/src/utils.js +5 -0
package/package.json
CHANGED
package/src/check.js
CHANGED
@@ -11,7 +11,7 @@ import {
|
|
11
11
|
WORD
|
12
12
|
} from './keywords.js'
|
13
13
|
import { isLeaf } from './parser.js'
|
14
|
-
import { stringifyArgs } from './utils.js'
|
14
|
+
import { hasBlock, stringifyArgs } from './utils.js'
|
15
15
|
const ARGS_COUNT = 'n'
|
16
16
|
const VARIADIC = '...'
|
17
17
|
const STATS = '__stats__'
|
@@ -21,6 +21,8 @@ const RETURNS = 'returns'
|
|
21
21
|
const SCOPE_NAME = '__scope__'
|
22
22
|
const SUBTYPE = 'subtype'
|
23
23
|
const PREDICATE = 3
|
24
|
+
const RETRY_COUNT = 1
|
25
|
+
const DEFINITON_RETRY_COUNT = 1
|
24
26
|
const toTypeNames = (type) => {
|
25
27
|
switch (type) {
|
26
28
|
case APPLY:
|
@@ -38,6 +40,7 @@ export const typeCheck = (ast) => {
|
|
38
40
|
[DEBUG.LOG]: {
|
39
41
|
[STATS]: {
|
40
42
|
type: APPLY,
|
43
|
+
retried: 0,
|
41
44
|
[ARGS]: [
|
42
45
|
[UNKNOWN, PLACEHOLDER],
|
43
46
|
[APPLY, PLACEHOLDER]
|
@@ -47,35 +50,81 @@ export const typeCheck = (ast) => {
|
|
47
50
|
}
|
48
51
|
},
|
49
52
|
[DEBUG.STRING]: {
|
50
|
-
[STATS]: {
|
53
|
+
[STATS]: {
|
54
|
+
type: APPLY,
|
55
|
+
retried: 0,
|
56
|
+
[ARGS_COUNT]: VARIADIC,
|
57
|
+
[RETURNS]: APPLY
|
58
|
+
}
|
51
59
|
},
|
52
60
|
[DEBUG.ASSERT]: {
|
53
|
-
[STATS]: {
|
61
|
+
[STATS]: {
|
62
|
+
type: APPLY,
|
63
|
+
retried: 0,
|
64
|
+
[ARGS_COUNT]: VARIADIC,
|
65
|
+
[RETURNS]: UNKNOWN
|
66
|
+
}
|
54
67
|
},
|
55
68
|
[DEBUG.SIGNATURE]: {
|
56
|
-
[STATS]: {
|
69
|
+
[STATS]: {
|
70
|
+
type: APPLY,
|
71
|
+
retried: 0,
|
72
|
+
[ARGS_COUNT]: VARIADIC,
|
73
|
+
[RETURNS]: UNKNOWN
|
74
|
+
}
|
57
75
|
},
|
58
76
|
[DEBUG.LIST_THEMES]: {
|
59
|
-
[STATS]: {
|
77
|
+
[STATS]: {
|
78
|
+
type: APPLY,
|
79
|
+
retried: 0,
|
80
|
+
[ARGS_COUNT]: VARIADIC,
|
81
|
+
[RETURNS]: UNKNOWN
|
82
|
+
}
|
60
83
|
},
|
61
84
|
[DEBUG.SET_THEME]: {
|
62
|
-
[STATS]: {
|
85
|
+
[STATS]: {
|
86
|
+
type: APPLY,
|
87
|
+
retried: 0,
|
88
|
+
[ARGS_COUNT]: VARIADIC,
|
89
|
+
[RETURNS]: UNKNOWN
|
90
|
+
}
|
63
91
|
},
|
64
92
|
[KEYWORDS.BLOCK]: {
|
65
|
-
[STATS]: {
|
93
|
+
[STATS]: {
|
94
|
+
type: APPLY,
|
95
|
+
retried: 0,
|
96
|
+
[ARGS_COUNT]: VARIADIC,
|
97
|
+
[RETURNS]: UNKNOWN
|
98
|
+
}
|
66
99
|
},
|
67
100
|
[KEYWORDS.ANONYMOUS_FUNCTION]: {
|
68
|
-
[STATS]: {
|
101
|
+
[STATS]: {
|
102
|
+
type: APPLY,
|
103
|
+
retried: 0,
|
104
|
+
[ARGS_COUNT]: VARIADIC,
|
105
|
+
[RETURNS]: APPLY
|
106
|
+
}
|
69
107
|
},
|
70
108
|
[KEYWORDS.CALL_FUNCTION]: {
|
71
|
-
[STATS]: {
|
109
|
+
[STATS]: {
|
110
|
+
type: APPLY,
|
111
|
+
retried: 0,
|
112
|
+
[ARGS_COUNT]: VARIADIC,
|
113
|
+
[RETURNS]: UNKNOWN
|
114
|
+
}
|
72
115
|
},
|
73
116
|
[KEYWORDS.CREATE_ARRAY]: {
|
74
|
-
[STATS]: {
|
117
|
+
[STATS]: {
|
118
|
+
type: APPLY,
|
119
|
+
retried: 0,
|
120
|
+
[ARGS_COUNT]: VARIADIC,
|
121
|
+
[RETURNS]: APPLY
|
122
|
+
}
|
75
123
|
},
|
76
124
|
[KEYWORDS.LOOP]: {
|
77
125
|
[STATS]: {
|
78
126
|
type: APPLY,
|
127
|
+
retried: 0,
|
79
128
|
[ARGS_COUNT]: 2,
|
80
129
|
[ARGS]: [
|
81
130
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -88,6 +137,7 @@ export const typeCheck = (ast) => {
|
|
88
137
|
[KEYWORDS.ADDITION]: {
|
89
138
|
[STATS]: {
|
90
139
|
type: APPLY,
|
140
|
+
retried: 0,
|
91
141
|
[ARGS_COUNT]: 2,
|
92
142
|
[ARGS]: [
|
93
143
|
[ATOM, PLACEHOLDER],
|
@@ -99,6 +149,7 @@ export const typeCheck = (ast) => {
|
|
99
149
|
[KEYWORDS.MULTIPLICATION]: {
|
100
150
|
[STATS]: {
|
101
151
|
type: APPLY,
|
152
|
+
retried: 0,
|
102
153
|
[ARGS_COUNT]: 2,
|
103
154
|
[ARGS]: [
|
104
155
|
[ATOM, PLACEHOLDER],
|
@@ -110,6 +161,7 @@ export const typeCheck = (ast) => {
|
|
110
161
|
[KEYWORDS.SUBTRACTION]: {
|
111
162
|
[STATS]: {
|
112
163
|
type: APPLY,
|
164
|
+
retried: 0,
|
113
165
|
[ARGS_COUNT]: 2,
|
114
166
|
[ARGS]: [
|
115
167
|
[ATOM, PLACEHOLDER],
|
@@ -121,6 +173,7 @@ export const typeCheck = (ast) => {
|
|
121
173
|
[KEYWORDS.DIVISION]: {
|
122
174
|
[STATS]: {
|
123
175
|
type: APPLY,
|
176
|
+
retried: 0,
|
124
177
|
[ARGS_COUNT]: 2,
|
125
178
|
[ARGS]: [
|
126
179
|
[ATOM, PLACEHOLDER],
|
@@ -132,6 +185,7 @@ export const typeCheck = (ast) => {
|
|
132
185
|
[KEYWORDS.REMAINDER_OF_DIVISION]: {
|
133
186
|
[STATS]: {
|
134
187
|
type: APPLY,
|
188
|
+
retried: 0,
|
135
189
|
[ARGS_COUNT]: 2,
|
136
190
|
[ARGS]: [
|
137
191
|
[ATOM, PLACEHOLDER],
|
@@ -143,6 +197,7 @@ export const typeCheck = (ast) => {
|
|
143
197
|
[KEYWORDS.BITWISE_AND]: {
|
144
198
|
[STATS]: {
|
145
199
|
type: APPLY,
|
200
|
+
retried: 0,
|
146
201
|
[ARGS_COUNT]: 2,
|
147
202
|
[ARGS]: [
|
148
203
|
[ATOM, PLACEHOLDER],
|
@@ -154,6 +209,7 @@ export const typeCheck = (ast) => {
|
|
154
209
|
[KEYWORDS.BITWISE_NOT]: {
|
155
210
|
[STATS]: {
|
156
211
|
type: APPLY,
|
212
|
+
retried: 0,
|
157
213
|
[ARGS_COUNT]: 1,
|
158
214
|
[ARGS]: [[ATOM, PLACEHOLDER]],
|
159
215
|
[RETURNS]: ATOM
|
@@ -162,6 +218,7 @@ export const typeCheck = (ast) => {
|
|
162
218
|
[KEYWORDS.BITWISE_OR]: {
|
163
219
|
[STATS]: {
|
164
220
|
type: APPLY,
|
221
|
+
retried: 0,
|
165
222
|
[ARGS_COUNT]: 2,
|
166
223
|
[ARGS]: [
|
167
224
|
[ATOM, PLACEHOLDER],
|
@@ -173,6 +230,7 @@ export const typeCheck = (ast) => {
|
|
173
230
|
[KEYWORDS.BITWISE_XOR]: {
|
174
231
|
[STATS]: {
|
175
232
|
type: APPLY,
|
233
|
+
retried: 0,
|
176
234
|
[ARGS_COUNT]: 2,
|
177
235
|
[ARGS]: [
|
178
236
|
[ATOM, PLACEHOLDER],
|
@@ -184,6 +242,7 @@ export const typeCheck = (ast) => {
|
|
184
242
|
[KEYWORDS.BITWISE_LEFT_SHIFT]: {
|
185
243
|
[STATS]: {
|
186
244
|
type: APPLY,
|
245
|
+
retried: 0,
|
187
246
|
[ARGS_COUNT]: 2,
|
188
247
|
[ARGS]: [
|
189
248
|
[ATOM, PLACEHOLDER],
|
@@ -195,6 +254,7 @@ export const typeCheck = (ast) => {
|
|
195
254
|
[KEYWORDS.BITWISE_RIGHT_SHIFT]: {
|
196
255
|
[STATS]: {
|
197
256
|
type: APPLY,
|
257
|
+
retried: 0,
|
198
258
|
[ARGS_COUNT]: 2,
|
199
259
|
[ARGS]: [
|
200
260
|
[ATOM, PLACEHOLDER],
|
@@ -206,6 +266,7 @@ export const typeCheck = (ast) => {
|
|
206
266
|
[KEYWORDS.GET_ARRAY]: {
|
207
267
|
[STATS]: {
|
208
268
|
type: APPLY,
|
269
|
+
retried: 0,
|
209
270
|
[ARGS_COUNT]: 2,
|
210
271
|
[ARGS]: [
|
211
272
|
[UNKNOWN, PLACEHOLDER],
|
@@ -217,6 +278,7 @@ export const typeCheck = (ast) => {
|
|
217
278
|
[KEYWORDS.SET_ARRAY]: {
|
218
279
|
[STATS]: {
|
219
280
|
type: APPLY,
|
281
|
+
retried: 0,
|
220
282
|
[ARGS_COUNT]: 3,
|
221
283
|
[ARGS]: [
|
222
284
|
[UNKNOWN, PLACEHOLDER],
|
@@ -229,6 +291,7 @@ export const typeCheck = (ast) => {
|
|
229
291
|
[KEYWORDS.POP_ARRAY]: {
|
230
292
|
[STATS]: {
|
231
293
|
type: APPLY,
|
294
|
+
retried: 0,
|
232
295
|
[ARGS_COUNT]: 1,
|
233
296
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
234
297
|
[RETURNS]: UNKNOWN
|
@@ -237,6 +300,7 @@ export const typeCheck = (ast) => {
|
|
237
300
|
[KEYWORDS.ARRAY_LENGTH]: {
|
238
301
|
[STATS]: {
|
239
302
|
type: APPLY,
|
303
|
+
retried: 0,
|
240
304
|
[ARGS_COUNT]: 1,
|
241
305
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
242
306
|
[RETURNS]: ATOM
|
@@ -245,6 +309,7 @@ export const typeCheck = (ast) => {
|
|
245
309
|
[KEYWORDS.IF]: {
|
246
310
|
[STATS]: {
|
247
311
|
type: APPLY,
|
312
|
+
retried: 0,
|
248
313
|
[ARGS_COUNT]: 3,
|
249
314
|
[ARGS]: [
|
250
315
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -257,6 +322,7 @@ export const typeCheck = (ast) => {
|
|
257
322
|
[KEYWORDS.NOT]: {
|
258
323
|
[STATS]: {
|
259
324
|
type: APPLY,
|
325
|
+
retried: 0,
|
260
326
|
[ARGS_COUNT]: 1,
|
261
327
|
[ARGS]: [[ATOM, PLACEHOLDER, PREDICATE]],
|
262
328
|
[RETURNS]: ATOM,
|
@@ -266,6 +332,7 @@ export const typeCheck = (ast) => {
|
|
266
332
|
[KEYWORDS.EQUAL]: {
|
267
333
|
[STATS]: {
|
268
334
|
type: APPLY,
|
335
|
+
retried: 0,
|
269
336
|
[ARGS_COUNT]: 2,
|
270
337
|
[ARGS]: [
|
271
338
|
[ATOM, PLACEHOLDER],
|
@@ -278,6 +345,7 @@ export const typeCheck = (ast) => {
|
|
278
345
|
[KEYWORDS.LESS_THAN]: {
|
279
346
|
[STATS]: {
|
280
347
|
type: APPLY,
|
348
|
+
retried: 0,
|
281
349
|
[ARGS_COUNT]: 2,
|
282
350
|
[ARGS]: [
|
283
351
|
[ATOM, PLACEHOLDER],
|
@@ -290,6 +358,7 @@ export const typeCheck = (ast) => {
|
|
290
358
|
[KEYWORDS.GREATHER_THAN]: {
|
291
359
|
[STATS]: {
|
292
360
|
type: APPLY,
|
361
|
+
retried: 0,
|
293
362
|
[ARGS_COUNT]: 2,
|
294
363
|
[ARGS]: [
|
295
364
|
[ATOM, PLACEHOLDER],
|
@@ -302,6 +371,7 @@ export const typeCheck = (ast) => {
|
|
302
371
|
[KEYWORDS.GREATHER_THAN_OR_EQUAL]: {
|
303
372
|
[STATS]: {
|
304
373
|
type: APPLY,
|
374
|
+
retried: 0,
|
305
375
|
[ARGS_COUNT]: 2,
|
306
376
|
[ARGS]: [
|
307
377
|
[ATOM, PLACEHOLDER],
|
@@ -314,6 +384,7 @@ export const typeCheck = (ast) => {
|
|
314
384
|
[KEYWORDS.LESS_THAN_OR_EQUAL]: {
|
315
385
|
[STATS]: {
|
316
386
|
type: APPLY,
|
387
|
+
retried: 0,
|
317
388
|
[ARGS_COUNT]: 2,
|
318
389
|
[ARGS]: [
|
319
390
|
[ATOM, PLACEHOLDER],
|
@@ -326,6 +397,7 @@ export const typeCheck = (ast) => {
|
|
326
397
|
[KEYWORDS.AND]: {
|
327
398
|
[STATS]: {
|
328
399
|
type: APPLY,
|
400
|
+
retried: 0,
|
329
401
|
[ARGS_COUNT]: 2,
|
330
402
|
[ARGS]: [
|
331
403
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -338,6 +410,7 @@ export const typeCheck = (ast) => {
|
|
338
410
|
[KEYWORDS.OR]: {
|
339
411
|
[STATS]: {
|
340
412
|
type: APPLY,
|
413
|
+
retried: 0,
|
341
414
|
[ARGS_COUNT]: 2,
|
342
415
|
[ARGS]: [
|
343
416
|
[ATOM, PLACEHOLDER, PREDICATE],
|
@@ -350,6 +423,7 @@ export const typeCheck = (ast) => {
|
|
350
423
|
[KEYWORDS.IS_ATOM]: {
|
351
424
|
[STATS]: {
|
352
425
|
type: APPLY,
|
426
|
+
retried: 0,
|
353
427
|
[ARGS_COUNT]: 1,
|
354
428
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
355
429
|
[RETURNS]: ATOM,
|
@@ -359,6 +433,7 @@ export const typeCheck = (ast) => {
|
|
359
433
|
[KEYWORDS.IS_LAMBDA]: {
|
360
434
|
[STATS]: {
|
361
435
|
type: APPLY,
|
436
|
+
retried: 0,
|
362
437
|
[ARGS_COUNT]: 1,
|
363
438
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
364
439
|
[RETURNS]: ATOM,
|
@@ -368,6 +443,7 @@ export const typeCheck = (ast) => {
|
|
368
443
|
[KEYWORDS.ERROR]: {
|
369
444
|
[STATS]: {
|
370
445
|
type: APPLY,
|
446
|
+
retried: 0,
|
371
447
|
[ARGS_COUNT]: 1,
|
372
448
|
[ARGS]: [[UNKNOWN, PLACEHOLDER]],
|
373
449
|
[RETURNS]: UNKNOWN
|
@@ -395,7 +471,6 @@ export const typeCheck = (ast) => {
|
|
395
471
|
const withScope = (name, scope) => {
|
396
472
|
const chain = getScopeNames(scope)
|
397
473
|
const str = `${chain.join('_')}_${name}`
|
398
|
-
// console.log({ str })
|
399
474
|
return { str, chain }
|
400
475
|
}
|
401
476
|
|
@@ -441,13 +516,78 @@ export const typeCheck = (ast) => {
|
|
441
516
|
env[name] = {
|
442
517
|
[STATS]: {
|
443
518
|
type: APPLY,
|
519
|
+
retried: 0,
|
444
520
|
[ARGS_COUNT]: n - 2,
|
445
521
|
[ARGS]: []
|
446
522
|
}
|
447
523
|
}
|
448
|
-
|
449
|
-
|
450
|
-
|
524
|
+
const checkReturnType = () => {
|
525
|
+
if (name[name.length - 1] === PREDICATE_SUFFIX) {
|
526
|
+
env[name][STATS][RETURNS] = ATOM
|
527
|
+
env[name][STATS][SUBTYPE] = PREDICATE
|
528
|
+
} else {
|
529
|
+
const body = rest.at(-1).at(-1)
|
530
|
+
const rem = hasBlock(body) ? body.at(-1) : body
|
531
|
+
const returns = isLeaf(rem) ? rem : rem[0]
|
532
|
+
if (returns[TYPE] === ATOM) {
|
533
|
+
env[name][STATS][RETURNS] = ATOM
|
534
|
+
} else {
|
535
|
+
switch (returns[VALUE]) {
|
536
|
+
case KEYWORDS.IF:
|
537
|
+
const re = rem.slice(2)
|
538
|
+
if (re[0][TYPE] === ATOM || re[1][TYPE] === ATOM)
|
539
|
+
env[name][STATS][RETURNS] = ATOM
|
540
|
+
else if (!isLeaf(re[0]) && env[re[0][0][VALUE]]) {
|
541
|
+
env[name][STATS][RETURNS] =
|
542
|
+
env[re[0][0][VALUE]][STATS][RETURNS]
|
543
|
+
} else {
|
544
|
+
if (env[re[0][VALUE]])
|
545
|
+
env[name][STATS][RETURNS] =
|
546
|
+
env[re[0][VALUE]][STATS].type
|
547
|
+
else env[name][STATS][RETURNS] = UNKNOWN
|
548
|
+
}
|
549
|
+
break
|
550
|
+
default:
|
551
|
+
if (env[returns[VALUE]]) {
|
552
|
+
if (env[returns[VALUE]][STATS].type === APPLY) {
|
553
|
+
env[name][STATS][RETURNS] =
|
554
|
+
env[returns[VALUE]][STATS][RETURNS]
|
555
|
+
// env[name][STATS][SUBTYPE] =
|
556
|
+
// env[returns[VALUE]][STATS][SUBTYPE]
|
557
|
+
} else {
|
558
|
+
env[name][STATS][RETURNS] =
|
559
|
+
env[returns[VALUE]].type
|
560
|
+
}
|
561
|
+
} else {
|
562
|
+
env[name][STATS][RETURNS] = UNKNOWN
|
563
|
+
}
|
564
|
+
break
|
565
|
+
}
|
566
|
+
}
|
567
|
+
}
|
568
|
+
// if (
|
569
|
+
// env[name][STATS][RETURNS] === UNKNOWN &&
|
570
|
+
// env[name][STATS].retried < RETRY_COUNT
|
571
|
+
// ) {
|
572
|
+
// env[name][STATS].retried += 1
|
573
|
+
// console.log(name, env[name][STATS])
|
574
|
+
// checkReturnType()
|
575
|
+
// }
|
576
|
+
}
|
577
|
+
checkReturnType()
|
578
|
+
if (
|
579
|
+
env[name][STATS][RETURNS] === UNKNOWN &&
|
580
|
+
env[name][STATS].retried < DEFINITON_RETRY_COUNT
|
581
|
+
) {
|
582
|
+
env[name][STATS].retried += 1
|
583
|
+
stack.unshift(() => {
|
584
|
+
checkReturnType()
|
585
|
+
check(rest.at(-1), env, exp)
|
586
|
+
})
|
587
|
+
check(rest.at(-1), env, exp)
|
588
|
+
} else {
|
589
|
+
check(rest.at(-1), env, exp)
|
590
|
+
}
|
451
591
|
} else {
|
452
592
|
if (!(name in env)) {
|
453
593
|
if (rest[1][TYPE] === WORD)
|
@@ -455,6 +595,7 @@ export const typeCheck = (ast) => {
|
|
455
595
|
else
|
456
596
|
env[name] = {
|
457
597
|
[STATS]: {
|
598
|
+
retried: 0,
|
458
599
|
type: isLeaf(rest.at(-1))
|
459
600
|
? rest.at(-1)[TYPE]
|
460
601
|
: env[rest.at(-1)[0]?.[VALUE]]?.[STATS]?.[
|
@@ -490,7 +631,9 @@ export const typeCheck = (ast) => {
|
|
490
631
|
.replace('.', 0)
|
491
632
|
}
|
492
633
|
for (const param of params) {
|
493
|
-
copy[param[VALUE]] = {
|
634
|
+
copy[param[VALUE]] = {
|
635
|
+
[STATS]: { type: UNKNOWN, retried: 0 }
|
636
|
+
}
|
494
637
|
if (env[copy[SCOPE_NAME]])
|
495
638
|
env[copy[SCOPE_NAME]][STATS][ARGS].push(copy[param[VALUE]])
|
496
639
|
}
|
@@ -678,10 +821,10 @@ export const typeCheck = (ast) => {
|
|
678
821
|
const retry = env[rest[i][VALUE]]
|
679
822
|
if (
|
680
823
|
retry &&
|
681
|
-
|
824
|
+
retry[STATS].retried < RETRY_COUNT &&
|
682
825
|
args[i][STATS].type === UNKNOWN
|
683
826
|
) {
|
684
|
-
retry.retried
|
827
|
+
retry[STATS].retried += 1
|
685
828
|
stack.unshift(() => check(exp, env, scope))
|
686
829
|
}
|
687
830
|
// console.log(
|
@@ -716,9 +859,10 @@ export const typeCheck = (ast) => {
|
|
716
859
|
rest[i].length &&
|
717
860
|
env[rest[i][0][VALUE]] &&
|
718
861
|
args[i][STATS].type === UNKNOWN &&
|
719
|
-
|
862
|
+
env[rest[i][0][VALUE]][STATS].retried <
|
863
|
+
RETRY_COUNT
|
720
864
|
) {
|
721
|
-
env[rest[i][0][VALUE]].retried
|
865
|
+
env[rest[i][0][VALUE]][STATS].retried += 1
|
722
866
|
if (!scope[SCOPE_NAME])
|
723
867
|
scope[SCOPE_NAME] = scope[1][VALUE]
|
724
868
|
stack.unshift(() => check(exp, env, scope))
|
package/src/macros.js
CHANGED
@@ -15,7 +15,7 @@ import {
|
|
15
15
|
VALUE,
|
16
16
|
WORD
|
17
17
|
} from './keywords.js'
|
18
|
-
import { stringifyArgs } from './utils.js'
|
18
|
+
import { hasBlock, stringifyArgs } from './utils.js'
|
19
19
|
export const SUGGAR = {
|
20
20
|
// Syntactic suggars
|
21
21
|
PIPE: '|>',
|
@@ -821,8 +821,7 @@ export const replaceStrings = (source) => {
|
|
821
821
|
)
|
822
822
|
return source
|
823
823
|
}
|
824
|
-
|
825
|
-
body[0] && body[0][TYPE] === APPLY && body[0][VALUE] === KEYWORDS.BLOCK
|
824
|
+
|
826
825
|
const iron = (scope) => {
|
827
826
|
const indecies = scope
|
828
827
|
.map((x, i) => {
|
package/src/utils.js
CHANGED
@@ -190,11 +190,16 @@ const deepShake = (tree, deps, visited = new Set(), ignored = new Set()) => {
|
|
190
190
|
deepShake(deps.get(value).value, deps, visited, ignored)
|
191
191
|
}
|
192
192
|
}
|
193
|
+
|
194
|
+
export const hasBlock = (body) =>
|
195
|
+
body[0] && body[0][TYPE] === APPLY && body[0][VALUE] === KEYWORDS.BLOCK
|
196
|
+
|
193
197
|
const extractDeps = (visited, deps) =>
|
194
198
|
[...visited]
|
195
199
|
.map((x) => deps.get(x))
|
196
200
|
.sort((a, b) => a.index - b.index)
|
197
201
|
.map((x) => x.value)
|
202
|
+
|
198
203
|
const toIgnore = (ast) => {
|
199
204
|
const out = []
|
200
205
|
const dfs = (exp) => {
|