fez-lisp 1.5.21 → 1.5.22
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 +1 -1
- package/src/compiler.js +5 -7
- package/src/interpreter.js +2 -3
- package/src/macros.js +15 -0
package/package.json
CHANGED
package/src/check.js
CHANGED
package/src/compiler.js
CHANGED
@@ -88,7 +88,7 @@ const lispToJavaScriptVariableName = (name) =>
|
|
88
88
|
)
|
89
89
|
const Helpers = {
|
90
90
|
__add: `__add=(a,b)=>{return a+b}`,
|
91
|
-
__sub: `__sub=
|
91
|
+
__sub: `__sub=(a,b)=>{return a-b}`,
|
92
92
|
__mult: `__mult=(a,b)=>{return a*b}`,
|
93
93
|
__div: `__div=(a,b)=>{return a/b}`,
|
94
94
|
__gteq: '__gteq=(a,b)=>+(a>=b)',
|
@@ -226,12 +226,10 @@ const comp = (tree, Drill) => {
|
|
226
226
|
case KEYWORDS.LESS_THAN:
|
227
227
|
return `+(${parseArgs(tail, Drill, token)});`
|
228
228
|
case KEYWORDS.SUBTRACTION:
|
229
|
-
return tail
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
.map((x) => (typeof x === 'number' && x < 0 ? ` ${x}` : x))
|
234
|
-
.join(token)});`
|
229
|
+
return `(${parse(tail, Drill)
|
230
|
+
// Add space so it doesn't consider it 2--1 but 2- -1
|
231
|
+
.map((x) => (typeof x === 'number' && x < 0 ? ` ${x}` : x))
|
232
|
+
.join(token)});`
|
235
233
|
case KEYWORDS.MULTIPLICATION:
|
236
234
|
return `(${parseArgs(tail, Drill, token)});`
|
237
235
|
case KEYWORDS.DIVISION:
|
package/src/interpreter.js
CHANGED
@@ -78,11 +78,11 @@ export const keywords = {
|
|
78
78
|
return a * b
|
79
79
|
},
|
80
80
|
[KEYWORDS.SUBTRACTION]: (args, env) => {
|
81
|
-
if (args.length !==
|
81
|
+
if (args.length !== 2)
|
82
82
|
throw new RangeError(
|
83
83
|
`Invalid number of arguments for (${
|
84
84
|
KEYWORDS.SUBTRACTION
|
85
|
-
}), expected (
|
85
|
+
}), expected (= 2) but got ${args.length}\n\n(${
|
86
86
|
KEYWORDS.SUBTRACTION
|
87
87
|
} ${stringifyArgs(args)})`
|
88
88
|
)
|
@@ -95,7 +95,6 @@ export const keywords = {
|
|
95
95
|
KEYWORDS.SUBTRACTION
|
96
96
|
} ${stringifyArgs(args)})`
|
97
97
|
)
|
98
|
-
if (args.length === 1) return -a
|
99
98
|
const b = evaluate(args[1], env)
|
100
99
|
if (typeof b !== 'number')
|
101
100
|
throw new TypeError(
|
package/src/macros.js
CHANGED
@@ -286,6 +286,21 @@ export const deSuggarAst = (ast, scope) => {
|
|
286
286
|
}
|
287
287
|
}
|
288
288
|
deSuggarAst(exp, scope)
|
289
|
+
} else {
|
290
|
+
if (rest.length !== 1 && rest.length !== 2)
|
291
|
+
throw new RangeError(
|
292
|
+
`Invalid number of arguments for (${
|
293
|
+
KEYWORDS.SUBTRACTION
|
294
|
+
}), expected (or (= 1) (= 2)) but got ${
|
295
|
+
rest.length
|
296
|
+
}\n\n(${KEYWORDS.SUBTRACTION} ${stringifyArgs(rest)})`
|
297
|
+
)
|
298
|
+
|
299
|
+
if (rest.length === 1) {
|
300
|
+
exp[0][VALUE] = KEYWORDS.MULTIPLICATION
|
301
|
+
exp.push([ATOM, -1])
|
302
|
+
deSuggarAst(exp, scope)
|
303
|
+
}
|
289
304
|
}
|
290
305
|
break
|
291
306
|
case KEYWORDS.DIVISION:
|