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/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.2.9",
5
+ "version": "1.2.11",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
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(Boolean)
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.length
250
- ? `(${parseArgs(Arguments, Drill, token)});`
251
- : `(1);`
249
+ return `(${parseArgs(Arguments, Drill, token)});`
252
250
  case KEYWORDS.DIVISION:
253
- return Arguments.length
254
- ? Arguments.length === 1
255
- ? `(1/${compile(Arguments[0], Drill)});`
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.length
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(Boolean)
314
+ .filter((x) => x !== undefined)
321
315
  .join('\n')
322
316
  let program = ''
323
317
  for (let i = 0; i < raw.length; ++i) {
@@ -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)