fez-lisp 1.3.14 → 1.3.16
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/macros.js +95 -52
package/package.json
CHANGED
package/src/macros.js
CHANGED
@@ -59,6 +59,8 @@ export const deSuggarAst = (ast, scope) => {
|
|
59
59
|
exp.length = 0
|
60
60
|
exp.push(...INTEGER_DIVISION)
|
61
61
|
break
|
62
|
+
default:
|
63
|
+
break
|
62
64
|
}
|
63
65
|
}
|
64
66
|
break
|
@@ -369,70 +371,111 @@ export const deSuggarAst = (ast, scope) => {
|
|
369
371
|
break
|
370
372
|
case KEYWORDS.DEFINE_VARIABLE:
|
371
373
|
{
|
372
|
-
if (!isLeaf(exp[VALUE])) {
|
374
|
+
if (!isLeaf(exp[VALUE]) && exp[VALUE][0][TYPE] === APPLY) {
|
373
375
|
const left = exp[VALUE]
|
374
376
|
const right = exp.at(-1)
|
375
|
-
// const key = AST.stringify(exp)
|
376
|
-
// const index = scope.findIndex(
|
377
|
-
// (x) => AST.stringify(x) === key
|
378
|
-
// )
|
379
377
|
const lastLeft = left.pop()
|
380
378
|
const isSlicing = lastLeft[VALUE] !== PLACEHOLDER
|
381
|
-
const vars = left
|
379
|
+
const vars = left
|
382
380
|
const indexes = vars
|
383
381
|
.map((x, i) => (x[VALUE] === PLACEHOLDER ? -1 : i))
|
384
382
|
.filter((x) => x !== -1)
|
385
383
|
let newScope
|
384
|
+
vars[0][TYPE] = WORD
|
386
385
|
exp.length = 0
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
386
|
+
if (
|
387
|
+
!isLeaf(right) &&
|
388
|
+
right[0][TYPE] === APPLY &&
|
389
|
+
right[0][VALUE] === KEYWORDS.CREATE_ARRAY
|
390
|
+
) {
|
391
|
+
const values = right.slice(1)
|
392
|
+
newScope = indexes.map((i) => [
|
393
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
394
|
+
vars[i],
|
395
|
+
values[i]
|
396
|
+
])
|
397
|
+
if (isSlicing)
|
398
|
+
newScope.push([
|
399
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
400
|
+
lastLeft,
|
401
|
+
[
|
402
|
+
[APPLY, KEYWORDS.CREATE_ARRAY],
|
403
|
+
...values.slice(indexes.at(-1) + 1)
|
404
|
+
]
|
405
|
+
])
|
406
|
+
} else {
|
407
|
+
newScope = indexes.map((i) => [
|
408
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
409
|
+
vars[i],
|
410
|
+
[[APPLY, KEYWORDS.GET_ARRAY], right, [ATOM, i]]
|
411
|
+
])
|
412
|
+
if (isSlicing)
|
413
|
+
newScope.push([
|
414
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
415
|
+
lastLeft,
|
416
|
+
[
|
417
|
+
[APPLY, KEYWORDS.CALL_FUNCTION],
|
418
|
+
SLICE,
|
419
|
+
right,
|
420
|
+
[ATOM, indexes.at(-1) + 1]
|
421
|
+
]
|
422
|
+
])
|
423
|
+
}
|
424
|
+
exp.iron = true
|
425
|
+
exp.push(newScope)
|
426
|
+
deSuggarAst(exp)
|
427
|
+
}
|
428
|
+
}
|
429
|
+
break
|
430
|
+
case KEYWORDS.ANONYMOUS_FUNCTION:
|
431
|
+
{
|
432
|
+
const body = exp.at(-1)
|
433
|
+
const block =
|
434
|
+
body[0][TYPE] === APPLY && body[0][VALUE] === KEYWORDS.BLOCK
|
435
|
+
? body[1]
|
436
|
+
: body
|
437
|
+
const newBlock = [[APPLY, KEYWORDS.BLOCK]]
|
438
|
+
for (let i = 1; i < exp.length - 1; ++i) {
|
439
|
+
if (!isLeaf(exp[i]) && exp[i][0][TYPE] === APPLY) {
|
440
|
+
const left = exp[i]
|
441
|
+
const right = [WORD, `_arg${i}`]
|
442
|
+
left[0][TYPE] = WORD
|
443
|
+
const lastLeft = left.pop()
|
444
|
+
const isSlicing = lastLeft[VALUE] !== PLACEHOLDER
|
445
|
+
const vars = left
|
446
|
+
const indexes = vars
|
447
|
+
.map((x, i) => (x[VALUE] === PLACEHOLDER ? -1 : i))
|
448
|
+
.filter((x) => x !== -1)
|
449
|
+
|
450
|
+
{
|
451
|
+
// const tempBlcok = [...block[VALUE]]
|
452
|
+
newBlock.push(
|
453
|
+
...indexes.map((i) => [
|
454
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
455
|
+
vars[i],
|
456
|
+
[[APPLY, KEYWORDS.GET_ARRAY], right, [ATOM, i]]
|
457
|
+
])
|
458
|
+
)
|
459
|
+
if (isSlicing)
|
460
|
+
newBlock.push([
|
461
|
+
[APPLY, KEYWORDS.DEFINE_VARIABLE],
|
462
|
+
lastLeft,
|
463
|
+
[
|
464
|
+
[APPLY, KEYWORDS.CALL_FUNCTION],
|
465
|
+
SLICE,
|
466
|
+
right,
|
467
|
+
[ATOM, indexes.at(-1) + 1]
|
468
|
+
]
|
469
|
+
])
|
470
|
+
exp[i] = right
|
471
|
+
exp[i].length = 2
|
472
|
+
}
|
473
|
+
exp[exp.length - 1] = newBlock.concat([block])
|
474
|
+
deSuggarAst(block)
|
433
475
|
}
|
434
476
|
}
|
435
477
|
}
|
478
|
+
|
436
479
|
break
|
437
480
|
}
|
438
481
|
prev = first
|