fez-lisp 1.0.33 → 1.0.34
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 +3 -2
- package/src/compiler.js +3 -3
- package/src/enums.js +1 -1
- package/src/plain/tokeniser.js +4 -5
- package/src/tokeniser.js +15 -6
- package/src/utils.js +2 -1
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.0.
|
5
|
+
"version": "1.0.34",
|
6
6
|
"type": "module",
|
7
7
|
"main": "index.js",
|
8
8
|
"keywords": [
|
@@ -18,7 +18,8 @@
|
|
18
18
|
},
|
19
19
|
"prettier": {
|
20
20
|
"semi": false,
|
21
|
-
"singleQuote": true
|
21
|
+
"singleQuote": true,
|
22
|
+
"trailingComma": "none"
|
22
23
|
},
|
23
24
|
"scripts": {
|
24
25
|
"build": "node ./lib/builder.js",
|
package/src/compiler.js
CHANGED
@@ -5,7 +5,7 @@ import {
|
|
5
5
|
KEYWORDS,
|
6
6
|
TYPE,
|
7
7
|
VALUE,
|
8
|
-
WORD
|
8
|
+
WORD
|
9
9
|
} from './enums.js'
|
10
10
|
import { leaf, isLeaf } from './parser.js'
|
11
11
|
import { deepRename, lispToJavaScriptVariableName } from './utils.js'
|
@@ -85,7 +85,7 @@ return result
|
|
85
85
|
default:
|
86
86
|
return 0
|
87
87
|
}
|
88
|
-
}
|
88
|
+
}`
|
89
89
|
}
|
90
90
|
const semiColumnEdgeCases = new Set([
|
91
91
|
';)',
|
@@ -105,7 +105,7 @@ const semiColumnEdgeCases = new Set([
|
|
105
105
|
';?',
|
106
106
|
',,',
|
107
107
|
';;',
|
108
|
-
';]'
|
108
|
+
';]'
|
109
109
|
])
|
110
110
|
|
111
111
|
const parse = (Arguments, Drill) => Arguments.map((x) => compile(x, Drill))
|
package/src/enums.js
CHANGED
package/src/plain/tokeniser.js
CHANGED
@@ -114,7 +114,7 @@ const keywords = {
|
|
114
114
|
for (let i = 0; i < props.length; ++i) {
|
115
115
|
Object.defineProperty(localEnv, params[i][VALUE], {
|
116
116
|
value: evaluate(props[i], scope),
|
117
|
-
writable: true
|
117
|
+
writable: true
|
118
118
|
})
|
119
119
|
}
|
120
120
|
return evaluate(body, localEnv)
|
@@ -177,7 +177,7 @@ const keywords = {
|
|
177
177
|
name = word[VALUE]
|
178
178
|
Object.defineProperty(env, name, {
|
179
179
|
value: evaluate(args[1], env),
|
180
|
-
writable: false
|
180
|
+
writable: false
|
181
181
|
})
|
182
182
|
return env[name]
|
183
183
|
},
|
@@ -269,7 +269,7 @@ const keywords = {
|
|
269
269
|
for (let i = 0; i < props.length; ++i) {
|
270
270
|
Object.defineProperty(localEnv, params[i][VALUE], {
|
271
271
|
value: evaluate(props[i], scope),
|
272
|
-
writable: true
|
272
|
+
writable: true
|
273
273
|
})
|
274
274
|
}
|
275
275
|
return evaluate(body, localEnv)
|
@@ -295,7 +295,6 @@ const keywords = {
|
|
295
295
|
? console.log(
|
296
296
|
'\x1b[31m',
|
297
297
|
`${describe} Failed:\n`,
|
298
|
-
|
299
298
|
`${rest[0]} => ${stringify(rest[1])} != ${stringify(rest[2])}`,
|
300
299
|
'\n',
|
301
300
|
'\x1b[0m'
|
@@ -341,7 +340,7 @@ const keywords = {
|
|
341
340
|
[KEYWORDS.CLEAR_CONSOLE]: (args) => {
|
342
341
|
console.clear()
|
343
342
|
return 0
|
344
|
-
}
|
343
|
+
}
|
345
344
|
}
|
346
345
|
keywords[KEYWORDS.NOT_COMPILED_BLOCK] = keywords[KEYWORDS.BLOCK]
|
347
346
|
keywords[KEYWORDS.DOC] = (args, env) => {
|
package/src/tokeniser.js
CHANGED
@@ -6,7 +6,7 @@ import {
|
|
6
6
|
isEqual,
|
7
7
|
isEqualTypes,
|
8
8
|
isForbiddenVariableName,
|
9
|
-
stringifyArgs
|
9
|
+
stringifyArgs
|
10
10
|
} from './utils.js'
|
11
11
|
|
12
12
|
const keywords = {
|
@@ -405,7 +405,7 @@ const keywords = {
|
|
405
405
|
for (let i = 0; i < props.length; ++i) {
|
406
406
|
Object.defineProperty(localEnv, params[i][VALUE], {
|
407
407
|
value: evaluate(props[i], scope),
|
408
|
-
writable: true
|
408
|
+
writable: true
|
409
409
|
})
|
410
410
|
}
|
411
411
|
return evaluate(body, localEnv)
|
@@ -631,7 +631,7 @@ const keywords = {
|
|
631
631
|
name = word[VALUE]
|
632
632
|
Object.defineProperty(env, name, {
|
633
633
|
value: evaluate(args[1], env),
|
634
|
-
writable: false
|
634
|
+
writable: false
|
635
635
|
})
|
636
636
|
return env[name]
|
637
637
|
},
|
@@ -931,7 +931,7 @@ const keywords = {
|
|
931
931
|
for (let i = 0; i < props.length; ++i) {
|
932
932
|
Object.defineProperty(localEnv, params[i][VALUE], {
|
933
933
|
value: evaluate(props[i], scope),
|
934
|
-
writable: true
|
934
|
+
writable: true
|
935
935
|
})
|
936
936
|
}
|
937
937
|
return evaluate(body, localEnv)
|
@@ -966,13 +966,22 @@ const keywords = {
|
|
966
966
|
[KEYWORDS.TEST_BED]: (args, env) => {
|
967
967
|
let tests = []
|
968
968
|
try {
|
969
|
+
if (
|
970
|
+
args.some(
|
971
|
+
([[type, car]]) => !(type === APPLY && car === KEYWORDS.TEST_CASE)
|
972
|
+
)
|
973
|
+
)
|
974
|
+
throw new TypeError(
|
975
|
+
`Arguments of (${KEYWORDS.TEST_BED}) must be (${
|
976
|
+
KEYWORDS.TEST_CASE
|
977
|
+
}) (${KEYWORDS.TEST_BED} ${stringifyArgs(args)})`
|
978
|
+
)
|
969
979
|
tests = args.map((x) => evaluate(x, env))
|
970
980
|
tests.forEach(([state, describe, ...rest]) =>
|
971
981
|
!state
|
972
982
|
? console.log(
|
973
983
|
'\x1b[31m',
|
974
984
|
`${describe} Failed:\n`,
|
975
|
-
|
976
985
|
`${rest[0]} => ${stringify(rest[1])} != ${stringify(rest[2])}`,
|
977
986
|
'\n',
|
978
987
|
'\x1b[0m'
|
@@ -1090,7 +1099,7 @@ const keywords = {
|
|
1090
1099
|
)
|
1091
1100
|
console.clear()
|
1092
1101
|
return 0
|
1093
|
-
}
|
1102
|
+
}
|
1094
1103
|
}
|
1095
1104
|
keywords[KEYWORDS.NOT_COMPILED_BLOCK] = keywords[KEYWORDS.BLOCK]
|
1096
1105
|
keywords[KEYWORDS.DOC] = (args, env) => {
|
package/src/utils.js
CHANGED
@@ -8,7 +8,8 @@ export const logError = (error) => console.log('\x1b[31m', error, '\x1b[0m')
|
|
8
8
|
export const logSuccess = (output) => console.log(output, '\x1b[0m')
|
9
9
|
export const removeNoCode = (source) =>
|
10
10
|
source
|
11
|
-
.replace(/;.+/g, '')
|
11
|
+
// .replace(/;.+/g, '')
|
12
|
+
.replace(/;(?=(?:(?:[^"]*"){2})*[^"]*$).+/g, '')
|
12
13
|
.replace(/[\s\s]+(?=[^"]*(?:"[^"]*"[^"]*)*$)/g, ' ')
|
13
14
|
.trim()
|
14
15
|
export const isBalancedParenthesis = (sourceCode) => {
|