fez-lisp 1.0.7 → 1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +18 -18
- package/lib/baked/std.js +1 -1
- package/package.json +1 -1
- package/src/compiler.js +14 -0
- package/src/enums.js +2 -0
- package/src/interpreter.js +3 -3
- package/src/parser.js +2 -1
- package/src/tokeniser.js +208 -119
- package/src/utils.js +5 -5
package/src/utils.js
CHANGED
@@ -127,7 +127,7 @@ export const handleUnbalancedQuotes = (source) => {
|
|
127
127
|
if (diff !== 0) throw new SyntaxError(`Quotes are unbalanced "`)
|
128
128
|
return source
|
129
129
|
}
|
130
|
-
|
130
|
+
export const removeMutation = (source) => source.replace(new RegExp(/!/g), 'ǃ')
|
131
131
|
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()
|
@@ -179,6 +179,7 @@ export const fez = (source, options = {}) => {
|
|
179
179
|
handleUnbalancedParens(removeNoCode(source))
|
180
180
|
)
|
181
181
|
else code = removeNoCode(source)
|
182
|
+
if (options.immutable) code = removeMutation(code)
|
182
183
|
const parsed = parse(code)
|
183
184
|
const standard = options.std
|
184
185
|
? options.shake
|
@@ -190,7 +191,6 @@ export const fez = (source, options = {}) => {
|
|
190
191
|
const js = Object.values(comp(deepClone(ast))).join('')
|
191
192
|
return options.eval ? eval(js) : js
|
192
193
|
}
|
193
|
-
|
194
194
|
return run(ast, env)
|
195
195
|
} catch (error) {
|
196
196
|
const err = error.message
|
@@ -208,8 +208,8 @@ export const dotNamesToEmpty = (name) => name.replace(new RegExp(/\./g), '')
|
|
208
208
|
export const colonNamesTo$ = (name) => name.replace(new RegExp(/\:/g), '$')
|
209
209
|
export const commaToLodash = (name) => name.replace(new RegExp(/\,/g), '_')
|
210
210
|
export const arrowToTo = (name) => name.replace(new RegExp(/->/g), '-to-')
|
211
|
-
export const
|
212
|
-
name.replace(new RegExp(
|
211
|
+
export const moduleNameToLodashes = (name) =>
|
212
|
+
name.replace(new RegExp(/:/g), '_')
|
213
213
|
|
214
214
|
export const questionMarkToLodash = (name) =>
|
215
215
|
name.replace(new RegExp(/\?/g), 'Predicate')
|
@@ -242,7 +242,7 @@ export const lispToJavaScriptVariableName = (name) =>
|
|
242
242
|
colonNamesTo$(
|
243
243
|
exclamationMarkMarkToLodash(
|
244
244
|
questionMarkToLodash(
|
245
|
-
commaToLodash(
|
245
|
+
commaToLodash(moduleNameToLodashes(earMuffsToLodashes(name)))
|
246
246
|
)
|
247
247
|
)
|
248
248
|
)
|