fez-lisp 1.2.58 → 1.2.60
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/compiler.js +4 -1
- package/src/interpreter.js +2 -2
- package/src/utils.js +42 -2
package/package.json
CHANGED
package/src/compiler.js
CHANGED
@@ -53,6 +53,8 @@ const keywordToHelper = (name) => {
|
|
53
53
|
return '__add'
|
54
54
|
case KEYWORDS.MULTIPLICATION:
|
55
55
|
return '__mult'
|
56
|
+
case KEYWORDS.DIVISION:
|
57
|
+
return '__div'
|
56
58
|
case KEYWORDS.SUBTRACTION:
|
57
59
|
return '__sub'
|
58
60
|
case KEYWORDS.GREATHER_THAN:
|
@@ -83,8 +85,9 @@ const lispToJavaScriptVariableName = (name) =>
|
|
83
85
|
)
|
84
86
|
const Helpers = {
|
85
87
|
__add: `__add=(...numbers)=>{return numbers.reduce((a,b)=>a+b,0)}`,
|
86
|
-
__sub: `__sub=(...numbers)=>{return numbers.reduce((a,b)=>a-b,0)}`,
|
88
|
+
__sub: `__sub=(...numbers)=>{return numbers.length===1?-numbers[0]:numbers.reduce((a,b)=>a-b,0)}`,
|
87
89
|
__mult: `__mult=(...numbers)=>{return numbers.reduce((a,b)=>a*b,1)}`,
|
90
|
+
__div: `__div=(...numbers)=>{return numbers.length===1?1/numbers[0]:numbers.reduce((a, b)=>a/b)}`,
|
88
91
|
__gteq: '__gteq=(a,b)=>+(a>=b)',
|
89
92
|
__gt: '__gt=(a,b)=>+(a>b)',
|
90
93
|
__eq: '__eq=(a,b)=>+(a===b)',
|
package/src/interpreter.js
CHANGED
@@ -11,7 +11,8 @@ export const keywords = {
|
|
11
11
|
KEYWORDS.REMAINDER_OF_DIVISION
|
12
12
|
} ${stringifyArgs(args)})`
|
13
13
|
)
|
14
|
-
const
|
14
|
+
const a = evaluate(args[0], env)
|
15
|
+
const b = evaluate(args[1], env)
|
15
16
|
if (typeof a !== 'number' || typeof b !== 'number')
|
16
17
|
throw new TypeError(
|
17
18
|
`Not all arguments of (${KEYWORDS.REMAINDER_OF_DIVISION}) are (${
|
@@ -501,7 +502,6 @@ export const keywords = {
|
|
501
502
|
})
|
502
503
|
return env[name]
|
503
504
|
},
|
504
|
-
[KEYWORDS.NUMBER_TYPE]: () => 0,
|
505
505
|
[KEYWORDS.BITWISE_AND]: (args, env) => {
|
506
506
|
if (args.length < 2)
|
507
507
|
throw new RangeError(
|
package/src/utils.js
CHANGED
@@ -381,6 +381,38 @@ export const deSuggar = (ast) => {
|
|
381
381
|
if (first != undefined) {
|
382
382
|
switch (first[TYPE]) {
|
383
383
|
case WORD:
|
384
|
+
{
|
385
|
+
switch (first[VALUE]) {
|
386
|
+
case SUGGAR.POWER:
|
387
|
+
throw new TypeError(
|
388
|
+
`(${
|
389
|
+
SUGGAR.POWER
|
390
|
+
}), can't be used as a word (hint use math:power instead) (${
|
391
|
+
SUGGAR.POWER
|
392
|
+
} ${stringifyArgs(rest)})`
|
393
|
+
)
|
394
|
+
break
|
395
|
+
case SUGGAR.INTEGER_DEVISION:
|
396
|
+
exp.length = 0
|
397
|
+
exp.push(
|
398
|
+
...[
|
399
|
+
[APPLY, KEYWORDS.ANONYMOUS_FUNCTION],
|
400
|
+
[WORD, 'a'],
|
401
|
+
[WORD, 'b'],
|
402
|
+
[
|
403
|
+
[APPLY, KEYWORDS.BITWISE_OR],
|
404
|
+
[
|
405
|
+
[APPLY, KEYWORDS.DIVISION],
|
406
|
+
[WORD, 'a'],
|
407
|
+
[WORD, 'b']
|
408
|
+
],
|
409
|
+
[ATOM, 0]
|
410
|
+
]
|
411
|
+
]
|
412
|
+
)
|
413
|
+
break
|
414
|
+
}
|
415
|
+
}
|
384
416
|
break
|
385
417
|
case ATOM:
|
386
418
|
break
|
@@ -478,7 +510,15 @@ export const deSuggar = (ast) => {
|
|
478
510
|
break
|
479
511
|
case SUGGAR.INTEGER_DEVISION:
|
480
512
|
{
|
481
|
-
if (rest.
|
513
|
+
if (rest.length !== 2)
|
514
|
+
throw new RangeError(
|
515
|
+
`Invalid number of arguments for (${
|
516
|
+
SUGGAR.INTEGER_DEVISION
|
517
|
+
}), expected (= 2) but got ${rest.length} (${
|
518
|
+
SUGGAR.INTEGER_DEVISION
|
519
|
+
} ${stringifyArgs(rest)})`
|
520
|
+
)
|
521
|
+
else if (rest.some((x) => x[TYPE] === APPLY))
|
482
522
|
throw new TypeError(
|
483
523
|
`Arguments of (${
|
484
524
|
SUGGAR.INTEGER_DEVISION
|
@@ -492,7 +532,7 @@ export const deSuggar = (ast) => {
|
|
492
532
|
exp.length = 1
|
493
533
|
exp[0] = [APPLY, KEYWORDS.BITWISE_OR]
|
494
534
|
exp.push([[APPLY, KEYWORDS.DIVISION], ...rest])
|
495
|
-
exp.push([ATOM,
|
535
|
+
exp.push([ATOM, 0])
|
496
536
|
}
|
497
537
|
}
|
498
538
|
break
|