fez-lisp 1.2.9 → 1.2.11
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/compiler.js +7 -13
- package/src/interpreter.js +13 -3
package/package.json
CHANGED
package/src/compiler.js
CHANGED
@@ -144,7 +144,7 @@ const compile = (tree, Drill) => {
|
|
144
144
|
return `(${Arguments.map((x) =>
|
145
145
|
(compile(x, Drill) ?? '').toString().trim()
|
146
146
|
)
|
147
|
-
.filter(
|
147
|
+
.filter((x) => x !== undefined)
|
148
148
|
.join(',')});`
|
149
149
|
} else {
|
150
150
|
const res = compile(Arguments[0], Drill)
|
@@ -246,19 +246,13 @@ const compile = (tree, Drill) => {
|
|
246
246
|
.map((x) => (typeof x === 'number' && x < 0 ? ` ${x}` : x))
|
247
247
|
.join(token)});`
|
248
248
|
case KEYWORDS.MULTIPLICATION:
|
249
|
-
return Arguments
|
250
|
-
? `(${parseArgs(Arguments, Drill, token)});`
|
251
|
-
: `(1);`
|
249
|
+
return `(${parseArgs(Arguments, Drill, token)});`
|
252
250
|
case KEYWORDS.DIVISION:
|
253
|
-
return Arguments.length
|
254
|
-
? Arguments
|
255
|
-
|
256
|
-
: `(${parseArgs(Arguments, Drill, token)});`
|
257
|
-
: `(0);`
|
251
|
+
return Arguments.length === 1
|
252
|
+
? `(1/${compile(Arguments[0], Drill)});`
|
253
|
+
: `(${parseArgs(Arguments, Drill, token)});`
|
258
254
|
case KEYWORDS.ADDITION:
|
259
|
-
return Arguments
|
260
|
-
? `(${parseArgs(Arguments, Drill, token)});`
|
261
|
-
: `(0);`
|
255
|
+
return `(${parseArgs(Arguments, Drill, token)});`
|
262
256
|
case KEYWORDS.BITWISE_AND:
|
263
257
|
case KEYWORDS.BITWISE_OR:
|
264
258
|
case KEYWORDS.BITWISE_XOR:
|
@@ -317,7 +311,7 @@ export const comp = (ast) => {
|
|
317
311
|
const Drill = { Variables: new Set(), Helpers: new Set() }
|
318
312
|
const raw = ast
|
319
313
|
.map((tree) => compile(tree, Drill))
|
320
|
-
.filter(
|
314
|
+
.filter((x) => x !== undefined)
|
321
315
|
.join('\n')
|
322
316
|
let program = ''
|
323
317
|
for (let i = 0; i < raw.length; ++i) {
|
package/src/interpreter.js
CHANGED
@@ -41,7 +41,6 @@ const keywords = {
|
|
41
41
|
return a % b
|
42
42
|
},
|
43
43
|
[KEYWORDS.DIVISION]: (args, env) => {
|
44
|
-
if (!args.length) return 0
|
45
44
|
if (args.length === 1) {
|
46
45
|
const number = evaluate(args[0], env)
|
47
46
|
if (typeof number !== 'number')
|
@@ -103,7 +102,6 @@ const keywords = {
|
|
103
102
|
return +(typeof evaluate(args[0], env) === 'number')
|
104
103
|
},
|
105
104
|
[KEYWORDS.ADDITION]: (args, env) => {
|
106
|
-
if (!args.length) return 0 // identity
|
107
105
|
if (args.length < 2)
|
108
106
|
throw new RangeError(
|
109
107
|
`Invalid number of arguments for (${
|
@@ -122,7 +120,6 @@ const keywords = {
|
|
122
120
|
return operands.reduce((a, b) => a + b)
|
123
121
|
},
|
124
122
|
[KEYWORDS.MULTIPLICATION]: (args, env) => {
|
125
|
-
if (!args.length) return 1 // identity
|
126
123
|
if (args.length < 2)
|
127
124
|
throw new RangeError(
|
128
125
|
`Invalid number of arguments for (${KEYWORDS.MULTIPLICATION}), expected (or (> 1) (= 0)) but got ${args.length}.`
|
@@ -885,6 +882,19 @@ export const deSuggar = (ast) => {
|
|
885
882
|
deSuggar(exp)
|
886
883
|
}
|
887
884
|
break
|
885
|
+
case KEYWORDS.MULTIPLICATION:
|
886
|
+
if (!rest.length) {
|
887
|
+
exp[0][0] = 2
|
888
|
+
exp[0][1] = 1
|
889
|
+
}
|
890
|
+
break
|
891
|
+
case KEYWORDS.ADDITION:
|
892
|
+
case KEYWORDS.DIVISION:
|
893
|
+
if (!rest.length) {
|
894
|
+
exp[0][0] = 2
|
895
|
+
exp[0][1] = 0
|
896
|
+
}
|
897
|
+
break
|
888
898
|
case KEYWORDS.UNLESS:
|
889
899
|
{
|
890
900
|
if (rest.length > 3 || rest.length < 2)
|