fez-lisp 1.5.3 → 1.5.5
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/README.md +1 -1
- package/lib/baked/std.js +1 -1
- package/package.json +1 -1
- package/src/compiler.js +0 -52
- package/src/interpreter.js +1 -34
- package/src/keywords.js +0 -1
package/package.json
CHANGED
package/src/compiler.js
CHANGED
@@ -7,7 +7,6 @@ import {
|
|
7
7
|
VALUE,
|
8
8
|
WORD
|
9
9
|
} from './keywords.js'
|
10
|
-
import { OPTIMIZATIONS } from './macros.js'
|
11
10
|
import { leaf, isLeaf, AST } from './parser.js'
|
12
11
|
const deepRename = (name, newName, tree) => {
|
13
12
|
if (!isLeaf(tree))
|
@@ -70,8 +69,6 @@ const keywordToHelper = (name) => {
|
|
70
69
|
return '__bit_lshift'
|
71
70
|
case KEYWORDS.BITWISE_RIGHT_SHIFT:
|
72
71
|
return '__bit_rshift'
|
73
|
-
case KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT:
|
74
|
-
return '__bit_urshift'
|
75
72
|
default:
|
76
73
|
return name
|
77
74
|
}
|
@@ -104,7 +101,6 @@ const Helpers = {
|
|
104
101
|
__bit_not: '__bit_not=(a)=>~a',
|
105
102
|
__bit_lshift: '__bit_lshift=(a,b)=>a<<b',
|
106
103
|
__bit_rshift: '__bit_rshift=(a,b)=>a>>b',
|
107
|
-
__bit_urshift: '__bit_urshift=(a,b)=>a>>>b',
|
108
104
|
array: 'array=(...args)=>args',
|
109
105
|
not: 'not=(a)=>+!a',
|
110
106
|
and: `and=(a, b)=>+(a&&b)`,
|
@@ -177,50 +173,6 @@ const comp = (tree, Drill) => {
|
|
177
173
|
}
|
178
174
|
case KEYWORDS.DEFINE_VARIABLE: {
|
179
175
|
const n = tail[0][VALUE]
|
180
|
-
// const prefix = n.split(':')[0]
|
181
|
-
// if (prefix === OPTIMIZATIONS.RECURSION) {
|
182
|
-
// const name = lispToJavaScriptVariableName(n)
|
183
|
-
// const newName = `${OPTIMIZATIONS.RECURSION}_${performance
|
184
|
-
// .now()
|
185
|
-
// .toString()
|
186
|
-
// .replace('.', 7)}`
|
187
|
-
// Drill.Variables.add(name)
|
188
|
-
// Drill.Variables.add(newName)
|
189
|
-
// Drill.Helpers.add('__tco')
|
190
|
-
// const functionArgs = tail.at(-1).slice(1)
|
191
|
-
// const body = functionArgs.pop()
|
192
|
-
// const FunctionDrill = { Variables: new Set(), Helpers: Drill.Helpers }
|
193
|
-
// deepRename(n, `()=>${newName}`, body)
|
194
|
-
// const evaluatedBody = comp(body, FunctionDrill)
|
195
|
-
// const vars = FunctionDrill.Variables.size
|
196
|
-
// ? `var ${[...FunctionDrill.Variables].join(',')};`
|
197
|
-
// : ''
|
198
|
-
// return `(${name}=(__tco(${newName}=(${parseArgs(
|
199
|
-
// functionArgs,
|
200
|
-
// Drill
|
201
|
-
// )})=>{${vars}return ${evaluatedBody.toString().trim()}})));`
|
202
|
-
// } else
|
203
|
-
|
204
|
-
// if (prefix === OPTIMIZATIONS.CACHE) {
|
205
|
-
// // memoization here
|
206
|
-
// const name = lispToJavaScriptVariableName(n)
|
207
|
-
// const newName = name.substring(OPTIMIZATIONS.CACHE.length + 1)
|
208
|
-
// Drill.Variables.add(name)
|
209
|
-
// const functionArgs = tail.at(-1).slice(1)
|
210
|
-
// const body = functionArgs.pop()
|
211
|
-
// deepRename(n, newName, body)
|
212
|
-
// const FunctionDrill = { Variables: new Set(), Helpers: Drill.Helpers }
|
213
|
-
// const evaluatedBody = comp(body, FunctionDrill)
|
214
|
-
// const vars = FunctionDrill.Variables.size
|
215
|
-
// ? `var ${[...FunctionDrill.Variables].join(',')};`
|
216
|
-
// : ''
|
217
|
-
// return `(${name}=function(){var __${newName}_map = new Map();var ${newName}=(function(${parseArgs(
|
218
|
-
// functionArgs,
|
219
|
-
// Drill
|
220
|
-
// )}){${vars};var __key=[...arguments].join(',');if(__${newName}_map.has(__key)){return __${newName}_map.get(__key)}else{var __res = ${evaluatedBody
|
221
|
-
// .toString()
|
222
|
-
// .trim()};__${newName}_map.set(__key, __res);return __res}});return ${newName}(...arguments)});`
|
223
|
-
// }
|
224
176
|
const name = lispToJavaScriptVariableName(n)
|
225
177
|
Drill.Variables.add(name)
|
226
178
|
return `${name}=${comp(tail[1], Drill)};`
|
@@ -289,12 +241,8 @@ const comp = (tree, Drill) => {
|
|
289
241
|
case KEYWORDS.BITWISE_XOR:
|
290
242
|
case KEYWORDS.BITWISE_LEFT_SHIFT:
|
291
243
|
case KEYWORDS.BITWISE_RIGHT_SHIFT:
|
292
|
-
case KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT:
|
293
|
-
return `(${parseArgs(tail, Drill, token)});`
|
294
244
|
case KEYWORDS.REMAINDER_OF_DIVISION:
|
295
245
|
return `(${comp(tail[0], Drill)}%${comp(tail[1], Drill)});`
|
296
|
-
case KEYWORDS.BIT_TYPE:
|
297
|
-
return `(${comp(tail[0], Drill)}>>>0).toString(2)`
|
298
246
|
case KEYWORDS.BITWISE_NOT:
|
299
247
|
return `~(${comp(tail[0], Drill)})`
|
300
248
|
case KEYWORDS.NOT:
|
package/src/interpreter.js
CHANGED
@@ -339,39 +339,6 @@ export const keywords = {
|
|
339
339
|
)
|
340
340
|
return a >> b
|
341
341
|
},
|
342
|
-
[KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT]: (args, env) => {
|
343
|
-
if (args.length !== 2)
|
344
|
-
throw new RangeError(
|
345
|
-
`Invalid number of arguments to (${
|
346
|
-
KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT
|
347
|
-
}) (= 2 required)\n\n(${
|
348
|
-
KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT
|
349
|
-
} ${stringifyArgs(args)})`
|
350
|
-
)
|
351
|
-
const a = evaluate(args[0], env)
|
352
|
-
if (typeof a !== 'number')
|
353
|
-
throw new TypeError(
|
354
|
-
`First arguments of (${
|
355
|
-
KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT
|
356
|
-
}) must be a (${RUNTIME_TYPES.NUMBER}) but ${LISP.source(
|
357
|
-
args[0]
|
358
|
-
)} is not\n\n(${KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT} ${stringifyArgs(
|
359
|
-
args
|
360
|
-
)})`
|
361
|
-
)
|
362
|
-
const b = evaluate(args[1], env)
|
363
|
-
if (typeof b !== 'number')
|
364
|
-
throw new TypeError(
|
365
|
-
`Second arguments of (${
|
366
|
-
KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT
|
367
|
-
}) must be a (${RUNTIME_TYPES.NUMBER}) but ${LISP.source(
|
368
|
-
args[1]
|
369
|
-
)} is not\n\n(${KEYWORDS.BITWISE_UNSIGNED_RIGHT_SHIFT} ${stringifyArgs(
|
370
|
-
args
|
371
|
-
)})`
|
372
|
-
)
|
373
|
-
return a >>> b
|
374
|
-
},
|
375
342
|
[KEYWORDS.CREATE_ARRAY]: (args, env) => {
|
376
343
|
return args.length ? args.map((x) => evaluate(x, env)) : []
|
377
344
|
},
|
@@ -400,7 +367,7 @@ export const keywords = {
|
|
400
367
|
throw new TypeError(
|
401
368
|
`Second argument of (${
|
402
369
|
KEYWORDS.GET_ARRAY
|
403
|
-
}) must be a positive (
|
370
|
+
}) must be a positive (interger ${
|
404
371
|
RUNTIME_TYPES.NUMBER
|
405
372
|
}) (= i ${index})\n\n(${KEYWORDS.GET_ARRAY} ${stringifyArgs(args)})`
|
406
373
|
)
|