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/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "fez-lisp",
3
3
  "description": "Lisp interpreted & compiled to JavaScript",
4
4
  "author": "AT290690",
5
- "version": "1.5.21",
5
+ "version": "1.5.22",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
package/src/check.js CHANGED
@@ -117,7 +117,7 @@ export const typeCheck = (ast) => {
117
117
  [KEYWORDS.SUBTRACTION]: {
118
118
  [STATS]: {
119
119
  type: APPLY,
120
- [ARGS_COUNT]: new Set([1, 2]),
120
+ [ARGS_COUNT]: new Set([2]),
121
121
  [ARGS]: [
122
122
  [ATOM, PLACEHOLDER],
123
123
  [ATOM, PLACEHOLDER]
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=function(a,b){return arguments.length===1?-a:a-b}`,
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.length === 1
230
- ? `(-${comp(tail[0], Drill)});`
231
- : `(${parse(tail, Drill)
232
- // Add space so it doesn't consider it 2--1 but 2- -1
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:
@@ -78,11 +78,11 @@ export const keywords = {
78
78
  return a * b
79
79
  },
80
80
  [KEYWORDS.SUBTRACTION]: (args, env) => {
81
- if (args.length !== 1 && args.length !== 2)
81
+ if (args.length !== 2)
82
82
  throw new RangeError(
83
83
  `Invalid number of arguments for (${
84
84
  KEYWORDS.SUBTRACTION
85
- }), expected (or (= 1) (= 2)) but got ${args.length}\n\n(${
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: