@mojir/lits 2.1.0 → 2.1.2
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 +392 -109
- package/dist/cli/cli.js +879 -946
- package/dist/cli/reference/api.d.ts +0 -1
- package/dist/cli/reference/index.d.ts +208 -208
- package/dist/cli/src/builtin/bindingNode.d.ts +3 -2
- package/dist/cli/src/builtin/index.d.ts +10 -50
- package/dist/cli/src/builtin/interface.d.ts +10 -17
- package/dist/cli/src/builtin/normalExpressions/index.d.ts +4 -1
- package/dist/cli/src/builtin/specialExpressionTypes.d.ts +25 -0
- package/dist/cli/src/builtin/specialExpressions/and.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/array.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/cond.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/def.d.ts +3 -6
- package/dist/cli/src/builtin/specialExpressions/defined.d.ts +5 -0
- package/dist/cli/src/builtin/specialExpressions/do.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/functions.d.ts +5 -13
- package/dist/cli/src/builtin/specialExpressions/if.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/let.d.ts +3 -6
- package/dist/cli/src/builtin/specialExpressions/loop.d.ts +3 -4
- package/dist/cli/src/builtin/specialExpressions/loops.d.ts +5 -14
- package/dist/cli/src/builtin/specialExpressions/object.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/or.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/qq.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/recur.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/switch.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/throw.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/try.d.ts +3 -5
- package/dist/cli/src/builtin/specialExpressions/unless.d.ts +3 -3
- package/dist/cli/src/builtin/utils.d.ts +2 -5
- package/dist/cli/src/constants/constants.d.ts +15 -3
- package/dist/cli/src/evaluator/ContextStack.d.ts +3 -3
- package/dist/cli/src/evaluator/functionExecutors.d.ts +3 -3
- package/dist/cli/src/evaluator/index.d.ts +2 -2
- package/dist/cli/src/evaluator/interface.d.ts +3 -3
- package/dist/cli/src/getUndefinedSymbols/index.d.ts +3 -3
- package/dist/cli/src/parser/Parser.d.ts +7 -5
- package/dist/cli/src/parser/types.d.ts +33 -96
- package/dist/cli/src/typeGuards/astNode.d.ts +19 -16
- package/dist/cli/src/typeGuards/index.d.ts +2 -5
- package/dist/cli/src/typeGuards/litsFunction.d.ts +2 -2
- package/dist/cli/src/utils/index.d.ts +0 -1
- package/dist/index.esm.js +849 -913
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +849 -913
- package/dist/index.js.map +1 -1
- package/dist/lits.iife.js +849 -913
- package/dist/lits.iife.js.map +1 -1
- package/dist/reference/api.d.ts +0 -1
- package/dist/reference/index.d.ts +208 -208
- package/dist/src/builtin/bindingNode.d.ts +3 -2
- package/dist/src/builtin/index.d.ts +10 -50
- package/dist/src/builtin/interface.d.ts +10 -17
- package/dist/src/builtin/normalExpressions/index.d.ts +4 -1
- package/dist/src/builtin/specialExpressionTypes.d.ts +25 -0
- package/dist/src/builtin/specialExpressions/and.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/array.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/cond.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/def.d.ts +3 -6
- package/dist/src/builtin/specialExpressions/defined.d.ts +5 -0
- package/dist/src/builtin/specialExpressions/do.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/functions.d.ts +5 -13
- package/dist/src/builtin/specialExpressions/if.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/let.d.ts +3 -6
- package/dist/src/builtin/specialExpressions/loop.d.ts +3 -4
- package/dist/src/builtin/specialExpressions/loops.d.ts +5 -14
- package/dist/src/builtin/specialExpressions/object.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/or.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/qq.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/recur.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/switch.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/throw.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/try.d.ts +3 -5
- package/dist/src/builtin/specialExpressions/unless.d.ts +3 -3
- package/dist/src/builtin/utils.d.ts +2 -5
- package/dist/src/constants/constants.d.ts +15 -3
- package/dist/src/evaluator/ContextStack.d.ts +3 -3
- package/dist/src/evaluator/functionExecutors.d.ts +3 -3
- package/dist/src/evaluator/index.d.ts +2 -2
- package/dist/src/evaluator/interface.d.ts +3 -3
- package/dist/src/getUndefinedSymbols/index.d.ts +3 -3
- package/dist/src/parser/Parser.d.ts +7 -5
- package/dist/src/parser/types.d.ts +33 -96
- package/dist/src/typeGuards/astNode.d.ts +19 -16
- package/dist/src/typeGuards/index.d.ts +2 -5
- package/dist/src/typeGuards/litsFunction.d.ts +2 -2
- package/dist/src/utils/index.d.ts +0 -1
- package/dist/testFramework.esm.js +865 -909
- package/dist/testFramework.esm.js.map +1 -1
- package/dist/testFramework.js +865 -909
- package/dist/testFramework.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/src/builtin/specialExpressions/declared.d.ts +0 -5
- package/dist/src/builtin/specialExpressions/declared.d.ts +0 -5
package/dist/cli/cli.js
CHANGED
|
@@ -92,7 +92,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
92
92
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
-
var version = "2.1.
|
|
95
|
+
var version = "2.1.2";
|
|
96
96
|
|
|
97
97
|
function getCodeMarker(sourceCodeInfo) {
|
|
98
98
|
if (!sourceCodeInfo.position || !sourceCodeInfo.code)
|
|
@@ -184,23 +184,50 @@ var UndefinedSymbolError = /** @class */ (function (_super) {
|
|
|
184
184
|
return UndefinedSymbolError;
|
|
185
185
|
}(LitsError));
|
|
186
186
|
|
|
187
|
-
var
|
|
188
|
-
'
|
|
189
|
-
'
|
|
190
|
-
'
|
|
191
|
-
'
|
|
192
|
-
'
|
|
193
|
-
'
|
|
194
|
-
'
|
|
195
|
-
'
|
|
196
|
-
'
|
|
197
|
-
'
|
|
198
|
-
'
|
|
199
|
-
'
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
187
|
+
var specialExpressionTypes = {
|
|
188
|
+
'??': 0,
|
|
189
|
+
'&&': 1,
|
|
190
|
+
'||': 2,
|
|
191
|
+
'array': 3,
|
|
192
|
+
'cond': 4,
|
|
193
|
+
'0_def': 5,
|
|
194
|
+
'defined?': 6,
|
|
195
|
+
'0_defn': 7,
|
|
196
|
+
'do': 8,
|
|
197
|
+
'doseq': 9,
|
|
198
|
+
'0_fn': 10,
|
|
199
|
+
'for': 11,
|
|
200
|
+
'function': 12,
|
|
201
|
+
'if': 13,
|
|
202
|
+
'let': 14,
|
|
203
|
+
'loop': 15,
|
|
204
|
+
'object': 16,
|
|
205
|
+
'recur': 17,
|
|
206
|
+
'switch': 18,
|
|
207
|
+
'throw': 19,
|
|
208
|
+
'try': 20,
|
|
209
|
+
'unless': 21,
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
var NodeTypes = {
|
|
213
|
+
Number: 1,
|
|
214
|
+
String: 2,
|
|
215
|
+
NormalExpression: 3,
|
|
216
|
+
SpecialExpression: 4,
|
|
217
|
+
UserDefinedSymbol: 5,
|
|
218
|
+
NormalBuiltinSymbol: 6,
|
|
219
|
+
SpecialBuiltinSymbol: 7,
|
|
220
|
+
ReservedSymbol: 8,
|
|
221
|
+
Binding: 9,
|
|
222
|
+
Spread: 10,
|
|
223
|
+
};
|
|
224
|
+
var NodeTypesSet = new Set(Object.values(NodeTypes));
|
|
225
|
+
function getNodeTypeName(type) {
|
|
226
|
+
return Object.keys(NodeTypes).find(function (key) { return NodeTypes[key] === type; });
|
|
227
|
+
}
|
|
228
|
+
// TODO, is this needed?
|
|
229
|
+
function isNodeType(type) {
|
|
230
|
+
return typeof type === 'number' && NodeTypesSet.has(type);
|
|
204
231
|
}
|
|
205
232
|
var functionTypes = [
|
|
206
233
|
'UserDefined',
|
|
@@ -228,17 +255,17 @@ function isLitsFunction$1(func) {
|
|
|
228
255
|
return false;
|
|
229
256
|
return FUNCTION_SYMBOL in func && 'functionType' in func && isFunctionType(func.functionType);
|
|
230
257
|
}
|
|
231
|
-
function
|
|
232
|
-
if (value
|
|
258
|
+
function isNode(value) {
|
|
259
|
+
if (!Array.isArray(value) || value.length < 2)
|
|
233
260
|
return false;
|
|
234
|
-
return
|
|
261
|
+
return isNodeType(value[0]);
|
|
235
262
|
}
|
|
236
263
|
function valueToString(value) {
|
|
237
264
|
if (isLitsFunction$1(value))
|
|
238
265
|
// eslint-disable-next-line ts/no-unsafe-member-access
|
|
239
266
|
return "<function ".concat(value.name || '\u03BB', ">");
|
|
240
|
-
if (
|
|
241
|
-
return "".concat(value
|
|
267
|
+
if (isNode(value))
|
|
268
|
+
return "".concat(getNodeTypeName(value[0]), "-node");
|
|
242
269
|
if (value === null)
|
|
243
270
|
return 'null';
|
|
244
271
|
if (typeof value === 'object' && value instanceof RegExp)
|
|
@@ -254,153 +281,137 @@ function getSourceCodeInfo(anyValue, sourceCodeInfo) {
|
|
|
254
281
|
return (_a = anyValue === null || anyValue === void 0 ? void 0 : anyValue.sourceCodeInfo) !== null && _a !== void 0 ? _a : sourceCodeInfo;
|
|
255
282
|
}
|
|
256
283
|
|
|
257
|
-
function
|
|
258
|
-
|
|
259
|
-
count: count,
|
|
260
|
-
length: node.params.length,
|
|
261
|
-
name: node.name,
|
|
262
|
-
sourceCodeInfo: node.sourceCodeInfo,
|
|
263
|
-
});
|
|
284
|
+
function getAssertionError(typeName, value, sourceCodeInfo) {
|
|
285
|
+
return new LitsError("Expected ".concat(typeName, ", got ").concat(valueToString(value), "."), getSourceCodeInfo(value, sourceCodeInfo));
|
|
264
286
|
}
|
|
265
|
-
|
|
266
|
-
|
|
287
|
+
|
|
288
|
+
function isSymbolNode(node) {
|
|
289
|
+
var nodeType = node[0];
|
|
290
|
+
return NodeTypes.UserDefinedSymbol === nodeType
|
|
291
|
+
|| NodeTypes.NormalBuiltinSymbol === nodeType
|
|
292
|
+
|| NodeTypes.SpecialBuiltinSymbol === nodeType;
|
|
267
293
|
}
|
|
268
|
-
function
|
|
269
|
-
|
|
270
|
-
|
|
294
|
+
function assertSymbolNode(node, sourceCodeInfo) {
|
|
295
|
+
if (!isSymbolNode(node))
|
|
296
|
+
throw getAssertionError('SymbolNode', node, sourceCodeInfo);
|
|
271
297
|
}
|
|
272
|
-
function
|
|
273
|
-
|
|
274
|
-
throw new LitsError('Unexpected undefined', getSourceCodeInfo(value, sourceCodeInfo));
|
|
298
|
+
function isUserDefinedSymbolNode(node) {
|
|
299
|
+
return NodeTypes.UserDefinedSymbol === node[0];
|
|
275
300
|
}
|
|
276
|
-
function
|
|
277
|
-
|
|
301
|
+
function asUserDefinedSymbolNode(node, sourceCodeInfo) {
|
|
302
|
+
assertUserDefinedSymbolNode(node, sourceCodeInfo);
|
|
303
|
+
return node;
|
|
278
304
|
}
|
|
279
|
-
function
|
|
280
|
-
if (!
|
|
281
|
-
throw
|
|
282
|
-
}
|
|
305
|
+
function assertUserDefinedSymbolNode(node, sourceCodeInfo) {
|
|
306
|
+
if (!isUserDefinedSymbolNode(node))
|
|
307
|
+
throw getAssertionError('UserDefinedSymbolNode', node, sourceCodeInfo);
|
|
283
308
|
}
|
|
284
|
-
function
|
|
285
|
-
|
|
286
|
-
if (typeof count === 'number') {
|
|
287
|
-
if (length !== count) {
|
|
288
|
-
throw new LitsError("Wrong number of arguments to \"".concat(name, "\", expected ").concat(count, ", got ").concat(valueToString(length), "."), sourceCodeInfo);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
var min = count.min, max = count.max, even = count.even, odd = count.odd;
|
|
293
|
-
if (even) {
|
|
294
|
-
if (length % 2 !== 0) {
|
|
295
|
-
throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an even number, got ").concat(valueToString(length), "."), sourceCodeInfo);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
if (odd) {
|
|
299
|
-
if (length % 2 !== 1) {
|
|
300
|
-
throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an odd number, got ").concat(valueToString(length), "."), sourceCodeInfo);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
if (typeof min === 'number' && length < min) {
|
|
304
|
-
throw new LitsError("Wrong number of arguments to \"".concat(name, "\", expected at least ").concat(min, ", got ").concat(valueToString(length), "."), sourceCodeInfo);
|
|
305
|
-
}
|
|
306
|
-
if (typeof max === 'number' && length > max) {
|
|
307
|
-
throw new LitsError("Wrong number of arguments to \"".concat(name, "\", expected at most ").concat(max, ", got ").concat(valueToString(length), "."), sourceCodeInfo);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
309
|
+
function isNormalBuiltinSymbolNode(node) {
|
|
310
|
+
return NodeTypes.NormalBuiltinSymbol === node[0];
|
|
310
311
|
}
|
|
311
|
-
function
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
if (
|
|
319
|
-
return false;
|
|
320
|
-
}
|
|
321
|
-
if (typeof count.min === 'number' && count.min > 2) {
|
|
312
|
+
function isSpecialBuiltinSymbolNode(node) {
|
|
313
|
+
return NodeTypes.SpecialBuiltinSymbol === node[0];
|
|
314
|
+
}
|
|
315
|
+
function isNormalExpressionNode(node) {
|
|
316
|
+
return node[0] === NodeTypes.NormalExpression;
|
|
317
|
+
}
|
|
318
|
+
function isNormalExpressionNodeWithName(node) {
|
|
319
|
+
if (!isNormalExpressionNode(node)) {
|
|
322
320
|
return false;
|
|
323
321
|
}
|
|
324
|
-
return
|
|
322
|
+
return isSymbolNode(node[1][0]);
|
|
323
|
+
}
|
|
324
|
+
function isSpreadNode(node) {
|
|
325
|
+
return node[0] === NodeTypes.Spread;
|
|
325
326
|
}
|
|
326
327
|
|
|
327
|
-
var getUndefinedSymbols = function (ast, contextStack, builtin,
|
|
328
|
+
var getUndefinedSymbols = function (ast, contextStack, builtin, evaluateNode) {
|
|
328
329
|
var e_1, _a;
|
|
329
330
|
var _b;
|
|
330
|
-
var
|
|
331
|
+
var nodes = Array.isArray(ast)
|
|
331
332
|
? ast
|
|
332
|
-
: [
|
|
333
|
-
type: 'SpecialExpression',
|
|
334
|
-
name: 'do',
|
|
335
|
-
params: ast.body,
|
|
336
|
-
sourceCodeInfo: undefined,
|
|
337
|
-
}];
|
|
333
|
+
: [[NodeTypes.SpecialExpression, [specialExpressionTypes.do, ast.body]]];
|
|
338
334
|
var unresolvedSymbols = new Set();
|
|
339
335
|
try {
|
|
340
|
-
for (var
|
|
341
|
-
var subNode =
|
|
342
|
-
(_b =
|
|
336
|
+
for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
337
|
+
var subNode = nodes_1_1.value;
|
|
338
|
+
(_b = findUnresolvedSymbolsInNode(subNode, contextStack, builtin, evaluateNode)) === null || _b === void 0 ? void 0 : _b.forEach(function (symbol) { return unresolvedSymbols.add(symbol); });
|
|
343
339
|
}
|
|
344
340
|
}
|
|
345
341
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
346
342
|
finally {
|
|
347
343
|
try {
|
|
348
|
-
if (
|
|
344
|
+
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
349
345
|
}
|
|
350
346
|
finally { if (e_1) throw e_1.error; }
|
|
351
347
|
}
|
|
352
348
|
return unresolvedSymbols;
|
|
353
349
|
};
|
|
354
|
-
function
|
|
350
|
+
function findUnresolvedSymbolsInNode(node, contextStack, builtin, evaluateNode) {
|
|
355
351
|
var e_2, _a;
|
|
356
|
-
var _b;
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
352
|
+
var _b, _c;
|
|
353
|
+
var nodeType = node[0];
|
|
354
|
+
switch (nodeType) {
|
|
355
|
+
case NodeTypes.UserDefinedSymbol: {
|
|
356
|
+
var symbolNode = node;
|
|
357
|
+
var lookUpResult = contextStack.lookUp(symbolNode);
|
|
360
358
|
if (lookUpResult === null)
|
|
361
|
-
return new Set([
|
|
359
|
+
return new Set([symbolNode[1]]);
|
|
362
360
|
return null;
|
|
363
361
|
}
|
|
364
|
-
case
|
|
365
|
-
case
|
|
366
|
-
case
|
|
367
|
-
case
|
|
368
|
-
case
|
|
362
|
+
case NodeTypes.NormalBuiltinSymbol:
|
|
363
|
+
case NodeTypes.SpecialBuiltinSymbol:
|
|
364
|
+
case NodeTypes.String:
|
|
365
|
+
case NodeTypes.Number:
|
|
366
|
+
case NodeTypes.ReservedSymbol:
|
|
367
|
+
case NodeTypes.Binding:
|
|
369
368
|
return null;
|
|
370
|
-
case
|
|
369
|
+
case NodeTypes.NormalExpression: {
|
|
370
|
+
var normalExpressionNode = node;
|
|
371
371
|
var unresolvedSymbols_1 = new Set();
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
372
|
+
if (isNormalExpressionNodeWithName(normalExpressionNode)) {
|
|
373
|
+
var _d = __read(normalExpressionNode, 2), _e = __read(_d[1], 1), symbolNode = _e[0];
|
|
374
|
+
if (isUserDefinedSymbolNode(symbolNode)) {
|
|
375
|
+
var lookUpResult = contextStack.lookUp(symbolNode);
|
|
376
|
+
if (lookUpResult === null)
|
|
377
|
+
unresolvedSymbols_1.add(symbolNode[1]);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
var _f = __read(normalExpressionNode, 2), _g = __read(_f[1], 1), expressionNode = _g[0];
|
|
382
|
+
(_b = findUnresolvedSymbolsInNode(expressionNode, contextStack, builtin, evaluateNode)) === null || _b === void 0 ? void 0 : _b.forEach(function (symbol) { return unresolvedSymbols_1.add(symbol); });
|
|
377
383
|
}
|
|
378
384
|
try {
|
|
379
|
-
for (var
|
|
380
|
-
var subNode =
|
|
381
|
-
(
|
|
385
|
+
for (var _h = __values(normalExpressionNode[1][1]), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
386
|
+
var subNode = _j.value;
|
|
387
|
+
(_c = findUnresolvedSymbolsInNode(subNode, contextStack, builtin, evaluateNode)) === null || _c === void 0 ? void 0 : _c.forEach(function (symbol) { return unresolvedSymbols_1.add(symbol); });
|
|
382
388
|
}
|
|
383
389
|
}
|
|
384
390
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
385
391
|
finally {
|
|
386
392
|
try {
|
|
387
|
-
if (
|
|
393
|
+
if (_j && !_j.done && (_a = _h.return)) _a.call(_h);
|
|
388
394
|
}
|
|
389
395
|
finally { if (e_2) throw e_2.error; }
|
|
390
396
|
}
|
|
391
397
|
return unresolvedSymbols_1;
|
|
392
398
|
}
|
|
393
|
-
case
|
|
394
|
-
var
|
|
395
|
-
|
|
396
|
-
|
|
399
|
+
case NodeTypes.SpecialExpression: {
|
|
400
|
+
var specialExpressionNode = node;
|
|
401
|
+
var specialExpressionType = specialExpressionNode[1][0];
|
|
402
|
+
var specialExpression = builtin.specialExpressions[specialExpressionType];
|
|
403
|
+
var castedGetUndefinedSymbols = specialExpression.getUndefinedSymbols;
|
|
404
|
+
return castedGetUndefinedSymbols(specialExpressionNode, contextStack, {
|
|
397
405
|
getUndefinedSymbols: getUndefinedSymbols,
|
|
398
406
|
builtin: builtin,
|
|
399
|
-
|
|
407
|
+
evaluateNode: evaluateNode,
|
|
400
408
|
});
|
|
401
409
|
}
|
|
402
|
-
case
|
|
403
|
-
return
|
|
410
|
+
case NodeTypes.Spread:
|
|
411
|
+
return findUnresolvedSymbolsInNode(node[1], contextStack, builtin, evaluateNode);
|
|
412
|
+
/* v8 ignore next 2 */
|
|
413
|
+
default:
|
|
414
|
+
throw new Error("Unhandled node type: ".concat(nodeType));
|
|
404
415
|
}
|
|
405
416
|
}
|
|
406
417
|
|
|
@@ -606,8 +617,71 @@ var bitwiseNormalExpression = {
|
|
|
606
617
|
},
|
|
607
618
|
};
|
|
608
619
|
|
|
609
|
-
function
|
|
610
|
-
|
|
620
|
+
function assertNumberOfParams(count, node) {
|
|
621
|
+
var length = node[1][1].length;
|
|
622
|
+
if (typeof count === 'number') {
|
|
623
|
+
if (length !== count) {
|
|
624
|
+
var name_1 = getNodeTypeName(node[0]);
|
|
625
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_1, "\", expected ").concat(count, ", got ").concat(valueToString(length), "."), node[2]);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
var min = count.min, max = count.max, even = count.even, odd = count.odd;
|
|
630
|
+
if (even) {
|
|
631
|
+
var name_2 = getNodeTypeName(node[0]);
|
|
632
|
+
if (length % 2 !== 0) {
|
|
633
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_2, "\",, expected an even number, got ").concat(valueToString(length), "."), node[2]);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
if (odd) {
|
|
637
|
+
if (length % 2 !== 1) {
|
|
638
|
+
var name_3 = getNodeTypeName(node[0]);
|
|
639
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_3, "\",, expected an odd number, got ").concat(valueToString(length), "."), node[2]);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
if (typeof min === 'number' && length < min) {
|
|
643
|
+
var name_4 = getNodeTypeName(node[0]);
|
|
644
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_4, "\", expected at least ").concat(min, ", got ").concat(valueToString(length), "."), node[2]);
|
|
645
|
+
}
|
|
646
|
+
if (typeof max === 'number' && length > max) {
|
|
647
|
+
var name_5 = getNodeTypeName(node[0]);
|
|
648
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_5, "\", expected at most ").concat(max, ", got ").concat(valueToString(length), "."), node[2]);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
function isNonUndefined(value) {
|
|
653
|
+
return value !== undefined;
|
|
654
|
+
}
|
|
655
|
+
function asNonUndefined(value, sourceCodeInfo) {
|
|
656
|
+
assertNonUndefined(value, sourceCodeInfo);
|
|
657
|
+
return value;
|
|
658
|
+
}
|
|
659
|
+
function assertNonUndefined(value, sourceCodeInfo) {
|
|
660
|
+
if (!isNonUndefined(value))
|
|
661
|
+
throw new LitsError('Unexpected undefined', getSourceCodeInfo(value, sourceCodeInfo));
|
|
662
|
+
}
|
|
663
|
+
function isUnknownRecord(value) {
|
|
664
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
665
|
+
}
|
|
666
|
+
function assertUnknownRecord(value, sourceCodeInfo) {
|
|
667
|
+
if (!isUnknownRecord(value)) {
|
|
668
|
+
throw new LitsError("Expected ".concat('UnknownRecord', ", got ").concat(valueToString(value), "."), getSourceCodeInfo(value, sourceCodeInfo));
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
function canBeOperator(count) {
|
|
672
|
+
if (typeof count === 'number') {
|
|
673
|
+
return count === 2;
|
|
674
|
+
}
|
|
675
|
+
if (count.odd) {
|
|
676
|
+
return false;
|
|
677
|
+
}
|
|
678
|
+
if (typeof count.max === 'number' && count.max < 2) {
|
|
679
|
+
return false;
|
|
680
|
+
}
|
|
681
|
+
if (typeof count.min === 'number' && count.min > 2) {
|
|
682
|
+
return false;
|
|
683
|
+
}
|
|
684
|
+
return true;
|
|
611
685
|
}
|
|
612
686
|
|
|
613
687
|
function isLitsFunction(value) {
|
|
@@ -619,9 +693,6 @@ function assertLitsFunction(value, sourceCodeInfo) {
|
|
|
619
693
|
if (!isLitsFunction(value))
|
|
620
694
|
throw getAssertionError('LitsFunction', value, sourceCodeInfo);
|
|
621
695
|
}
|
|
622
|
-
function isBuiltinFunction(value) {
|
|
623
|
-
return isUnknownRecord(value) && value.functionType === 'Builtin';
|
|
624
|
-
}
|
|
625
696
|
|
|
626
697
|
function isAny(value) {
|
|
627
698
|
// TODO weak test
|
|
@@ -792,12 +863,6 @@ function clone(value) {
|
|
|
792
863
|
function cloneColl(value) {
|
|
793
864
|
return clone(value);
|
|
794
865
|
}
|
|
795
|
-
function arrayToPairs(arr) {
|
|
796
|
-
var pairs = [];
|
|
797
|
-
for (var i = 0; i < arr.length; i += 2)
|
|
798
|
-
pairs.push([arr[i], arr[i + 1]]);
|
|
799
|
-
return pairs;
|
|
800
|
-
}
|
|
801
866
|
function joinSets() {
|
|
802
867
|
var e_1, _a;
|
|
803
868
|
var results = [];
|
|
@@ -3695,17 +3760,24 @@ Object.values(expressions$1).forEach(function (normalExpression) {
|
|
|
3695
3760
|
});
|
|
3696
3761
|
});
|
|
3697
3762
|
var normalExpressions = __assign(__assign({}, expressions$1), aliases);
|
|
3763
|
+
var normalExpressionTypes = {};
|
|
3764
|
+
var allNormalExpressions = [];
|
|
3765
|
+
Object.entries(normalExpressions).forEach(function (_a, index) {
|
|
3766
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
3767
|
+
normalExpressionTypes[key] = index;
|
|
3768
|
+
allNormalExpressions.push(value);
|
|
3769
|
+
});
|
|
3698
3770
|
|
|
3699
3771
|
var andSpecialExpression = {
|
|
3700
3772
|
paramCount: {},
|
|
3701
3773
|
evaluate: function (node, contextStack, _a) {
|
|
3702
3774
|
var e_1, _b;
|
|
3703
|
-
var
|
|
3775
|
+
var evaluateNode = _a.evaluateNode;
|
|
3704
3776
|
var value = true;
|
|
3705
3777
|
try {
|
|
3706
|
-
for (var _c = __values(node
|
|
3778
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
3707
3779
|
var param = _d.value;
|
|
3708
|
-
value =
|
|
3780
|
+
value = evaluateNode(param, contextStack);
|
|
3709
3781
|
if (!value)
|
|
3710
3782
|
break;
|
|
3711
3783
|
}
|
|
@@ -3720,8 +3792,8 @@ var andSpecialExpression = {
|
|
|
3720
3792
|
return value;
|
|
3721
3793
|
},
|
|
3722
3794
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3723
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3724
|
-
return getUndefinedSymbols(node
|
|
3795
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3796
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
3725
3797
|
},
|
|
3726
3798
|
};
|
|
3727
3799
|
|
|
@@ -3729,28 +3801,29 @@ var condSpecialExpression = {
|
|
|
3729
3801
|
paramCount: { even: true },
|
|
3730
3802
|
evaluate: function (node, contextStack, _a) {
|
|
3731
3803
|
var e_1, _b;
|
|
3732
|
-
var
|
|
3804
|
+
var evaluateNode = _a.evaluateNode;
|
|
3805
|
+
var params = node[1][1];
|
|
3733
3806
|
try {
|
|
3734
|
-
for (var
|
|
3735
|
-
var
|
|
3736
|
-
var value =
|
|
3807
|
+
for (var params_1 = __values(params), params_1_1 = params_1.next(); !params_1_1.done; params_1_1 = params_1.next()) {
|
|
3808
|
+
var _c = __read(params_1_1.value, 2), test = _c[0], form = _c[1];
|
|
3809
|
+
var value = evaluateNode(test, contextStack);
|
|
3737
3810
|
if (!value)
|
|
3738
3811
|
continue;
|
|
3739
|
-
return
|
|
3812
|
+
return evaluateNode(form, contextStack);
|
|
3740
3813
|
}
|
|
3741
3814
|
}
|
|
3742
3815
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
3743
3816
|
finally {
|
|
3744
3817
|
try {
|
|
3745
|
-
if (
|
|
3818
|
+
if (params_1_1 && !params_1_1.done && (_b = params_1.return)) _b.call(params_1);
|
|
3746
3819
|
}
|
|
3747
3820
|
finally { if (e_1) throw e_1.error; }
|
|
3748
3821
|
}
|
|
3749
3822
|
return null;
|
|
3750
3823
|
},
|
|
3751
3824
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3752
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3753
|
-
return getUndefinedSymbols(node.
|
|
3825
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3826
|
+
return getUndefinedSymbols(node[1][1].flat(), contextStack, builtin, evaluateNode);
|
|
3754
3827
|
},
|
|
3755
3828
|
};
|
|
3756
3829
|
|
|
@@ -3758,66 +3831,101 @@ var switchSpecialExpression = {
|
|
|
3758
3831
|
paramCount: { odd: true },
|
|
3759
3832
|
evaluate: function (node, contextStack, _a) {
|
|
3760
3833
|
var e_1, _b;
|
|
3761
|
-
var
|
|
3762
|
-
var
|
|
3834
|
+
var evaluateNode = _a.evaluateNode;
|
|
3835
|
+
var _c = __read(node[1], 3), switchValueNode = _c[1], cases = _c[2];
|
|
3836
|
+
var switchValue = evaluateNode(switchValueNode, contextStack);
|
|
3763
3837
|
try {
|
|
3764
|
-
for (var
|
|
3765
|
-
var
|
|
3766
|
-
var value =
|
|
3838
|
+
for (var cases_1 = __values(cases), cases_1_1 = cases_1.next(); !cases_1_1.done; cases_1_1 = cases_1.next()) {
|
|
3839
|
+
var _d = __read(cases_1_1.value, 2), test = _d[0], form = _d[1];
|
|
3840
|
+
var value = evaluateNode(test, contextStack);
|
|
3767
3841
|
if (value === switchValue) {
|
|
3768
|
-
return
|
|
3842
|
+
return evaluateNode(form, contextStack);
|
|
3769
3843
|
}
|
|
3770
3844
|
}
|
|
3771
3845
|
}
|
|
3772
3846
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
3773
3847
|
finally {
|
|
3774
3848
|
try {
|
|
3775
|
-
if (
|
|
3849
|
+
if (cases_1_1 && !cases_1_1.done && (_b = cases_1.return)) _b.call(cases_1);
|
|
3776
3850
|
}
|
|
3777
3851
|
finally { if (e_1) throw e_1.error; }
|
|
3778
3852
|
}
|
|
3779
3853
|
return null;
|
|
3780
3854
|
},
|
|
3781
3855
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3782
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3783
|
-
return getUndefinedSymbols(node.
|
|
3856
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3857
|
+
return getUndefinedSymbols(__spreadArray([node[1][1]], __read(node[1][2].flat()), false), contextStack, builtin, evaluateNode);
|
|
3784
3858
|
},
|
|
3785
3859
|
};
|
|
3786
3860
|
|
|
3787
|
-
var
|
|
3861
|
+
var definedSpecialExpression = {
|
|
3788
3862
|
paramCount: 1,
|
|
3789
3863
|
evaluate: function (node, contextStack) {
|
|
3790
|
-
var
|
|
3864
|
+
var symbolNode = node[1][1];
|
|
3865
|
+
assertSymbolNode(symbolNode);
|
|
3866
|
+
if (!isUserDefinedSymbolNode(symbolNode)) {
|
|
3867
|
+
return true; // If the symbol is not a user defined symbol, it is defined. normal or special builtin
|
|
3868
|
+
}
|
|
3869
|
+
var lookUpResult = contextStack.lookUp(symbolNode);
|
|
3791
3870
|
return lookUpResult !== null;
|
|
3792
3871
|
},
|
|
3793
3872
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3794
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3795
|
-
return getUndefinedSymbols(node
|
|
3873
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3874
|
+
return getUndefinedSymbols([node[1][1]], contextStack, builtin, evaluateNode);
|
|
3796
3875
|
},
|
|
3797
3876
|
};
|
|
3798
3877
|
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3878
|
+
var bindingTargetTypes = {
|
|
3879
|
+
symbol: 11,
|
|
3880
|
+
rest: 12,
|
|
3881
|
+
object: 13,
|
|
3882
|
+
array: 14,
|
|
3883
|
+
};
|
|
3884
|
+
|
|
3885
|
+
function walkDefaults(bindingTarget, onDefault) {
|
|
3886
|
+
var _a;
|
|
3887
|
+
if (bindingTarget[0] === bindingTargetTypes.object) {
|
|
3888
|
+
Object.values(bindingTarget[1][0]).forEach(function (element) {
|
|
3889
|
+
if (element[1][1]) {
|
|
3890
|
+
onDefault(element[1][1]);
|
|
3891
|
+
}
|
|
3892
|
+
walkDefaults(element, onDefault);
|
|
3893
|
+
});
|
|
3894
|
+
}
|
|
3895
|
+
else if (bindingTarget[0] === bindingTargetTypes.array) {
|
|
3896
|
+
for (var index = 0; index < bindingTarget[1][0].length; index += 1) {
|
|
3897
|
+
var element = (_a = bindingTarget[1][0][index]) !== null && _a !== void 0 ? _a : null;
|
|
3898
|
+
if (element === null) {
|
|
3899
|
+
continue;
|
|
3900
|
+
}
|
|
3901
|
+
if (element[1][1]) {
|
|
3902
|
+
onDefault(element[1][1]);
|
|
3903
|
+
}
|
|
3904
|
+
walkDefaults(element, onDefault);
|
|
3905
|
+
}
|
|
3906
|
+
}
|
|
3907
|
+
}
|
|
3908
|
+
function evalueateBindingNodeValues(target, value, evaluate) {
|
|
3909
|
+
var sourceCodeInfo = target[2];
|
|
3802
3910
|
var record = {};
|
|
3803
3911
|
createRecord(target, value, evaluate, sourceCodeInfo, record);
|
|
3804
3912
|
return record;
|
|
3805
3913
|
}
|
|
3806
3914
|
function createRecord(bindingTarget, value, evaluate, sourceCodeInfo, record) {
|
|
3807
3915
|
var _a, _b;
|
|
3808
|
-
if (bindingTarget
|
|
3916
|
+
if (bindingTarget[0] === bindingTargetTypes.object) {
|
|
3809
3917
|
assertUnknownRecord(value, sourceCodeInfo);
|
|
3810
3918
|
var capturedKeys_1 = new Set();
|
|
3811
3919
|
var restElement_1;
|
|
3812
|
-
Object.entries(bindingTarget
|
|
3920
|
+
Object.entries(bindingTarget[1][0]).forEach(function (_a) {
|
|
3813
3921
|
var _b;
|
|
3814
3922
|
var _c = __read(_a, 2), key = _c[0], element = _c[1];
|
|
3815
|
-
if (element
|
|
3923
|
+
if (element[0] === bindingTargetTypes.rest) {
|
|
3816
3924
|
restElement_1 = element;
|
|
3817
3925
|
return;
|
|
3818
3926
|
}
|
|
3819
3927
|
capturedKeys_1.add(key);
|
|
3820
|
-
var val = (_b = (value[key] !== undefined ? value[key] : element
|
|
3928
|
+
var val = (_b = (value[key] !== undefined ? value[key] : element[1][1] && evaluate(element[1][1]))) !== null && _b !== void 0 ? _b : null;
|
|
3821
3929
|
assertAny(val, sourceCodeInfo);
|
|
3822
3930
|
createRecord(element, val, evaluate, sourceCodeInfo, record);
|
|
3823
3931
|
});
|
|
@@ -3832,33 +3940,36 @@ function createRecord(bindingTarget, value, evaluate, sourceCodeInfo, record) {
|
|
|
3832
3940
|
acc[key] = asAny(val);
|
|
3833
3941
|
return acc;
|
|
3834
3942
|
}, {});
|
|
3835
|
-
record[restElement_1
|
|
3943
|
+
record[restElement_1[1][0]] = restValues;
|
|
3836
3944
|
}
|
|
3837
3945
|
}
|
|
3838
|
-
else if (bindingTarget
|
|
3946
|
+
else if (bindingTarget[0] === bindingTargetTypes.array) {
|
|
3839
3947
|
var restIndex = null;
|
|
3840
3948
|
assertArray(value, sourceCodeInfo);
|
|
3841
|
-
for (var index = 0; index < bindingTarget.
|
|
3842
|
-
var element = (_a = bindingTarget
|
|
3949
|
+
for (var index = 0; index < bindingTarget[1][0].length; index += 1) {
|
|
3950
|
+
var element = (_a = bindingTarget[1][0][index]) !== null && _a !== void 0 ? _a : null;
|
|
3843
3951
|
if (element === null) {
|
|
3844
3952
|
continue;
|
|
3845
3953
|
}
|
|
3846
|
-
if (element
|
|
3954
|
+
if (element[0] === bindingTargetTypes.rest) {
|
|
3847
3955
|
restIndex = index;
|
|
3848
3956
|
break;
|
|
3849
3957
|
}
|
|
3850
|
-
var val = (_b = (value[index] !== undefined ? value[index] : element
|
|
3958
|
+
var val = (_b = (value[index] !== undefined ? value[index] : element[1][1] && evaluate(element[1][1]))) !== null && _b !== void 0 ? _b : null;
|
|
3851
3959
|
assertAny(val, sourceCodeInfo);
|
|
3852
3960
|
createRecord(element, val, evaluate, sourceCodeInfo, record);
|
|
3853
3961
|
}
|
|
3854
3962
|
if (restIndex !== null) {
|
|
3855
3963
|
var restValues = value.slice(restIndex);
|
|
3856
|
-
var restElement = bindingTarget
|
|
3857
|
-
record[restElement
|
|
3964
|
+
var restElement = bindingTarget[1][0][restIndex];
|
|
3965
|
+
record[restElement[1][0]] = restValues;
|
|
3858
3966
|
}
|
|
3859
3967
|
}
|
|
3968
|
+
else if (bindingTarget[0] === bindingTargetTypes.rest) {
|
|
3969
|
+
record[bindingTarget[1][0]] = asAny(value);
|
|
3970
|
+
}
|
|
3860
3971
|
else {
|
|
3861
|
-
record[bindingTarget
|
|
3972
|
+
record[bindingTarget[1][0][1]] = asAny(value);
|
|
3862
3973
|
}
|
|
3863
3974
|
}
|
|
3864
3975
|
function getAllBindingTargetNames(bindingTarget) {
|
|
@@ -3871,9 +3982,9 @@ function getNamesFromBindingTarget(target, names) {
|
|
|
3871
3982
|
if (target === null) {
|
|
3872
3983
|
return;
|
|
3873
3984
|
}
|
|
3874
|
-
if (target
|
|
3985
|
+
if (target[0] === bindingTargetTypes.array) {
|
|
3875
3986
|
try {
|
|
3876
|
-
for (var _c = __values(target
|
|
3987
|
+
for (var _c = __values(target[1][0]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
3877
3988
|
var element = _d.value;
|
|
3878
3989
|
getNamesFromBindingTarget(element, names);
|
|
3879
3990
|
}
|
|
@@ -3886,9 +3997,9 @@ function getNamesFromBindingTarget(target, names) {
|
|
|
3886
3997
|
finally { if (e_1) throw e_1.error; }
|
|
3887
3998
|
}
|
|
3888
3999
|
}
|
|
3889
|
-
else if (target
|
|
4000
|
+
else if (target[0] === bindingTargetTypes.object) {
|
|
3890
4001
|
try {
|
|
3891
|
-
for (var _e = __values(Object.values(target
|
|
4002
|
+
for (var _e = __values(Object.values(target[1][0])), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
3892
4003
|
var element = _f.value;
|
|
3893
4004
|
getNamesFromBindingTarget(element, names);
|
|
3894
4005
|
}
|
|
@@ -3901,27 +4012,42 @@ function getNamesFromBindingTarget(target, names) {
|
|
|
3901
4012
|
finally { if (e_2) throw e_2.error; }
|
|
3902
4013
|
}
|
|
3903
4014
|
}
|
|
4015
|
+
else if (target[0] === bindingTargetTypes.rest) {
|
|
4016
|
+
if (names[target[1][0]]) {
|
|
4017
|
+
throw new LitsError("Duplicate binding name: ".concat(target[1][0]), target[2]);
|
|
4018
|
+
}
|
|
4019
|
+
names[target[1][0]] = true;
|
|
4020
|
+
}
|
|
3904
4021
|
else {
|
|
3905
|
-
if (names[target
|
|
3906
|
-
throw new LitsError("Duplicate binding name: ".concat(target
|
|
4022
|
+
if (names[target[1][0][1]]) {
|
|
4023
|
+
throw new LitsError("Duplicate binding name: ".concat(target[1][0]), target[2]);
|
|
3907
4024
|
}
|
|
3908
|
-
names[target
|
|
4025
|
+
names[target[1][0][1]] = true;
|
|
3909
4026
|
}
|
|
3910
4027
|
}
|
|
3911
4028
|
|
|
3912
4029
|
var defSpecialExpression = {
|
|
3913
4030
|
paramCount: 2,
|
|
3914
4031
|
evaluate: function (node, contextStack, _a) {
|
|
3915
|
-
var
|
|
3916
|
-
var
|
|
3917
|
-
var
|
|
4032
|
+
var evaluateNode = _a.evaluateNode;
|
|
4033
|
+
var bindingNode = node[1][1];
|
|
4034
|
+
var target = bindingNode[1][0];
|
|
4035
|
+
var value = bindingNode[1][1];
|
|
4036
|
+
var bindingValue = evaluateNode(value, contextStack);
|
|
4037
|
+
var values = evalueateBindingNodeValues(target, bindingValue, function (Node) { return evaluateNode(Node, contextStack); });
|
|
3918
4038
|
contextStack.exportValues(values);
|
|
3919
4039
|
return null;
|
|
3920
4040
|
},
|
|
3921
4041
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3922
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3923
|
-
var
|
|
3924
|
-
|
|
4042
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4043
|
+
var bindingNode = node[1][1];
|
|
4044
|
+
var target = bindingNode[1][0];
|
|
4045
|
+
var value = bindingNode[1][1];
|
|
4046
|
+
var bindingResult = getUndefinedSymbols([value], contextStack, builtin, evaluateNode);
|
|
4047
|
+
walkDefaults(target, function (defaultNode) {
|
|
4048
|
+
addToSet(bindingResult, getUndefinedSymbols([defaultNode], contextStack, builtin, evaluateNode));
|
|
4049
|
+
});
|
|
4050
|
+
contextStack.addValues(getAllBindingTargetNames(target));
|
|
3925
4051
|
return bindingResult;
|
|
3926
4052
|
},
|
|
3927
4053
|
};
|
|
@@ -3930,14 +4056,14 @@ var doSpecialExpression = {
|
|
|
3930
4056
|
paramCount: {},
|
|
3931
4057
|
evaluate: function (node, contextStack, _a) {
|
|
3932
4058
|
var e_1, _b;
|
|
3933
|
-
var
|
|
4059
|
+
var evaluateNode = _a.evaluateNode;
|
|
3934
4060
|
var newContext = {};
|
|
3935
4061
|
var newContextStack = contextStack.create(newContext);
|
|
3936
4062
|
var result = null;
|
|
3937
4063
|
try {
|
|
3938
|
-
for (var _c = __values(node
|
|
4064
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
3939
4065
|
var form = _d.value;
|
|
3940
|
-
result =
|
|
4066
|
+
result = evaluateNode(form, newContextStack);
|
|
3941
4067
|
}
|
|
3942
4068
|
}
|
|
3943
4069
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -3950,8 +4076,8 @@ var doSpecialExpression = {
|
|
|
3950
4076
|
return result;
|
|
3951
4077
|
},
|
|
3952
4078
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3953
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3954
|
-
return getUndefinedSymbols(node
|
|
4079
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4080
|
+
return getUndefinedSymbols(node[1][1], contextStack.create({}), builtin, evaluateNode);
|
|
3955
4081
|
},
|
|
3956
4082
|
};
|
|
3957
4083
|
|
|
@@ -4012,7 +4138,8 @@ function isNumberReservedSymbol(symbol) {
|
|
|
4012
4138
|
function assertNameNotDefined(name, contextStack, builtin, sourceCodeInfo) {
|
|
4013
4139
|
if (typeof name !== 'string')
|
|
4014
4140
|
return;
|
|
4015
|
-
|
|
4141
|
+
// TODO only subset of special expressions are necessary to check (CommonSpecialExpressionType)
|
|
4142
|
+
if (specialExpressionTypes[name])
|
|
4016
4143
|
throw new LitsError("Cannot define variable ".concat(name, ", it's a special expression."), sourceCodeInfo);
|
|
4017
4144
|
if (builtin.normalExpressions[name])
|
|
4018
4145
|
throw new LitsError("Cannot define variable ".concat(name, ", it's a builtin function."), sourceCodeInfo);
|
|
@@ -4026,63 +4153,69 @@ var functionSpecialExpression = {
|
|
|
4026
4153
|
paramCount: {},
|
|
4027
4154
|
evaluate: function (node, contextStack, _a) {
|
|
4028
4155
|
var _b, _c;
|
|
4029
|
-
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols,
|
|
4030
|
-
var
|
|
4031
|
-
|
|
4032
|
-
|
|
4156
|
+
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
4157
|
+
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
4158
|
+
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
4159
|
+
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
4160
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
4033
4161
|
var litsFunction = (_b = {},
|
|
4034
4162
|
_b[FUNCTION_SYMBOL] = true,
|
|
4035
|
-
_b.sourceCodeInfo = node
|
|
4163
|
+
_b.sourceCodeInfo = node[2],
|
|
4036
4164
|
_b.functionType = 'UserDefined',
|
|
4037
|
-
_b.name =
|
|
4165
|
+
_b.name = functionSymbol[1],
|
|
4038
4166
|
_b.evaluatedfunction = evaluatedFunction,
|
|
4039
4167
|
_b);
|
|
4040
|
-
contextStack.addValues((_c = {}, _c[
|
|
4168
|
+
contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c));
|
|
4041
4169
|
return null;
|
|
4042
4170
|
},
|
|
4043
4171
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4044
4172
|
var _b, _c;
|
|
4045
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4173
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4174
|
+
var functionName = node[1][1][1];
|
|
4175
|
+
contextStack.addValues((_b = {}, _b[functionName] = true, _b));
|
|
4176
|
+
var newContext = (_c = {}, _c[functionName] = { value: true }, _c);
|
|
4177
|
+
return getFunctionUnresolvedSymbols(node[1][2], contextStack, getUndefinedSymbols, builtin, evaluateNode, newContext);
|
|
4049
4178
|
},
|
|
4050
4179
|
};
|
|
4051
4180
|
var defnSpecialExpression = {
|
|
4052
4181
|
paramCount: {},
|
|
4053
4182
|
evaluate: function (node, contextStack, _a) {
|
|
4054
4183
|
var _b, _c;
|
|
4055
|
-
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols,
|
|
4056
|
-
var
|
|
4057
|
-
|
|
4058
|
-
|
|
4184
|
+
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
4185
|
+
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
4186
|
+
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
4187
|
+
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
4188
|
+
var evaluatedFunctionOverloades = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
4059
4189
|
var litsFunction = (_b = {},
|
|
4060
4190
|
_b[FUNCTION_SYMBOL] = true,
|
|
4061
|
-
_b.sourceCodeInfo = node
|
|
4191
|
+
_b.sourceCodeInfo = node[2],
|
|
4062
4192
|
_b.functionType = 'UserDefined',
|
|
4063
|
-
_b.name =
|
|
4193
|
+
_b.name = functionSymbol[1],
|
|
4064
4194
|
_b.evaluatedfunction = evaluatedFunctionOverloades,
|
|
4065
4195
|
_b);
|
|
4066
|
-
contextStack.exportValues((_c = {}, _c[
|
|
4196
|
+
contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c));
|
|
4067
4197
|
return null;
|
|
4068
4198
|
},
|
|
4069
4199
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4070
4200
|
var _b, _c;
|
|
4071
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4072
|
-
|
|
4073
|
-
var
|
|
4074
|
-
|
|
4201
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4202
|
+
var functionName = node[1][1][1];
|
|
4203
|
+
var fn = node[1][2];
|
|
4204
|
+
contextStack.exportValues((_b = {}, _b[functionName] = true, _b));
|
|
4205
|
+
var newContext = (_c = {}, _c[functionName] = { value: true }, _c);
|
|
4206
|
+
return getFunctionUnresolvedSymbols(fn, contextStack, getUndefinedSymbols, builtin, evaluateNode, newContext);
|
|
4075
4207
|
},
|
|
4076
4208
|
};
|
|
4077
4209
|
var fnSpecialExpression = {
|
|
4078
4210
|
paramCount: {},
|
|
4079
4211
|
evaluate: function (node, contextStack, _a) {
|
|
4080
4212
|
var _b;
|
|
4081
|
-
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols,
|
|
4082
|
-
var
|
|
4213
|
+
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
4214
|
+
var fn = node[1][1];
|
|
4215
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
4083
4216
|
var litsFunction = (_b = {},
|
|
4084
4217
|
_b[FUNCTION_SYMBOL] = true,
|
|
4085
|
-
_b.sourceCodeInfo = node
|
|
4218
|
+
_b.sourceCodeInfo = node[2],
|
|
4086
4219
|
_b.functionType = 'UserDefined',
|
|
4087
4220
|
_b.name = undefined,
|
|
4088
4221
|
_b.evaluatedfunction = evaluatedFunction,
|
|
@@ -4090,129 +4223,109 @@ var fnSpecialExpression = {
|
|
|
4090
4223
|
return litsFunction;
|
|
4091
4224
|
},
|
|
4092
4225
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4093
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4094
|
-
|
|
4226
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4227
|
+
var fn = node[1][1];
|
|
4228
|
+
return getFunctionUnresolvedSymbols(fn, contextStack, getUndefinedSymbols, builtin, evaluateNode);
|
|
4095
4229
|
},
|
|
4096
4230
|
};
|
|
4097
|
-
function evaluateFunction(
|
|
4098
|
-
var fn = node.function;
|
|
4231
|
+
function evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode) {
|
|
4099
4232
|
var functionContext = {};
|
|
4100
|
-
var context = fn.
|
|
4233
|
+
var context = fn[0].reduce(function (ctx, arg) {
|
|
4101
4234
|
Object.keys(getAllBindingTargetNames(arg)).forEach(function (name) {
|
|
4102
4235
|
ctx[name] = { value: null };
|
|
4103
4236
|
});
|
|
4104
4237
|
return ctx;
|
|
4105
4238
|
}, {});
|
|
4106
|
-
var undefinedSymbols = getUndefinedSymbols(fn
|
|
4239
|
+
var undefinedSymbols = getUndefinedSymbols(fn[1], contextStack.new(context), builtin, evaluateNode);
|
|
4107
4240
|
undefinedSymbols.forEach(function (name) {
|
|
4108
4241
|
var value = contextStack.getValue(name);
|
|
4109
4242
|
if (isAny(value)) {
|
|
4110
4243
|
functionContext[name] = { value: value };
|
|
4111
4244
|
}
|
|
4112
4245
|
});
|
|
4113
|
-
var evaluatedFunction =
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4246
|
+
var evaluatedFunction = [
|
|
4247
|
+
fn[0],
|
|
4248
|
+
fn[1],
|
|
4249
|
+
functionContext,
|
|
4250
|
+
];
|
|
4118
4251
|
return evaluatedFunction;
|
|
4119
4252
|
}
|
|
4120
|
-
function
|
|
4253
|
+
function getFunctionUnresolvedSymbols(fn, contextStack, getUndefinedSymbols, builtin, evaluateNode, functionNameContext) {
|
|
4121
4254
|
var result = new Set();
|
|
4122
4255
|
var contextStackWithFunctionName = functionNameContext ? contextStack.create(functionNameContext) : contextStack;
|
|
4123
4256
|
var newContext = {};
|
|
4124
|
-
fn.
|
|
4257
|
+
fn[0].forEach(function (arg) {
|
|
4125
4258
|
Object.assign(newContext, getAllBindingTargetNames(arg));
|
|
4259
|
+
walkDefaults(arg, function (defaultNode) {
|
|
4260
|
+
addToSet(result, getUndefinedSymbols([defaultNode], contextStack, builtin, evaluateNode));
|
|
4261
|
+
});
|
|
4126
4262
|
});
|
|
4127
4263
|
var newContextStack = contextStackWithFunctionName.create(newContext);
|
|
4128
|
-
var overloadResult = getUndefinedSymbols(fn
|
|
4264
|
+
var overloadResult = getUndefinedSymbols(fn[1], newContextStack, builtin, evaluateNode);
|
|
4129
4265
|
addToSet(result, overloadResult);
|
|
4130
4266
|
return result;
|
|
4131
4267
|
}
|
|
4132
4268
|
|
|
4133
|
-
function isAstNode(value) {
|
|
4134
|
-
if (value === null || typeof value !== 'object')
|
|
4135
|
-
return false;
|
|
4136
|
-
if (!isAstNodeType(value.type))
|
|
4137
|
-
return false;
|
|
4138
|
-
return true;
|
|
4139
|
-
}
|
|
4140
|
-
function asAstNode(value, sourceCodeInfo) {
|
|
4141
|
-
assertAstNode(value, sourceCodeInfo);
|
|
4142
|
-
return value;
|
|
4143
|
-
}
|
|
4144
|
-
function assertAstNode(value, sourceCodeInfo) {
|
|
4145
|
-
if (!isAstNode(value))
|
|
4146
|
-
throw getAssertionError('AstNode', value, sourceCodeInfo);
|
|
4147
|
-
}
|
|
4148
|
-
function isSymbolNode(value) {
|
|
4149
|
-
if (!isAstNode(value))
|
|
4150
|
-
return false;
|
|
4151
|
-
return value.type === 'Symbol';
|
|
4152
|
-
}
|
|
4153
|
-
function isNormalExpressionNodeWithName(value) {
|
|
4154
|
-
if (!isAstNode(value))
|
|
4155
|
-
return false;
|
|
4156
|
-
return value.type === 'NormalExpression' && typeof value.name === 'string';
|
|
4157
|
-
}
|
|
4158
|
-
|
|
4159
4269
|
var ifSpecialExpression = {
|
|
4160
4270
|
paramCount: { min: 2, max: 3 },
|
|
4161
4271
|
evaluate: function (node, contextStack, _a) {
|
|
4162
|
-
var
|
|
4163
|
-
var
|
|
4164
|
-
|
|
4165
|
-
|
|
4166
|
-
return evaluateAstNode(asAstNode(trueNode, sourceCodeInfo), contextStack);
|
|
4272
|
+
var evaluateNode = _a.evaluateNode;
|
|
4273
|
+
var _b = __read(node[1][1], 3), conditionNode = _b[0], trueNode = _b[1], falseNode = _b[2];
|
|
4274
|
+
if (evaluateNode(conditionNode, contextStack)) {
|
|
4275
|
+
return evaluateNode(trueNode, contextStack);
|
|
4167
4276
|
}
|
|
4168
|
-
else {
|
|
4169
|
-
|
|
4170
|
-
return evaluateAstNode(asAstNode(falseNode, sourceCodeInfo), contextStack);
|
|
4171
|
-
else
|
|
4172
|
-
return null;
|
|
4277
|
+
else if (falseNode) {
|
|
4278
|
+
return evaluateNode(falseNode, contextStack);
|
|
4173
4279
|
}
|
|
4280
|
+
return null;
|
|
4174
4281
|
},
|
|
4175
4282
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4176
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4177
|
-
return getUndefinedSymbols(node.
|
|
4283
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4284
|
+
return getUndefinedSymbols(node[1][1].filter(function (n) { return !!n; }), contextStack, builtin, evaluateNode);
|
|
4178
4285
|
},
|
|
4179
4286
|
};
|
|
4180
4287
|
|
|
4181
4288
|
var unlessSpecialExpression = {
|
|
4182
4289
|
paramCount: { min: 2, max: 3 },
|
|
4183
4290
|
evaluate: function (node, contextStack, _a) {
|
|
4184
|
-
var
|
|
4185
|
-
var
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
return evaluateAstNode(asAstNode(trueNode, sourceCodeInfo), contextStack);
|
|
4291
|
+
var evaluateNode = _a.evaluateNode;
|
|
4292
|
+
var _b = __read(node[1][1], 3), conditionNode = _b[0], trueNode = _b[1], falseNode = _b[2];
|
|
4293
|
+
if (!evaluateNode(conditionNode, contextStack)) {
|
|
4294
|
+
return evaluateNode(trueNode, contextStack);
|
|
4189
4295
|
}
|
|
4190
|
-
else {
|
|
4191
|
-
|
|
4192
|
-
return evaluateAstNode(asAstNode(falseNode, sourceCodeInfo), contextStack);
|
|
4193
|
-
else
|
|
4194
|
-
return null;
|
|
4296
|
+
else if (falseNode) {
|
|
4297
|
+
return evaluateNode(falseNode, contextStack);
|
|
4195
4298
|
}
|
|
4299
|
+
return null;
|
|
4196
4300
|
},
|
|
4197
4301
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4198
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4199
|
-
return getUndefinedSymbols(node.
|
|
4302
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4303
|
+
return getUndefinedSymbols(node[1][1].filter(function (n) { return !!n; }), contextStack, builtin, evaluateNode);
|
|
4200
4304
|
},
|
|
4201
4305
|
};
|
|
4202
4306
|
|
|
4203
4307
|
var letSpecialExpression = {
|
|
4204
4308
|
paramCount: 0,
|
|
4205
4309
|
evaluate: function (node, contextStack, _a) {
|
|
4206
|
-
var
|
|
4207
|
-
var
|
|
4208
|
-
var
|
|
4310
|
+
var evaluateNode = _a.evaluateNode;
|
|
4311
|
+
var bindingNode = node[1][1];
|
|
4312
|
+
var target = bindingNode[1][0];
|
|
4313
|
+
var value = bindingNode[1][1];
|
|
4314
|
+
var bindingValue = evaluateNode(value, contextStack);
|
|
4315
|
+
var values = evalueateBindingNodeValues(target, bindingValue, function (Node) { return evaluateNode(Node, contextStack); });
|
|
4209
4316
|
contextStack.addValues(values);
|
|
4210
4317
|
return null;
|
|
4211
4318
|
},
|
|
4212
4319
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4213
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4214
|
-
var
|
|
4215
|
-
|
|
4320
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4321
|
+
var bindingNode = node[1][1];
|
|
4322
|
+
var target = bindingNode[1][0];
|
|
4323
|
+
var value = bindingNode[1][1];
|
|
4324
|
+
var bindingResult = getUndefinedSymbols([value], contextStack, builtin, evaluateNode);
|
|
4325
|
+
walkDefaults(target, function (defaultNode) {
|
|
4326
|
+
addToSet(bindingResult, getUndefinedSymbols([defaultNode], contextStack, builtin, evaluateNode));
|
|
4327
|
+
});
|
|
4328
|
+
contextStack.addValues(getAllBindingTargetNames(target));
|
|
4216
4329
|
return bindingResult;
|
|
4217
4330
|
},
|
|
4218
4331
|
};
|
|
@@ -4220,11 +4333,11 @@ var letSpecialExpression = {
|
|
|
4220
4333
|
var loopSpecialExpression = {
|
|
4221
4334
|
paramCount: {},
|
|
4222
4335
|
evaluate: function (node, contextStack, _a) {
|
|
4223
|
-
var
|
|
4224
|
-
var
|
|
4225
|
-
var bindingContext =
|
|
4226
|
-
var val =
|
|
4227
|
-
var valueRecord = evalueateBindingNodeValues(
|
|
4336
|
+
var evaluateNode = _a.evaluateNode;
|
|
4337
|
+
var bindingNodes = node[1][1];
|
|
4338
|
+
var bindingContext = bindingNodes.reduce(function (result, bindingNode) {
|
|
4339
|
+
var val = evaluateNode(bindingNode[1][1], contextStack.create(result));
|
|
4340
|
+
var valueRecord = evalueateBindingNodeValues(bindingNode[1][0], val, function (Node) { return evaluateNode(Node, contextStack); });
|
|
4228
4341
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4229
4342
|
var _b = __read(_a, 2), name = _b[0], value = _b[1];
|
|
4230
4343
|
result[name] = { value: value };
|
|
@@ -4232,20 +4345,21 @@ var loopSpecialExpression = {
|
|
|
4232
4345
|
return result;
|
|
4233
4346
|
}, {});
|
|
4234
4347
|
var newContextStack = contextStack.create(bindingContext);
|
|
4348
|
+
var body = node[1][2];
|
|
4235
4349
|
var _loop_1 = function () {
|
|
4236
4350
|
var e_1, _b;
|
|
4237
4351
|
var result = null;
|
|
4238
4352
|
try {
|
|
4239
4353
|
try {
|
|
4240
|
-
for (var
|
|
4241
|
-
var form =
|
|
4242
|
-
result =
|
|
4354
|
+
for (var body_1 = (e_1 = void 0, __values(body)), body_1_1 = body_1.next(); !body_1_1.done; body_1_1 = body_1.next()) {
|
|
4355
|
+
var form = body_1_1.value;
|
|
4356
|
+
result = evaluateNode(form, newContextStack);
|
|
4243
4357
|
}
|
|
4244
4358
|
}
|
|
4245
4359
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
4246
4360
|
finally {
|
|
4247
4361
|
try {
|
|
4248
|
-
if (
|
|
4362
|
+
if (body_1_1 && !body_1_1.done && (_b = body_1.return)) _b.call(body_1);
|
|
4249
4363
|
}
|
|
4250
4364
|
finally { if (e_1) throw e_1.error; }
|
|
4251
4365
|
}
|
|
@@ -4253,16 +4367,16 @@ var loopSpecialExpression = {
|
|
|
4253
4367
|
catch (error) {
|
|
4254
4368
|
if (error instanceof RecurSignal) {
|
|
4255
4369
|
var params_1 = error.params;
|
|
4256
|
-
if (params_1.length !==
|
|
4257
|
-
throw new LitsError("recur expected ".concat(
|
|
4370
|
+
if (params_1.length !== bindingNodes.length) {
|
|
4371
|
+
throw new LitsError("recur expected ".concat(bindingNodes.length, " parameters, got ").concat(valueToString(params_1.length)), node[2]);
|
|
4258
4372
|
}
|
|
4259
|
-
|
|
4373
|
+
bindingNodes.forEach(function (bindingNode, index) {
|
|
4260
4374
|
var e_2, _a;
|
|
4261
|
-
var valueRecord = evalueateBindingNodeValues(
|
|
4375
|
+
var valueRecord = evalueateBindingNodeValues(bindingNode[1][0], asAny(params_1[index]), function (Node) { return evaluateNode(Node, contextStack); });
|
|
4262
4376
|
try {
|
|
4263
4377
|
for (var _b = (e_2 = void 0, __values(Object.entries(valueRecord))), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
4264
4378
|
var _d = __read(_c.value, 2), name_1 = _d[0], value = _d[1];
|
|
4265
|
-
|
|
4379
|
+
bindingContext[name_1].value = value;
|
|
4266
4380
|
}
|
|
4267
4381
|
}
|
|
4268
4382
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
@@ -4286,29 +4400,31 @@ var loopSpecialExpression = {
|
|
|
4286
4400
|
}
|
|
4287
4401
|
},
|
|
4288
4402
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4289
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4290
|
-
var
|
|
4403
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4404
|
+
var bindingNodes = node[1][1];
|
|
4405
|
+
var newContext = bindingNodes
|
|
4291
4406
|
.reduce(function (context, bindingNode) {
|
|
4292
|
-
var names = getAllBindingTargetNames(bindingNode
|
|
4407
|
+
var names = getAllBindingTargetNames(bindingNode[1][0]);
|
|
4293
4408
|
Object.keys(names).forEach(function (name) {
|
|
4294
4409
|
context[name] = { value: true };
|
|
4295
4410
|
});
|
|
4296
4411
|
return context;
|
|
4297
4412
|
}, {});
|
|
4298
|
-
var bindingValueNodes =
|
|
4299
|
-
var bindingsResult = getUndefinedSymbols(bindingValueNodes, contextStack, builtin,
|
|
4300
|
-
var paramsResult = getUndefinedSymbols(node
|
|
4413
|
+
var bindingValueNodes = bindingNodes.map(function (bindingNode) { return bindingNode[1][1]; });
|
|
4414
|
+
var bindingsResult = getUndefinedSymbols(bindingValueNodes, contextStack, builtin, evaluateNode);
|
|
4415
|
+
var paramsResult = getUndefinedSymbols(node[1][2], contextStack.create(newContext), builtin, evaluateNode);
|
|
4301
4416
|
return joinSets(bindingsResult, paramsResult);
|
|
4302
4417
|
},
|
|
4303
4418
|
};
|
|
4304
4419
|
|
|
4305
|
-
function addToContext(bindings, context, contextStack,
|
|
4420
|
+
function addToContext(bindings, context, contextStack, evaluateNode) {
|
|
4306
4421
|
var e_1, _a;
|
|
4307
4422
|
try {
|
|
4308
4423
|
for (var bindings_1 = __values(bindings), bindings_1_1 = bindings_1.next(); !bindings_1_1.done; bindings_1_1 = bindings_1.next()) {
|
|
4309
|
-
var
|
|
4310
|
-
var
|
|
4311
|
-
var
|
|
4424
|
+
var bindingNode = bindings_1_1.value;
|
|
4425
|
+
var _b = __read(bindingNode[1], 2), target = _b[0], bindingValue = _b[1];
|
|
4426
|
+
var val = evaluateNode(bindingValue, contextStack);
|
|
4427
|
+
var valueRecord = evalueateBindingNodeValues(target, val, function (Node) { return evaluateNode(Node, contextStack); });
|
|
4312
4428
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4313
4429
|
var _b = __read(_a, 2), name = _b[0], value = _b[1];
|
|
4314
4430
|
context[name] = { value: value };
|
|
@@ -4323,9 +4439,9 @@ function addToContext(bindings, context, contextStack, evaluateAstNode) {
|
|
|
4323
4439
|
finally { if (e_1) throw e_1.error; }
|
|
4324
4440
|
}
|
|
4325
4441
|
}
|
|
4326
|
-
function evaluateLoop(returnResult,
|
|
4327
|
-
var sourceCodeInfo =
|
|
4328
|
-
var _a =
|
|
4442
|
+
function evaluateLoop(returnResult, loopNode, contextStack, evaluateNode) {
|
|
4443
|
+
var sourceCodeInfo = loopNode[2];
|
|
4444
|
+
var _a = __read(loopNode[1], 3), loopBindings = _a[1], body = _a[2];
|
|
4329
4445
|
var result = [];
|
|
4330
4446
|
var bindingIndices = loopBindings.map(function () { return 0; });
|
|
4331
4447
|
var abort = false;
|
|
@@ -4335,8 +4451,9 @@ function evaluateLoop(returnResult, node, contextStack, evaluateAstNode) {
|
|
|
4335
4451
|
var newContextStack = contextStack.create(context);
|
|
4336
4452
|
var skip = false;
|
|
4337
4453
|
bindingsLoop: for (var bindingIndex = 0; bindingIndex < loopBindings.length; bindingIndex += 1) {
|
|
4338
|
-
var _c =
|
|
4339
|
-
var
|
|
4454
|
+
var _c = __read(loopBindings[bindingIndex], 4), bindingNode = _c[0], letBindings = _c[1], whenNode = _c[2], whileNode = _c[3];
|
|
4455
|
+
var _d = __read(bindingNode[1], 2), targetNode = _d[0], valueNode = _d[1];
|
|
4456
|
+
var coll = asColl(evaluateNode(valueNode, newContextStack), sourceCodeInfo);
|
|
4340
4457
|
var seq = isSeq(coll) ? coll : Object.entries(coll);
|
|
4341
4458
|
if (seq.length === 0) {
|
|
4342
4459
|
skip = true;
|
|
@@ -4355,45 +4472,40 @@ function evaluateLoop(returnResult, node, contextStack, evaluateAstNode) {
|
|
|
4355
4472
|
break;
|
|
4356
4473
|
}
|
|
4357
4474
|
var val = asAny(seq[index], sourceCodeInfo);
|
|
4358
|
-
var valueRecord = evalueateBindingNodeValues(
|
|
4475
|
+
var valueRecord = evalueateBindingNodeValues(targetNode, val, function (Node) { return evaluateNode(Node, newContextStack); });
|
|
4359
4476
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4360
4477
|
var _b = __read(_a, 2), name = _b[0], value = _b[1];
|
|
4361
4478
|
context[name] = { value: value };
|
|
4362
4479
|
});
|
|
4480
|
+
if (letBindings) {
|
|
4481
|
+
addToContext(letBindings, context, newContextStack, evaluateNode);
|
|
4482
|
+
}
|
|
4483
|
+
if (whenNode && !evaluateNode(whenNode, newContextStack)) {
|
|
4484
|
+
bindingIndices[bindingIndex] = asNonUndefined(bindingIndices[bindingIndex], sourceCodeInfo) + 1;
|
|
4485
|
+
skip = true;
|
|
4486
|
+
break bindingsLoop;
|
|
4487
|
+
}
|
|
4488
|
+
if (whileNode && !evaluateNode(whileNode, newContextStack)) {
|
|
4489
|
+
bindingIndices[bindingIndex] = Number.POSITIVE_INFINITY;
|
|
4490
|
+
skip = true;
|
|
4491
|
+
break bindingsLoop;
|
|
4492
|
+
}
|
|
4493
|
+
}
|
|
4494
|
+
if (!skip) {
|
|
4495
|
+
var value = null;
|
|
4363
4496
|
try {
|
|
4364
|
-
for (var
|
|
4365
|
-
var
|
|
4366
|
-
|
|
4367
|
-
case '&let':
|
|
4368
|
-
addToContext(asNonUndefined(letBindings, sourceCodeInfo), context, newContextStack, evaluateAstNode);
|
|
4369
|
-
break;
|
|
4370
|
-
case '&when':
|
|
4371
|
-
if (!evaluateAstNode(asAstNode(whenNode, sourceCodeInfo), newContextStack)) {
|
|
4372
|
-
bindingIndices[bindingIndex] = asNonUndefined(bindingIndices[bindingIndex], sourceCodeInfo) + 1;
|
|
4373
|
-
skip = true;
|
|
4374
|
-
break bindingsLoop;
|
|
4375
|
-
}
|
|
4376
|
-
break;
|
|
4377
|
-
case '&while':
|
|
4378
|
-
if (!evaluateAstNode(asAstNode(whileNode, sourceCodeInfo), newContextStack)) {
|
|
4379
|
-
bindingIndices[bindingIndex] = Number.POSITIVE_INFINITY;
|
|
4380
|
-
skip = true;
|
|
4381
|
-
break bindingsLoop;
|
|
4382
|
-
}
|
|
4383
|
-
break;
|
|
4384
|
-
}
|
|
4497
|
+
for (var body_1 = (e_2 = void 0, __values(body)), body_1_1 = body_1.next(); !body_1_1.done; body_1_1 = body_1.next()) {
|
|
4498
|
+
var form = body_1_1.value;
|
|
4499
|
+
value = evaluateNode(form, newContextStack);
|
|
4385
4500
|
}
|
|
4386
4501
|
}
|
|
4387
4502
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
4388
4503
|
finally {
|
|
4389
4504
|
try {
|
|
4390
|
-
if (
|
|
4505
|
+
if (body_1_1 && !body_1_1.done && (_b = body_1.return)) _b.call(body_1);
|
|
4391
4506
|
}
|
|
4392
4507
|
finally { if (e_2) throw e_2.error; }
|
|
4393
4508
|
}
|
|
4394
|
-
}
|
|
4395
|
-
if (!skip) {
|
|
4396
|
-
var value = evaluateAstNode(params[0], newContextStack);
|
|
4397
4509
|
if (returnResult)
|
|
4398
4510
|
result.push(value);
|
|
4399
4511
|
if (bindingIndices.length > 0)
|
|
@@ -4405,57 +4517,59 @@ function evaluateLoop(returnResult, node, contextStack, evaluateAstNode) {
|
|
|
4405
4517
|
}
|
|
4406
4518
|
return returnResult ? result : null;
|
|
4407
4519
|
}
|
|
4408
|
-
function analyze(
|
|
4520
|
+
function analyze(loopNode, contextStack, getUndefinedSymbols, builtin, evaluateNode) {
|
|
4409
4521
|
var result = new Set();
|
|
4410
4522
|
var newContext = {};
|
|
4411
|
-
var loopBindings =
|
|
4412
|
-
loopBindings.forEach(function (
|
|
4413
|
-
var
|
|
4414
|
-
|
|
4523
|
+
var _a = __read(loopNode[1], 3), loopBindings = _a[1], body = _a[2];
|
|
4524
|
+
loopBindings.forEach(function (loopBindingNode) {
|
|
4525
|
+
var _a = __read(loopBindingNode, 4), bindingNode = _a[0], letBindings = _a[1], whenNode = _a[2], whileNode = _a[3];
|
|
4526
|
+
var _b = __read(bindingNode[1], 2), target = _b[0], value = _b[1];
|
|
4527
|
+
getUndefinedSymbols([value], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4415
4528
|
return result.add(symbol);
|
|
4416
4529
|
});
|
|
4417
|
-
Object.assign(newContext, getAllBindingTargetNames(
|
|
4530
|
+
Object.assign(newContext, getAllBindingTargetNames(target));
|
|
4418
4531
|
if (letBindings) {
|
|
4419
|
-
letBindings.forEach(function (
|
|
4420
|
-
|
|
4532
|
+
letBindings.forEach(function (letBindingNode) {
|
|
4533
|
+
var _a = __read(letBindingNode[1], 2), letTarget = _a[0], letValue = _a[1];
|
|
4534
|
+
getUndefinedSymbols([letValue], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4421
4535
|
return result.add(symbol);
|
|
4422
4536
|
});
|
|
4423
|
-
Object.assign(newContext, getAllBindingTargetNames(
|
|
4537
|
+
Object.assign(newContext, getAllBindingTargetNames(letTarget));
|
|
4424
4538
|
});
|
|
4425
4539
|
}
|
|
4426
4540
|
if (whenNode) {
|
|
4427
|
-
getUndefinedSymbols([whenNode], contextStack.create(newContext), builtin,
|
|
4541
|
+
getUndefinedSymbols([whenNode], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4428
4542
|
return result.add(symbol);
|
|
4429
4543
|
});
|
|
4430
4544
|
}
|
|
4431
4545
|
if (whileNode) {
|
|
4432
|
-
getUndefinedSymbols([whileNode], contextStack.create(newContext), builtin,
|
|
4546
|
+
getUndefinedSymbols([whileNode], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4433
4547
|
return result.add(symbol);
|
|
4434
4548
|
});
|
|
4435
4549
|
}
|
|
4436
4550
|
});
|
|
4437
|
-
getUndefinedSymbols(
|
|
4551
|
+
getUndefinedSymbols(body, contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4438
4552
|
return result.add(symbol);
|
|
4439
4553
|
});
|
|
4440
4554
|
return result;
|
|
4441
4555
|
}
|
|
4442
4556
|
var forSpecialExpression = {
|
|
4443
4557
|
paramCount: 1,
|
|
4444
|
-
evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.
|
|
4558
|
+
evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.evaluateNode); },
|
|
4445
4559
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4446
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4447
|
-
return analyze(node, contextStack, getUndefinedSymbols, builtin,
|
|
4560
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4561
|
+
return analyze(node, contextStack, getUndefinedSymbols, builtin, evaluateNode);
|
|
4448
4562
|
},
|
|
4449
4563
|
};
|
|
4450
4564
|
var doseqSpecialExpression = {
|
|
4451
4565
|
paramCount: 1,
|
|
4452
4566
|
evaluate: function (node, contextStack, helpers) {
|
|
4453
|
-
evaluateLoop(false, node, contextStack, helpers.
|
|
4567
|
+
evaluateLoop(false, node, contextStack, helpers.evaluateNode);
|
|
4454
4568
|
return null;
|
|
4455
4569
|
},
|
|
4456
4570
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4457
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4458
|
-
return analyze(node, contextStack, getUndefinedSymbols, builtin,
|
|
4571
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4572
|
+
return analyze(node, contextStack, getUndefinedSymbols, builtin, evaluateNode);
|
|
4459
4573
|
},
|
|
4460
4574
|
};
|
|
4461
4575
|
|
|
@@ -4463,12 +4577,12 @@ var orSpecialExpression = {
|
|
|
4463
4577
|
paramCount: {},
|
|
4464
4578
|
evaluate: function (node, contextStack, _a) {
|
|
4465
4579
|
var e_1, _b;
|
|
4466
|
-
var
|
|
4580
|
+
var evaluateNode = _a.evaluateNode;
|
|
4467
4581
|
var value = false;
|
|
4468
4582
|
try {
|
|
4469
|
-
for (var _c = __values(node
|
|
4583
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
4470
4584
|
var param = _d.value;
|
|
4471
|
-
value =
|
|
4585
|
+
value = evaluateNode(param, contextStack);
|
|
4472
4586
|
if (value)
|
|
4473
4587
|
break;
|
|
4474
4588
|
}
|
|
@@ -4483,55 +4597,55 @@ var orSpecialExpression = {
|
|
|
4483
4597
|
return value;
|
|
4484
4598
|
},
|
|
4485
4599
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4486
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4487
|
-
return getUndefinedSymbols(node
|
|
4600
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4601
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4488
4602
|
},
|
|
4489
4603
|
};
|
|
4490
4604
|
|
|
4491
4605
|
var qqSpecialExpression = {
|
|
4492
4606
|
paramCount: { min: 1, max: 2 },
|
|
4493
4607
|
evaluate: function (node, contextStack, _a) {
|
|
4494
|
-
var
|
|
4495
|
-
var _b = __read(node
|
|
4496
|
-
if (
|
|
4497
|
-
|
|
4498
|
-
return secondNode ? evaluateAstNode(secondNode, contextStack) : null;
|
|
4608
|
+
var evaluateNode = _a.evaluateNode;
|
|
4609
|
+
var _b = __read(node[1][1], 2), firstNode = _b[0], secondNode = _b[1];
|
|
4610
|
+
if (isUserDefinedSymbolNode(firstNode) && contextStack.lookUp(firstNode) === null) {
|
|
4611
|
+
return secondNode ? evaluateNode(secondNode, contextStack) : null;
|
|
4499
4612
|
}
|
|
4500
|
-
assertAny(firstNode, node
|
|
4501
|
-
var firstResult =
|
|
4502
|
-
return firstResult !== null && firstResult !== void 0 ? firstResult : (secondNode ?
|
|
4613
|
+
assertAny(firstNode, node[2]);
|
|
4614
|
+
var firstResult = evaluateNode(firstNode, contextStack);
|
|
4615
|
+
return firstResult !== null && firstResult !== void 0 ? firstResult : (secondNode ? evaluateNode(secondNode, contextStack) : null);
|
|
4503
4616
|
},
|
|
4504
4617
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4505
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4506
|
-
return getUndefinedSymbols(node.
|
|
4618
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4619
|
+
return getUndefinedSymbols(node[1][1].filter(function (n) { return !!n; }), contextStack, builtin, evaluateNode);
|
|
4507
4620
|
},
|
|
4508
4621
|
};
|
|
4509
4622
|
|
|
4510
4623
|
var recurSpecialExpression = {
|
|
4511
4624
|
paramCount: {},
|
|
4512
4625
|
evaluate: function (node, contextStack, _a) {
|
|
4513
|
-
var
|
|
4514
|
-
var params = node
|
|
4515
|
-
|
|
4626
|
+
var evaluateNode = _a.evaluateNode;
|
|
4627
|
+
var params = node[1][1];
|
|
4628
|
+
var evaluatedParams = params.map(function (paramNode) { return evaluateNode(paramNode, contextStack); });
|
|
4629
|
+
throw new RecurSignal(evaluatedParams);
|
|
4516
4630
|
},
|
|
4517
4631
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4518
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4519
|
-
return getUndefinedSymbols(node
|
|
4632
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4633
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4520
4634
|
},
|
|
4521
4635
|
};
|
|
4522
4636
|
|
|
4523
4637
|
var throwSpecialExpression = {
|
|
4524
4638
|
paramCount: 1,
|
|
4525
4639
|
evaluate: function (node, contextStack, _a) {
|
|
4526
|
-
var
|
|
4527
|
-
var message = asString(
|
|
4640
|
+
var evaluateNode = _a.evaluateNode;
|
|
4641
|
+
var message = asString(evaluateNode(node[1][1], contextStack), node[2], {
|
|
4528
4642
|
nonEmpty: true,
|
|
4529
4643
|
});
|
|
4530
|
-
throw new UserDefinedError(message, node
|
|
4644
|
+
throw new UserDefinedError(message, node[2]);
|
|
4531
4645
|
},
|
|
4532
4646
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4533
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4534
|
-
return getUndefinedSymbols(node
|
|
4647
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4648
|
+
return getUndefinedSymbols([node[1][1]], contextStack, builtin, evaluateNode);
|
|
4535
4649
|
},
|
|
4536
4650
|
};
|
|
4537
4651
|
|
|
@@ -4539,29 +4653,29 @@ var trySpecialExpression = {
|
|
|
4539
4653
|
paramCount: 1,
|
|
4540
4654
|
evaluate: function (node, contextStack, _a) {
|
|
4541
4655
|
var _b;
|
|
4542
|
-
var
|
|
4543
|
-
var
|
|
4656
|
+
var evaluateNode = _a.evaluateNode;
|
|
4657
|
+
var _c = __read(node[1], 4), tryExpression = _c[1], errorSymbol = _c[2], catchExpression = _c[3];
|
|
4544
4658
|
try {
|
|
4545
|
-
return
|
|
4659
|
+
return evaluateNode(tryExpression, contextStack);
|
|
4546
4660
|
}
|
|
4547
4661
|
catch (error) {
|
|
4548
|
-
var newContext =
|
|
4662
|
+
var newContext = errorSymbol
|
|
4549
4663
|
? (_b = {},
|
|
4550
|
-
_b[
|
|
4664
|
+
_b[errorSymbol[1]] = { value: error },
|
|
4551
4665
|
_b) : {};
|
|
4552
|
-
return
|
|
4666
|
+
return evaluateNode(catchExpression, contextStack.create(newContext));
|
|
4553
4667
|
}
|
|
4554
4668
|
},
|
|
4555
4669
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4556
4670
|
var _b;
|
|
4557
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4558
|
-
var
|
|
4559
|
-
var tryResult = getUndefinedSymbols(
|
|
4560
|
-
var newContext =
|
|
4671
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4672
|
+
var _c = __read(node[1], 4), tryExpression = _c[1], errorSymbol = _c[2], catchExpression = _c[3];
|
|
4673
|
+
var tryResult = getUndefinedSymbols([tryExpression], contextStack, builtin, evaluateNode);
|
|
4674
|
+
var newContext = errorSymbol
|
|
4561
4675
|
? (_b = {},
|
|
4562
|
-
_b[
|
|
4676
|
+
_b[errorSymbol[1]] = { value: true },
|
|
4563
4677
|
_b) : {};
|
|
4564
|
-
var catchResult = getUndefinedSymbols([catchExpression], contextStack.create(newContext), builtin,
|
|
4678
|
+
var catchResult = getUndefinedSymbols([catchExpression], contextStack.create(newContext), builtin, evaluateNode);
|
|
4565
4679
|
return joinSets(tryResult, catchResult);
|
|
4566
4680
|
},
|
|
4567
4681
|
};
|
|
@@ -4570,20 +4684,20 @@ var arraySpecialExpression = {
|
|
|
4570
4684
|
paramCount: {},
|
|
4571
4685
|
evaluate: function (node, contextStack, _a) {
|
|
4572
4686
|
var e_1, _b;
|
|
4573
|
-
var
|
|
4687
|
+
var evaluateNode = _a.evaluateNode;
|
|
4574
4688
|
var result = [];
|
|
4575
4689
|
try {
|
|
4576
|
-
for (var _c = __values(node
|
|
4690
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
4577
4691
|
var param = _d.value;
|
|
4578
|
-
if (param
|
|
4579
|
-
var spreadValue =
|
|
4692
|
+
if (isSpreadNode(param)) {
|
|
4693
|
+
var spreadValue = evaluateNode(param[1], contextStack);
|
|
4580
4694
|
if (!Array.isArray(spreadValue)) {
|
|
4581
|
-
throw new LitsError('Spread value is not an array', param
|
|
4695
|
+
throw new LitsError('Spread value is not an array', param[2]);
|
|
4582
4696
|
}
|
|
4583
4697
|
result.push.apply(result, __spreadArray([], __read(spreadValue), false));
|
|
4584
4698
|
}
|
|
4585
4699
|
else {
|
|
4586
|
-
result.push(
|
|
4700
|
+
result.push(evaluateNode(param, contextStack));
|
|
4587
4701
|
}
|
|
4588
4702
|
}
|
|
4589
4703
|
}
|
|
@@ -4597,76 +4711,79 @@ var arraySpecialExpression = {
|
|
|
4597
4711
|
return result;
|
|
4598
4712
|
},
|
|
4599
4713
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4600
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4601
|
-
return getUndefinedSymbols(node
|
|
4714
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4715
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4602
4716
|
},
|
|
4603
4717
|
};
|
|
4604
4718
|
|
|
4605
4719
|
var objectSpecialExpression = {
|
|
4606
4720
|
paramCount: {},
|
|
4607
4721
|
evaluate: function (node, contextStack, _a) {
|
|
4608
|
-
var
|
|
4722
|
+
var evaluateNode = _a.evaluateNode;
|
|
4609
4723
|
var result = {};
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4724
|
+
var params = node[1][1];
|
|
4725
|
+
for (var i = 0; i < params.length; i += 2) {
|
|
4726
|
+
var keyNode = params[i];
|
|
4727
|
+
if (isSpreadNode(keyNode)) {
|
|
4728
|
+
var spreadObject = evaluateNode(keyNode[1], contextStack);
|
|
4614
4729
|
if (!isUnknownRecord(spreadObject)) {
|
|
4615
|
-
throw new LitsError('Spread value is not an object', keyNode
|
|
4730
|
+
throw new LitsError('Spread value is not an object', keyNode[2]);
|
|
4616
4731
|
}
|
|
4617
4732
|
Object.assign(result, spreadObject);
|
|
4618
4733
|
i -= 1;
|
|
4619
4734
|
}
|
|
4620
4735
|
else {
|
|
4621
|
-
var key =
|
|
4622
|
-
var value =
|
|
4623
|
-
assertString(key, keyNode
|
|
4736
|
+
var key = evaluateNode(keyNode, contextStack);
|
|
4737
|
+
var value = evaluateNode(params[i + 1], contextStack);
|
|
4738
|
+
assertString(key, keyNode[2]);
|
|
4624
4739
|
result[key] = value;
|
|
4625
4740
|
}
|
|
4626
4741
|
}
|
|
4627
4742
|
return result;
|
|
4628
4743
|
},
|
|
4629
4744
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4630
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4631
|
-
return getUndefinedSymbols(node
|
|
4745
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4746
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4632
4747
|
},
|
|
4633
4748
|
};
|
|
4634
4749
|
|
|
4635
|
-
var specialExpressions =
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4640
|
-
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4750
|
+
var specialExpressions = [
|
|
4751
|
+
qqSpecialExpression,
|
|
4752
|
+
andSpecialExpression,
|
|
4753
|
+
orSpecialExpression,
|
|
4754
|
+
arraySpecialExpression,
|
|
4755
|
+
condSpecialExpression,
|
|
4756
|
+
defSpecialExpression,
|
|
4757
|
+
definedSpecialExpression,
|
|
4758
|
+
defnSpecialExpression,
|
|
4759
|
+
doSpecialExpression,
|
|
4760
|
+
doseqSpecialExpression,
|
|
4761
|
+
fnSpecialExpression,
|
|
4762
|
+
forSpecialExpression,
|
|
4763
|
+
functionSpecialExpression,
|
|
4764
|
+
ifSpecialExpression,
|
|
4765
|
+
letSpecialExpression,
|
|
4766
|
+
loopSpecialExpression,
|
|
4767
|
+
objectSpecialExpression,
|
|
4768
|
+
recurSpecialExpression,
|
|
4769
|
+
switchSpecialExpression,
|
|
4770
|
+
throwSpecialExpression,
|
|
4771
|
+
trySpecialExpression,
|
|
4772
|
+
unlessSpecialExpression,
|
|
4773
|
+
];
|
|
4659
4774
|
var builtin = {
|
|
4660
4775
|
normalExpressions: normalExpressions,
|
|
4661
4776
|
specialExpressions: specialExpressions,
|
|
4777
|
+
allNormalExpressions: allNormalExpressions,
|
|
4662
4778
|
};
|
|
4663
4779
|
var normalExpressionKeys = Object.keys(normalExpressions);
|
|
4664
|
-
var specialExpressionKeys = Object.keys(
|
|
4780
|
+
var specialExpressionKeys = Object.keys(specialExpressionTypes);
|
|
4781
|
+
new Set(specialExpressionKeys);
|
|
4665
4782
|
|
|
4666
4783
|
function checkParams(evaluatedFunction, nbrOfParams, sourceCodeInfo) {
|
|
4667
|
-
var hasRest = evaluatedFunction.
|
|
4668
|
-
var minArity = evaluatedFunction.
|
|
4669
|
-
var maxArity = hasRest ? Number.MAX_SAFE_INTEGER : evaluatedFunction.
|
|
4784
|
+
var hasRest = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; });
|
|
4785
|
+
var minArity = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
4786
|
+
var maxArity = hasRest ? Number.MAX_SAFE_INTEGER : evaluatedFunction[0].length;
|
|
4670
4787
|
if (nbrOfParams < minArity || nbrOfParams > maxArity) {
|
|
4671
4788
|
throw new LitsError("Unexpected number of arguments, got ".concat(valueToString(nbrOfParams), "."), sourceCodeInfo);
|
|
4672
4789
|
}
|
|
@@ -4690,21 +4807,21 @@ var functionExecutors = {
|
|
|
4690
4807
|
}
|
|
4691
4808
|
},
|
|
4692
4809
|
UserDefined: function (fn, params, sourceCodeInfo, contextStack, _a) {
|
|
4693
|
-
var
|
|
4810
|
+
var evaluateNode = _a.evaluateNode;
|
|
4694
4811
|
var _loop_1 = function () {
|
|
4695
4812
|
var e_1, _b;
|
|
4696
4813
|
checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo);
|
|
4697
4814
|
var evaluatedFunction = fn.evaluatedfunction;
|
|
4698
|
-
var args = evaluatedFunction
|
|
4699
|
-
var nbrOfNonRestArgs = args.filter(function (arg) { return arg
|
|
4700
|
-
var newContextStack = contextStack.create(fn.evaluatedfunction
|
|
4815
|
+
var args = evaluatedFunction[0];
|
|
4816
|
+
var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
|
|
4817
|
+
var newContextStack = contextStack.create(fn.evaluatedfunction[2]);
|
|
4701
4818
|
var newContext = {};
|
|
4702
4819
|
var rest = [];
|
|
4703
4820
|
for (var i = 0; i < params.length; i += 1) {
|
|
4704
4821
|
if (i < nbrOfNonRestArgs) {
|
|
4705
4822
|
var param = toAny(params[i]);
|
|
4706
|
-
var valueRecord = evalueateBindingNodeValues(args[i], param, function (
|
|
4707
|
-
return
|
|
4823
|
+
var valueRecord = evalueateBindingNodeValues(args[i], param, function (Node) {
|
|
4824
|
+
return evaluateNode(Node, newContextStack.create(newContext));
|
|
4708
4825
|
});
|
|
4709
4826
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4710
4827
|
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
@@ -4717,18 +4834,18 @@ var functionExecutors = {
|
|
|
4717
4834
|
}
|
|
4718
4835
|
for (var i = params.length; i < nbrOfNonRestArgs; i++) {
|
|
4719
4836
|
var arg = args[i];
|
|
4720
|
-
var defaultValue =
|
|
4721
|
-
var valueRecord = evalueateBindingNodeValues(arg, defaultValue, function (
|
|
4722
|
-
return
|
|
4837
|
+
var defaultValue = evaluateNode(arg[1][1], contextStack.create(newContext));
|
|
4838
|
+
var valueRecord = evalueateBindingNodeValues(arg, defaultValue, function (Node) {
|
|
4839
|
+
return evaluateNode(Node, contextStack.create(newContext));
|
|
4723
4840
|
});
|
|
4724
4841
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4725
4842
|
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
4726
4843
|
newContext[key] = { value: value };
|
|
4727
4844
|
});
|
|
4728
4845
|
}
|
|
4729
|
-
var restArgument = args.find(function (arg) { return arg
|
|
4846
|
+
var restArgument = args.find(function (arg) { return arg[0] === bindingTargetTypes.rest; });
|
|
4730
4847
|
if (restArgument !== undefined) {
|
|
4731
|
-
var valueRecord = evalueateBindingNodeValues(restArgument, rest, function (
|
|
4848
|
+
var valueRecord = evalueateBindingNodeValues(restArgument, rest, function (Node) { return evaluateNode(Node, contextStack.create(newContext)); });
|
|
4732
4849
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4733
4850
|
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
4734
4851
|
newContext[key] = { value: value };
|
|
@@ -4738,9 +4855,9 @@ var functionExecutors = {
|
|
|
4738
4855
|
var result = null;
|
|
4739
4856
|
var newContextStack2 = newContextStack.create(newContext);
|
|
4740
4857
|
try {
|
|
4741
|
-
for (var _c = (e_1 = void 0, __values(evaluatedFunction
|
|
4858
|
+
for (var _c = (e_1 = void 0, __values(evaluatedFunction[1])), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
4742
4859
|
var node = _d.value;
|
|
4743
|
-
result =
|
|
4860
|
+
result = evaluateNode(node, newContextStack2);
|
|
4744
4861
|
}
|
|
4745
4862
|
}
|
|
4746
4863
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -4864,7 +4981,7 @@ var functionExecutors = {
|
|
|
4864
4981
|
},
|
|
4865
4982
|
Builtin: function (fn, params, sourceCodeInfo, contextStack, _a) {
|
|
4866
4983
|
var executeFunction = _a.executeFunction;
|
|
4867
|
-
var normalExpression = asNonUndefined(
|
|
4984
|
+
var normalExpression = asNonUndefined(allNormalExpressions[fn.normalBuitinSymbolType], sourceCodeInfo);
|
|
4868
4985
|
return normalExpression.evaluate(params, sourceCodeInfo, contextStack, { executeFunction: executeFunction });
|
|
4869
4986
|
},
|
|
4870
4987
|
};
|
|
@@ -4875,7 +4992,7 @@ function evaluate(ast, contextStack) {
|
|
|
4875
4992
|
try {
|
|
4876
4993
|
for (var _b = __values(ast.body), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
4877
4994
|
var node = _c.value;
|
|
4878
|
-
result =
|
|
4995
|
+
result = evaluateNode(node, contextStack);
|
|
4879
4996
|
}
|
|
4880
4997
|
}
|
|
4881
4998
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -4887,53 +5004,66 @@ function evaluate(ast, contextStack) {
|
|
|
4887
5004
|
}
|
|
4888
5005
|
return result;
|
|
4889
5006
|
}
|
|
4890
|
-
function
|
|
4891
|
-
switch (node
|
|
4892
|
-
case
|
|
5007
|
+
function evaluateNode(node, contextStack) {
|
|
5008
|
+
switch (node[0]) {
|
|
5009
|
+
case NodeTypes.Number:
|
|
4893
5010
|
return evaluateNumber(node);
|
|
4894
|
-
case
|
|
5011
|
+
case NodeTypes.String:
|
|
4895
5012
|
return evaluateString(node);
|
|
4896
|
-
case
|
|
4897
|
-
|
|
4898
|
-
case
|
|
4899
|
-
return
|
|
4900
|
-
case
|
|
5013
|
+
case NodeTypes.NormalBuiltinSymbol:
|
|
5014
|
+
case NodeTypes.SpecialBuiltinSymbol:
|
|
5015
|
+
case NodeTypes.UserDefinedSymbol:
|
|
5016
|
+
return contextStack.evaluateSymbol(node);
|
|
5017
|
+
case NodeTypes.ReservedSymbol:
|
|
5018
|
+
return evaluateReservedSymbol(node);
|
|
5019
|
+
case NodeTypes.NormalExpression:
|
|
4901
5020
|
return evaluateNormalExpression(node, contextStack);
|
|
4902
|
-
case
|
|
5021
|
+
case NodeTypes.SpecialExpression:
|
|
4903
5022
|
return evaluateSpecialExpression(node, contextStack);
|
|
4904
5023
|
/* v8 ignore next 2 */
|
|
4905
5024
|
default:
|
|
4906
|
-
throw new LitsError("".concat(node
|
|
5025
|
+
throw new LitsError("".concat(getNodeTypeName(node[0]), "-node cannot be evaluated"), node[2]);
|
|
4907
5026
|
}
|
|
4908
5027
|
}
|
|
4909
5028
|
function evaluateNumber(node) {
|
|
4910
|
-
return node
|
|
5029
|
+
return node[1];
|
|
4911
5030
|
}
|
|
4912
5031
|
function evaluateString(node) {
|
|
4913
|
-
return node
|
|
5032
|
+
return node[1];
|
|
4914
5033
|
}
|
|
4915
|
-
function
|
|
4916
|
-
var reservedName = node
|
|
5034
|
+
function evaluateReservedSymbol(node) {
|
|
5035
|
+
var reservedName = node[1];
|
|
4917
5036
|
var value = reservedSymbolRecord[reservedName];
|
|
4918
|
-
return asNonUndefined(value, node
|
|
5037
|
+
return asNonUndefined(value, node[2]);
|
|
4919
5038
|
}
|
|
4920
5039
|
function evaluateNormalExpression(node, contextStack) {
|
|
4921
|
-
var
|
|
4922
|
-
var
|
|
5040
|
+
var sourceCodeInfo = node[2];
|
|
5041
|
+
var paramNodes = node[1][1];
|
|
5042
|
+
var params = paramNodes.map(function (paramNode) { return evaluateNode(paramNode, contextStack); });
|
|
4923
5043
|
if (isNormalExpressionNodeWithName(node)) {
|
|
4924
|
-
var
|
|
4925
|
-
if (
|
|
4926
|
-
|
|
4927
|
-
|
|
5044
|
+
var nameSymbol = node[1][0];
|
|
5045
|
+
if (isNormalBuiltinSymbolNode(nameSymbol)) {
|
|
5046
|
+
var type = nameSymbol[1];
|
|
5047
|
+
var normalExpression = builtin.allNormalExpressions[type];
|
|
5048
|
+
return normalExpression.evaluate(params, node[2], contextStack, { executeFunction: executeFunction });
|
|
5049
|
+
}
|
|
5050
|
+
else {
|
|
5051
|
+
var fn = contextStack.getValue(nameSymbol[1]);
|
|
5052
|
+
if (fn !== undefined) {
|
|
5053
|
+
return executeFunction(asAny(fn), params, contextStack, sourceCodeInfo);
|
|
5054
|
+
}
|
|
5055
|
+
throw new UndefinedSymbolError(nameSymbol[1], node[2]);
|
|
5056
|
+
}
|
|
4928
5057
|
}
|
|
4929
5058
|
else {
|
|
4930
|
-
var
|
|
4931
|
-
|
|
5059
|
+
var fnNode = node[1][0];
|
|
5060
|
+
var fn = evaluateNode(fnNode, contextStack);
|
|
5061
|
+
return executeFunction(fn, params, contextStack, sourceCodeInfo);
|
|
4932
5062
|
}
|
|
4933
5063
|
}
|
|
4934
5064
|
function executeFunction(fn, params, contextStack, sourceCodeInfo) {
|
|
4935
5065
|
if (isLitsFunction(fn))
|
|
4936
|
-
return functionExecutors[fn.functionType](fn, params, sourceCodeInfo, contextStack, {
|
|
5066
|
+
return functionExecutors[fn.functionType](fn, params, sourceCodeInfo, contextStack, { evaluateNode: evaluateNode, executeFunction: executeFunction });
|
|
4937
5067
|
if (Array.isArray(fn))
|
|
4938
5068
|
return evaluateArrayAsFunction(fn, params, sourceCodeInfo);
|
|
4939
5069
|
if (isObj(fn))
|
|
@@ -4944,16 +5074,11 @@ function executeFunction(fn, params, contextStack, sourceCodeInfo) {
|
|
|
4944
5074
|
return evaluateNumberAsFunction(fn, params, sourceCodeInfo);
|
|
4945
5075
|
throw new NotAFunctionError(fn, sourceCodeInfo);
|
|
4946
5076
|
}
|
|
4947
|
-
function evaluateBuiltinNormalExpression(node, params, contextStack) {
|
|
4948
|
-
var normalExpression = builtin.normalExpressions[node.name];
|
|
4949
|
-
if (!normalExpression)
|
|
4950
|
-
throw new UndefinedSymbolError(node.name, node.sourceCodeInfo);
|
|
4951
|
-
return normalExpression.evaluate(params, node.sourceCodeInfo, contextStack, { executeFunction: executeFunction });
|
|
4952
|
-
}
|
|
4953
5077
|
function evaluateSpecialExpression(node, contextStack) {
|
|
4954
|
-
var
|
|
4955
|
-
|
|
4956
|
-
|
|
5078
|
+
var specialExpressionType = node[1][0];
|
|
5079
|
+
var specialExpression = asNonUndefined(builtin.specialExpressions[specialExpressionType], node[2]);
|
|
5080
|
+
var castedEvaluate = specialExpression.evaluate;
|
|
5081
|
+
return castedEvaluate(node, contextStack, { evaluateNode: evaluateNode, builtin: builtin, getUndefinedSymbols: getUndefinedSymbols });
|
|
4957
5082
|
}
|
|
4958
5083
|
function evalueateObjectAsFunction(fn, params, sourceCodeInfo) {
|
|
4959
5084
|
if (params.length !== 1)
|
|
@@ -5095,13 +5220,13 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
5095
5220
|
return (_d = this.values) === null || _d === void 0 ? void 0 : _d[name];
|
|
5096
5221
|
};
|
|
5097
5222
|
ContextStackImpl.prototype.lookUp = function (node) {
|
|
5098
|
-
var e_4, _a
|
|
5099
|
-
var _c, _d
|
|
5100
|
-
var value = node
|
|
5101
|
-
var sourceCodeInfo = node.sourceCodeInfo;
|
|
5223
|
+
var e_4, _a;
|
|
5224
|
+
var _b, _c, _d;
|
|
5225
|
+
var value = node[1];
|
|
5102
5226
|
try {
|
|
5103
|
-
|
|
5104
|
-
|
|
5227
|
+
// const sourceCodeInfo = node[2]
|
|
5228
|
+
for (var _e = __values(this.contexts), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
5229
|
+
var context = _f.value;
|
|
5105
5230
|
var contextEntry = context[value];
|
|
5106
5231
|
if (contextEntry)
|
|
5107
5232
|
return contextEntry;
|
|
@@ -5110,32 +5235,23 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
5110
5235
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
5111
5236
|
finally {
|
|
5112
5237
|
try {
|
|
5113
|
-
if (
|
|
5238
|
+
if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
|
|
5114
5239
|
}
|
|
5115
5240
|
finally { if (e_4) throw e_4.error; }
|
|
5116
5241
|
}
|
|
5117
|
-
var lazyHostValue = (
|
|
5242
|
+
var lazyHostValue = (_b = this.lazyValues) === null || _b === void 0 ? void 0 : _b[value];
|
|
5118
5243
|
if (lazyHostValue !== undefined) {
|
|
5119
5244
|
return {
|
|
5120
5245
|
value: toAny(lazyHostValue.read()),
|
|
5121
5246
|
};
|
|
5122
5247
|
}
|
|
5123
|
-
var hostValue = (
|
|
5248
|
+
var hostValue = (_c = this.values) === null || _c === void 0 ? void 0 : _c[value];
|
|
5124
5249
|
if (hostValue !== undefined) {
|
|
5125
5250
|
return {
|
|
5126
5251
|
value: toAny(hostValue),
|
|
5127
5252
|
};
|
|
5128
5253
|
}
|
|
5129
|
-
|
|
5130
|
-
var builtinFunction = (_b = {},
|
|
5131
|
-
_b[FUNCTION_SYMBOL] = true,
|
|
5132
|
-
_b.sourceCodeInfo = sourceCodeInfo,
|
|
5133
|
-
_b.functionType = 'Builtin',
|
|
5134
|
-
_b.n = value,
|
|
5135
|
-
_b);
|
|
5136
|
-
return builtinFunction;
|
|
5137
|
-
}
|
|
5138
|
-
var nativeJsFunction = (_e = this.nativeJsFunctions) === null || _e === void 0 ? void 0 : _e[value];
|
|
5254
|
+
var nativeJsFunction = (_d = this.nativeJsFunctions) === null || _d === void 0 ? void 0 : _d[value];
|
|
5139
5255
|
if (nativeJsFunction) {
|
|
5140
5256
|
return {
|
|
5141
5257
|
value: nativeJsFunction,
|
|
@@ -5143,13 +5259,24 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
5143
5259
|
}
|
|
5144
5260
|
return null;
|
|
5145
5261
|
};
|
|
5146
|
-
ContextStackImpl.prototype.
|
|
5262
|
+
ContextStackImpl.prototype.evaluateSymbol = function (node) {
|
|
5263
|
+
var _a;
|
|
5264
|
+
if (isSpecialBuiltinSymbolNode(node)) {
|
|
5265
|
+
throw new Error('Special builtin symbols should not be evaluated');
|
|
5266
|
+
}
|
|
5267
|
+
if (isNormalBuiltinSymbolNode(node)) {
|
|
5268
|
+
var type = node[1];
|
|
5269
|
+
return _a = {},
|
|
5270
|
+
_a[FUNCTION_SYMBOL] = true,
|
|
5271
|
+
_a.functionType = 'Builtin',
|
|
5272
|
+
_a.normalBuitinSymbolType = type,
|
|
5273
|
+
_a.sourceCodeInfo = node[2],
|
|
5274
|
+
_a;
|
|
5275
|
+
}
|
|
5147
5276
|
var lookUpResult = this.lookUp(node);
|
|
5148
5277
|
if (isContextEntry(lookUpResult))
|
|
5149
5278
|
return lookUpResult.value;
|
|
5150
|
-
|
|
5151
|
-
return lookUpResult;
|
|
5152
|
-
throw new UndefinedSymbolError(node.value, node.sourceCodeInfo);
|
|
5279
|
+
throw new UndefinedSymbolError(node[1], node[2]);
|
|
5153
5280
|
};
|
|
5154
5281
|
return ContextStackImpl;
|
|
5155
5282
|
}());
|
|
@@ -5232,10 +5359,10 @@ var nonFunctionOperators = [
|
|
|
5232
5359
|
'cond',
|
|
5233
5360
|
'def',
|
|
5234
5361
|
'defined?',
|
|
5235
|
-
'defn',
|
|
5362
|
+
// 'defn',
|
|
5236
5363
|
'do',
|
|
5237
5364
|
'doseq',
|
|
5238
|
-
'fn',
|
|
5365
|
+
// 'fn',
|
|
5239
5366
|
'if',
|
|
5240
5367
|
'let',
|
|
5241
5368
|
'loop',
|
|
@@ -5684,6 +5811,10 @@ function assertReservedSymbolToken(token, symbolName) {
|
|
|
5684
5811
|
throwUnexpectedToken('ReservedSymbol', symbolName, token);
|
|
5685
5812
|
}
|
|
5686
5813
|
}
|
|
5814
|
+
function asReservedSymbolToken(token, symbolName) {
|
|
5815
|
+
assertReservedSymbolToken(token, symbolName);
|
|
5816
|
+
return token;
|
|
5817
|
+
}
|
|
5687
5818
|
function isSingleLineCommentToken(token) {
|
|
5688
5819
|
return (token === null || token === void 0 ? void 0 : token[0]) === 'SingleLineComment';
|
|
5689
5820
|
}
|
|
@@ -5766,6 +5897,9 @@ function assertRBraceToken(token) {
|
|
|
5766
5897
|
throwUnexpectedToken('RBrace', undefined, token);
|
|
5767
5898
|
}
|
|
5768
5899
|
}
|
|
5900
|
+
function isStringToken(token) {
|
|
5901
|
+
return (token === null || token === void 0 ? void 0 : token[0]) === 'String';
|
|
5902
|
+
}
|
|
5769
5903
|
function isA_BinaryOperatorToken(token) {
|
|
5770
5904
|
return (token === null || token === void 0 ? void 0 : token[0]) === 'Operator' && isBinaryOperator(token[1]);
|
|
5771
5905
|
}
|
|
@@ -5803,6 +5937,12 @@ function untokenize(tokenStream) {
|
|
|
5803
5937
|
var exponentiationPrecedence = 10;
|
|
5804
5938
|
var binaryFunctionalOperatorPrecedence = 1;
|
|
5805
5939
|
var placeholderRegexp = /^\$([1-9]\d?)?$/;
|
|
5940
|
+
function withSourceCodeInfo(node, sourceCodeInfo) {
|
|
5941
|
+
if (sourceCodeInfo) {
|
|
5942
|
+
node[2] = sourceCodeInfo;
|
|
5943
|
+
}
|
|
5944
|
+
return node;
|
|
5945
|
+
}
|
|
5806
5946
|
function getPrecedence(operatorSign) {
|
|
5807
5947
|
switch (operatorSign) {
|
|
5808
5948
|
case '**': // exponentiation
|
|
@@ -5845,29 +5985,18 @@ function getPrecedence(operatorSign) {
|
|
|
5845
5985
|
throw new Error("Unknown binary operator: ".concat(operatorSign));
|
|
5846
5986
|
}
|
|
5847
5987
|
}
|
|
5848
|
-
function createNamedNormalExpressionNode(
|
|
5849
|
-
var node =
|
|
5850
|
-
|
|
5851
|
-
|
|
5852
|
-
params: params,
|
|
5853
|
-
sourceCodeInfo: sourceCodeInfo,
|
|
5854
|
-
};
|
|
5855
|
-
var builtinExpression = builtin.normalExpressions[node.name];
|
|
5856
|
-
if (builtinExpression) {
|
|
5857
|
-
assertNumberOfParams(builtinExpression.paramCount, node);
|
|
5988
|
+
function createNamedNormalExpressionNode(symbolNode, params, sourceCodeInfo) {
|
|
5989
|
+
var node = withSourceCodeInfo([NodeTypes.NormalExpression, [symbolNode, params]], sourceCodeInfo);
|
|
5990
|
+
if (isNormalBuiltinSymbolNode(symbolNode)) {
|
|
5991
|
+
assertNumberOfParams(allNormalExpressions[symbolNode[1]].paramCount, node);
|
|
5858
5992
|
}
|
|
5859
5993
|
return node;
|
|
5860
5994
|
}
|
|
5861
5995
|
function createAccessorNode(left, right, sourceCodeInfo) {
|
|
5862
5996
|
// Unnamed normal expression
|
|
5863
|
-
return
|
|
5864
|
-
type: 'NormalExpression',
|
|
5865
|
-
params: [left, right],
|
|
5866
|
-
name: undefined,
|
|
5867
|
-
sourceCodeInfo: sourceCodeInfo,
|
|
5868
|
-
};
|
|
5997
|
+
return withSourceCodeInfo([NodeTypes.NormalExpression, [left, [right]]], sourceCodeInfo);
|
|
5869
5998
|
}
|
|
5870
|
-
function
|
|
5999
|
+
function fromBinaryOperatorToNode(operator, symbolNode, left, right, sourceCodeInfo) {
|
|
5871
6000
|
var operatorName = operator[1];
|
|
5872
6001
|
switch (operatorName) {
|
|
5873
6002
|
case '**': // exponentiation
|
|
@@ -5892,16 +6021,11 @@ function fromBinaryOperatorToAstNode(operator, left, right, sourceCodeInfo) {
|
|
|
5892
6021
|
case '&':
|
|
5893
6022
|
case '^':
|
|
5894
6023
|
case '|':
|
|
5895
|
-
return createNamedNormalExpressionNode(
|
|
6024
|
+
return createNamedNormalExpressionNode(symbolNode, [left, right], sourceCodeInfo);
|
|
5896
6025
|
case '&&':
|
|
5897
6026
|
case '||':
|
|
5898
6027
|
case '??':
|
|
5899
|
-
return
|
|
5900
|
-
type: 'SpecialExpression',
|
|
5901
|
-
name: operatorName,
|
|
5902
|
-
params: [left, right],
|
|
5903
|
-
sourceCodeInfo: sourceCodeInfo,
|
|
5904
|
-
};
|
|
6028
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes[operatorName], [left, right]]], sourceCodeInfo);
|
|
5905
6029
|
/* v8 ignore next 10 */
|
|
5906
6030
|
case '.':
|
|
5907
6031
|
case ';':
|
|
@@ -5997,9 +6121,12 @@ var Parser = /** @class */ (function () {
|
|
|
5997
6121
|
&& !(newPrecedece === exponentiationPrecedence && precedence === exponentiationPrecedence)) {
|
|
5998
6122
|
break;
|
|
5999
6123
|
}
|
|
6124
|
+
var symbol = specialExpressionTypes[name_1]
|
|
6125
|
+
? withSourceCodeInfo([NodeTypes.SpecialBuiltinSymbol, specialExpressionTypes[name_1]], operator[2])
|
|
6126
|
+
: withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes[name_1]], operator[2]);
|
|
6000
6127
|
this.advance();
|
|
6001
6128
|
var right = this.parseExpression(newPrecedece);
|
|
6002
|
-
left =
|
|
6129
|
+
left = fromBinaryOperatorToNode(operator, symbol, left, right, operator[2]);
|
|
6003
6130
|
}
|
|
6004
6131
|
else if (isSymbolToken(operator)) {
|
|
6005
6132
|
if (!isFunctionOperator(operator[1])) {
|
|
@@ -6009,9 +6136,12 @@ var Parser = /** @class */ (function () {
|
|
|
6009
6136
|
if (newPrecedece <= precedence) {
|
|
6010
6137
|
break;
|
|
6011
6138
|
}
|
|
6012
|
-
this.
|
|
6139
|
+
var operatorSymbol = this.parseSymbol();
|
|
6013
6140
|
var right = this.parseExpression(newPrecedece);
|
|
6014
|
-
|
|
6141
|
+
if (isSpecialBuiltinSymbolNode(operatorSymbol)) {
|
|
6142
|
+
throw new LitsError('Special expressions are not allowed in binary functional operators', operatorSymbol[2]);
|
|
6143
|
+
}
|
|
6144
|
+
left = createNamedNormalExpressionNode(operatorSymbol, [left, right], operator[2]);
|
|
6015
6145
|
}
|
|
6016
6146
|
else {
|
|
6017
6147
|
break;
|
|
@@ -6030,11 +6160,7 @@ var Parser = /** @class */ (function () {
|
|
|
6030
6160
|
if (!isSymbolToken(symbolToken)) {
|
|
6031
6161
|
throw new LitsError('Expected symbol', this.peek()[2]);
|
|
6032
6162
|
}
|
|
6033
|
-
var stringNode =
|
|
6034
|
-
type: 'String',
|
|
6035
|
-
value: symbolToken[1],
|
|
6036
|
-
sourceCodeInfo: symbolToken[2],
|
|
6037
|
-
};
|
|
6163
|
+
var stringNode = withSourceCodeInfo([NodeTypes.String, symbolToken[1]], symbolToken[2]);
|
|
6038
6164
|
operand = createAccessorNode(operand, stringNode, token[2]);
|
|
6039
6165
|
this.advance();
|
|
6040
6166
|
token = this.peek();
|
|
@@ -6074,16 +6200,14 @@ var Parser = /** @class */ (function () {
|
|
|
6074
6200
|
this.advance();
|
|
6075
6201
|
return expression;
|
|
6076
6202
|
}
|
|
6077
|
-
// Unary operators
|
|
6078
6203
|
else if (isOperatorToken(token)) {
|
|
6079
6204
|
var operatorName = token[1];
|
|
6080
6205
|
if (isBinaryOperator(operatorName)) {
|
|
6081
6206
|
this.advance();
|
|
6082
|
-
|
|
6083
|
-
|
|
6084
|
-
|
|
6085
|
-
|
|
6086
|
-
};
|
|
6207
|
+
if (specialExpressionTypes[operatorName] !== undefined) {
|
|
6208
|
+
return withSourceCodeInfo([NodeTypes.SpecialBuiltinSymbol, specialExpressionTypes[operatorName]], token[2]);
|
|
6209
|
+
}
|
|
6210
|
+
return withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes[operatorName]], token[2]);
|
|
6087
6211
|
}
|
|
6088
6212
|
if (operatorName === '->') {
|
|
6089
6213
|
return this.parseShorthandLamdaFunction();
|
|
@@ -6131,22 +6255,24 @@ var Parser = /** @class */ (function () {
|
|
|
6131
6255
|
while (!this.isAtEnd() && !isRBraceToken(this.peek())) {
|
|
6132
6256
|
if (isOperatorToken(this.peek(), '...')) {
|
|
6133
6257
|
this.advance();
|
|
6134
|
-
params.push(
|
|
6135
|
-
type: 'Spread',
|
|
6136
|
-
value: this.parseExpression(),
|
|
6137
|
-
sourceCodeInfo: this.peek()[2],
|
|
6138
|
-
});
|
|
6258
|
+
params.push(withSourceCodeInfo([NodeTypes.Spread, this.parseExpression()], this.peek()[2]));
|
|
6139
6259
|
}
|
|
6140
6260
|
else {
|
|
6141
|
-
var
|
|
6142
|
-
if (
|
|
6261
|
+
var token = this.peek();
|
|
6262
|
+
if (isStringToken(token)) {
|
|
6263
|
+
var stringNode = this.parseString();
|
|
6264
|
+
params.push(withSourceCodeInfo([NodeTypes.String, stringNode[1]], token[2]));
|
|
6265
|
+
}
|
|
6266
|
+
else if (isSymbolToken(token)) {
|
|
6267
|
+
var value = token[1].startsWith('\'')
|
|
6268
|
+
? this.stringFromQuotedSymbol(token[1])
|
|
6269
|
+
: token[1];
|
|
6270
|
+
params.push(withSourceCodeInfo([NodeTypes.String, value], token[2]));
|
|
6271
|
+
this.advance();
|
|
6272
|
+
}
|
|
6273
|
+
else {
|
|
6143
6274
|
throw new LitsError('Expected key to be a symbol or a string', this.peek()[2]);
|
|
6144
6275
|
}
|
|
6145
|
-
params.push({
|
|
6146
|
-
type: 'String',
|
|
6147
|
-
value: key.value,
|
|
6148
|
-
sourceCodeInfo: key.sourceCodeInfo,
|
|
6149
|
-
});
|
|
6150
6276
|
assertOperatorToken(this.peek(), ':=');
|
|
6151
6277
|
this.advance();
|
|
6152
6278
|
params.push(this.parseExpression());
|
|
@@ -6161,12 +6287,7 @@ var Parser = /** @class */ (function () {
|
|
|
6161
6287
|
}
|
|
6162
6288
|
assertRBraceToken(this.peek());
|
|
6163
6289
|
this.advance();
|
|
6164
|
-
return
|
|
6165
|
-
type: 'SpecialExpression',
|
|
6166
|
-
name: 'object',
|
|
6167
|
-
params: params,
|
|
6168
|
-
sourceCodeInfo: firstToken[2],
|
|
6169
|
-
};
|
|
6290
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.object, params]], firstToken[2]);
|
|
6170
6291
|
};
|
|
6171
6292
|
Parser.prototype.parseArray = function () {
|
|
6172
6293
|
var firstToken = asLBracketToken(this.peek());
|
|
@@ -6175,11 +6296,7 @@ var Parser = /** @class */ (function () {
|
|
|
6175
6296
|
while (!this.isAtEnd() && !isRBracketToken(this.peek())) {
|
|
6176
6297
|
if (isOperatorToken(this.peek(), '...')) {
|
|
6177
6298
|
this.advance();
|
|
6178
|
-
params.push(
|
|
6179
|
-
type: 'Spread',
|
|
6180
|
-
value: this.parseExpression(),
|
|
6181
|
-
sourceCodeInfo: this.peek()[2],
|
|
6182
|
-
});
|
|
6299
|
+
params.push(withSourceCodeInfo([NodeTypes.Spread, this.parseExpression()], this.peek()[2]));
|
|
6183
6300
|
}
|
|
6184
6301
|
else {
|
|
6185
6302
|
params.push(this.parseExpression());
|
|
@@ -6194,15 +6311,9 @@ var Parser = /** @class */ (function () {
|
|
|
6194
6311
|
}
|
|
6195
6312
|
assertRBracketToken(this.peek());
|
|
6196
6313
|
this.advance();
|
|
6197
|
-
return
|
|
6198
|
-
type: 'SpecialExpression',
|
|
6199
|
-
name: 'array',
|
|
6200
|
-
params: params,
|
|
6201
|
-
sourceCodeInfo: firstToken[2],
|
|
6202
|
-
};
|
|
6314
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.array, params]], firstToken[2]);
|
|
6203
6315
|
};
|
|
6204
6316
|
Parser.prototype.parseFunctionCall = function (symbol) {
|
|
6205
|
-
var isNamedFunction = symbol.type === 'Symbol';
|
|
6206
6317
|
this.advance();
|
|
6207
6318
|
var params = [];
|
|
6208
6319
|
while (!this.isAtEnd() && !isRParenToken(this.peek())) {
|
|
@@ -6219,45 +6330,57 @@ var Parser = /** @class */ (function () {
|
|
|
6219
6330
|
throw new LitsError('Expected closing parenthesis', this.peek()[2]);
|
|
6220
6331
|
}
|
|
6221
6332
|
this.advance();
|
|
6222
|
-
if (
|
|
6223
|
-
|
|
6224
|
-
|
|
6225
|
-
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
};
|
|
6240
|
-
assertNumberOfParams(builtin.specialExpressions[node.name].paramCount, node);
|
|
6241
|
-
return node;
|
|
6333
|
+
if (isSpecialBuiltinSymbolNode(symbol)) { // Named function
|
|
6334
|
+
var specialExpressionType = symbol[1];
|
|
6335
|
+
var type = specialExpressionType;
|
|
6336
|
+
switch (type) {
|
|
6337
|
+
case specialExpressionTypes['||']:
|
|
6338
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6339
|
+
case specialExpressionTypes['&&']:
|
|
6340
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6341
|
+
case specialExpressionTypes.recur:
|
|
6342
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6343
|
+
case specialExpressionTypes.array:
|
|
6344
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6345
|
+
case specialExpressionTypes.object:
|
|
6346
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6347
|
+
case specialExpressionTypes['??']: {
|
|
6348
|
+
if (params.length === 1) {
|
|
6349
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, [params[0], undefined]]], symbol[2]);
|
|
6242
6350
|
}
|
|
6243
|
-
|
|
6244
|
-
|
|
6245
|
-
|
|
6246
|
-
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6351
|
+
if (params.length === 2) {
|
|
6352
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, [params[0], params[1]]]], symbol[2]);
|
|
6353
|
+
}
|
|
6354
|
+
throw new LitsError('Expected exactly two parameters', symbol[2]);
|
|
6355
|
+
}
|
|
6356
|
+
case specialExpressionTypes['defined?']: {
|
|
6357
|
+
if (params.length !== 1) {
|
|
6358
|
+
throw new LitsError('Expected exactly one parameter', symbol[2]);
|
|
6359
|
+
}
|
|
6360
|
+
var _a = __read(params, 1), param = _a[0];
|
|
6361
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, param]], symbol[2]);
|
|
6362
|
+
}
|
|
6363
|
+
case specialExpressionTypes.throw: {
|
|
6364
|
+
if (params.length !== 1) {
|
|
6365
|
+
throw new LitsError('Expected exactly one parameter', symbol[2]);
|
|
6366
|
+
}
|
|
6367
|
+
var _b = __read(params, 1), param = _b[0];
|
|
6368
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, param]], symbol[2]);
|
|
6250
6369
|
}
|
|
6370
|
+
case specialExpressionTypes['0_fn']:
|
|
6371
|
+
case specialExpressionTypes['0_def']:
|
|
6372
|
+
case specialExpressionTypes['0_defn']:
|
|
6373
|
+
throw new LitsError("".concat(type, " is not allowed"), symbol[2]);
|
|
6374
|
+
/* v8 ignore next 2 */
|
|
6375
|
+
default:
|
|
6376
|
+
throw new Error("Unknown special expression: ".concat(type));
|
|
6251
6377
|
}
|
|
6252
|
-
|
|
6378
|
+
}
|
|
6379
|
+
else if (isNormalBuiltinSymbolNode(symbol) || isNormalBuiltinSymbolNode(symbol)) {
|
|
6380
|
+
return createNamedNormalExpressionNode(symbol, params, symbol[2]);
|
|
6253
6381
|
}
|
|
6254
6382
|
else {
|
|
6255
|
-
return
|
|
6256
|
-
type: 'NormalExpression',
|
|
6257
|
-
name: undefined,
|
|
6258
|
-
params: __spreadArray([symbol], __read(params), false),
|
|
6259
|
-
sourceCodeInfo: symbol.sourceCodeInfo,
|
|
6260
|
-
};
|
|
6383
|
+
return withSourceCodeInfo([NodeTypes.NormalExpression, [symbol, params]], symbol[2]);
|
|
6261
6384
|
}
|
|
6262
6385
|
};
|
|
6263
6386
|
Parser.prototype.parseLambdaFunction = function () {
|
|
@@ -6274,16 +6397,10 @@ var Parser = /** @class */ (function () {
|
|
|
6274
6397
|
}
|
|
6275
6398
|
this.advance();
|
|
6276
6399
|
var body = this.parseExpression();
|
|
6277
|
-
return
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
function: {
|
|
6282
|
-
arguments: functionArguments,
|
|
6283
|
-
body: [body],
|
|
6284
|
-
},
|
|
6285
|
-
sourceCodeInfo: firstToken[2],
|
|
6286
|
-
};
|
|
6400
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_fn'], [
|
|
6401
|
+
functionArguments,
|
|
6402
|
+
[body],
|
|
6403
|
+
]]], firstToken[2]);
|
|
6287
6404
|
}
|
|
6288
6405
|
catch (_a) {
|
|
6289
6406
|
return null;
|
|
@@ -6292,11 +6409,7 @@ var Parser = /** @class */ (function () {
|
|
|
6292
6409
|
Parser.prototype.parseFunctionArguments = function () {
|
|
6293
6410
|
var firstToken = this.peek();
|
|
6294
6411
|
if (isSymbolToken(firstToken)) {
|
|
6295
|
-
return [
|
|
6296
|
-
type: 'symbol',
|
|
6297
|
-
name: this.parseSymbol().value,
|
|
6298
|
-
sourceCodeInfo: firstToken[2],
|
|
6299
|
-
}];
|
|
6412
|
+
return [withSourceCodeInfo([bindingTargetTypes.symbol, [this.parseSymbol(), undefined]], firstToken[2])];
|
|
6300
6413
|
}
|
|
6301
6414
|
assertLParenToken(firstToken);
|
|
6302
6415
|
this.advance();
|
|
@@ -6308,13 +6421,13 @@ var Parser = /** @class */ (function () {
|
|
|
6308
6421
|
throw new LitsError('Rest argument must be last', this.peek()[2]);
|
|
6309
6422
|
}
|
|
6310
6423
|
var bindingTarget = this.parseBindingTarget();
|
|
6311
|
-
if (bindingTarget
|
|
6424
|
+
if (bindingTarget[1][1] !== undefined) {
|
|
6312
6425
|
defaults = true;
|
|
6313
6426
|
}
|
|
6314
|
-
if (bindingTarget
|
|
6427
|
+
if (bindingTarget[0] === bindingTargetTypes.rest) {
|
|
6315
6428
|
rest = true;
|
|
6316
6429
|
}
|
|
6317
|
-
if (defaults && !bindingTarget
|
|
6430
|
+
if (defaults && !bindingTarget[1][1]) {
|
|
6318
6431
|
throw new LitsError('Default arguments must be last', this.peek()[2]);
|
|
6319
6432
|
}
|
|
6320
6433
|
functionArguments.push(bindingTarget);
|
|
@@ -6361,22 +6474,16 @@ var Parser = /** @class */ (function () {
|
|
|
6361
6474
|
var functionArguments = [];
|
|
6362
6475
|
for (var i = 1; i <= arity; i += 1) {
|
|
6363
6476
|
if (i === 1 && dollar1 === 'NAKED') {
|
|
6364
|
-
functionArguments.push(
|
|
6477
|
+
functionArguments.push(withSourceCodeInfo([bindingTargetTypes.symbol, [[NodeTypes.UserDefinedSymbol, '$'], undefined]], firstToken[2]));
|
|
6365
6478
|
}
|
|
6366
6479
|
else {
|
|
6367
|
-
functionArguments.push(
|
|
6480
|
+
functionArguments.push(withSourceCodeInfo([bindingTargetTypes.symbol, [[NodeTypes.UserDefinedSymbol, "$".concat(i)], undefined]], firstToken[2]));
|
|
6368
6481
|
}
|
|
6369
6482
|
}
|
|
6370
|
-
var node =
|
|
6371
|
-
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
function: {
|
|
6375
|
-
arguments: functionArguments,
|
|
6376
|
-
body: [exprNode],
|
|
6377
|
-
},
|
|
6378
|
-
sourceCodeInfo: firstToken[2],
|
|
6379
|
-
};
|
|
6483
|
+
var node = withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_fn'], [
|
|
6484
|
+
functionArguments,
|
|
6485
|
+
[exprNode],
|
|
6486
|
+
]]], firstToken[2]);
|
|
6380
6487
|
return node;
|
|
6381
6488
|
};
|
|
6382
6489
|
Parser.prototype.parseOptionalDefaulValue = function () {
|
|
@@ -6392,16 +6499,14 @@ var Parser = /** @class */ (function () {
|
|
|
6392
6499
|
// Symbol
|
|
6393
6500
|
if (isSymbolToken(firstToken)) {
|
|
6394
6501
|
var symbol = this.parseSymbol();
|
|
6502
|
+
if (!isUserDefinedSymbolNode(symbol)) {
|
|
6503
|
+
throw new LitsError('Expected user defined symbol', firstToken[2]);
|
|
6504
|
+
}
|
|
6395
6505
|
var defaultValue = this.parseOptionalDefaulValue();
|
|
6396
6506
|
if (requireDefaultValue && !defaultValue) {
|
|
6397
6507
|
throw new LitsError('Expected assignment', this.peek()[2]);
|
|
6398
6508
|
}
|
|
6399
|
-
return
|
|
6400
|
-
type: 'symbol',
|
|
6401
|
-
name: symbol.value,
|
|
6402
|
-
default: defaultValue,
|
|
6403
|
-
sourceCodeInfo: firstToken[2],
|
|
6404
|
-
};
|
|
6509
|
+
return withSourceCodeInfo([bindingTargetTypes.symbol, [symbol, defaultValue]], firstToken[2]);
|
|
6405
6510
|
}
|
|
6406
6511
|
// Rest
|
|
6407
6512
|
if (isOperatorToken(firstToken, '...')) {
|
|
@@ -6409,15 +6514,11 @@ var Parser = /** @class */ (function () {
|
|
|
6409
6514
|
throw new LitsError('Rest element not allowed', firstToken[2]);
|
|
6410
6515
|
}
|
|
6411
6516
|
this.advance();
|
|
6412
|
-
var symbol = this.parseSymbol();
|
|
6517
|
+
var symbol = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6413
6518
|
if (isOperatorToken(this.peek(), ':=')) {
|
|
6414
6519
|
throw new LitsError('Rest argument can not have default value', this.peek()[2]);
|
|
6415
6520
|
}
|
|
6416
|
-
return
|
|
6417
|
-
type: 'rest',
|
|
6418
|
-
name: symbol.value,
|
|
6419
|
-
sourceCodeInfo: firstToken[2],
|
|
6420
|
-
};
|
|
6521
|
+
return withSourceCodeInfo([bindingTargetTypes.rest, [symbol[1], undefined]], firstToken[2]);
|
|
6421
6522
|
}
|
|
6422
6523
|
// Array
|
|
6423
6524
|
if (isLBracketToken(firstToken)) {
|
|
@@ -6436,7 +6537,7 @@ var Parser = /** @class */ (function () {
|
|
|
6436
6537
|
continue;
|
|
6437
6538
|
}
|
|
6438
6539
|
var target = this.parseBindingTarget();
|
|
6439
|
-
if (target
|
|
6540
|
+
if (target[0] === bindingTargetTypes.rest) {
|
|
6440
6541
|
rest = true;
|
|
6441
6542
|
}
|
|
6442
6543
|
elements.push(target);
|
|
@@ -6452,12 +6553,7 @@ var Parser = /** @class */ (function () {
|
|
|
6452
6553
|
if (requireDefaultValue && !defaultValue) {
|
|
6453
6554
|
throw new LitsError('Expected assignment', this.peek()[2]);
|
|
6454
6555
|
}
|
|
6455
|
-
return
|
|
6456
|
-
type: 'array',
|
|
6457
|
-
elements: elements,
|
|
6458
|
-
default: defaultValue,
|
|
6459
|
-
sourceCodeInfo: firstToken[2],
|
|
6460
|
-
};
|
|
6556
|
+
return withSourceCodeInfo([bindingTargetTypes.array, [elements, defaultValue]], firstToken[2]);
|
|
6461
6557
|
}
|
|
6462
6558
|
// Object
|
|
6463
6559
|
if (isLBraceToken(firstToken)) {
|
|
@@ -6473,40 +6569,32 @@ var Parser = /** @class */ (function () {
|
|
|
6473
6569
|
rest = true;
|
|
6474
6570
|
this.advance();
|
|
6475
6571
|
}
|
|
6476
|
-
var key = this.parseSymbol()
|
|
6572
|
+
var key = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6477
6573
|
token = this.peek();
|
|
6478
6574
|
if (isReservedSymbolToken(token, 'as')) {
|
|
6479
6575
|
if (rest) {
|
|
6480
6576
|
throw new LitsError('Rest argument can not have alias', token[2]);
|
|
6481
6577
|
}
|
|
6482
6578
|
this.advance();
|
|
6483
|
-
var
|
|
6484
|
-
if (elements[
|
|
6485
|
-
throw new LitsError("Duplicate binding name: ".concat(
|
|
6579
|
+
var name_2 = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6580
|
+
if (elements[name_2[1]]) {
|
|
6581
|
+
throw new LitsError("Duplicate binding name: ".concat(name_2), token[2]);
|
|
6486
6582
|
}
|
|
6487
|
-
elements[key] =
|
|
6488
|
-
type: 'symbol',
|
|
6489
|
-
name: name_3,
|
|
6490
|
-
default: this.parseOptionalDefaulValue(),
|
|
6491
|
-
sourceCodeInfo: firstToken[2],
|
|
6492
|
-
};
|
|
6583
|
+
elements[key[1]] = withSourceCodeInfo([bindingTargetTypes.symbol, [name_2, this.parseOptionalDefaulValue()]], firstToken[2]);
|
|
6493
6584
|
}
|
|
6494
6585
|
else if (isRBraceToken(token) || isOperatorToken(token, ',') || isOperatorToken(token, ':=')) {
|
|
6495
|
-
if (elements[key]) {
|
|
6586
|
+
if (elements[key[1]]) {
|
|
6496
6587
|
throw new LitsError("Duplicate binding name: ".concat(key), token[2]);
|
|
6497
6588
|
}
|
|
6498
6589
|
if (rest && isOperatorToken(this.peek(), ':=')) {
|
|
6499
6590
|
throw new LitsError('Rest argument can not have default value', this.peek()[2]);
|
|
6500
6591
|
}
|
|
6501
|
-
elements[key] =
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
default: this.parseOptionalDefaulValue(),
|
|
6505
|
-
sourceCodeInfo: firstToken[2],
|
|
6506
|
-
};
|
|
6592
|
+
elements[key[1]] = rest
|
|
6593
|
+
? withSourceCodeInfo([bindingTargetTypes.rest, [key[1], this.parseOptionalDefaulValue()]], firstToken[2])
|
|
6594
|
+
: withSourceCodeInfo([bindingTargetTypes.symbol, [key, this.parseOptionalDefaulValue()]], firstToken[2]);
|
|
6507
6595
|
}
|
|
6508
6596
|
else if (isLBraceToken(token) || isLBracketToken(token)) {
|
|
6509
|
-
elements[key] = this.parseBindingTarget();
|
|
6597
|
+
elements[key[1]] = this.parseBindingTarget();
|
|
6510
6598
|
}
|
|
6511
6599
|
if (!isRBraceToken(this.peek())) {
|
|
6512
6600
|
assertOperatorToken(this.peek(), ',');
|
|
@@ -6520,12 +6608,7 @@ var Parser = /** @class */ (function () {
|
|
|
6520
6608
|
if (requireDefaultValue && !defaultValue) {
|
|
6521
6609
|
throw new LitsError('Expected assignment', token[2]);
|
|
6522
6610
|
}
|
|
6523
|
-
return
|
|
6524
|
-
type: 'object',
|
|
6525
|
-
elements: elements,
|
|
6526
|
-
default: defaultValue,
|
|
6527
|
-
sourceCodeInfo: firstToken[2],
|
|
6528
|
-
};
|
|
6611
|
+
return withSourceCodeInfo([bindingTargetTypes.object, [elements, defaultValue]], firstToken[2]);
|
|
6529
6612
|
}
|
|
6530
6613
|
throw new LitsError('Expected symbol', this.peek()[2]);
|
|
6531
6614
|
};
|
|
@@ -6533,22 +6616,13 @@ var Parser = /** @class */ (function () {
|
|
|
6533
6616
|
if (optionalSemicolon === void 0) { optionalSemicolon = false; }
|
|
6534
6617
|
this.advance();
|
|
6535
6618
|
var target = this.parseBindingTarget({ requireDefaultValue: true, noRest: true });
|
|
6536
|
-
var value = target
|
|
6537
|
-
|
|
6619
|
+
var value = target[1][1];
|
|
6620
|
+
target[1][1] = undefined;
|
|
6538
6621
|
if (!optionalSemicolon) {
|
|
6539
6622
|
assertOperatorToken(this.peek(), ';');
|
|
6540
6623
|
}
|
|
6541
|
-
|
|
6542
|
-
|
|
6543
|
-
name: 'let',
|
|
6544
|
-
bindingNode: {
|
|
6545
|
-
type: 'Binding',
|
|
6546
|
-
target: target,
|
|
6547
|
-
value: value,
|
|
6548
|
-
sourceCodeInfo: token[2],
|
|
6549
|
-
},
|
|
6550
|
-
sourceCodeInfo: token[2],
|
|
6551
|
-
};
|
|
6624
|
+
var bindingTarget = withSourceCodeInfo([NodeTypes.Binding, [target, value]], token[2]);
|
|
6625
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.let, bindingTarget]], token[2]);
|
|
6552
6626
|
};
|
|
6553
6627
|
Parser.prototype.parseDo = function (token) {
|
|
6554
6628
|
this.advance();
|
|
@@ -6564,12 +6638,7 @@ var Parser = /** @class */ (function () {
|
|
|
6564
6638
|
}
|
|
6565
6639
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6566
6640
|
this.advance();
|
|
6567
|
-
return
|
|
6568
|
-
type: 'SpecialExpression',
|
|
6569
|
-
name: 'do',
|
|
6570
|
-
params: expressions,
|
|
6571
|
-
sourceCodeInfo: token[2],
|
|
6572
|
-
};
|
|
6641
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, expressions]], token[2]);
|
|
6573
6642
|
};
|
|
6574
6643
|
Parser.prototype.parseLoop = function (firstToken) {
|
|
6575
6644
|
this.advance();
|
|
@@ -6579,14 +6648,9 @@ var Parser = /** @class */ (function () {
|
|
|
6579
6648
|
assertSymbolToken(token, 'let');
|
|
6580
6649
|
this.advance();
|
|
6581
6650
|
var target = this.parseBindingTarget({ requireDefaultValue: true, noRest: true });
|
|
6582
|
-
var value = target
|
|
6583
|
-
|
|
6584
|
-
bindingNodes.push(
|
|
6585
|
-
type: 'Binding',
|
|
6586
|
-
target: target,
|
|
6587
|
-
value: value,
|
|
6588
|
-
sourceCodeInfo: token[2],
|
|
6589
|
-
});
|
|
6651
|
+
var value = target[1][1];
|
|
6652
|
+
target[1][1] = undefined;
|
|
6653
|
+
bindingNodes.push(withSourceCodeInfo([NodeTypes.Binding, [target, value]], token[2]));
|
|
6590
6654
|
if (isOperatorToken(this.peek(), ',')) {
|
|
6591
6655
|
this.advance();
|
|
6592
6656
|
}
|
|
@@ -6609,13 +6673,7 @@ var Parser = /** @class */ (function () {
|
|
|
6609
6673
|
}
|
|
6610
6674
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6611
6675
|
this.advance();
|
|
6612
|
-
return
|
|
6613
|
-
type: 'SpecialExpression',
|
|
6614
|
-
name: 'loop',
|
|
6615
|
-
params: params,
|
|
6616
|
-
bindingNodes: bindingNodes,
|
|
6617
|
-
sourceCodeInfo: firstToken[2],
|
|
6618
|
-
};
|
|
6676
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.loop, bindingNodes, params]], firstToken[2]);
|
|
6619
6677
|
};
|
|
6620
6678
|
Parser.prototype.parseTry = function (token) {
|
|
6621
6679
|
this.advance();
|
|
@@ -6631,12 +6689,7 @@ var Parser = /** @class */ (function () {
|
|
|
6631
6689
|
}
|
|
6632
6690
|
var tryExpression = tryExpressions.length === 1
|
|
6633
6691
|
? tryExpressions[0]
|
|
6634
|
-
:
|
|
6635
|
-
type: 'SpecialExpression',
|
|
6636
|
-
name: 'do',
|
|
6637
|
-
params: tryExpressions,
|
|
6638
|
-
sourceCodeInfo: token[2],
|
|
6639
|
-
};
|
|
6692
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, tryExpressions]], token[2]);
|
|
6640
6693
|
assertReservedSymbolToken(this.peek(), 'catch');
|
|
6641
6694
|
this.advance();
|
|
6642
6695
|
var errorSymbol;
|
|
@@ -6660,20 +6713,8 @@ var Parser = /** @class */ (function () {
|
|
|
6660
6713
|
this.advance();
|
|
6661
6714
|
var catchExpression = catchExpressions.length === 1
|
|
6662
6715
|
? catchExpressions[0]
|
|
6663
|
-
:
|
|
6664
|
-
|
|
6665
|
-
name: 'do',
|
|
6666
|
-
params: catchExpressions,
|
|
6667
|
-
sourceCodeInfo: token[2],
|
|
6668
|
-
};
|
|
6669
|
-
return {
|
|
6670
|
-
type: 'SpecialExpression',
|
|
6671
|
-
name: 'try',
|
|
6672
|
-
params: [tryExpression],
|
|
6673
|
-
ce: catchExpression,
|
|
6674
|
-
e: errorSymbol,
|
|
6675
|
-
sourceCodeInfo: token[2],
|
|
6676
|
-
};
|
|
6716
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, catchExpressions]], token[2]);
|
|
6717
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.try, tryExpression, errorSymbol, catchExpression]], token[2]);
|
|
6677
6718
|
};
|
|
6678
6719
|
Parser.prototype.parseForOrDoseq = function (firstToken) {
|
|
6679
6720
|
var isDoseq = firstToken[1] === 'doseq';
|
|
@@ -6681,10 +6722,10 @@ var Parser = /** @class */ (function () {
|
|
|
6681
6722
|
var forLoopBindings = [];
|
|
6682
6723
|
var _loop_1 = function () {
|
|
6683
6724
|
var loopBinding = this_1.parseForLoopBinding();
|
|
6684
|
-
var existingBoundNames = forLoopBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b
|
|
6685
|
-
var newBoundNames = getAllBindingTargetNames(loopBinding
|
|
6725
|
+
var existingBoundNames = forLoopBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b[0][1][0])); });
|
|
6726
|
+
var newBoundNames = getAllBindingTargetNames(loopBinding[0][1][0]);
|
|
6686
6727
|
if (Object.keys(newBoundNames).some(function (n) { return existingBoundNames.includes(n); })) {
|
|
6687
|
-
throw new LitsError('Duplicate binding', loopBinding
|
|
6728
|
+
throw new LitsError('Duplicate binding', loopBinding[0][2]);
|
|
6688
6729
|
}
|
|
6689
6730
|
forLoopBindings.push(loopBinding);
|
|
6690
6731
|
};
|
|
@@ -6706,13 +6747,9 @@ var Parser = /** @class */ (function () {
|
|
|
6706
6747
|
}
|
|
6707
6748
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6708
6749
|
this.advance();
|
|
6709
|
-
return
|
|
6710
|
-
|
|
6711
|
-
|
|
6712
|
-
params: expressions,
|
|
6713
|
-
sourceCodeInfo: firstToken[2],
|
|
6714
|
-
l: forLoopBindings,
|
|
6715
|
-
};
|
|
6750
|
+
return isDoseq
|
|
6751
|
+
? withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.doseq, forLoopBindings, expressions]], firstToken[2])
|
|
6752
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.for, forLoopBindings, expressions]], firstToken[2]);
|
|
6716
6753
|
};
|
|
6717
6754
|
Parser.prototype.parseForLoopBinding = function () {
|
|
6718
6755
|
assertReservedSymbolToken(this.peek(), 'each');
|
|
@@ -6734,18 +6771,17 @@ var Parser = /** @class */ (function () {
|
|
|
6734
6771
|
&& !isReservedSymbolToken(token, 'each')) {
|
|
6735
6772
|
throw new LitsError('Expected symbol each, do, let, when or while', token[2]);
|
|
6736
6773
|
}
|
|
6737
|
-
var letBindings;
|
|
6774
|
+
var letBindings = [];
|
|
6738
6775
|
if (token[1] === 'let') {
|
|
6739
6776
|
modifiers.push('&let');
|
|
6740
|
-
letBindings = [];
|
|
6741
6777
|
var _loop_2 = function () {
|
|
6742
6778
|
var letNode = this_2.parseLet(token, true);
|
|
6743
|
-
var existingBoundNames = letBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b
|
|
6744
|
-
var newBoundNames = Object.keys(getAllBindingTargetNames(letNode
|
|
6779
|
+
var existingBoundNames = letBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b[1][0])); });
|
|
6780
|
+
var newBoundNames = Object.keys(getAllBindingTargetNames(letNode[1][1][1][0]));
|
|
6745
6781
|
if (newBoundNames.some(function (n) { return existingBoundNames.includes(n); })) {
|
|
6746
|
-
throw new LitsError('Duplicate binding', letNode
|
|
6782
|
+
throw new LitsError('Duplicate binding', letNode[1][1][2]);
|
|
6747
6783
|
}
|
|
6748
|
-
letBindings.push(letNode
|
|
6784
|
+
letBindings.push(letNode[1][1]);
|
|
6749
6785
|
token = this_2.peek();
|
|
6750
6786
|
if (!isSymbolToken(token, 'do') && !isReservedSymbolToken(this_2.peek(), 'each') && !isOperatorToken(token, ',')) {
|
|
6751
6787
|
throw new LitsError('Expected do, each or comma', token[2]);
|
|
@@ -6791,31 +6827,21 @@ var Parser = /** @class */ (function () {
|
|
|
6791
6827
|
if (!isSymbolToken(token, 'do') && !isReservedSymbolToken(this.peek(), 'each')) {
|
|
6792
6828
|
throw new LitsError('Expected do or each', token[2]);
|
|
6793
6829
|
}
|
|
6794
|
-
return
|
|
6795
|
-
b: bindingNode,
|
|
6796
|
-
m: modifiers,
|
|
6797
|
-
l: letBindings,
|
|
6798
|
-
wn: whenNode,
|
|
6799
|
-
we: whileNode,
|
|
6800
|
-
};
|
|
6830
|
+
return [bindingNode, letBindings, whenNode, whileNode];
|
|
6801
6831
|
};
|
|
6802
6832
|
Parser.prototype.parseBinding = function () {
|
|
6803
6833
|
var firstToken = asSymbolToken(this.peek());
|
|
6804
|
-
var name =
|
|
6805
|
-
this.advance();
|
|
6834
|
+
var name = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6806
6835
|
assertReservedSymbolToken(this.peek(), 'in');
|
|
6807
6836
|
this.advance();
|
|
6808
6837
|
var value = this.parseExpression();
|
|
6809
|
-
var node =
|
|
6810
|
-
|
|
6811
|
-
|
|
6812
|
-
|
|
6813
|
-
|
|
6814
|
-
|
|
6815
|
-
|
|
6816
|
-
value: value,
|
|
6817
|
-
sourceCodeInfo: firstToken[2],
|
|
6818
|
-
};
|
|
6838
|
+
var node = withSourceCodeInfo([
|
|
6839
|
+
NodeTypes.Binding,
|
|
6840
|
+
[
|
|
6841
|
+
withSourceCodeInfo([bindingTargetTypes.symbol, [name, undefined]], firstToken[2]),
|
|
6842
|
+
value,
|
|
6843
|
+
],
|
|
6844
|
+
], firstToken[2]);
|
|
6819
6845
|
return node;
|
|
6820
6846
|
};
|
|
6821
6847
|
Parser.prototype.parseIfOrUnless = function (token) {
|
|
@@ -6838,12 +6864,7 @@ var Parser = /** @class */ (function () {
|
|
|
6838
6864
|
}
|
|
6839
6865
|
var thenExpression = thenExpressions.length === 1
|
|
6840
6866
|
? thenExpressions[0]
|
|
6841
|
-
:
|
|
6842
|
-
type: 'SpecialExpression',
|
|
6843
|
-
name: 'do',
|
|
6844
|
-
params: thenExpressions,
|
|
6845
|
-
sourceCodeInfo: token[2],
|
|
6846
|
-
};
|
|
6867
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, thenExpressions]], token[2]);
|
|
6847
6868
|
var elseExpression;
|
|
6848
6869
|
if (isReservedSymbolToken(this.peek(), 'else')) {
|
|
6849
6870
|
this.advance();
|
|
@@ -6859,25 +6880,13 @@ var Parser = /** @class */ (function () {
|
|
|
6859
6880
|
}
|
|
6860
6881
|
elseExpression = elseExpressions.length === 1
|
|
6861
6882
|
? elseExpressions[0]
|
|
6862
|
-
:
|
|
6863
|
-
type: 'SpecialExpression',
|
|
6864
|
-
name: 'do',
|
|
6865
|
-
params: elseExpressions,
|
|
6866
|
-
sourceCodeInfo: token[2],
|
|
6867
|
-
};
|
|
6883
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, elseExpressions]], token[2]);
|
|
6868
6884
|
}
|
|
6869
6885
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6870
6886
|
this.advance();
|
|
6871
|
-
|
|
6872
|
-
|
|
6873
|
-
|
|
6874
|
-
}
|
|
6875
|
-
return {
|
|
6876
|
-
type: 'SpecialExpression',
|
|
6877
|
-
name: isUnless ? 'unless' : 'if',
|
|
6878
|
-
params: params,
|
|
6879
|
-
sourceCodeInfo: token[2],
|
|
6880
|
-
};
|
|
6887
|
+
return isUnless
|
|
6888
|
+
? withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.unless, [condition, thenExpression, elseExpression]]], token[2])
|
|
6889
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.if, [condition, thenExpression, elseExpression]]], token[2]);
|
|
6881
6890
|
};
|
|
6882
6891
|
Parser.prototype.parseCond = function (token) {
|
|
6883
6892
|
this.advance();
|
|
@@ -6885,7 +6894,7 @@ var Parser = /** @class */ (function () {
|
|
|
6885
6894
|
while (!this.isAtEnd() && !isReservedSymbolToken(this.peek(), 'end')) {
|
|
6886
6895
|
assertReservedSymbolToken(this.peek(), 'case');
|
|
6887
6896
|
this.advance();
|
|
6888
|
-
|
|
6897
|
+
var caseExpression = this.parseExpression();
|
|
6889
6898
|
assertReservedSymbolToken(this.peek(), 'then');
|
|
6890
6899
|
this.advance();
|
|
6891
6900
|
var expressions = [];
|
|
@@ -6900,14 +6909,10 @@ var Parser = /** @class */ (function () {
|
|
|
6900
6909
|
throw new LitsError('Expected ;', this.peek()[2]);
|
|
6901
6910
|
}
|
|
6902
6911
|
}
|
|
6903
|
-
|
|
6912
|
+
var thenExpression = expressions.length === 1
|
|
6904
6913
|
? expressions[0]
|
|
6905
|
-
:
|
|
6906
|
-
|
|
6907
|
-
name: 'do',
|
|
6908
|
-
params: expressions,
|
|
6909
|
-
sourceCodeInfo: token[2],
|
|
6910
|
-
});
|
|
6914
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, expressions]], token[2]);
|
|
6915
|
+
params.push([caseExpression, thenExpression]);
|
|
6911
6916
|
if (isReservedSymbolToken(this.peek(), 'end')) {
|
|
6912
6917
|
break;
|
|
6913
6918
|
}
|
|
@@ -6915,20 +6920,16 @@ var Parser = /** @class */ (function () {
|
|
|
6915
6920
|
}
|
|
6916
6921
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6917
6922
|
this.advance();
|
|
6918
|
-
return
|
|
6919
|
-
type: 'SpecialExpression',
|
|
6920
|
-
name: 'cond',
|
|
6921
|
-
params: params,
|
|
6922
|
-
sourceCodeInfo: token[2],
|
|
6923
|
-
};
|
|
6923
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.cond, params]], token[2]);
|
|
6924
6924
|
};
|
|
6925
6925
|
Parser.prototype.parseSwitch = function (token) {
|
|
6926
6926
|
this.advance();
|
|
6927
|
-
var
|
|
6927
|
+
var valueExpression = this.parseExpression();
|
|
6928
|
+
var params = [];
|
|
6928
6929
|
while (!this.isAtEnd() && !isReservedSymbolToken(this.peek(), 'end')) {
|
|
6929
6930
|
assertReservedSymbolToken(this.peek(), 'case');
|
|
6930
6931
|
this.advance();
|
|
6931
|
-
|
|
6932
|
+
var caseExpression = this.parseExpression();
|
|
6932
6933
|
assertReservedSymbolToken(this.peek(), 'then');
|
|
6933
6934
|
this.advance();
|
|
6934
6935
|
var expressions = [];
|
|
@@ -6943,14 +6944,10 @@ var Parser = /** @class */ (function () {
|
|
|
6943
6944
|
throw new LitsError('Expected ;', this.peek()[2]);
|
|
6944
6945
|
}
|
|
6945
6946
|
}
|
|
6946
|
-
|
|
6947
|
+
var thenExpression = expressions.length === 1
|
|
6947
6948
|
? expressions[0]
|
|
6948
|
-
:
|
|
6949
|
-
|
|
6950
|
-
name: 'do',
|
|
6951
|
-
params: expressions,
|
|
6952
|
-
sourceCodeInfo: token[2],
|
|
6953
|
-
});
|
|
6949
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, expressions]], token[2]);
|
|
6950
|
+
params.push([caseExpression, thenExpression]);
|
|
6954
6951
|
if (isReservedSymbolToken(this.peek(), 'end')) {
|
|
6955
6952
|
break;
|
|
6956
6953
|
}
|
|
@@ -6958,12 +6955,7 @@ var Parser = /** @class */ (function () {
|
|
|
6958
6955
|
}
|
|
6959
6956
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6960
6957
|
this.advance();
|
|
6961
|
-
return
|
|
6962
|
-
type: 'SpecialExpression',
|
|
6963
|
-
name: 'switch',
|
|
6964
|
-
params: params,
|
|
6965
|
-
sourceCodeInfo: token[2],
|
|
6966
|
-
};
|
|
6958
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.switch, valueExpression, params]], token[2]);
|
|
6967
6959
|
};
|
|
6968
6960
|
Parser.prototype.parseFunction = function (token) {
|
|
6969
6961
|
this.advance();
|
|
@@ -6982,17 +6974,10 @@ var Parser = /** @class */ (function () {
|
|
|
6982
6974
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6983
6975
|
this.advance();
|
|
6984
6976
|
assertOperatorToken(this.peek(), ';');
|
|
6985
|
-
return
|
|
6986
|
-
|
|
6987
|
-
|
|
6988
|
-
|
|
6989
|
-
params: [],
|
|
6990
|
-
function: {
|
|
6991
|
-
arguments: functionArguments,
|
|
6992
|
-
body: body,
|
|
6993
|
-
},
|
|
6994
|
-
sourceCodeInfo: token[2],
|
|
6995
|
-
};
|
|
6977
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.function, symbol, [
|
|
6978
|
+
functionArguments,
|
|
6979
|
+
body,
|
|
6980
|
+
]]], token[2]);
|
|
6996
6981
|
};
|
|
6997
6982
|
Parser.prototype.isAtEnd = function () {
|
|
6998
6983
|
return this.parseState.position >= this.tokenStream.tokens.length;
|
|
@@ -7014,7 +6999,7 @@ var Parser = /** @class */ (function () {
|
|
|
7014
6999
|
this.advance();
|
|
7015
7000
|
if (isSymbolToken(this.peek(), 'let')) {
|
|
7016
7001
|
var letNode = this.parseLet(asSymbolToken(this.peek()));
|
|
7017
|
-
return
|
|
7002
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_def'], letNode[1][1]]], token[2]);
|
|
7018
7003
|
}
|
|
7019
7004
|
else if (isReservedSymbolToken(this.peek(), 'function')) {
|
|
7020
7005
|
this.advance();
|
|
@@ -7032,71 +7017,57 @@ var Parser = /** @class */ (function () {
|
|
|
7032
7017
|
}
|
|
7033
7018
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
7034
7019
|
this.advance();
|
|
7035
|
-
return
|
|
7036
|
-
|
|
7037
|
-
|
|
7038
|
-
|
|
7039
|
-
params: [],
|
|
7040
|
-
function: {
|
|
7041
|
-
arguments: functionArguments,
|
|
7042
|
-
body: body,
|
|
7043
|
-
},
|
|
7044
|
-
sourceCodeInfo: token[2],
|
|
7045
|
-
};
|
|
7020
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_defn'], symbol, [
|
|
7021
|
+
functionArguments,
|
|
7022
|
+
body,
|
|
7023
|
+
]]], token[2]);
|
|
7046
7024
|
}
|
|
7047
7025
|
else {
|
|
7048
7026
|
throw new LitsError('Expected let or function', this.peek()[2]);
|
|
7049
7027
|
}
|
|
7050
7028
|
};
|
|
7029
|
+
Parser.prototype.stringToSymbolNode = function (value, sourceCodeInfo) {
|
|
7030
|
+
if (specialExpressionTypes[value] !== undefined && value !== 'fn' && value !== 'def' && value !== 'defn') {
|
|
7031
|
+
return withSourceCodeInfo([NodeTypes.SpecialBuiltinSymbol, specialExpressionTypes[value]], sourceCodeInfo);
|
|
7032
|
+
}
|
|
7033
|
+
if (normalExpressionTypes[value] !== undefined) {
|
|
7034
|
+
return withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes[value]], sourceCodeInfo);
|
|
7035
|
+
}
|
|
7036
|
+
return withSourceCodeInfo([NodeTypes.UserDefinedSymbol, value], sourceCodeInfo);
|
|
7037
|
+
};
|
|
7038
|
+
Parser.prototype.stringFromQuotedSymbol = function (value) {
|
|
7039
|
+
return value.substring(1, value.length - 1)
|
|
7040
|
+
.replace(/(\\{2})|(\\')|\\(.)/g, function (_, backslash, singleQuote, normalChar) {
|
|
7041
|
+
if (backslash) {
|
|
7042
|
+
return '\\';
|
|
7043
|
+
}
|
|
7044
|
+
if (singleQuote) {
|
|
7045
|
+
return '\'';
|
|
7046
|
+
}
|
|
7047
|
+
return "\\".concat(normalChar);
|
|
7048
|
+
});
|
|
7049
|
+
};
|
|
7051
7050
|
Parser.prototype.parseSymbol = function () {
|
|
7052
7051
|
var token = this.peek();
|
|
7053
7052
|
this.advance();
|
|
7054
7053
|
if (!isSymbolToken(token)) {
|
|
7055
7054
|
throw new LitsError("Expected symbol token, got ".concat(token[0]), token[2]);
|
|
7056
7055
|
}
|
|
7057
|
-
if (token[1][0]
|
|
7058
|
-
return
|
|
7059
|
-
type: 'Symbol',
|
|
7060
|
-
value: token[1],
|
|
7061
|
-
sourceCodeInfo: token[2],
|
|
7062
|
-
};
|
|
7056
|
+
if (token[1][0] === '\'') {
|
|
7057
|
+
return this.stringToSymbolNode(this.stringFromQuotedSymbol(token[1]), token[2]);
|
|
7063
7058
|
}
|
|
7064
7059
|
else {
|
|
7065
|
-
|
|
7066
|
-
.replace(/(\\{2})|(\\')|\\(.)/g, function (_, backslash, singleQuote, normalChar) {
|
|
7067
|
-
if (backslash) {
|
|
7068
|
-
return '\\';
|
|
7069
|
-
}
|
|
7070
|
-
if (singleQuote) {
|
|
7071
|
-
return '\'';
|
|
7072
|
-
}
|
|
7073
|
-
return "\\".concat(normalChar);
|
|
7074
|
-
});
|
|
7075
|
-
return {
|
|
7076
|
-
type: 'Symbol',
|
|
7077
|
-
value: value,
|
|
7078
|
-
sourceCodeInfo: token[2],
|
|
7079
|
-
};
|
|
7060
|
+
return this.stringToSymbolNode(token[1], token[2]);
|
|
7080
7061
|
}
|
|
7081
7062
|
};
|
|
7082
7063
|
Parser.prototype.parseReservedSymbol = function () {
|
|
7083
|
-
var token = this.peek();
|
|
7064
|
+
var token = asReservedSymbolToken(this.peek());
|
|
7084
7065
|
this.advance();
|
|
7085
|
-
|
|
7086
|
-
|
|
7087
|
-
|
|
7088
|
-
return {
|
|
7089
|
-
type: 'Number',
|
|
7090
|
-
value: numberReservedSymbolRecord[symbol],
|
|
7091
|
-
sourceCodeInfo: token[2],
|
|
7092
|
-
};
|
|
7093
|
-
}
|
|
7066
|
+
var symbol = token[1];
|
|
7067
|
+
if (isNumberReservedSymbol(symbol)) {
|
|
7068
|
+
return withSourceCodeInfo([NodeTypes.Number, numberReservedSymbolRecord[symbol]], token[2]);
|
|
7094
7069
|
}
|
|
7095
|
-
return
|
|
7096
|
-
type: 'ReservedSymbol',
|
|
7097
|
-
value: token[1],
|
|
7098
|
-
sourceCodeInfo: token[2],
|
|
7099
|
-
};
|
|
7070
|
+
return withSourceCodeInfo([NodeTypes.ReservedSymbol, token[1]], token[2]);
|
|
7100
7071
|
};
|
|
7101
7072
|
Parser.prototype.parseNumber = function () {
|
|
7102
7073
|
var token = this.peek();
|
|
@@ -7104,11 +7075,7 @@ var Parser = /** @class */ (function () {
|
|
|
7104
7075
|
var value = token[1];
|
|
7105
7076
|
var negative = value[0] === '-';
|
|
7106
7077
|
var numberString = (negative ? value.substring(1) : value).replace(/_/g, '');
|
|
7107
|
-
return
|
|
7108
|
-
type: 'Number',
|
|
7109
|
-
value: negative ? -Number(numberString) : Number(numberString),
|
|
7110
|
-
sourceCodeInfo: token[2],
|
|
7111
|
-
};
|
|
7078
|
+
return withSourceCodeInfo([NodeTypes.Number, negative ? -Number(numberString) : Number(numberString)], token[2]);
|
|
7112
7079
|
};
|
|
7113
7080
|
Parser.prototype.parseString = function () {
|
|
7114
7081
|
var token = this.peek();
|
|
@@ -7140,11 +7107,7 @@ var Parser = /** @class */ (function () {
|
|
|
7140
7107
|
}
|
|
7141
7108
|
return normalChar;
|
|
7142
7109
|
});
|
|
7143
|
-
return
|
|
7144
|
-
type: 'String',
|
|
7145
|
-
value: value,
|
|
7146
|
-
sourceCodeInfo: token[2],
|
|
7147
|
-
};
|
|
7110
|
+
return withSourceCodeInfo([NodeTypes.String, value], token[2]);
|
|
7148
7111
|
};
|
|
7149
7112
|
Parser.prototype.parseRegexpShorthand = function () {
|
|
7150
7113
|
var token = this.peek();
|
|
@@ -7152,22 +7115,15 @@ var Parser = /** @class */ (function () {
|
|
|
7152
7115
|
var endStringPosition = token[1].lastIndexOf('"');
|
|
7153
7116
|
var regexpString = token[1].substring(2, endStringPosition);
|
|
7154
7117
|
var optionsString = token[1].substring(endStringPosition + 1);
|
|
7155
|
-
var stringNode =
|
|
7156
|
-
|
|
7157
|
-
|
|
7158
|
-
|
|
7159
|
-
|
|
7160
|
-
|
|
7161
|
-
|
|
7162
|
-
|
|
7163
|
-
|
|
7164
|
-
};
|
|
7165
|
-
var node = {
|
|
7166
|
-
type: 'NormalExpression',
|
|
7167
|
-
name: 'regexp',
|
|
7168
|
-
params: [stringNode, optionsNode],
|
|
7169
|
-
sourceCodeInfo: token[2],
|
|
7170
|
-
};
|
|
7118
|
+
var stringNode = withSourceCodeInfo([NodeTypes.String, regexpString], token[2]);
|
|
7119
|
+
var optionsNode = withSourceCodeInfo([NodeTypes.String, optionsString], token[2]);
|
|
7120
|
+
var node = withSourceCodeInfo([
|
|
7121
|
+
NodeTypes.NormalExpression,
|
|
7122
|
+
[
|
|
7123
|
+
withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes.regexp], token[2]),
|
|
7124
|
+
[stringNode, optionsNode],
|
|
7125
|
+
],
|
|
7126
|
+
], token[2]);
|
|
7171
7127
|
return node;
|
|
7172
7128
|
};
|
|
7173
7129
|
return Parser;
|
|
@@ -7284,7 +7240,7 @@ var Lits = /** @class */ (function () {
|
|
|
7284
7240
|
if (params === void 0) { params = {}; }
|
|
7285
7241
|
var ast = typeof programOrAst === 'string' ? this.generateAst(programOrAst, params) : programOrAst;
|
|
7286
7242
|
var contextStack = createContextStack(params);
|
|
7287
|
-
return getUndefinedSymbols(ast, contextStack, builtin,
|
|
7243
|
+
return getUndefinedSymbols(ast, contextStack, builtin, evaluateNode);
|
|
7288
7244
|
};
|
|
7289
7245
|
Lits.prototype.tokenize = function (program, tokenizeParams) {
|
|
7290
7246
|
if (tokenizeParams === void 0) { tokenizeParams = {}; }
|
|
@@ -7686,28 +7642,6 @@ var api = {
|
|
|
7686
7642
|
'replace',
|
|
7687
7643
|
'replace-all',
|
|
7688
7644
|
],
|
|
7689
|
-
specialExpressions: [
|
|
7690
|
-
'&&',
|
|
7691
|
-
'||',
|
|
7692
|
-
'def',
|
|
7693
|
-
'let',
|
|
7694
|
-
'fn',
|
|
7695
|
-
'defn',
|
|
7696
|
-
'function',
|
|
7697
|
-
'try',
|
|
7698
|
-
'throw',
|
|
7699
|
-
'if',
|
|
7700
|
-
'unless',
|
|
7701
|
-
'cond',
|
|
7702
|
-
'switch',
|
|
7703
|
-
'do',
|
|
7704
|
-
'recur',
|
|
7705
|
-
'loop',
|
|
7706
|
-
'doseq',
|
|
7707
|
-
'for',
|
|
7708
|
-
'defined?',
|
|
7709
|
-
'??',
|
|
7710
|
-
],
|
|
7711
7645
|
string: [
|
|
7712
7646
|
'string-repeat',
|
|
7713
7647
|
'str',
|
|
@@ -13319,8 +13253,7 @@ Object.entries(specialExpressionsReference).forEach(function (_a) {
|
|
|
13319
13253
|
var _b;
|
|
13320
13254
|
var _c = __read(_a, 2), key = _c[0], obj = _c[1];
|
|
13321
13255
|
if (isFunctionReference(obj)) {
|
|
13322
|
-
var
|
|
13323
|
-
var paramCount = (_b = specialExpressions[key]) === null || _b === void 0 ? void 0 : _b.paramCount;
|
|
13256
|
+
var paramCount = (_b = specialExpressions[specialExpressionTypes[key]]) === null || _b === void 0 ? void 0 : _b.paramCount;
|
|
13324
13257
|
if (paramCount && canBeOperator(paramCount)) {
|
|
13325
13258
|
obj._isOperator = true;
|
|
13326
13259
|
}
|
|
@@ -13338,7 +13271,7 @@ function stringifyValue(value, html) {
|
|
|
13338
13271
|
var lt = '<';
|
|
13339
13272
|
if (isLitsFunction(value)) {
|
|
13340
13273
|
if (value.functionType === 'Builtin')
|
|
13341
|
-
return "".concat(lt, "builtin function ").concat(value.
|
|
13274
|
+
return "".concat(lt, "builtin function ").concat(value.normalBuitinSymbolType).concat(gt);
|
|
13342
13275
|
else
|
|
13343
13276
|
return "".concat(lt, "function ").concat((_a = value.n) !== null && _a !== void 0 ? _a : '\u03BB').concat(gt);
|
|
13344
13277
|
}
|