fez-lisp 1.0.2 → 1.0.3

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": "Immutable Lisp interpreted & compiled to JavaScript",
4
4
  "author": "AT290690",
5
- "version": "1.0.2",
5
+ "version": "1.0.3",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
package/src/utils.js CHANGED
@@ -132,7 +132,7 @@ export const treeShake = (ast, libs) => {
132
132
  const deps = libs.reduce((a, x) => a.add(x.at(1)[VALUE]), new Set())
133
133
  const visited = new Set()
134
134
  const dfs = (tree) => {
135
- if (Array.isArray(tree)) tree.forEach((a) => dfs(a))
135
+ if (Array.isArray(tree)) tree.forEach(dfs)
136
136
  else if (
137
137
  (tree[TYPE] === APPLY || tree[TYPE] === WORD) &&
138
138
  deps.has(tree[VALUE]) &&
package/cli/index.js DELETED
@@ -1,162 +0,0 @@
1
- import { readFileSync, writeFileSync } from 'fs'
2
- import { start } from 'repl'
3
- import { run } from '../src/interpreter.js'
4
- import { parse } from '../src/parser.js'
5
- import STD from '../lib/baked/std.js'
6
-
7
- // import wabt from 'wabt'
8
- import {
9
- handleUnbalancedParens,
10
- handleUnbalancedQuotes,
11
- logError,
12
- removeNoCode,
13
- treeShake,
14
- } from '../src/utils.js'
15
- import { comp } from '../src/compiler.js'
16
- export default async () => {
17
- const [, , ...argv] = process.argv
18
- let file = '',
19
- path = '',
20
- env = {},
21
- destination = undefined
22
- while (argv.length) {
23
- const flag = argv.shift()?.toLowerCase()
24
- const value = argv.shift()
25
- if (!flag) throw new Error('No flag provided')
26
- switch (flag) {
27
- case '-m':
28
- writeFileSync(path, removeNoCode(file), 'utf-8')
29
- break
30
- case '-d':
31
- destination = value
32
- break
33
- case '-s':
34
- path = value
35
- file = readFileSync(value, 'utf-8')
36
- break
37
- case '-r':
38
- try {
39
- run(
40
- parse(
41
- handleUnbalancedQuotes(handleUnbalancedParens(removeNoCode(file)))
42
- ),
43
- env
44
- )
45
- } catch (err) {
46
- logError('Error')
47
- logError(err.message)
48
- }
49
- break
50
- case '-c':
51
- {
52
- const parsed = parse(
53
- handleUnbalancedQuotes(handleUnbalancedParens(removeNoCode(file)))
54
- )
55
- const tree = [...treeShake(parsed, STD), ...parsed]
56
- if (Array.isArray(tree)) {
57
- const { top, program } = comp(tree)
58
- const JavaScript = `${top}${program}`
59
- writeFileSync(
60
- destination ?? './playground/dist/main.js',
61
- JavaScript
62
- )
63
- }
64
- }
65
- break
66
- case '-r':
67
- try {
68
- const parsed = parse(
69
- handleUnbalancedQuotes(handleUnbalancedParens(removeNoCode(file)))
70
- )
71
- run([...treeShake(parsed, STD), ...parsed], env)
72
- } catch (err) {
73
- logError('Error')
74
- logError(err.message)
75
- }
76
- break
77
- case '-repl':
78
- {
79
- let source = ''
80
- const inpColor = '\x1b[32m'
81
- const outColor = '\x1b[33m'
82
- const errColor = '\x1b[31m'
83
- console.log(inpColor)
84
- start({
85
- prompt: '',
86
- eval: (input) => {
87
- input = input.trim()
88
- if (!input || input[0] === ';') return
89
- try {
90
- let out = `${source}\n${file}\n(do ${input})`
91
- const parsed = parse(
92
- handleUnbalancedQuotes(
93
- handleUnbalancedParens(removeNoCode(out))
94
- )
95
- )
96
- const result = run([...treeShake(parsed, STD), ...parsed], env)
97
- if (typeof result === 'function') {
98
- console.log(inpColor, `λ`)
99
- } else if (Array.isArray(result)) {
100
- console.log(
101
- outColor,
102
- JSON.stringify(result, (_, value) => {
103
- switch (typeof value) {
104
- case 'bigint':
105
- return Number(value)
106
- case 'function':
107
- return 'λ'
108
- case 'undefined':
109
- case 'symbol':
110
- return 0
111
- case 'boolean':
112
- return +value
113
- default:
114
- return value
115
- }
116
- })
117
- .replace(new RegExp(/\[/g), '(')
118
- .replace(new RegExp(/\]/g), ')')
119
- .replace(new RegExp(/\,/g), ' ')
120
- .replace(new RegExp(/"λ"/g), 'λ'),
121
- inpColor
122
- )
123
- } else if (typeof result === 'string') {
124
- console.log(outColor, `"${result}"`, inpColor)
125
- } else if (result == undefined) {
126
- console.log(errColor, '(void)', inpColor)
127
- } else {
128
- console.log(outColor, result, inpColor)
129
- }
130
- source = out
131
- } catch (err) {
132
- console.log(errColor, err.message, inpColor)
133
- }
134
- },
135
- })
136
- }
137
- break
138
- case '-help':
139
- case '-h':
140
- default:
141
- console.log(`
142
- -------------------------------------
143
- -help
144
- -------------------------------------
145
- -s prepare a file
146
- -------------------------------------
147
- -d file to compile js
148
- -------------------------------------
149
- -c compile to js
150
- -------------------------------------
151
- -r interpret & run
152
- -------------------------------------
153
- -p interpret & run with 0 deps
154
- -------------------------------------
155
- -m minify code
156
- -------------------------------------
157
- -repl start Read Eval Print Loop
158
- -------------------------------------
159
- `)
160
- }
161
- }
162
- }