@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/lits.iife.js
CHANGED
|
@@ -180,23 +180,25 @@ var Lits = (function (exports) {
|
|
|
180
180
|
return error instanceof LitsError;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
var
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
183
|
+
var NodeTypes = {
|
|
184
|
+
Number: 1,
|
|
185
|
+
String: 2,
|
|
186
|
+
NormalExpression: 3,
|
|
187
|
+
SpecialExpression: 4,
|
|
188
|
+
UserDefinedSymbol: 5,
|
|
189
|
+
NormalBuiltinSymbol: 6,
|
|
190
|
+
SpecialBuiltinSymbol: 7,
|
|
191
|
+
ReservedSymbol: 8,
|
|
192
|
+
Binding: 9,
|
|
193
|
+
Spread: 10,
|
|
194
|
+
};
|
|
195
|
+
var NodeTypesSet = new Set(Object.values(NodeTypes));
|
|
196
|
+
function getNodeTypeName(type) {
|
|
197
|
+
return Object.keys(NodeTypes).find(function (key) { return NodeTypes[key] === type; });
|
|
198
|
+
}
|
|
199
|
+
// TODO, is this needed?
|
|
200
|
+
function isNodeType(type) {
|
|
201
|
+
return typeof type === 'number' && NodeTypesSet.has(type);
|
|
200
202
|
}
|
|
201
203
|
var functionTypes = [
|
|
202
204
|
'UserDefined',
|
|
@@ -224,17 +226,17 @@ var Lits = (function (exports) {
|
|
|
224
226
|
return false;
|
|
225
227
|
return FUNCTION_SYMBOL in func && 'functionType' in func && isFunctionType(func.functionType);
|
|
226
228
|
}
|
|
227
|
-
function
|
|
228
|
-
if (value
|
|
229
|
+
function isNode(value) {
|
|
230
|
+
if (!Array.isArray(value) || value.length < 2)
|
|
229
231
|
return false;
|
|
230
|
-
return
|
|
232
|
+
return isNodeType(value[0]);
|
|
231
233
|
}
|
|
232
234
|
function valueToString(value) {
|
|
233
235
|
if (isLitsFunction$1(value))
|
|
234
236
|
// eslint-disable-next-line ts/no-unsafe-member-access
|
|
235
237
|
return "<function ".concat(value.name || '\u03BB', ">");
|
|
236
|
-
if (
|
|
237
|
-
return "".concat(value
|
|
238
|
+
if (isNode(value))
|
|
239
|
+
return "".concat(getNodeTypeName(value[0]), "-node");
|
|
238
240
|
if (value === null)
|
|
239
241
|
return 'null';
|
|
240
242
|
if (typeof value === 'object' && value instanceof RegExp)
|
|
@@ -255,59 +257,56 @@ var Lits = (function (exports) {
|
|
|
255
257
|
}
|
|
256
258
|
|
|
257
259
|
function assertNumberOfParams(count, node) {
|
|
258
|
-
|
|
259
|
-
count: count,
|
|
260
|
-
length: node.params.length,
|
|
261
|
-
name: node.name,
|
|
262
|
-
sourceCodeInfo: node.sourceCodeInfo,
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
function isNonUndefined(value) {
|
|
266
|
-
return value !== undefined;
|
|
267
|
-
}
|
|
268
|
-
function asNonUndefined(value, sourceCodeInfo) {
|
|
269
|
-
assertNonUndefined(value, sourceCodeInfo);
|
|
270
|
-
return value;
|
|
271
|
-
}
|
|
272
|
-
function assertNonUndefined(value, sourceCodeInfo) {
|
|
273
|
-
if (!isNonUndefined(value))
|
|
274
|
-
throw new LitsError('Unexpected undefined', getSourceCodeInfo(value, sourceCodeInfo));
|
|
275
|
-
}
|
|
276
|
-
function isUnknownRecord(value) {
|
|
277
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
278
|
-
}
|
|
279
|
-
function assertUnknownRecord(value, sourceCodeInfo) {
|
|
280
|
-
if (!isUnknownRecord(value)) {
|
|
281
|
-
throw new LitsError("Expected ".concat('UnknownRecord', ", got ").concat(valueToString(value), "."), getSourceCodeInfo(value, sourceCodeInfo));
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
function assertCount(_a) {
|
|
285
|
-
var count = _a.count, length = _a.length, name = _a.name, sourceCodeInfo = _a.sourceCodeInfo;
|
|
260
|
+
var length = node[1][1].length;
|
|
286
261
|
if (typeof count === 'number') {
|
|
287
262
|
if (length !== count) {
|
|
288
|
-
|
|
263
|
+
var name_1 = getNodeTypeName(node[0]);
|
|
264
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_1, "\", expected ").concat(count, ", got ").concat(valueToString(length), "."), node[2]);
|
|
289
265
|
}
|
|
290
266
|
}
|
|
291
267
|
else {
|
|
292
268
|
var min = count.min, max = count.max, even = count.even, odd = count.odd;
|
|
293
269
|
if (even) {
|
|
270
|
+
var name_2 = getNodeTypeName(node[0]);
|
|
294
271
|
if (length % 2 !== 0) {
|
|
295
|
-
throw new LitsError("Wrong number of arguments to \"".concat(
|
|
272
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_2, "\",, expected an even number, got ").concat(valueToString(length), "."), node[2]);
|
|
296
273
|
}
|
|
297
274
|
}
|
|
298
275
|
if (odd) {
|
|
299
276
|
if (length % 2 !== 1) {
|
|
300
|
-
|
|
277
|
+
var name_3 = getNodeTypeName(node[0]);
|
|
278
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_3, "\",, expected an odd number, got ").concat(valueToString(length), "."), node[2]);
|
|
301
279
|
}
|
|
302
280
|
}
|
|
303
281
|
if (typeof min === 'number' && length < min) {
|
|
304
|
-
|
|
282
|
+
var name_4 = getNodeTypeName(node[0]);
|
|
283
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_4, "\", expected at least ").concat(min, ", got ").concat(valueToString(length), "."), node[2]);
|
|
305
284
|
}
|
|
306
285
|
if (typeof max === 'number' && length > max) {
|
|
307
|
-
|
|
286
|
+
var name_5 = getNodeTypeName(node[0]);
|
|
287
|
+
throw new LitsError("Wrong number of arguments to \"".concat(name_5, "\", expected at most ").concat(max, ", got ").concat(valueToString(length), "."), node[2]);
|
|
308
288
|
}
|
|
309
289
|
}
|
|
310
290
|
}
|
|
291
|
+
function isNonUndefined(value) {
|
|
292
|
+
return value !== undefined;
|
|
293
|
+
}
|
|
294
|
+
function asNonUndefined(value, sourceCodeInfo) {
|
|
295
|
+
assertNonUndefined(value, sourceCodeInfo);
|
|
296
|
+
return value;
|
|
297
|
+
}
|
|
298
|
+
function assertNonUndefined(value, sourceCodeInfo) {
|
|
299
|
+
if (!isNonUndefined(value))
|
|
300
|
+
throw new LitsError('Unexpected undefined', getSourceCodeInfo(value, sourceCodeInfo));
|
|
301
|
+
}
|
|
302
|
+
function isUnknownRecord(value) {
|
|
303
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
304
|
+
}
|
|
305
|
+
function assertUnknownRecord(value, sourceCodeInfo) {
|
|
306
|
+
if (!isUnknownRecord(value)) {
|
|
307
|
+
throw new LitsError("Expected ".concat('UnknownRecord', ", got ").concat(valueToString(value), "."), getSourceCodeInfo(value, sourceCodeInfo));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
311
310
|
function canBeOperator(count) {
|
|
312
311
|
if (typeof count === 'number') {
|
|
313
312
|
return count === 2;
|
|
@@ -745,12 +744,6 @@ var Lits = (function (exports) {
|
|
|
745
744
|
_a.functionType = 'NativeJsFunction',
|
|
746
745
|
_a;
|
|
747
746
|
}
|
|
748
|
-
function arrayToPairs(arr) {
|
|
749
|
-
var pairs = [];
|
|
750
|
-
for (var i = 0; i < arr.length; i += 2)
|
|
751
|
-
pairs.push([arr[i], arr[i + 1]]);
|
|
752
|
-
return pairs;
|
|
753
|
-
}
|
|
754
747
|
function joinSets() {
|
|
755
748
|
var e_1, _a;
|
|
756
749
|
var results = [];
|
|
@@ -3648,17 +3641,24 @@ var Lits = (function (exports) {
|
|
|
3648
3641
|
});
|
|
3649
3642
|
});
|
|
3650
3643
|
var normalExpressions = __assign(__assign({}, expressions), aliases);
|
|
3644
|
+
var normalExpressionTypes = {};
|
|
3645
|
+
var allNormalExpressions = [];
|
|
3646
|
+
Object.entries(normalExpressions).forEach(function (_a, index) {
|
|
3647
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
3648
|
+
normalExpressionTypes[key] = index;
|
|
3649
|
+
allNormalExpressions.push(value);
|
|
3650
|
+
});
|
|
3651
3651
|
|
|
3652
3652
|
var andSpecialExpression = {
|
|
3653
3653
|
paramCount: {},
|
|
3654
3654
|
evaluate: function (node, contextStack, _a) {
|
|
3655
3655
|
var e_1, _b;
|
|
3656
|
-
var
|
|
3656
|
+
var evaluateNode = _a.evaluateNode;
|
|
3657
3657
|
var value = true;
|
|
3658
3658
|
try {
|
|
3659
|
-
for (var _c = __values(node
|
|
3659
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
3660
3660
|
var param = _d.value;
|
|
3661
|
-
value =
|
|
3661
|
+
value = evaluateNode(param, contextStack);
|
|
3662
3662
|
if (!value)
|
|
3663
3663
|
break;
|
|
3664
3664
|
}
|
|
@@ -3673,8 +3673,8 @@ var Lits = (function (exports) {
|
|
|
3673
3673
|
return value;
|
|
3674
3674
|
},
|
|
3675
3675
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3676
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3677
|
-
return getUndefinedSymbols(node
|
|
3676
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3677
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
3678
3678
|
},
|
|
3679
3679
|
};
|
|
3680
3680
|
|
|
@@ -3682,28 +3682,29 @@ var Lits = (function (exports) {
|
|
|
3682
3682
|
paramCount: { even: true },
|
|
3683
3683
|
evaluate: function (node, contextStack, _a) {
|
|
3684
3684
|
var e_1, _b;
|
|
3685
|
-
var
|
|
3685
|
+
var evaluateNode = _a.evaluateNode;
|
|
3686
|
+
var params = node[1][1];
|
|
3686
3687
|
try {
|
|
3687
|
-
for (var
|
|
3688
|
-
var
|
|
3689
|
-
var value =
|
|
3688
|
+
for (var params_1 = __values(params), params_1_1 = params_1.next(); !params_1_1.done; params_1_1 = params_1.next()) {
|
|
3689
|
+
var _c = __read(params_1_1.value, 2), test = _c[0], form = _c[1];
|
|
3690
|
+
var value = evaluateNode(test, contextStack);
|
|
3690
3691
|
if (!value)
|
|
3691
3692
|
continue;
|
|
3692
|
-
return
|
|
3693
|
+
return evaluateNode(form, contextStack);
|
|
3693
3694
|
}
|
|
3694
3695
|
}
|
|
3695
3696
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
3696
3697
|
finally {
|
|
3697
3698
|
try {
|
|
3698
|
-
if (
|
|
3699
|
+
if (params_1_1 && !params_1_1.done && (_b = params_1.return)) _b.call(params_1);
|
|
3699
3700
|
}
|
|
3700
3701
|
finally { if (e_1) throw e_1.error; }
|
|
3701
3702
|
}
|
|
3702
3703
|
return null;
|
|
3703
3704
|
},
|
|
3704
3705
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3705
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3706
|
-
return getUndefinedSymbols(node.
|
|
3706
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3707
|
+
return getUndefinedSymbols(node[1][1].flat(), contextStack, builtin, evaluateNode);
|
|
3707
3708
|
},
|
|
3708
3709
|
};
|
|
3709
3710
|
|
|
@@ -3711,66 +3712,141 @@ var Lits = (function (exports) {
|
|
|
3711
3712
|
paramCount: { odd: true },
|
|
3712
3713
|
evaluate: function (node, contextStack, _a) {
|
|
3713
3714
|
var e_1, _b;
|
|
3714
|
-
var
|
|
3715
|
-
var
|
|
3715
|
+
var evaluateNode = _a.evaluateNode;
|
|
3716
|
+
var _c = __read(node[1], 3), switchValueNode = _c[1], cases = _c[2];
|
|
3717
|
+
var switchValue = evaluateNode(switchValueNode, contextStack);
|
|
3716
3718
|
try {
|
|
3717
|
-
for (var
|
|
3718
|
-
var
|
|
3719
|
-
var value =
|
|
3719
|
+
for (var cases_1 = __values(cases), cases_1_1 = cases_1.next(); !cases_1_1.done; cases_1_1 = cases_1.next()) {
|
|
3720
|
+
var _d = __read(cases_1_1.value, 2), test = _d[0], form = _d[1];
|
|
3721
|
+
var value = evaluateNode(test, contextStack);
|
|
3720
3722
|
if (value === switchValue) {
|
|
3721
|
-
return
|
|
3723
|
+
return evaluateNode(form, contextStack);
|
|
3722
3724
|
}
|
|
3723
3725
|
}
|
|
3724
3726
|
}
|
|
3725
3727
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
3726
3728
|
finally {
|
|
3727
3729
|
try {
|
|
3728
|
-
if (
|
|
3730
|
+
if (cases_1_1 && !cases_1_1.done && (_b = cases_1.return)) _b.call(cases_1);
|
|
3729
3731
|
}
|
|
3730
3732
|
finally { if (e_1) throw e_1.error; }
|
|
3731
3733
|
}
|
|
3732
3734
|
return null;
|
|
3733
3735
|
},
|
|
3734
3736
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3735
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3736
|
-
return getUndefinedSymbols(node.
|
|
3737
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3738
|
+
return getUndefinedSymbols(__spreadArray([node[1][1]], __read(node[1][2].flat()), false), contextStack, builtin, evaluateNode);
|
|
3737
3739
|
},
|
|
3738
3740
|
};
|
|
3739
3741
|
|
|
3740
|
-
|
|
3742
|
+
function isSymbolNode(node) {
|
|
3743
|
+
var nodeType = node[0];
|
|
3744
|
+
return NodeTypes.UserDefinedSymbol === nodeType
|
|
3745
|
+
|| NodeTypes.NormalBuiltinSymbol === nodeType
|
|
3746
|
+
|| NodeTypes.SpecialBuiltinSymbol === nodeType;
|
|
3747
|
+
}
|
|
3748
|
+
function assertSymbolNode(node, sourceCodeInfo) {
|
|
3749
|
+
if (!isSymbolNode(node))
|
|
3750
|
+
throw getAssertionError('SymbolNode', node, sourceCodeInfo);
|
|
3751
|
+
}
|
|
3752
|
+
function isUserDefinedSymbolNode(node) {
|
|
3753
|
+
return NodeTypes.UserDefinedSymbol === node[0];
|
|
3754
|
+
}
|
|
3755
|
+
function asUserDefinedSymbolNode(node, sourceCodeInfo) {
|
|
3756
|
+
assertUserDefinedSymbolNode(node, sourceCodeInfo);
|
|
3757
|
+
return node;
|
|
3758
|
+
}
|
|
3759
|
+
function assertUserDefinedSymbolNode(node, sourceCodeInfo) {
|
|
3760
|
+
if (!isUserDefinedSymbolNode(node))
|
|
3761
|
+
throw getAssertionError('UserDefinedSymbolNode', node, sourceCodeInfo);
|
|
3762
|
+
}
|
|
3763
|
+
function isNormalBuiltinSymbolNode(node) {
|
|
3764
|
+
return NodeTypes.NormalBuiltinSymbol === node[0];
|
|
3765
|
+
}
|
|
3766
|
+
function isSpecialBuiltinSymbolNode(node) {
|
|
3767
|
+
return NodeTypes.SpecialBuiltinSymbol === node[0];
|
|
3768
|
+
}
|
|
3769
|
+
function isNormalExpressionNode(node) {
|
|
3770
|
+
return node[0] === NodeTypes.NormalExpression;
|
|
3771
|
+
}
|
|
3772
|
+
function isNormalExpressionNodeWithName(node) {
|
|
3773
|
+
if (!isNormalExpressionNode(node)) {
|
|
3774
|
+
return false;
|
|
3775
|
+
}
|
|
3776
|
+
return isSymbolNode(node[1][0]);
|
|
3777
|
+
}
|
|
3778
|
+
function isSpreadNode(node) {
|
|
3779
|
+
return node[0] === NodeTypes.Spread;
|
|
3780
|
+
}
|
|
3781
|
+
|
|
3782
|
+
var definedSpecialExpression = {
|
|
3741
3783
|
paramCount: 1,
|
|
3742
3784
|
evaluate: function (node, contextStack) {
|
|
3743
|
-
var
|
|
3785
|
+
var symbolNode = node[1][1];
|
|
3786
|
+
assertSymbolNode(symbolNode);
|
|
3787
|
+
if (!isUserDefinedSymbolNode(symbolNode)) {
|
|
3788
|
+
return true; // If the symbol is not a user defined symbol, it is defined. normal or special builtin
|
|
3789
|
+
}
|
|
3790
|
+
var lookUpResult = contextStack.lookUp(symbolNode);
|
|
3744
3791
|
return lookUpResult !== null;
|
|
3745
3792
|
},
|
|
3746
3793
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3747
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3748
|
-
return getUndefinedSymbols(node
|
|
3794
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3795
|
+
return getUndefinedSymbols([node[1][1]], contextStack, builtin, evaluateNode);
|
|
3749
3796
|
},
|
|
3750
3797
|
};
|
|
3751
3798
|
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3799
|
+
var bindingTargetTypes = {
|
|
3800
|
+
symbol: 11,
|
|
3801
|
+
rest: 12,
|
|
3802
|
+
object: 13,
|
|
3803
|
+
array: 14,
|
|
3804
|
+
};
|
|
3805
|
+
|
|
3806
|
+
function walkDefaults(bindingTarget, onDefault) {
|
|
3807
|
+
var _a;
|
|
3808
|
+
if (bindingTarget[0] === bindingTargetTypes.object) {
|
|
3809
|
+
Object.values(bindingTarget[1][0]).forEach(function (element) {
|
|
3810
|
+
if (element[1][1]) {
|
|
3811
|
+
onDefault(element[1][1]);
|
|
3812
|
+
}
|
|
3813
|
+
walkDefaults(element, onDefault);
|
|
3814
|
+
});
|
|
3815
|
+
}
|
|
3816
|
+
else if (bindingTarget[0] === bindingTargetTypes.array) {
|
|
3817
|
+
for (var index = 0; index < bindingTarget[1][0].length; index += 1) {
|
|
3818
|
+
var element = (_a = bindingTarget[1][0][index]) !== null && _a !== void 0 ? _a : null;
|
|
3819
|
+
if (element === null) {
|
|
3820
|
+
continue;
|
|
3821
|
+
}
|
|
3822
|
+
if (element[1][1]) {
|
|
3823
|
+
onDefault(element[1][1]);
|
|
3824
|
+
}
|
|
3825
|
+
walkDefaults(element, onDefault);
|
|
3826
|
+
}
|
|
3827
|
+
}
|
|
3828
|
+
}
|
|
3829
|
+
function evalueateBindingNodeValues(target, value, evaluate) {
|
|
3830
|
+
var sourceCodeInfo = target[2];
|
|
3755
3831
|
var record = {};
|
|
3756
3832
|
createRecord(target, value, evaluate, sourceCodeInfo, record);
|
|
3757
3833
|
return record;
|
|
3758
3834
|
}
|
|
3759
3835
|
function createRecord(bindingTarget, value, evaluate, sourceCodeInfo, record) {
|
|
3760
3836
|
var _a, _b;
|
|
3761
|
-
if (bindingTarget
|
|
3837
|
+
if (bindingTarget[0] === bindingTargetTypes.object) {
|
|
3762
3838
|
assertUnknownRecord(value, sourceCodeInfo);
|
|
3763
3839
|
var capturedKeys_1 = new Set();
|
|
3764
3840
|
var restElement_1;
|
|
3765
|
-
Object.entries(bindingTarget
|
|
3841
|
+
Object.entries(bindingTarget[1][0]).forEach(function (_a) {
|
|
3766
3842
|
var _b;
|
|
3767
3843
|
var _c = __read(_a, 2), key = _c[0], element = _c[1];
|
|
3768
|
-
if (element
|
|
3844
|
+
if (element[0] === bindingTargetTypes.rest) {
|
|
3769
3845
|
restElement_1 = element;
|
|
3770
3846
|
return;
|
|
3771
3847
|
}
|
|
3772
3848
|
capturedKeys_1.add(key);
|
|
3773
|
-
var val = (_b = (value[key] !== undefined ? value[key] : element
|
|
3849
|
+
var val = (_b = (value[key] !== undefined ? value[key] : element[1][1] && evaluate(element[1][1]))) !== null && _b !== void 0 ? _b : null;
|
|
3774
3850
|
assertAny(val, sourceCodeInfo);
|
|
3775
3851
|
createRecord(element, val, evaluate, sourceCodeInfo, record);
|
|
3776
3852
|
});
|
|
@@ -3785,33 +3861,36 @@ var Lits = (function (exports) {
|
|
|
3785
3861
|
acc[key] = asAny(val);
|
|
3786
3862
|
return acc;
|
|
3787
3863
|
}, {});
|
|
3788
|
-
record[restElement_1
|
|
3864
|
+
record[restElement_1[1][0]] = restValues;
|
|
3789
3865
|
}
|
|
3790
3866
|
}
|
|
3791
|
-
else if (bindingTarget
|
|
3867
|
+
else if (bindingTarget[0] === bindingTargetTypes.array) {
|
|
3792
3868
|
var restIndex = null;
|
|
3793
3869
|
assertArray(value, sourceCodeInfo);
|
|
3794
|
-
for (var index = 0; index < bindingTarget.
|
|
3795
|
-
var element = (_a = bindingTarget
|
|
3870
|
+
for (var index = 0; index < bindingTarget[1][0].length; index += 1) {
|
|
3871
|
+
var element = (_a = bindingTarget[1][0][index]) !== null && _a !== void 0 ? _a : null;
|
|
3796
3872
|
if (element === null) {
|
|
3797
3873
|
continue;
|
|
3798
3874
|
}
|
|
3799
|
-
if (element
|
|
3875
|
+
if (element[0] === bindingTargetTypes.rest) {
|
|
3800
3876
|
restIndex = index;
|
|
3801
3877
|
break;
|
|
3802
3878
|
}
|
|
3803
|
-
var val = (_b = (value[index] !== undefined ? value[index] : element
|
|
3879
|
+
var val = (_b = (value[index] !== undefined ? value[index] : element[1][1] && evaluate(element[1][1]))) !== null && _b !== void 0 ? _b : null;
|
|
3804
3880
|
assertAny(val, sourceCodeInfo);
|
|
3805
3881
|
createRecord(element, val, evaluate, sourceCodeInfo, record);
|
|
3806
3882
|
}
|
|
3807
3883
|
if (restIndex !== null) {
|
|
3808
3884
|
var restValues = value.slice(restIndex);
|
|
3809
|
-
var restElement = bindingTarget
|
|
3810
|
-
record[restElement
|
|
3885
|
+
var restElement = bindingTarget[1][0][restIndex];
|
|
3886
|
+
record[restElement[1][0]] = restValues;
|
|
3811
3887
|
}
|
|
3812
3888
|
}
|
|
3889
|
+
else if (bindingTarget[0] === bindingTargetTypes.rest) {
|
|
3890
|
+
record[bindingTarget[1][0]] = asAny(value);
|
|
3891
|
+
}
|
|
3813
3892
|
else {
|
|
3814
|
-
record[bindingTarget
|
|
3893
|
+
record[bindingTarget[1][0][1]] = asAny(value);
|
|
3815
3894
|
}
|
|
3816
3895
|
}
|
|
3817
3896
|
function getAllBindingTargetNames(bindingTarget) {
|
|
@@ -3824,9 +3903,9 @@ var Lits = (function (exports) {
|
|
|
3824
3903
|
if (target === null) {
|
|
3825
3904
|
return;
|
|
3826
3905
|
}
|
|
3827
|
-
if (target
|
|
3906
|
+
if (target[0] === bindingTargetTypes.array) {
|
|
3828
3907
|
try {
|
|
3829
|
-
for (var _c = __values(target
|
|
3908
|
+
for (var _c = __values(target[1][0]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
3830
3909
|
var element = _d.value;
|
|
3831
3910
|
getNamesFromBindingTarget(element, names);
|
|
3832
3911
|
}
|
|
@@ -3839,9 +3918,9 @@ var Lits = (function (exports) {
|
|
|
3839
3918
|
finally { if (e_1) throw e_1.error; }
|
|
3840
3919
|
}
|
|
3841
3920
|
}
|
|
3842
|
-
else if (target
|
|
3921
|
+
else if (target[0] === bindingTargetTypes.object) {
|
|
3843
3922
|
try {
|
|
3844
|
-
for (var _e = __values(Object.values(target
|
|
3923
|
+
for (var _e = __values(Object.values(target[1][0])), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
3845
3924
|
var element = _f.value;
|
|
3846
3925
|
getNamesFromBindingTarget(element, names);
|
|
3847
3926
|
}
|
|
@@ -3854,27 +3933,42 @@ var Lits = (function (exports) {
|
|
|
3854
3933
|
finally { if (e_2) throw e_2.error; }
|
|
3855
3934
|
}
|
|
3856
3935
|
}
|
|
3936
|
+
else if (target[0] === bindingTargetTypes.rest) {
|
|
3937
|
+
if (names[target[1][0]]) {
|
|
3938
|
+
throw new LitsError("Duplicate binding name: ".concat(target[1][0]), target[2]);
|
|
3939
|
+
}
|
|
3940
|
+
names[target[1][0]] = true;
|
|
3941
|
+
}
|
|
3857
3942
|
else {
|
|
3858
|
-
if (names[target
|
|
3859
|
-
throw new LitsError("Duplicate binding name: ".concat(target
|
|
3943
|
+
if (names[target[1][0][1]]) {
|
|
3944
|
+
throw new LitsError("Duplicate binding name: ".concat(target[1][0]), target[2]);
|
|
3860
3945
|
}
|
|
3861
|
-
names[target
|
|
3946
|
+
names[target[1][0][1]] = true;
|
|
3862
3947
|
}
|
|
3863
3948
|
}
|
|
3864
3949
|
|
|
3865
3950
|
var defSpecialExpression = {
|
|
3866
3951
|
paramCount: 2,
|
|
3867
3952
|
evaluate: function (node, contextStack, _a) {
|
|
3868
|
-
var
|
|
3869
|
-
var
|
|
3870
|
-
var
|
|
3953
|
+
var evaluateNode = _a.evaluateNode;
|
|
3954
|
+
var bindingNode = node[1][1];
|
|
3955
|
+
var target = bindingNode[1][0];
|
|
3956
|
+
var value = bindingNode[1][1];
|
|
3957
|
+
var bindingValue = evaluateNode(value, contextStack);
|
|
3958
|
+
var values = evalueateBindingNodeValues(target, bindingValue, function (Node) { return evaluateNode(Node, contextStack); });
|
|
3871
3959
|
contextStack.exportValues(values);
|
|
3872
3960
|
return null;
|
|
3873
3961
|
},
|
|
3874
3962
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3875
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3876
|
-
var
|
|
3877
|
-
|
|
3963
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
3964
|
+
var bindingNode = node[1][1];
|
|
3965
|
+
var target = bindingNode[1][0];
|
|
3966
|
+
var value = bindingNode[1][1];
|
|
3967
|
+
var bindingResult = getUndefinedSymbols([value], contextStack, builtin, evaluateNode);
|
|
3968
|
+
walkDefaults(target, function (defaultNode) {
|
|
3969
|
+
addToSet(bindingResult, getUndefinedSymbols([defaultNode], contextStack, builtin, evaluateNode));
|
|
3970
|
+
});
|
|
3971
|
+
contextStack.addValues(getAllBindingTargetNames(target));
|
|
3878
3972
|
return bindingResult;
|
|
3879
3973
|
},
|
|
3880
3974
|
};
|
|
@@ -3883,14 +3977,14 @@ var Lits = (function (exports) {
|
|
|
3883
3977
|
paramCount: {},
|
|
3884
3978
|
evaluate: function (node, contextStack, _a) {
|
|
3885
3979
|
var e_1, _b;
|
|
3886
|
-
var
|
|
3980
|
+
var evaluateNode = _a.evaluateNode;
|
|
3887
3981
|
var newContext = {};
|
|
3888
3982
|
var newContextStack = contextStack.create(newContext);
|
|
3889
3983
|
var result = null;
|
|
3890
3984
|
try {
|
|
3891
|
-
for (var _c = __values(node
|
|
3985
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
3892
3986
|
var form = _d.value;
|
|
3893
|
-
result =
|
|
3987
|
+
result = evaluateNode(form, newContextStack);
|
|
3894
3988
|
}
|
|
3895
3989
|
}
|
|
3896
3990
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -3903,8 +3997,8 @@ var Lits = (function (exports) {
|
|
|
3903
3997
|
return result;
|
|
3904
3998
|
},
|
|
3905
3999
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3906
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3907
|
-
return getUndefinedSymbols(node
|
|
4000
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4001
|
+
return getUndefinedSymbols(node[1][1], contextStack.create({}), builtin, evaluateNode);
|
|
3908
4002
|
},
|
|
3909
4003
|
};
|
|
3910
4004
|
|
|
@@ -3962,10 +4056,36 @@ var Lits = (function (exports) {
|
|
|
3962
4056
|
return symbol in numberReservedSymbolRecord;
|
|
3963
4057
|
}
|
|
3964
4058
|
|
|
4059
|
+
var specialExpressionTypes = {
|
|
4060
|
+
'??': 0,
|
|
4061
|
+
'&&': 1,
|
|
4062
|
+
'||': 2,
|
|
4063
|
+
'array': 3,
|
|
4064
|
+
'cond': 4,
|
|
4065
|
+
'0_def': 5,
|
|
4066
|
+
'defined?': 6,
|
|
4067
|
+
'0_defn': 7,
|
|
4068
|
+
'do': 8,
|
|
4069
|
+
'doseq': 9,
|
|
4070
|
+
'0_fn': 10,
|
|
4071
|
+
'for': 11,
|
|
4072
|
+
'function': 12,
|
|
4073
|
+
'if': 13,
|
|
4074
|
+
'let': 14,
|
|
4075
|
+
'loop': 15,
|
|
4076
|
+
'object': 16,
|
|
4077
|
+
'recur': 17,
|
|
4078
|
+
'switch': 18,
|
|
4079
|
+
'throw': 19,
|
|
4080
|
+
'try': 20,
|
|
4081
|
+
'unless': 21,
|
|
4082
|
+
};
|
|
4083
|
+
|
|
3965
4084
|
function assertNameNotDefined(name, contextStack, builtin, sourceCodeInfo) {
|
|
3966
4085
|
if (typeof name !== 'string')
|
|
3967
4086
|
return;
|
|
3968
|
-
|
|
4087
|
+
// TODO only subset of special expressions are necessary to check (CommonSpecialExpressionType)
|
|
4088
|
+
if (specialExpressionTypes[name])
|
|
3969
4089
|
throw new LitsError("Cannot define variable ".concat(name, ", it's a special expression."), sourceCodeInfo);
|
|
3970
4090
|
if (builtin.normalExpressions[name])
|
|
3971
4091
|
throw new LitsError("Cannot define variable ".concat(name, ", it's a builtin function."), sourceCodeInfo);
|
|
@@ -3979,63 +4099,69 @@ var Lits = (function (exports) {
|
|
|
3979
4099
|
paramCount: {},
|
|
3980
4100
|
evaluate: function (node, contextStack, _a) {
|
|
3981
4101
|
var _b, _c;
|
|
3982
|
-
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols,
|
|
3983
|
-
var
|
|
3984
|
-
|
|
3985
|
-
|
|
4102
|
+
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
4103
|
+
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
4104
|
+
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
4105
|
+
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
4106
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
3986
4107
|
var litsFunction = (_b = {},
|
|
3987
4108
|
_b[FUNCTION_SYMBOL] = true,
|
|
3988
|
-
_b.sourceCodeInfo = node
|
|
4109
|
+
_b.sourceCodeInfo = node[2],
|
|
3989
4110
|
_b.functionType = 'UserDefined',
|
|
3990
|
-
_b.name =
|
|
4111
|
+
_b.name = functionSymbol[1],
|
|
3991
4112
|
_b.evaluatedfunction = evaluatedFunction,
|
|
3992
4113
|
_b);
|
|
3993
|
-
contextStack.addValues((_c = {}, _c[
|
|
4114
|
+
contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c));
|
|
3994
4115
|
return null;
|
|
3995
4116
|
},
|
|
3996
4117
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
3997
4118
|
var _b, _c;
|
|
3998
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
3999
|
-
|
|
4000
|
-
|
|
4001
|
-
|
|
4119
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4120
|
+
var functionName = node[1][1][1];
|
|
4121
|
+
contextStack.addValues((_b = {}, _b[functionName] = true, _b));
|
|
4122
|
+
var newContext = (_c = {}, _c[functionName] = { value: true }, _c);
|
|
4123
|
+
return getFunctionUnresolvedSymbols(node[1][2], contextStack, getUndefinedSymbols, builtin, evaluateNode, newContext);
|
|
4002
4124
|
},
|
|
4003
4125
|
};
|
|
4004
4126
|
var defnSpecialExpression = {
|
|
4005
4127
|
paramCount: {},
|
|
4006
4128
|
evaluate: function (node, contextStack, _a) {
|
|
4007
4129
|
var _b, _c;
|
|
4008
|
-
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols,
|
|
4009
|
-
var
|
|
4010
|
-
|
|
4011
|
-
|
|
4130
|
+
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
4131
|
+
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
4132
|
+
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
4133
|
+
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
4134
|
+
var evaluatedFunctionOverloades = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
4012
4135
|
var litsFunction = (_b = {},
|
|
4013
4136
|
_b[FUNCTION_SYMBOL] = true,
|
|
4014
|
-
_b.sourceCodeInfo = node
|
|
4137
|
+
_b.sourceCodeInfo = node[2],
|
|
4015
4138
|
_b.functionType = 'UserDefined',
|
|
4016
|
-
_b.name =
|
|
4139
|
+
_b.name = functionSymbol[1],
|
|
4017
4140
|
_b.evaluatedfunction = evaluatedFunctionOverloades,
|
|
4018
4141
|
_b);
|
|
4019
|
-
contextStack.exportValues((_c = {}, _c[
|
|
4142
|
+
contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c));
|
|
4020
4143
|
return null;
|
|
4021
4144
|
},
|
|
4022
4145
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4023
4146
|
var _b, _c;
|
|
4024
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4025
|
-
|
|
4026
|
-
var
|
|
4027
|
-
|
|
4147
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4148
|
+
var functionName = node[1][1][1];
|
|
4149
|
+
var fn = node[1][2];
|
|
4150
|
+
contextStack.exportValues((_b = {}, _b[functionName] = true, _b));
|
|
4151
|
+
var newContext = (_c = {}, _c[functionName] = { value: true }, _c);
|
|
4152
|
+
return getFunctionUnresolvedSymbols(fn, contextStack, getUndefinedSymbols, builtin, evaluateNode, newContext);
|
|
4028
4153
|
},
|
|
4029
4154
|
};
|
|
4030
4155
|
var fnSpecialExpression = {
|
|
4031
4156
|
paramCount: {},
|
|
4032
4157
|
evaluate: function (node, contextStack, _a) {
|
|
4033
4158
|
var _b;
|
|
4034
|
-
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols,
|
|
4035
|
-
var
|
|
4159
|
+
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
4160
|
+
var fn = node[1][1];
|
|
4161
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
4036
4162
|
var litsFunction = (_b = {},
|
|
4037
4163
|
_b[FUNCTION_SYMBOL] = true,
|
|
4038
|
-
_b.sourceCodeInfo = node
|
|
4164
|
+
_b.sourceCodeInfo = node[2],
|
|
4039
4165
|
_b.functionType = 'UserDefined',
|
|
4040
4166
|
_b.name = undefined,
|
|
4041
4167
|
_b.evaluatedfunction = evaluatedFunction,
|
|
@@ -4043,129 +4169,109 @@ var Lits = (function (exports) {
|
|
|
4043
4169
|
return litsFunction;
|
|
4044
4170
|
},
|
|
4045
4171
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4046
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4047
|
-
|
|
4172
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4173
|
+
var fn = node[1][1];
|
|
4174
|
+
return getFunctionUnresolvedSymbols(fn, contextStack, getUndefinedSymbols, builtin, evaluateNode);
|
|
4048
4175
|
},
|
|
4049
4176
|
};
|
|
4050
|
-
function evaluateFunction(
|
|
4051
|
-
var fn = node.function;
|
|
4177
|
+
function evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode) {
|
|
4052
4178
|
var functionContext = {};
|
|
4053
|
-
var context = fn.
|
|
4179
|
+
var context = fn[0].reduce(function (ctx, arg) {
|
|
4054
4180
|
Object.keys(getAllBindingTargetNames(arg)).forEach(function (name) {
|
|
4055
4181
|
ctx[name] = { value: null };
|
|
4056
4182
|
});
|
|
4057
4183
|
return ctx;
|
|
4058
4184
|
}, {});
|
|
4059
|
-
var undefinedSymbols = getUndefinedSymbols(fn
|
|
4185
|
+
var undefinedSymbols = getUndefinedSymbols(fn[1], contextStack.new(context), builtin, evaluateNode);
|
|
4060
4186
|
undefinedSymbols.forEach(function (name) {
|
|
4061
4187
|
var value = contextStack.getValue(name);
|
|
4062
4188
|
if (isAny(value)) {
|
|
4063
4189
|
functionContext[name] = { value: value };
|
|
4064
4190
|
}
|
|
4065
4191
|
});
|
|
4066
|
-
var evaluatedFunction =
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4192
|
+
var evaluatedFunction = [
|
|
4193
|
+
fn[0],
|
|
4194
|
+
fn[1],
|
|
4195
|
+
functionContext,
|
|
4196
|
+
];
|
|
4071
4197
|
return evaluatedFunction;
|
|
4072
4198
|
}
|
|
4073
|
-
function
|
|
4199
|
+
function getFunctionUnresolvedSymbols(fn, contextStack, getUndefinedSymbols, builtin, evaluateNode, functionNameContext) {
|
|
4074
4200
|
var result = new Set();
|
|
4075
4201
|
var contextStackWithFunctionName = functionNameContext ? contextStack.create(functionNameContext) : contextStack;
|
|
4076
4202
|
var newContext = {};
|
|
4077
|
-
fn.
|
|
4203
|
+
fn[0].forEach(function (arg) {
|
|
4078
4204
|
Object.assign(newContext, getAllBindingTargetNames(arg));
|
|
4205
|
+
walkDefaults(arg, function (defaultNode) {
|
|
4206
|
+
addToSet(result, getUndefinedSymbols([defaultNode], contextStack, builtin, evaluateNode));
|
|
4207
|
+
});
|
|
4079
4208
|
});
|
|
4080
4209
|
var newContextStack = contextStackWithFunctionName.create(newContext);
|
|
4081
|
-
var overloadResult = getUndefinedSymbols(fn
|
|
4210
|
+
var overloadResult = getUndefinedSymbols(fn[1], newContextStack, builtin, evaluateNode);
|
|
4082
4211
|
addToSet(result, overloadResult);
|
|
4083
4212
|
return result;
|
|
4084
4213
|
}
|
|
4085
4214
|
|
|
4086
|
-
function isAstNode(value) {
|
|
4087
|
-
if (value === null || typeof value !== 'object')
|
|
4088
|
-
return false;
|
|
4089
|
-
if (!isAstNodeType(value.type))
|
|
4090
|
-
return false;
|
|
4091
|
-
return true;
|
|
4092
|
-
}
|
|
4093
|
-
function asAstNode(value, sourceCodeInfo) {
|
|
4094
|
-
assertAstNode(value, sourceCodeInfo);
|
|
4095
|
-
return value;
|
|
4096
|
-
}
|
|
4097
|
-
function assertAstNode(value, sourceCodeInfo) {
|
|
4098
|
-
if (!isAstNode(value))
|
|
4099
|
-
throw getAssertionError('AstNode', value, sourceCodeInfo);
|
|
4100
|
-
}
|
|
4101
|
-
function isSymbolNode(value) {
|
|
4102
|
-
if (!isAstNode(value))
|
|
4103
|
-
return false;
|
|
4104
|
-
return value.type === 'Symbol';
|
|
4105
|
-
}
|
|
4106
|
-
function isNormalExpressionNodeWithName(value) {
|
|
4107
|
-
if (!isAstNode(value))
|
|
4108
|
-
return false;
|
|
4109
|
-
return value.type === 'NormalExpression' && typeof value.name === 'string';
|
|
4110
|
-
}
|
|
4111
|
-
|
|
4112
4215
|
var ifSpecialExpression = {
|
|
4113
4216
|
paramCount: { min: 2, max: 3 },
|
|
4114
4217
|
evaluate: function (node, contextStack, _a) {
|
|
4115
|
-
var
|
|
4116
|
-
var
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
return evaluateAstNode(asAstNode(trueNode, sourceCodeInfo), contextStack);
|
|
4218
|
+
var evaluateNode = _a.evaluateNode;
|
|
4219
|
+
var _b = __read(node[1][1], 3), conditionNode = _b[0], trueNode = _b[1], falseNode = _b[2];
|
|
4220
|
+
if (evaluateNode(conditionNode, contextStack)) {
|
|
4221
|
+
return evaluateNode(trueNode, contextStack);
|
|
4120
4222
|
}
|
|
4121
|
-
else {
|
|
4122
|
-
|
|
4123
|
-
return evaluateAstNode(asAstNode(falseNode, sourceCodeInfo), contextStack);
|
|
4124
|
-
else
|
|
4125
|
-
return null;
|
|
4223
|
+
else if (falseNode) {
|
|
4224
|
+
return evaluateNode(falseNode, contextStack);
|
|
4126
4225
|
}
|
|
4226
|
+
return null;
|
|
4127
4227
|
},
|
|
4128
4228
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4129
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4130
|
-
return getUndefinedSymbols(node.
|
|
4229
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4230
|
+
return getUndefinedSymbols(node[1][1].filter(function (n) { return !!n; }), contextStack, builtin, evaluateNode);
|
|
4131
4231
|
},
|
|
4132
4232
|
};
|
|
4133
4233
|
|
|
4134
4234
|
var unlessSpecialExpression = {
|
|
4135
4235
|
paramCount: { min: 2, max: 3 },
|
|
4136
4236
|
evaluate: function (node, contextStack, _a) {
|
|
4137
|
-
var
|
|
4138
|
-
var
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
return evaluateAstNode(asAstNode(trueNode, sourceCodeInfo), contextStack);
|
|
4237
|
+
var evaluateNode = _a.evaluateNode;
|
|
4238
|
+
var _b = __read(node[1][1], 3), conditionNode = _b[0], trueNode = _b[1], falseNode = _b[2];
|
|
4239
|
+
if (!evaluateNode(conditionNode, contextStack)) {
|
|
4240
|
+
return evaluateNode(trueNode, contextStack);
|
|
4142
4241
|
}
|
|
4143
|
-
else {
|
|
4144
|
-
|
|
4145
|
-
return evaluateAstNode(asAstNode(falseNode, sourceCodeInfo), contextStack);
|
|
4146
|
-
else
|
|
4147
|
-
return null;
|
|
4242
|
+
else if (falseNode) {
|
|
4243
|
+
return evaluateNode(falseNode, contextStack);
|
|
4148
4244
|
}
|
|
4245
|
+
return null;
|
|
4149
4246
|
},
|
|
4150
4247
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4151
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4152
|
-
return getUndefinedSymbols(node.
|
|
4248
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4249
|
+
return getUndefinedSymbols(node[1][1].filter(function (n) { return !!n; }), contextStack, builtin, evaluateNode);
|
|
4153
4250
|
},
|
|
4154
4251
|
};
|
|
4155
4252
|
|
|
4156
4253
|
var letSpecialExpression = {
|
|
4157
4254
|
paramCount: 0,
|
|
4158
4255
|
evaluate: function (node, contextStack, _a) {
|
|
4159
|
-
var
|
|
4160
|
-
var
|
|
4161
|
-
var
|
|
4256
|
+
var evaluateNode = _a.evaluateNode;
|
|
4257
|
+
var bindingNode = node[1][1];
|
|
4258
|
+
var target = bindingNode[1][0];
|
|
4259
|
+
var value = bindingNode[1][1];
|
|
4260
|
+
var bindingValue = evaluateNode(value, contextStack);
|
|
4261
|
+
var values = evalueateBindingNodeValues(target, bindingValue, function (Node) { return evaluateNode(Node, contextStack); });
|
|
4162
4262
|
contextStack.addValues(values);
|
|
4163
4263
|
return null;
|
|
4164
4264
|
},
|
|
4165
4265
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4166
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4167
|
-
var
|
|
4168
|
-
|
|
4266
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4267
|
+
var bindingNode = node[1][1];
|
|
4268
|
+
var target = bindingNode[1][0];
|
|
4269
|
+
var value = bindingNode[1][1];
|
|
4270
|
+
var bindingResult = getUndefinedSymbols([value], contextStack, builtin, evaluateNode);
|
|
4271
|
+
walkDefaults(target, function (defaultNode) {
|
|
4272
|
+
addToSet(bindingResult, getUndefinedSymbols([defaultNode], contextStack, builtin, evaluateNode));
|
|
4273
|
+
});
|
|
4274
|
+
contextStack.addValues(getAllBindingTargetNames(target));
|
|
4169
4275
|
return bindingResult;
|
|
4170
4276
|
},
|
|
4171
4277
|
};
|
|
@@ -4173,11 +4279,11 @@ var Lits = (function (exports) {
|
|
|
4173
4279
|
var loopSpecialExpression = {
|
|
4174
4280
|
paramCount: {},
|
|
4175
4281
|
evaluate: function (node, contextStack, _a) {
|
|
4176
|
-
var
|
|
4177
|
-
var
|
|
4178
|
-
var bindingContext =
|
|
4179
|
-
var val =
|
|
4180
|
-
var valueRecord = evalueateBindingNodeValues(
|
|
4282
|
+
var evaluateNode = _a.evaluateNode;
|
|
4283
|
+
var bindingNodes = node[1][1];
|
|
4284
|
+
var bindingContext = bindingNodes.reduce(function (result, bindingNode) {
|
|
4285
|
+
var val = evaluateNode(bindingNode[1][1], contextStack.create(result));
|
|
4286
|
+
var valueRecord = evalueateBindingNodeValues(bindingNode[1][0], val, function (Node) { return evaluateNode(Node, contextStack); });
|
|
4181
4287
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4182
4288
|
var _b = __read(_a, 2), name = _b[0], value = _b[1];
|
|
4183
4289
|
result[name] = { value: value };
|
|
@@ -4185,20 +4291,21 @@ var Lits = (function (exports) {
|
|
|
4185
4291
|
return result;
|
|
4186
4292
|
}, {});
|
|
4187
4293
|
var newContextStack = contextStack.create(bindingContext);
|
|
4294
|
+
var body = node[1][2];
|
|
4188
4295
|
var _loop_1 = function () {
|
|
4189
4296
|
var e_1, _b;
|
|
4190
4297
|
var result = null;
|
|
4191
4298
|
try {
|
|
4192
4299
|
try {
|
|
4193
|
-
for (var
|
|
4194
|
-
var form =
|
|
4195
|
-
result =
|
|
4300
|
+
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()) {
|
|
4301
|
+
var form = body_1_1.value;
|
|
4302
|
+
result = evaluateNode(form, newContextStack);
|
|
4196
4303
|
}
|
|
4197
4304
|
}
|
|
4198
4305
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
4199
4306
|
finally {
|
|
4200
4307
|
try {
|
|
4201
|
-
if (
|
|
4308
|
+
if (body_1_1 && !body_1_1.done && (_b = body_1.return)) _b.call(body_1);
|
|
4202
4309
|
}
|
|
4203
4310
|
finally { if (e_1) throw e_1.error; }
|
|
4204
4311
|
}
|
|
@@ -4206,16 +4313,16 @@ var Lits = (function (exports) {
|
|
|
4206
4313
|
catch (error) {
|
|
4207
4314
|
if (error instanceof RecurSignal) {
|
|
4208
4315
|
var params_1 = error.params;
|
|
4209
|
-
if (params_1.length !==
|
|
4210
|
-
throw new LitsError("recur expected ".concat(
|
|
4316
|
+
if (params_1.length !== bindingNodes.length) {
|
|
4317
|
+
throw new LitsError("recur expected ".concat(bindingNodes.length, " parameters, got ").concat(valueToString(params_1.length)), node[2]);
|
|
4211
4318
|
}
|
|
4212
|
-
|
|
4319
|
+
bindingNodes.forEach(function (bindingNode, index) {
|
|
4213
4320
|
var e_2, _a;
|
|
4214
|
-
var valueRecord = evalueateBindingNodeValues(
|
|
4321
|
+
var valueRecord = evalueateBindingNodeValues(bindingNode[1][0], asAny(params_1[index]), function (Node) { return evaluateNode(Node, contextStack); });
|
|
4215
4322
|
try {
|
|
4216
4323
|
for (var _b = (e_2 = void 0, __values(Object.entries(valueRecord))), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
4217
4324
|
var _d = __read(_c.value, 2), name_1 = _d[0], value = _d[1];
|
|
4218
|
-
|
|
4325
|
+
bindingContext[name_1].value = value;
|
|
4219
4326
|
}
|
|
4220
4327
|
}
|
|
4221
4328
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
@@ -4239,29 +4346,31 @@ var Lits = (function (exports) {
|
|
|
4239
4346
|
}
|
|
4240
4347
|
},
|
|
4241
4348
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4242
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4243
|
-
var
|
|
4349
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4350
|
+
var bindingNodes = node[1][1];
|
|
4351
|
+
var newContext = bindingNodes
|
|
4244
4352
|
.reduce(function (context, bindingNode) {
|
|
4245
|
-
var names = getAllBindingTargetNames(bindingNode
|
|
4353
|
+
var names = getAllBindingTargetNames(bindingNode[1][0]);
|
|
4246
4354
|
Object.keys(names).forEach(function (name) {
|
|
4247
4355
|
context[name] = { value: true };
|
|
4248
4356
|
});
|
|
4249
4357
|
return context;
|
|
4250
4358
|
}, {});
|
|
4251
|
-
var bindingValueNodes =
|
|
4252
|
-
var bindingsResult = getUndefinedSymbols(bindingValueNodes, contextStack, builtin,
|
|
4253
|
-
var paramsResult = getUndefinedSymbols(node
|
|
4359
|
+
var bindingValueNodes = bindingNodes.map(function (bindingNode) { return bindingNode[1][1]; });
|
|
4360
|
+
var bindingsResult = getUndefinedSymbols(bindingValueNodes, contextStack, builtin, evaluateNode);
|
|
4361
|
+
var paramsResult = getUndefinedSymbols(node[1][2], contextStack.create(newContext), builtin, evaluateNode);
|
|
4254
4362
|
return joinSets(bindingsResult, paramsResult);
|
|
4255
4363
|
},
|
|
4256
4364
|
};
|
|
4257
4365
|
|
|
4258
|
-
function addToContext(bindings, context, contextStack,
|
|
4366
|
+
function addToContext(bindings, context, contextStack, evaluateNode) {
|
|
4259
4367
|
var e_1, _a;
|
|
4260
4368
|
try {
|
|
4261
4369
|
for (var bindings_1 = __values(bindings), bindings_1_1 = bindings_1.next(); !bindings_1_1.done; bindings_1_1 = bindings_1.next()) {
|
|
4262
|
-
var
|
|
4263
|
-
var
|
|
4264
|
-
var
|
|
4370
|
+
var bindingNode = bindings_1_1.value;
|
|
4371
|
+
var _b = __read(bindingNode[1], 2), target = _b[0], bindingValue = _b[1];
|
|
4372
|
+
var val = evaluateNode(bindingValue, contextStack);
|
|
4373
|
+
var valueRecord = evalueateBindingNodeValues(target, val, function (Node) { return evaluateNode(Node, contextStack); });
|
|
4265
4374
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4266
4375
|
var _b = __read(_a, 2), name = _b[0], value = _b[1];
|
|
4267
4376
|
context[name] = { value: value };
|
|
@@ -4276,9 +4385,9 @@ var Lits = (function (exports) {
|
|
|
4276
4385
|
finally { if (e_1) throw e_1.error; }
|
|
4277
4386
|
}
|
|
4278
4387
|
}
|
|
4279
|
-
function evaluateLoop(returnResult,
|
|
4280
|
-
var sourceCodeInfo =
|
|
4281
|
-
var _a =
|
|
4388
|
+
function evaluateLoop(returnResult, loopNode, contextStack, evaluateNode) {
|
|
4389
|
+
var sourceCodeInfo = loopNode[2];
|
|
4390
|
+
var _a = __read(loopNode[1], 3), loopBindings = _a[1], body = _a[2];
|
|
4282
4391
|
var result = [];
|
|
4283
4392
|
var bindingIndices = loopBindings.map(function () { return 0; });
|
|
4284
4393
|
var abort = false;
|
|
@@ -4288,8 +4397,9 @@ var Lits = (function (exports) {
|
|
|
4288
4397
|
var newContextStack = contextStack.create(context);
|
|
4289
4398
|
var skip = false;
|
|
4290
4399
|
bindingsLoop: for (var bindingIndex = 0; bindingIndex < loopBindings.length; bindingIndex += 1) {
|
|
4291
|
-
var _c =
|
|
4292
|
-
var
|
|
4400
|
+
var _c = __read(loopBindings[bindingIndex], 4), bindingNode = _c[0], letBindings = _c[1], whenNode = _c[2], whileNode = _c[3];
|
|
4401
|
+
var _d = __read(bindingNode[1], 2), targetNode = _d[0], valueNode = _d[1];
|
|
4402
|
+
var coll = asColl(evaluateNode(valueNode, newContextStack), sourceCodeInfo);
|
|
4293
4403
|
var seq = isSeq(coll) ? coll : Object.entries(coll);
|
|
4294
4404
|
if (seq.length === 0) {
|
|
4295
4405
|
skip = true;
|
|
@@ -4308,45 +4418,40 @@ var Lits = (function (exports) {
|
|
|
4308
4418
|
break;
|
|
4309
4419
|
}
|
|
4310
4420
|
var val = asAny(seq[index], sourceCodeInfo);
|
|
4311
|
-
var valueRecord = evalueateBindingNodeValues(
|
|
4421
|
+
var valueRecord = evalueateBindingNodeValues(targetNode, val, function (Node) { return evaluateNode(Node, newContextStack); });
|
|
4312
4422
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4313
4423
|
var _b = __read(_a, 2), name = _b[0], value = _b[1];
|
|
4314
4424
|
context[name] = { value: value };
|
|
4315
4425
|
});
|
|
4426
|
+
if (letBindings) {
|
|
4427
|
+
addToContext(letBindings, context, newContextStack, evaluateNode);
|
|
4428
|
+
}
|
|
4429
|
+
if (whenNode && !evaluateNode(whenNode, newContextStack)) {
|
|
4430
|
+
bindingIndices[bindingIndex] = asNonUndefined(bindingIndices[bindingIndex], sourceCodeInfo) + 1;
|
|
4431
|
+
skip = true;
|
|
4432
|
+
break bindingsLoop;
|
|
4433
|
+
}
|
|
4434
|
+
if (whileNode && !evaluateNode(whileNode, newContextStack)) {
|
|
4435
|
+
bindingIndices[bindingIndex] = Number.POSITIVE_INFINITY;
|
|
4436
|
+
skip = true;
|
|
4437
|
+
break bindingsLoop;
|
|
4438
|
+
}
|
|
4439
|
+
}
|
|
4440
|
+
if (!skip) {
|
|
4441
|
+
var value = null;
|
|
4316
4442
|
try {
|
|
4317
|
-
for (var
|
|
4318
|
-
var
|
|
4319
|
-
|
|
4320
|
-
case '&let':
|
|
4321
|
-
addToContext(asNonUndefined(letBindings, sourceCodeInfo), context, newContextStack, evaluateAstNode);
|
|
4322
|
-
break;
|
|
4323
|
-
case '&when':
|
|
4324
|
-
if (!evaluateAstNode(asAstNode(whenNode, sourceCodeInfo), newContextStack)) {
|
|
4325
|
-
bindingIndices[bindingIndex] = asNonUndefined(bindingIndices[bindingIndex], sourceCodeInfo) + 1;
|
|
4326
|
-
skip = true;
|
|
4327
|
-
break bindingsLoop;
|
|
4328
|
-
}
|
|
4329
|
-
break;
|
|
4330
|
-
case '&while':
|
|
4331
|
-
if (!evaluateAstNode(asAstNode(whileNode, sourceCodeInfo), newContextStack)) {
|
|
4332
|
-
bindingIndices[bindingIndex] = Number.POSITIVE_INFINITY;
|
|
4333
|
-
skip = true;
|
|
4334
|
-
break bindingsLoop;
|
|
4335
|
-
}
|
|
4336
|
-
break;
|
|
4337
|
-
}
|
|
4443
|
+
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()) {
|
|
4444
|
+
var form = body_1_1.value;
|
|
4445
|
+
value = evaluateNode(form, newContextStack);
|
|
4338
4446
|
}
|
|
4339
4447
|
}
|
|
4340
4448
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
4341
4449
|
finally {
|
|
4342
4450
|
try {
|
|
4343
|
-
if (
|
|
4451
|
+
if (body_1_1 && !body_1_1.done && (_b = body_1.return)) _b.call(body_1);
|
|
4344
4452
|
}
|
|
4345
4453
|
finally { if (e_2) throw e_2.error; }
|
|
4346
4454
|
}
|
|
4347
|
-
}
|
|
4348
|
-
if (!skip) {
|
|
4349
|
-
var value = evaluateAstNode(params[0], newContextStack);
|
|
4350
4455
|
if (returnResult)
|
|
4351
4456
|
result.push(value);
|
|
4352
4457
|
if (bindingIndices.length > 0)
|
|
@@ -4358,57 +4463,59 @@ var Lits = (function (exports) {
|
|
|
4358
4463
|
}
|
|
4359
4464
|
return returnResult ? result : null;
|
|
4360
4465
|
}
|
|
4361
|
-
function analyze(
|
|
4466
|
+
function analyze(loopNode, contextStack, getUndefinedSymbols, builtin, evaluateNode) {
|
|
4362
4467
|
var result = new Set();
|
|
4363
4468
|
var newContext = {};
|
|
4364
|
-
var loopBindings =
|
|
4365
|
-
loopBindings.forEach(function (
|
|
4366
|
-
var
|
|
4367
|
-
|
|
4469
|
+
var _a = __read(loopNode[1], 3), loopBindings = _a[1], body = _a[2];
|
|
4470
|
+
loopBindings.forEach(function (loopBindingNode) {
|
|
4471
|
+
var _a = __read(loopBindingNode, 4), bindingNode = _a[0], letBindings = _a[1], whenNode = _a[2], whileNode = _a[3];
|
|
4472
|
+
var _b = __read(bindingNode[1], 2), target = _b[0], value = _b[1];
|
|
4473
|
+
getUndefinedSymbols([value], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4368
4474
|
return result.add(symbol);
|
|
4369
4475
|
});
|
|
4370
|
-
Object.assign(newContext, getAllBindingTargetNames(
|
|
4476
|
+
Object.assign(newContext, getAllBindingTargetNames(target));
|
|
4371
4477
|
if (letBindings) {
|
|
4372
|
-
letBindings.forEach(function (
|
|
4373
|
-
|
|
4478
|
+
letBindings.forEach(function (letBindingNode) {
|
|
4479
|
+
var _a = __read(letBindingNode[1], 2), letTarget = _a[0], letValue = _a[1];
|
|
4480
|
+
getUndefinedSymbols([letValue], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4374
4481
|
return result.add(symbol);
|
|
4375
4482
|
});
|
|
4376
|
-
Object.assign(newContext, getAllBindingTargetNames(
|
|
4483
|
+
Object.assign(newContext, getAllBindingTargetNames(letTarget));
|
|
4377
4484
|
});
|
|
4378
4485
|
}
|
|
4379
4486
|
if (whenNode) {
|
|
4380
|
-
getUndefinedSymbols([whenNode], contextStack.create(newContext), builtin,
|
|
4487
|
+
getUndefinedSymbols([whenNode], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4381
4488
|
return result.add(symbol);
|
|
4382
4489
|
});
|
|
4383
4490
|
}
|
|
4384
4491
|
if (whileNode) {
|
|
4385
|
-
getUndefinedSymbols([whileNode], contextStack.create(newContext), builtin,
|
|
4492
|
+
getUndefinedSymbols([whileNode], contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4386
4493
|
return result.add(symbol);
|
|
4387
4494
|
});
|
|
4388
4495
|
}
|
|
4389
4496
|
});
|
|
4390
|
-
getUndefinedSymbols(
|
|
4497
|
+
getUndefinedSymbols(body, contextStack.create(newContext), builtin, evaluateNode).forEach(function (symbol) {
|
|
4391
4498
|
return result.add(symbol);
|
|
4392
4499
|
});
|
|
4393
4500
|
return result;
|
|
4394
4501
|
}
|
|
4395
4502
|
var forSpecialExpression = {
|
|
4396
4503
|
paramCount: 1,
|
|
4397
|
-
evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.
|
|
4504
|
+
evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.evaluateNode); },
|
|
4398
4505
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4399
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4400
|
-
return analyze(node, contextStack, getUndefinedSymbols, builtin,
|
|
4506
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4507
|
+
return analyze(node, contextStack, getUndefinedSymbols, builtin, evaluateNode);
|
|
4401
4508
|
},
|
|
4402
4509
|
};
|
|
4403
4510
|
var doseqSpecialExpression = {
|
|
4404
4511
|
paramCount: 1,
|
|
4405
4512
|
evaluate: function (node, contextStack, helpers) {
|
|
4406
|
-
evaluateLoop(false, node, contextStack, helpers.
|
|
4513
|
+
evaluateLoop(false, node, contextStack, helpers.evaluateNode);
|
|
4407
4514
|
return null;
|
|
4408
4515
|
},
|
|
4409
4516
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4410
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4411
|
-
return analyze(node, contextStack, getUndefinedSymbols, builtin,
|
|
4517
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4518
|
+
return analyze(node, contextStack, getUndefinedSymbols, builtin, evaluateNode);
|
|
4412
4519
|
},
|
|
4413
4520
|
};
|
|
4414
4521
|
|
|
@@ -4416,12 +4523,12 @@ var Lits = (function (exports) {
|
|
|
4416
4523
|
paramCount: {},
|
|
4417
4524
|
evaluate: function (node, contextStack, _a) {
|
|
4418
4525
|
var e_1, _b;
|
|
4419
|
-
var
|
|
4526
|
+
var evaluateNode = _a.evaluateNode;
|
|
4420
4527
|
var value = false;
|
|
4421
4528
|
try {
|
|
4422
|
-
for (var _c = __values(node
|
|
4529
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
4423
4530
|
var param = _d.value;
|
|
4424
|
-
value =
|
|
4531
|
+
value = evaluateNode(param, contextStack);
|
|
4425
4532
|
if (value)
|
|
4426
4533
|
break;
|
|
4427
4534
|
}
|
|
@@ -4436,55 +4543,55 @@ var Lits = (function (exports) {
|
|
|
4436
4543
|
return value;
|
|
4437
4544
|
},
|
|
4438
4545
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4439
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4440
|
-
return getUndefinedSymbols(node
|
|
4546
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4547
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4441
4548
|
},
|
|
4442
4549
|
};
|
|
4443
4550
|
|
|
4444
4551
|
var qqSpecialExpression = {
|
|
4445
4552
|
paramCount: { min: 1, max: 2 },
|
|
4446
4553
|
evaluate: function (node, contextStack, _a) {
|
|
4447
|
-
var
|
|
4448
|
-
var _b = __read(node
|
|
4449
|
-
if (
|
|
4450
|
-
|
|
4451
|
-
return secondNode ? evaluateAstNode(secondNode, contextStack) : null;
|
|
4554
|
+
var evaluateNode = _a.evaluateNode;
|
|
4555
|
+
var _b = __read(node[1][1], 2), firstNode = _b[0], secondNode = _b[1];
|
|
4556
|
+
if (isUserDefinedSymbolNode(firstNode) && contextStack.lookUp(firstNode) === null) {
|
|
4557
|
+
return secondNode ? evaluateNode(secondNode, contextStack) : null;
|
|
4452
4558
|
}
|
|
4453
|
-
assertAny(firstNode, node
|
|
4454
|
-
var firstResult =
|
|
4455
|
-
return firstResult !== null && firstResult !== void 0 ? firstResult : (secondNode ?
|
|
4559
|
+
assertAny(firstNode, node[2]);
|
|
4560
|
+
var firstResult = evaluateNode(firstNode, contextStack);
|
|
4561
|
+
return firstResult !== null && firstResult !== void 0 ? firstResult : (secondNode ? evaluateNode(secondNode, contextStack) : null);
|
|
4456
4562
|
},
|
|
4457
4563
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4458
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4459
|
-
return getUndefinedSymbols(node.
|
|
4564
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4565
|
+
return getUndefinedSymbols(node[1][1].filter(function (n) { return !!n; }), contextStack, builtin, evaluateNode);
|
|
4460
4566
|
},
|
|
4461
4567
|
};
|
|
4462
4568
|
|
|
4463
4569
|
var recurSpecialExpression = {
|
|
4464
4570
|
paramCount: {},
|
|
4465
4571
|
evaluate: function (node, contextStack, _a) {
|
|
4466
|
-
var
|
|
4467
|
-
var params = node
|
|
4468
|
-
|
|
4572
|
+
var evaluateNode = _a.evaluateNode;
|
|
4573
|
+
var params = node[1][1];
|
|
4574
|
+
var evaluatedParams = params.map(function (paramNode) { return evaluateNode(paramNode, contextStack); });
|
|
4575
|
+
throw new RecurSignal(evaluatedParams);
|
|
4469
4576
|
},
|
|
4470
4577
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4471
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4472
|
-
return getUndefinedSymbols(node
|
|
4578
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4579
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4473
4580
|
},
|
|
4474
4581
|
};
|
|
4475
4582
|
|
|
4476
4583
|
var throwSpecialExpression = {
|
|
4477
4584
|
paramCount: 1,
|
|
4478
4585
|
evaluate: function (node, contextStack, _a) {
|
|
4479
|
-
var
|
|
4480
|
-
var message = asString(
|
|
4586
|
+
var evaluateNode = _a.evaluateNode;
|
|
4587
|
+
var message = asString(evaluateNode(node[1][1], contextStack), node[2], {
|
|
4481
4588
|
nonEmpty: true,
|
|
4482
4589
|
});
|
|
4483
|
-
throw new UserDefinedError(message, node
|
|
4590
|
+
throw new UserDefinedError(message, node[2]);
|
|
4484
4591
|
},
|
|
4485
4592
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4486
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4487
|
-
return getUndefinedSymbols(node
|
|
4593
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4594
|
+
return getUndefinedSymbols([node[1][1]], contextStack, builtin, evaluateNode);
|
|
4488
4595
|
},
|
|
4489
4596
|
};
|
|
4490
4597
|
|
|
@@ -4492,29 +4599,29 @@ var Lits = (function (exports) {
|
|
|
4492
4599
|
paramCount: 1,
|
|
4493
4600
|
evaluate: function (node, contextStack, _a) {
|
|
4494
4601
|
var _b;
|
|
4495
|
-
var
|
|
4496
|
-
var
|
|
4602
|
+
var evaluateNode = _a.evaluateNode;
|
|
4603
|
+
var _c = __read(node[1], 4), tryExpression = _c[1], errorSymbol = _c[2], catchExpression = _c[3];
|
|
4497
4604
|
try {
|
|
4498
|
-
return
|
|
4605
|
+
return evaluateNode(tryExpression, contextStack);
|
|
4499
4606
|
}
|
|
4500
4607
|
catch (error) {
|
|
4501
|
-
var newContext =
|
|
4608
|
+
var newContext = errorSymbol
|
|
4502
4609
|
? (_b = {},
|
|
4503
|
-
_b[
|
|
4610
|
+
_b[errorSymbol[1]] = { value: error },
|
|
4504
4611
|
_b) : {};
|
|
4505
|
-
return
|
|
4612
|
+
return evaluateNode(catchExpression, contextStack.create(newContext));
|
|
4506
4613
|
}
|
|
4507
4614
|
},
|
|
4508
4615
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4509
4616
|
var _b;
|
|
4510
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4511
|
-
var
|
|
4512
|
-
var tryResult = getUndefinedSymbols(
|
|
4513
|
-
var newContext =
|
|
4617
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4618
|
+
var _c = __read(node[1], 4), tryExpression = _c[1], errorSymbol = _c[2], catchExpression = _c[3];
|
|
4619
|
+
var tryResult = getUndefinedSymbols([tryExpression], contextStack, builtin, evaluateNode);
|
|
4620
|
+
var newContext = errorSymbol
|
|
4514
4621
|
? (_b = {},
|
|
4515
|
-
_b[
|
|
4622
|
+
_b[errorSymbol[1]] = { value: true },
|
|
4516
4623
|
_b) : {};
|
|
4517
|
-
var catchResult = getUndefinedSymbols([catchExpression], contextStack.create(newContext), builtin,
|
|
4624
|
+
var catchResult = getUndefinedSymbols([catchExpression], contextStack.create(newContext), builtin, evaluateNode);
|
|
4518
4625
|
return joinSets(tryResult, catchResult);
|
|
4519
4626
|
},
|
|
4520
4627
|
};
|
|
@@ -4523,20 +4630,20 @@ var Lits = (function (exports) {
|
|
|
4523
4630
|
paramCount: {},
|
|
4524
4631
|
evaluate: function (node, contextStack, _a) {
|
|
4525
4632
|
var e_1, _b;
|
|
4526
|
-
var
|
|
4633
|
+
var evaluateNode = _a.evaluateNode;
|
|
4527
4634
|
var result = [];
|
|
4528
4635
|
try {
|
|
4529
|
-
for (var _c = __values(node
|
|
4636
|
+
for (var _c = __values(node[1][1]), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
4530
4637
|
var param = _d.value;
|
|
4531
|
-
if (param
|
|
4532
|
-
var spreadValue =
|
|
4638
|
+
if (isSpreadNode(param)) {
|
|
4639
|
+
var spreadValue = evaluateNode(param[1], contextStack);
|
|
4533
4640
|
if (!Array.isArray(spreadValue)) {
|
|
4534
|
-
throw new LitsError('Spread value is not an array', param
|
|
4641
|
+
throw new LitsError('Spread value is not an array', param[2]);
|
|
4535
4642
|
}
|
|
4536
4643
|
result.push.apply(result, __spreadArray([], __read(spreadValue), false));
|
|
4537
4644
|
}
|
|
4538
4645
|
else {
|
|
4539
|
-
result.push(
|
|
4646
|
+
result.push(evaluateNode(param, contextStack));
|
|
4540
4647
|
}
|
|
4541
4648
|
}
|
|
4542
4649
|
}
|
|
@@ -4550,156 +4657,169 @@ var Lits = (function (exports) {
|
|
|
4550
4657
|
return result;
|
|
4551
4658
|
},
|
|
4552
4659
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4553
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4554
|
-
return getUndefinedSymbols(node
|
|
4660
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4661
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4555
4662
|
},
|
|
4556
4663
|
};
|
|
4557
4664
|
|
|
4558
4665
|
var objectSpecialExpression = {
|
|
4559
4666
|
paramCount: {},
|
|
4560
4667
|
evaluate: function (node, contextStack, _a) {
|
|
4561
|
-
var
|
|
4668
|
+
var evaluateNode = _a.evaluateNode;
|
|
4562
4669
|
var result = {};
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
4670
|
+
var params = node[1][1];
|
|
4671
|
+
for (var i = 0; i < params.length; i += 2) {
|
|
4672
|
+
var keyNode = params[i];
|
|
4673
|
+
if (isSpreadNode(keyNode)) {
|
|
4674
|
+
var spreadObject = evaluateNode(keyNode[1], contextStack);
|
|
4567
4675
|
if (!isUnknownRecord(spreadObject)) {
|
|
4568
|
-
throw new LitsError('Spread value is not an object', keyNode
|
|
4676
|
+
throw new LitsError('Spread value is not an object', keyNode[2]);
|
|
4569
4677
|
}
|
|
4570
4678
|
Object.assign(result, spreadObject);
|
|
4571
4679
|
i -= 1;
|
|
4572
4680
|
}
|
|
4573
4681
|
else {
|
|
4574
|
-
var key =
|
|
4575
|
-
var value =
|
|
4576
|
-
assertString(key, keyNode
|
|
4682
|
+
var key = evaluateNode(keyNode, contextStack);
|
|
4683
|
+
var value = evaluateNode(params[i + 1], contextStack);
|
|
4684
|
+
assertString(key, keyNode[2]);
|
|
4577
4685
|
result[key] = value;
|
|
4578
4686
|
}
|
|
4579
4687
|
}
|
|
4580
4688
|
return result;
|
|
4581
4689
|
},
|
|
4582
4690
|
getUndefinedSymbols: function (node, contextStack, _a) {
|
|
4583
|
-
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin,
|
|
4584
|
-
return getUndefinedSymbols(node
|
|
4691
|
+
var getUndefinedSymbols = _a.getUndefinedSymbols, builtin = _a.builtin, evaluateNode = _a.evaluateNode;
|
|
4692
|
+
return getUndefinedSymbols(node[1][1], contextStack, builtin, evaluateNode);
|
|
4585
4693
|
},
|
|
4586
4694
|
};
|
|
4587
4695
|
|
|
4588
|
-
var specialExpressions =
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4592
|
-
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
|
|
4603
|
-
|
|
4604
|
-
|
|
4605
|
-
|
|
4606
|
-
|
|
4607
|
-
|
|
4608
|
-
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4696
|
+
var specialExpressions = [
|
|
4697
|
+
qqSpecialExpression,
|
|
4698
|
+
andSpecialExpression,
|
|
4699
|
+
orSpecialExpression,
|
|
4700
|
+
arraySpecialExpression,
|
|
4701
|
+
condSpecialExpression,
|
|
4702
|
+
defSpecialExpression,
|
|
4703
|
+
definedSpecialExpression,
|
|
4704
|
+
defnSpecialExpression,
|
|
4705
|
+
doSpecialExpression,
|
|
4706
|
+
doseqSpecialExpression,
|
|
4707
|
+
fnSpecialExpression,
|
|
4708
|
+
forSpecialExpression,
|
|
4709
|
+
functionSpecialExpression,
|
|
4710
|
+
ifSpecialExpression,
|
|
4711
|
+
letSpecialExpression,
|
|
4712
|
+
loopSpecialExpression,
|
|
4713
|
+
objectSpecialExpression,
|
|
4714
|
+
recurSpecialExpression,
|
|
4715
|
+
switchSpecialExpression,
|
|
4716
|
+
throwSpecialExpression,
|
|
4717
|
+
trySpecialExpression,
|
|
4718
|
+
unlessSpecialExpression,
|
|
4719
|
+
];
|
|
4612
4720
|
var builtin = {
|
|
4613
4721
|
normalExpressions: normalExpressions,
|
|
4614
4722
|
specialExpressions: specialExpressions,
|
|
4723
|
+
allNormalExpressions: allNormalExpressions,
|
|
4615
4724
|
};
|
|
4616
4725
|
var normalExpressionKeys = Object.keys(normalExpressions);
|
|
4617
|
-
var specialExpressionKeys = Object.keys(
|
|
4726
|
+
var specialExpressionKeys = Object.keys(specialExpressionTypes);
|
|
4727
|
+
new Set(specialExpressionKeys);
|
|
4618
4728
|
|
|
4619
|
-
var getUndefinedSymbols = function (ast, contextStack, builtin,
|
|
4729
|
+
var getUndefinedSymbols = function (ast, contextStack, builtin, evaluateNode) {
|
|
4620
4730
|
var e_1, _a;
|
|
4621
4731
|
var _b;
|
|
4622
|
-
var
|
|
4732
|
+
var nodes = Array.isArray(ast)
|
|
4623
4733
|
? ast
|
|
4624
|
-
: [
|
|
4625
|
-
type: 'SpecialExpression',
|
|
4626
|
-
name: 'do',
|
|
4627
|
-
params: ast.body,
|
|
4628
|
-
sourceCodeInfo: undefined,
|
|
4629
|
-
}];
|
|
4734
|
+
: [[NodeTypes.SpecialExpression, [specialExpressionTypes.do, ast.body]]];
|
|
4630
4735
|
var unresolvedSymbols = new Set();
|
|
4631
4736
|
try {
|
|
4632
|
-
for (var
|
|
4633
|
-
var subNode =
|
|
4634
|
-
(_b =
|
|
4737
|
+
for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
4738
|
+
var subNode = nodes_1_1.value;
|
|
4739
|
+
(_b = findUnresolvedSymbolsInNode(subNode, contextStack, builtin, evaluateNode)) === null || _b === void 0 ? void 0 : _b.forEach(function (symbol) { return unresolvedSymbols.add(symbol); });
|
|
4635
4740
|
}
|
|
4636
4741
|
}
|
|
4637
4742
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
4638
4743
|
finally {
|
|
4639
4744
|
try {
|
|
4640
|
-
if (
|
|
4745
|
+
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
4641
4746
|
}
|
|
4642
4747
|
finally { if (e_1) throw e_1.error; }
|
|
4643
4748
|
}
|
|
4644
4749
|
return unresolvedSymbols;
|
|
4645
4750
|
};
|
|
4646
|
-
function
|
|
4751
|
+
function findUnresolvedSymbolsInNode(node, contextStack, builtin, evaluateNode) {
|
|
4647
4752
|
var e_2, _a;
|
|
4648
|
-
var _b;
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4753
|
+
var _b, _c;
|
|
4754
|
+
var nodeType = node[0];
|
|
4755
|
+
switch (nodeType) {
|
|
4756
|
+
case NodeTypes.UserDefinedSymbol: {
|
|
4757
|
+
var symbolNode = node;
|
|
4758
|
+
var lookUpResult = contextStack.lookUp(symbolNode);
|
|
4652
4759
|
if (lookUpResult === null)
|
|
4653
|
-
return new Set([
|
|
4760
|
+
return new Set([symbolNode[1]]);
|
|
4654
4761
|
return null;
|
|
4655
4762
|
}
|
|
4656
|
-
case
|
|
4657
|
-
case
|
|
4658
|
-
case
|
|
4659
|
-
case
|
|
4660
|
-
case
|
|
4763
|
+
case NodeTypes.NormalBuiltinSymbol:
|
|
4764
|
+
case NodeTypes.SpecialBuiltinSymbol:
|
|
4765
|
+
case NodeTypes.String:
|
|
4766
|
+
case NodeTypes.Number:
|
|
4767
|
+
case NodeTypes.ReservedSymbol:
|
|
4768
|
+
case NodeTypes.Binding:
|
|
4661
4769
|
return null;
|
|
4662
|
-
case
|
|
4770
|
+
case NodeTypes.NormalExpression: {
|
|
4771
|
+
var normalExpressionNode = node;
|
|
4663
4772
|
var unresolvedSymbols_1 = new Set();
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4773
|
+
if (isNormalExpressionNodeWithName(normalExpressionNode)) {
|
|
4774
|
+
var _d = __read(normalExpressionNode, 2), _e = __read(_d[1], 1), symbolNode = _e[0];
|
|
4775
|
+
if (isUserDefinedSymbolNode(symbolNode)) {
|
|
4776
|
+
var lookUpResult = contextStack.lookUp(symbolNode);
|
|
4777
|
+
if (lookUpResult === null)
|
|
4778
|
+
unresolvedSymbols_1.add(symbolNode[1]);
|
|
4779
|
+
}
|
|
4780
|
+
}
|
|
4781
|
+
else {
|
|
4782
|
+
var _f = __read(normalExpressionNode, 2), _g = __read(_f[1], 1), expressionNode = _g[0];
|
|
4783
|
+
(_b = findUnresolvedSymbolsInNode(expressionNode, contextStack, builtin, evaluateNode)) === null || _b === void 0 ? void 0 : _b.forEach(function (symbol) { return unresolvedSymbols_1.add(symbol); });
|
|
4669
4784
|
}
|
|
4670
4785
|
try {
|
|
4671
|
-
for (var
|
|
4672
|
-
var subNode =
|
|
4673
|
-
(
|
|
4786
|
+
for (var _h = __values(normalExpressionNode[1][1]), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
4787
|
+
var subNode = _j.value;
|
|
4788
|
+
(_c = findUnresolvedSymbolsInNode(subNode, contextStack, builtin, evaluateNode)) === null || _c === void 0 ? void 0 : _c.forEach(function (symbol) { return unresolvedSymbols_1.add(symbol); });
|
|
4674
4789
|
}
|
|
4675
4790
|
}
|
|
4676
4791
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
4677
4792
|
finally {
|
|
4678
4793
|
try {
|
|
4679
|
-
if (
|
|
4794
|
+
if (_j && !_j.done && (_a = _h.return)) _a.call(_h);
|
|
4680
4795
|
}
|
|
4681
4796
|
finally { if (e_2) throw e_2.error; }
|
|
4682
4797
|
}
|
|
4683
4798
|
return unresolvedSymbols_1;
|
|
4684
4799
|
}
|
|
4685
|
-
case
|
|
4686
|
-
var
|
|
4687
|
-
|
|
4688
|
-
|
|
4800
|
+
case NodeTypes.SpecialExpression: {
|
|
4801
|
+
var specialExpressionNode = node;
|
|
4802
|
+
var specialExpressionType = specialExpressionNode[1][0];
|
|
4803
|
+
var specialExpression = builtin.specialExpressions[specialExpressionType];
|
|
4804
|
+
var castedGetUndefinedSymbols = specialExpression.getUndefinedSymbols;
|
|
4805
|
+
return castedGetUndefinedSymbols(specialExpressionNode, contextStack, {
|
|
4689
4806
|
getUndefinedSymbols: getUndefinedSymbols,
|
|
4690
4807
|
builtin: builtin,
|
|
4691
|
-
|
|
4808
|
+
evaluateNode: evaluateNode,
|
|
4692
4809
|
});
|
|
4693
4810
|
}
|
|
4694
|
-
case
|
|
4695
|
-
return
|
|
4811
|
+
case NodeTypes.Spread:
|
|
4812
|
+
return findUnresolvedSymbolsInNode(node[1], contextStack, builtin, evaluateNode);
|
|
4813
|
+
/* v8 ignore next 2 */
|
|
4814
|
+
default:
|
|
4815
|
+
throw new Error("Unhandled node type: ".concat(nodeType));
|
|
4696
4816
|
}
|
|
4697
4817
|
}
|
|
4698
4818
|
|
|
4699
4819
|
function checkParams(evaluatedFunction, nbrOfParams, sourceCodeInfo) {
|
|
4700
|
-
var hasRest = evaluatedFunction.
|
|
4701
|
-
var minArity = evaluatedFunction.
|
|
4702
|
-
var maxArity = hasRest ? Number.MAX_SAFE_INTEGER : evaluatedFunction.
|
|
4820
|
+
var hasRest = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; });
|
|
4821
|
+
var minArity = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
4822
|
+
var maxArity = hasRest ? Number.MAX_SAFE_INTEGER : evaluatedFunction[0].length;
|
|
4703
4823
|
if (nbrOfParams < minArity || nbrOfParams > maxArity) {
|
|
4704
4824
|
throw new LitsError("Unexpected number of arguments, got ".concat(valueToString(nbrOfParams), "."), sourceCodeInfo);
|
|
4705
4825
|
}
|
|
@@ -4723,21 +4843,21 @@ var Lits = (function (exports) {
|
|
|
4723
4843
|
}
|
|
4724
4844
|
},
|
|
4725
4845
|
UserDefined: function (fn, params, sourceCodeInfo, contextStack, _a) {
|
|
4726
|
-
var
|
|
4846
|
+
var evaluateNode = _a.evaluateNode;
|
|
4727
4847
|
var _loop_1 = function () {
|
|
4728
4848
|
var e_1, _b;
|
|
4729
4849
|
checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo);
|
|
4730
4850
|
var evaluatedFunction = fn.evaluatedfunction;
|
|
4731
|
-
var args = evaluatedFunction
|
|
4732
|
-
var nbrOfNonRestArgs = args.filter(function (arg) { return arg
|
|
4733
|
-
var newContextStack = contextStack.create(fn.evaluatedfunction
|
|
4851
|
+
var args = evaluatedFunction[0];
|
|
4852
|
+
var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
|
|
4853
|
+
var newContextStack = contextStack.create(fn.evaluatedfunction[2]);
|
|
4734
4854
|
var newContext = {};
|
|
4735
4855
|
var rest = [];
|
|
4736
4856
|
for (var i = 0; i < params.length; i += 1) {
|
|
4737
4857
|
if (i < nbrOfNonRestArgs) {
|
|
4738
4858
|
var param = toAny(params[i]);
|
|
4739
|
-
var valueRecord = evalueateBindingNodeValues(args[i], param, function (
|
|
4740
|
-
return
|
|
4859
|
+
var valueRecord = evalueateBindingNodeValues(args[i], param, function (Node) {
|
|
4860
|
+
return evaluateNode(Node, newContextStack.create(newContext));
|
|
4741
4861
|
});
|
|
4742
4862
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4743
4863
|
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
@@ -4750,18 +4870,18 @@ var Lits = (function (exports) {
|
|
|
4750
4870
|
}
|
|
4751
4871
|
for (var i = params.length; i < nbrOfNonRestArgs; i++) {
|
|
4752
4872
|
var arg = args[i];
|
|
4753
|
-
var defaultValue =
|
|
4754
|
-
var valueRecord = evalueateBindingNodeValues(arg, defaultValue, function (
|
|
4755
|
-
return
|
|
4873
|
+
var defaultValue = evaluateNode(arg[1][1], contextStack.create(newContext));
|
|
4874
|
+
var valueRecord = evalueateBindingNodeValues(arg, defaultValue, function (Node) {
|
|
4875
|
+
return evaluateNode(Node, contextStack.create(newContext));
|
|
4756
4876
|
});
|
|
4757
4877
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4758
4878
|
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
4759
4879
|
newContext[key] = { value: value };
|
|
4760
4880
|
});
|
|
4761
4881
|
}
|
|
4762
|
-
var restArgument = args.find(function (arg) { return arg
|
|
4882
|
+
var restArgument = args.find(function (arg) { return arg[0] === bindingTargetTypes.rest; });
|
|
4763
4883
|
if (restArgument !== undefined) {
|
|
4764
|
-
var valueRecord = evalueateBindingNodeValues(restArgument, rest, function (
|
|
4884
|
+
var valueRecord = evalueateBindingNodeValues(restArgument, rest, function (Node) { return evaluateNode(Node, contextStack.create(newContext)); });
|
|
4765
4885
|
Object.entries(valueRecord).forEach(function (_a) {
|
|
4766
4886
|
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
4767
4887
|
newContext[key] = { value: value };
|
|
@@ -4771,9 +4891,9 @@ var Lits = (function (exports) {
|
|
|
4771
4891
|
var result = null;
|
|
4772
4892
|
var newContextStack2 = newContextStack.create(newContext);
|
|
4773
4893
|
try {
|
|
4774
|
-
for (var _c = (e_1 = void 0, __values(evaluatedFunction
|
|
4894
|
+
for (var _c = (e_1 = void 0, __values(evaluatedFunction[1])), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
4775
4895
|
var node = _d.value;
|
|
4776
|
-
result =
|
|
4896
|
+
result = evaluateNode(node, newContextStack2);
|
|
4777
4897
|
}
|
|
4778
4898
|
}
|
|
4779
4899
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -4897,7 +5017,7 @@ var Lits = (function (exports) {
|
|
|
4897
5017
|
},
|
|
4898
5018
|
Builtin: function (fn, params, sourceCodeInfo, contextStack, _a) {
|
|
4899
5019
|
var executeFunction = _a.executeFunction;
|
|
4900
|
-
var normalExpression = asNonUndefined(
|
|
5020
|
+
var normalExpression = asNonUndefined(allNormalExpressions[fn.normalBuitinSymbolType], sourceCodeInfo);
|
|
4901
5021
|
return normalExpression.evaluate(params, sourceCodeInfo, contextStack, { executeFunction: executeFunction });
|
|
4902
5022
|
},
|
|
4903
5023
|
};
|
|
@@ -4908,7 +5028,7 @@ var Lits = (function (exports) {
|
|
|
4908
5028
|
try {
|
|
4909
5029
|
for (var _b = __values(ast.body), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
4910
5030
|
var node = _c.value;
|
|
4911
|
-
result =
|
|
5031
|
+
result = evaluateNode(node, contextStack);
|
|
4912
5032
|
}
|
|
4913
5033
|
}
|
|
4914
5034
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -4920,53 +5040,66 @@ var Lits = (function (exports) {
|
|
|
4920
5040
|
}
|
|
4921
5041
|
return result;
|
|
4922
5042
|
}
|
|
4923
|
-
function
|
|
4924
|
-
switch (node
|
|
4925
|
-
case
|
|
5043
|
+
function evaluateNode(node, contextStack) {
|
|
5044
|
+
switch (node[0]) {
|
|
5045
|
+
case NodeTypes.Number:
|
|
4926
5046
|
return evaluateNumber(node);
|
|
4927
|
-
case
|
|
5047
|
+
case NodeTypes.String:
|
|
4928
5048
|
return evaluateString(node);
|
|
4929
|
-
case
|
|
4930
|
-
|
|
4931
|
-
case
|
|
4932
|
-
return
|
|
4933
|
-
case
|
|
5049
|
+
case NodeTypes.NormalBuiltinSymbol:
|
|
5050
|
+
case NodeTypes.SpecialBuiltinSymbol:
|
|
5051
|
+
case NodeTypes.UserDefinedSymbol:
|
|
5052
|
+
return contextStack.evaluateSymbol(node);
|
|
5053
|
+
case NodeTypes.ReservedSymbol:
|
|
5054
|
+
return evaluateReservedSymbol(node);
|
|
5055
|
+
case NodeTypes.NormalExpression:
|
|
4934
5056
|
return evaluateNormalExpression(node, contextStack);
|
|
4935
|
-
case
|
|
5057
|
+
case NodeTypes.SpecialExpression:
|
|
4936
5058
|
return evaluateSpecialExpression(node, contextStack);
|
|
4937
5059
|
/* v8 ignore next 2 */
|
|
4938
5060
|
default:
|
|
4939
|
-
throw new LitsError("".concat(node
|
|
5061
|
+
throw new LitsError("".concat(getNodeTypeName(node[0]), "-node cannot be evaluated"), node[2]);
|
|
4940
5062
|
}
|
|
4941
5063
|
}
|
|
4942
5064
|
function evaluateNumber(node) {
|
|
4943
|
-
return node
|
|
5065
|
+
return node[1];
|
|
4944
5066
|
}
|
|
4945
5067
|
function evaluateString(node) {
|
|
4946
|
-
return node
|
|
5068
|
+
return node[1];
|
|
4947
5069
|
}
|
|
4948
|
-
function
|
|
4949
|
-
var reservedName = node
|
|
5070
|
+
function evaluateReservedSymbol(node) {
|
|
5071
|
+
var reservedName = node[1];
|
|
4950
5072
|
var value = reservedSymbolRecord[reservedName];
|
|
4951
|
-
return asNonUndefined(value, node
|
|
5073
|
+
return asNonUndefined(value, node[2]);
|
|
4952
5074
|
}
|
|
4953
5075
|
function evaluateNormalExpression(node, contextStack) {
|
|
4954
|
-
var
|
|
4955
|
-
var
|
|
5076
|
+
var sourceCodeInfo = node[2];
|
|
5077
|
+
var paramNodes = node[1][1];
|
|
5078
|
+
var params = paramNodes.map(function (paramNode) { return evaluateNode(paramNode, contextStack); });
|
|
4956
5079
|
if (isNormalExpressionNodeWithName(node)) {
|
|
4957
|
-
var
|
|
4958
|
-
if (
|
|
4959
|
-
|
|
4960
|
-
|
|
5080
|
+
var nameSymbol = node[1][0];
|
|
5081
|
+
if (isNormalBuiltinSymbolNode(nameSymbol)) {
|
|
5082
|
+
var type = nameSymbol[1];
|
|
5083
|
+
var normalExpression = builtin.allNormalExpressions[type];
|
|
5084
|
+
return normalExpression.evaluate(params, node[2], contextStack, { executeFunction: executeFunction });
|
|
5085
|
+
}
|
|
5086
|
+
else {
|
|
5087
|
+
var fn = contextStack.getValue(nameSymbol[1]);
|
|
5088
|
+
if (fn !== undefined) {
|
|
5089
|
+
return executeFunction(asAny(fn), params, contextStack, sourceCodeInfo);
|
|
5090
|
+
}
|
|
5091
|
+
throw new UndefinedSymbolError(nameSymbol[1], node[2]);
|
|
5092
|
+
}
|
|
4961
5093
|
}
|
|
4962
5094
|
else {
|
|
4963
|
-
var
|
|
4964
|
-
|
|
5095
|
+
var fnNode = node[1][0];
|
|
5096
|
+
var fn = evaluateNode(fnNode, contextStack);
|
|
5097
|
+
return executeFunction(fn, params, contextStack, sourceCodeInfo);
|
|
4965
5098
|
}
|
|
4966
5099
|
}
|
|
4967
5100
|
function executeFunction(fn, params, contextStack, sourceCodeInfo) {
|
|
4968
5101
|
if (isLitsFunction(fn))
|
|
4969
|
-
return functionExecutors[fn.functionType](fn, params, sourceCodeInfo, contextStack, {
|
|
5102
|
+
return functionExecutors[fn.functionType](fn, params, sourceCodeInfo, contextStack, { evaluateNode: evaluateNode, executeFunction: executeFunction });
|
|
4970
5103
|
if (Array.isArray(fn))
|
|
4971
5104
|
return evaluateArrayAsFunction(fn, params, sourceCodeInfo);
|
|
4972
5105
|
if (isObj(fn))
|
|
@@ -4977,16 +5110,11 @@ var Lits = (function (exports) {
|
|
|
4977
5110
|
return evaluateNumberAsFunction(fn, params, sourceCodeInfo);
|
|
4978
5111
|
throw new NotAFunctionError(fn, sourceCodeInfo);
|
|
4979
5112
|
}
|
|
4980
|
-
function evaluateBuiltinNormalExpression(node, params, contextStack) {
|
|
4981
|
-
var normalExpression = builtin.normalExpressions[node.name];
|
|
4982
|
-
if (!normalExpression)
|
|
4983
|
-
throw new UndefinedSymbolError(node.name, node.sourceCodeInfo);
|
|
4984
|
-
return normalExpression.evaluate(params, node.sourceCodeInfo, contextStack, { executeFunction: executeFunction });
|
|
4985
|
-
}
|
|
4986
5113
|
function evaluateSpecialExpression(node, contextStack) {
|
|
4987
|
-
var
|
|
4988
|
-
|
|
4989
|
-
|
|
5114
|
+
var specialExpressionType = node[1][0];
|
|
5115
|
+
var specialExpression = asNonUndefined(builtin.specialExpressions[specialExpressionType], node[2]);
|
|
5116
|
+
var castedEvaluate = specialExpression.evaluate;
|
|
5117
|
+
return castedEvaluate(node, contextStack, { evaluateNode: evaluateNode, builtin: builtin, getUndefinedSymbols: getUndefinedSymbols });
|
|
4990
5118
|
}
|
|
4991
5119
|
function evalueateObjectAsFunction(fn, params, sourceCodeInfo) {
|
|
4992
5120
|
if (params.length !== 1)
|
|
@@ -5128,13 +5256,13 @@ var Lits = (function (exports) {
|
|
|
5128
5256
|
return (_d = this.values) === null || _d === void 0 ? void 0 : _d[name];
|
|
5129
5257
|
};
|
|
5130
5258
|
ContextStackImpl.prototype.lookUp = function (node) {
|
|
5131
|
-
var e_4, _a
|
|
5132
|
-
var _c, _d
|
|
5133
|
-
var value = node
|
|
5134
|
-
var sourceCodeInfo = node.sourceCodeInfo;
|
|
5259
|
+
var e_4, _a;
|
|
5260
|
+
var _b, _c, _d;
|
|
5261
|
+
var value = node[1];
|
|
5135
5262
|
try {
|
|
5136
|
-
|
|
5137
|
-
|
|
5263
|
+
// const sourceCodeInfo = node[2]
|
|
5264
|
+
for (var _e = __values(this.contexts), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
5265
|
+
var context = _f.value;
|
|
5138
5266
|
var contextEntry = context[value];
|
|
5139
5267
|
if (contextEntry)
|
|
5140
5268
|
return contextEntry;
|
|
@@ -5143,32 +5271,23 @@ var Lits = (function (exports) {
|
|
|
5143
5271
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
5144
5272
|
finally {
|
|
5145
5273
|
try {
|
|
5146
|
-
if (
|
|
5274
|
+
if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
|
|
5147
5275
|
}
|
|
5148
5276
|
finally { if (e_4) throw e_4.error; }
|
|
5149
5277
|
}
|
|
5150
|
-
var lazyHostValue = (
|
|
5278
|
+
var lazyHostValue = (_b = this.lazyValues) === null || _b === void 0 ? void 0 : _b[value];
|
|
5151
5279
|
if (lazyHostValue !== undefined) {
|
|
5152
5280
|
return {
|
|
5153
5281
|
value: toAny(lazyHostValue.read()),
|
|
5154
5282
|
};
|
|
5155
5283
|
}
|
|
5156
|
-
var hostValue = (
|
|
5284
|
+
var hostValue = (_c = this.values) === null || _c === void 0 ? void 0 : _c[value];
|
|
5157
5285
|
if (hostValue !== undefined) {
|
|
5158
5286
|
return {
|
|
5159
5287
|
value: toAny(hostValue),
|
|
5160
5288
|
};
|
|
5161
5289
|
}
|
|
5162
|
-
|
|
5163
|
-
var builtinFunction = (_b = {},
|
|
5164
|
-
_b[FUNCTION_SYMBOL] = true,
|
|
5165
|
-
_b.sourceCodeInfo = sourceCodeInfo,
|
|
5166
|
-
_b.functionType = 'Builtin',
|
|
5167
|
-
_b.n = value,
|
|
5168
|
-
_b);
|
|
5169
|
-
return builtinFunction;
|
|
5170
|
-
}
|
|
5171
|
-
var nativeJsFunction = (_e = this.nativeJsFunctions) === null || _e === void 0 ? void 0 : _e[value];
|
|
5290
|
+
var nativeJsFunction = (_d = this.nativeJsFunctions) === null || _d === void 0 ? void 0 : _d[value];
|
|
5172
5291
|
if (nativeJsFunction) {
|
|
5173
5292
|
return {
|
|
5174
5293
|
value: nativeJsFunction,
|
|
@@ -5176,13 +5295,24 @@ var Lits = (function (exports) {
|
|
|
5176
5295
|
}
|
|
5177
5296
|
return null;
|
|
5178
5297
|
};
|
|
5179
|
-
ContextStackImpl.prototype.
|
|
5298
|
+
ContextStackImpl.prototype.evaluateSymbol = function (node) {
|
|
5299
|
+
var _a;
|
|
5300
|
+
if (isSpecialBuiltinSymbolNode(node)) {
|
|
5301
|
+
throw new Error('Special builtin symbols should not be evaluated');
|
|
5302
|
+
}
|
|
5303
|
+
if (isNormalBuiltinSymbolNode(node)) {
|
|
5304
|
+
var type = node[1];
|
|
5305
|
+
return _a = {},
|
|
5306
|
+
_a[FUNCTION_SYMBOL] = true,
|
|
5307
|
+
_a.functionType = 'Builtin',
|
|
5308
|
+
_a.normalBuitinSymbolType = type,
|
|
5309
|
+
_a.sourceCodeInfo = node[2],
|
|
5310
|
+
_a;
|
|
5311
|
+
}
|
|
5180
5312
|
var lookUpResult = this.lookUp(node);
|
|
5181
5313
|
if (isContextEntry(lookUpResult))
|
|
5182
5314
|
return lookUpResult.value;
|
|
5183
|
-
|
|
5184
|
-
return lookUpResult;
|
|
5185
|
-
throw new UndefinedSymbolError(node.value, node.sourceCodeInfo);
|
|
5315
|
+
throw new UndefinedSymbolError(node[1], node[2]);
|
|
5186
5316
|
};
|
|
5187
5317
|
return ContextStackImpl;
|
|
5188
5318
|
}());
|
|
@@ -5265,10 +5395,10 @@ var Lits = (function (exports) {
|
|
|
5265
5395
|
'cond',
|
|
5266
5396
|
'def',
|
|
5267
5397
|
'defined?',
|
|
5268
|
-
'defn',
|
|
5398
|
+
// 'defn',
|
|
5269
5399
|
'do',
|
|
5270
5400
|
'doseq',
|
|
5271
|
-
'fn',
|
|
5401
|
+
// 'fn',
|
|
5272
5402
|
'if',
|
|
5273
5403
|
'let',
|
|
5274
5404
|
'loop',
|
|
@@ -5717,6 +5847,10 @@ var Lits = (function (exports) {
|
|
|
5717
5847
|
throwUnexpectedToken('ReservedSymbol', symbolName, token);
|
|
5718
5848
|
}
|
|
5719
5849
|
}
|
|
5850
|
+
function asReservedSymbolToken(token, symbolName) {
|
|
5851
|
+
assertReservedSymbolToken(token, symbolName);
|
|
5852
|
+
return token;
|
|
5853
|
+
}
|
|
5720
5854
|
function isSingleLineCommentToken(token) {
|
|
5721
5855
|
return (token === null || token === void 0 ? void 0 : token[0]) === 'SingleLineComment';
|
|
5722
5856
|
}
|
|
@@ -5799,6 +5933,9 @@ var Lits = (function (exports) {
|
|
|
5799
5933
|
throwUnexpectedToken('RBrace', undefined, token);
|
|
5800
5934
|
}
|
|
5801
5935
|
}
|
|
5936
|
+
function isStringToken(token) {
|
|
5937
|
+
return (token === null || token === void 0 ? void 0 : token[0]) === 'String';
|
|
5938
|
+
}
|
|
5802
5939
|
function isA_BinaryOperatorToken(token) {
|
|
5803
5940
|
return (token === null || token === void 0 ? void 0 : token[0]) === 'Operator' && isBinaryOperator(token[1]);
|
|
5804
5941
|
}
|
|
@@ -5836,6 +5973,12 @@ var Lits = (function (exports) {
|
|
|
5836
5973
|
var exponentiationPrecedence = 10;
|
|
5837
5974
|
var binaryFunctionalOperatorPrecedence = 1;
|
|
5838
5975
|
var placeholderRegexp = /^\$([1-9]\d?)?$/;
|
|
5976
|
+
function withSourceCodeInfo(node, sourceCodeInfo) {
|
|
5977
|
+
if (sourceCodeInfo) {
|
|
5978
|
+
node[2] = sourceCodeInfo;
|
|
5979
|
+
}
|
|
5980
|
+
return node;
|
|
5981
|
+
}
|
|
5839
5982
|
function getPrecedence(operatorSign) {
|
|
5840
5983
|
switch (operatorSign) {
|
|
5841
5984
|
case '**': // exponentiation
|
|
@@ -5878,29 +6021,18 @@ var Lits = (function (exports) {
|
|
|
5878
6021
|
throw new Error("Unknown binary operator: ".concat(operatorSign));
|
|
5879
6022
|
}
|
|
5880
6023
|
}
|
|
5881
|
-
function createNamedNormalExpressionNode(
|
|
5882
|
-
var node =
|
|
5883
|
-
|
|
5884
|
-
|
|
5885
|
-
params: params,
|
|
5886
|
-
sourceCodeInfo: sourceCodeInfo,
|
|
5887
|
-
};
|
|
5888
|
-
var builtinExpression = builtin.normalExpressions[node.name];
|
|
5889
|
-
if (builtinExpression) {
|
|
5890
|
-
assertNumberOfParams(builtinExpression.paramCount, node);
|
|
6024
|
+
function createNamedNormalExpressionNode(symbolNode, params, sourceCodeInfo) {
|
|
6025
|
+
var node = withSourceCodeInfo([NodeTypes.NormalExpression, [symbolNode, params]], sourceCodeInfo);
|
|
6026
|
+
if (isNormalBuiltinSymbolNode(symbolNode)) {
|
|
6027
|
+
assertNumberOfParams(allNormalExpressions[symbolNode[1]].paramCount, node);
|
|
5891
6028
|
}
|
|
5892
6029
|
return node;
|
|
5893
6030
|
}
|
|
5894
6031
|
function createAccessorNode(left, right, sourceCodeInfo) {
|
|
5895
6032
|
// Unnamed normal expression
|
|
5896
|
-
return
|
|
5897
|
-
type: 'NormalExpression',
|
|
5898
|
-
params: [left, right],
|
|
5899
|
-
name: undefined,
|
|
5900
|
-
sourceCodeInfo: sourceCodeInfo,
|
|
5901
|
-
};
|
|
6033
|
+
return withSourceCodeInfo([NodeTypes.NormalExpression, [left, [right]]], sourceCodeInfo);
|
|
5902
6034
|
}
|
|
5903
|
-
function
|
|
6035
|
+
function fromBinaryOperatorToNode(operator, symbolNode, left, right, sourceCodeInfo) {
|
|
5904
6036
|
var operatorName = operator[1];
|
|
5905
6037
|
switch (operatorName) {
|
|
5906
6038
|
case '**': // exponentiation
|
|
@@ -5925,16 +6057,11 @@ var Lits = (function (exports) {
|
|
|
5925
6057
|
case '&':
|
|
5926
6058
|
case '^':
|
|
5927
6059
|
case '|':
|
|
5928
|
-
return createNamedNormalExpressionNode(
|
|
6060
|
+
return createNamedNormalExpressionNode(symbolNode, [left, right], sourceCodeInfo);
|
|
5929
6061
|
case '&&':
|
|
5930
6062
|
case '||':
|
|
5931
6063
|
case '??':
|
|
5932
|
-
return
|
|
5933
|
-
type: 'SpecialExpression',
|
|
5934
|
-
name: operatorName,
|
|
5935
|
-
params: [left, right],
|
|
5936
|
-
sourceCodeInfo: sourceCodeInfo,
|
|
5937
|
-
};
|
|
6064
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes[operatorName], [left, right]]], sourceCodeInfo);
|
|
5938
6065
|
/* v8 ignore next 10 */
|
|
5939
6066
|
case '.':
|
|
5940
6067
|
case ';':
|
|
@@ -6030,9 +6157,12 @@ var Lits = (function (exports) {
|
|
|
6030
6157
|
&& !(newPrecedece === exponentiationPrecedence && precedence === exponentiationPrecedence)) {
|
|
6031
6158
|
break;
|
|
6032
6159
|
}
|
|
6160
|
+
var symbol = specialExpressionTypes[name_1]
|
|
6161
|
+
? withSourceCodeInfo([NodeTypes.SpecialBuiltinSymbol, specialExpressionTypes[name_1]], operator[2])
|
|
6162
|
+
: withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes[name_1]], operator[2]);
|
|
6033
6163
|
this.advance();
|
|
6034
6164
|
var right = this.parseExpression(newPrecedece);
|
|
6035
|
-
left =
|
|
6165
|
+
left = fromBinaryOperatorToNode(operator, symbol, left, right, operator[2]);
|
|
6036
6166
|
}
|
|
6037
6167
|
else if (isSymbolToken(operator)) {
|
|
6038
6168
|
if (!isFunctionOperator(operator[1])) {
|
|
@@ -6042,9 +6172,12 @@ var Lits = (function (exports) {
|
|
|
6042
6172
|
if (newPrecedece <= precedence) {
|
|
6043
6173
|
break;
|
|
6044
6174
|
}
|
|
6045
|
-
this.
|
|
6175
|
+
var operatorSymbol = this.parseSymbol();
|
|
6046
6176
|
var right = this.parseExpression(newPrecedece);
|
|
6047
|
-
|
|
6177
|
+
if (isSpecialBuiltinSymbolNode(operatorSymbol)) {
|
|
6178
|
+
throw new LitsError('Special expressions are not allowed in binary functional operators', operatorSymbol[2]);
|
|
6179
|
+
}
|
|
6180
|
+
left = createNamedNormalExpressionNode(operatorSymbol, [left, right], operator[2]);
|
|
6048
6181
|
}
|
|
6049
6182
|
else {
|
|
6050
6183
|
break;
|
|
@@ -6063,11 +6196,7 @@ var Lits = (function (exports) {
|
|
|
6063
6196
|
if (!isSymbolToken(symbolToken)) {
|
|
6064
6197
|
throw new LitsError('Expected symbol', this.peek()[2]);
|
|
6065
6198
|
}
|
|
6066
|
-
var stringNode =
|
|
6067
|
-
type: 'String',
|
|
6068
|
-
value: symbolToken[1],
|
|
6069
|
-
sourceCodeInfo: symbolToken[2],
|
|
6070
|
-
};
|
|
6199
|
+
var stringNode = withSourceCodeInfo([NodeTypes.String, symbolToken[1]], symbolToken[2]);
|
|
6071
6200
|
operand = createAccessorNode(operand, stringNode, token[2]);
|
|
6072
6201
|
this.advance();
|
|
6073
6202
|
token = this.peek();
|
|
@@ -6107,16 +6236,14 @@ var Lits = (function (exports) {
|
|
|
6107
6236
|
this.advance();
|
|
6108
6237
|
return expression;
|
|
6109
6238
|
}
|
|
6110
|
-
// Unary operators
|
|
6111
6239
|
else if (isOperatorToken(token)) {
|
|
6112
6240
|
var operatorName = token[1];
|
|
6113
6241
|
if (isBinaryOperator(operatorName)) {
|
|
6114
6242
|
this.advance();
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
};
|
|
6243
|
+
if (specialExpressionTypes[operatorName] !== undefined) {
|
|
6244
|
+
return withSourceCodeInfo([NodeTypes.SpecialBuiltinSymbol, specialExpressionTypes[operatorName]], token[2]);
|
|
6245
|
+
}
|
|
6246
|
+
return withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes[operatorName]], token[2]);
|
|
6120
6247
|
}
|
|
6121
6248
|
if (operatorName === '->') {
|
|
6122
6249
|
return this.parseShorthandLamdaFunction();
|
|
@@ -6164,22 +6291,24 @@ var Lits = (function (exports) {
|
|
|
6164
6291
|
while (!this.isAtEnd() && !isRBraceToken(this.peek())) {
|
|
6165
6292
|
if (isOperatorToken(this.peek(), '...')) {
|
|
6166
6293
|
this.advance();
|
|
6167
|
-
params.push(
|
|
6168
|
-
type: 'Spread',
|
|
6169
|
-
value: this.parseExpression(),
|
|
6170
|
-
sourceCodeInfo: this.peek()[2],
|
|
6171
|
-
});
|
|
6294
|
+
params.push(withSourceCodeInfo([NodeTypes.Spread, this.parseExpression()], this.peek()[2]));
|
|
6172
6295
|
}
|
|
6173
6296
|
else {
|
|
6174
|
-
var
|
|
6175
|
-
if (
|
|
6297
|
+
var token = this.peek();
|
|
6298
|
+
if (isStringToken(token)) {
|
|
6299
|
+
var stringNode = this.parseString();
|
|
6300
|
+
params.push(withSourceCodeInfo([NodeTypes.String, stringNode[1]], token[2]));
|
|
6301
|
+
}
|
|
6302
|
+
else if (isSymbolToken(token)) {
|
|
6303
|
+
var value = token[1].startsWith('\'')
|
|
6304
|
+
? this.stringFromQuotedSymbol(token[1])
|
|
6305
|
+
: token[1];
|
|
6306
|
+
params.push(withSourceCodeInfo([NodeTypes.String, value], token[2]));
|
|
6307
|
+
this.advance();
|
|
6308
|
+
}
|
|
6309
|
+
else {
|
|
6176
6310
|
throw new LitsError('Expected key to be a symbol or a string', this.peek()[2]);
|
|
6177
6311
|
}
|
|
6178
|
-
params.push({
|
|
6179
|
-
type: 'String',
|
|
6180
|
-
value: key.value,
|
|
6181
|
-
sourceCodeInfo: key.sourceCodeInfo,
|
|
6182
|
-
});
|
|
6183
6312
|
assertOperatorToken(this.peek(), ':=');
|
|
6184
6313
|
this.advance();
|
|
6185
6314
|
params.push(this.parseExpression());
|
|
@@ -6194,12 +6323,7 @@ var Lits = (function (exports) {
|
|
|
6194
6323
|
}
|
|
6195
6324
|
assertRBraceToken(this.peek());
|
|
6196
6325
|
this.advance();
|
|
6197
|
-
return
|
|
6198
|
-
type: 'SpecialExpression',
|
|
6199
|
-
name: 'object',
|
|
6200
|
-
params: params,
|
|
6201
|
-
sourceCodeInfo: firstToken[2],
|
|
6202
|
-
};
|
|
6326
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.object, params]], firstToken[2]);
|
|
6203
6327
|
};
|
|
6204
6328
|
Parser.prototype.parseArray = function () {
|
|
6205
6329
|
var firstToken = asLBracketToken(this.peek());
|
|
@@ -6208,11 +6332,7 @@ var Lits = (function (exports) {
|
|
|
6208
6332
|
while (!this.isAtEnd() && !isRBracketToken(this.peek())) {
|
|
6209
6333
|
if (isOperatorToken(this.peek(), '...')) {
|
|
6210
6334
|
this.advance();
|
|
6211
|
-
params.push(
|
|
6212
|
-
type: 'Spread',
|
|
6213
|
-
value: this.parseExpression(),
|
|
6214
|
-
sourceCodeInfo: this.peek()[2],
|
|
6215
|
-
});
|
|
6335
|
+
params.push(withSourceCodeInfo([NodeTypes.Spread, this.parseExpression()], this.peek()[2]));
|
|
6216
6336
|
}
|
|
6217
6337
|
else {
|
|
6218
6338
|
params.push(this.parseExpression());
|
|
@@ -6227,15 +6347,9 @@ var Lits = (function (exports) {
|
|
|
6227
6347
|
}
|
|
6228
6348
|
assertRBracketToken(this.peek());
|
|
6229
6349
|
this.advance();
|
|
6230
|
-
return
|
|
6231
|
-
type: 'SpecialExpression',
|
|
6232
|
-
name: 'array',
|
|
6233
|
-
params: params,
|
|
6234
|
-
sourceCodeInfo: firstToken[2],
|
|
6235
|
-
};
|
|
6350
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.array, params]], firstToken[2]);
|
|
6236
6351
|
};
|
|
6237
6352
|
Parser.prototype.parseFunctionCall = function (symbol) {
|
|
6238
|
-
var isNamedFunction = symbol.type === 'Symbol';
|
|
6239
6353
|
this.advance();
|
|
6240
6354
|
var params = [];
|
|
6241
6355
|
while (!this.isAtEnd() && !isRParenToken(this.peek())) {
|
|
@@ -6252,45 +6366,57 @@ var Lits = (function (exports) {
|
|
|
6252
6366
|
throw new LitsError('Expected closing parenthesis', this.peek()[2]);
|
|
6253
6367
|
}
|
|
6254
6368
|
this.advance();
|
|
6255
|
-
if (
|
|
6256
|
-
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
|
|
6264
|
-
|
|
6265
|
-
|
|
6266
|
-
|
|
6267
|
-
|
|
6268
|
-
|
|
6269
|
-
|
|
6270
|
-
|
|
6271
|
-
|
|
6272
|
-
};
|
|
6273
|
-
assertNumberOfParams(builtin.specialExpressions[node.name].paramCount, node);
|
|
6274
|
-
return node;
|
|
6369
|
+
if (isSpecialBuiltinSymbolNode(symbol)) { // Named function
|
|
6370
|
+
var specialExpressionType = symbol[1];
|
|
6371
|
+
var type = specialExpressionType;
|
|
6372
|
+
switch (type) {
|
|
6373
|
+
case specialExpressionTypes['||']:
|
|
6374
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6375
|
+
case specialExpressionTypes['&&']:
|
|
6376
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6377
|
+
case specialExpressionTypes.recur:
|
|
6378
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6379
|
+
case specialExpressionTypes.array:
|
|
6380
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6381
|
+
case specialExpressionTypes.object:
|
|
6382
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, params]], symbol[2]);
|
|
6383
|
+
case specialExpressionTypes['??']: {
|
|
6384
|
+
if (params.length === 1) {
|
|
6385
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, [params[0], undefined]]], symbol[2]);
|
|
6275
6386
|
}
|
|
6276
|
-
|
|
6277
|
-
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6387
|
+
if (params.length === 2) {
|
|
6388
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, [params[0], params[1]]]], symbol[2]);
|
|
6389
|
+
}
|
|
6390
|
+
throw new LitsError('Expected exactly two parameters', symbol[2]);
|
|
6391
|
+
}
|
|
6392
|
+
case specialExpressionTypes['defined?']: {
|
|
6393
|
+
if (params.length !== 1) {
|
|
6394
|
+
throw new LitsError('Expected exactly one parameter', symbol[2]);
|
|
6395
|
+
}
|
|
6396
|
+
var _a = __read(params, 1), param = _a[0];
|
|
6397
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, param]], symbol[2]);
|
|
6398
|
+
}
|
|
6399
|
+
case specialExpressionTypes.throw: {
|
|
6400
|
+
if (params.length !== 1) {
|
|
6401
|
+
throw new LitsError('Expected exactly one parameter', symbol[2]);
|
|
6402
|
+
}
|
|
6403
|
+
var _b = __read(params, 1), param = _b[0];
|
|
6404
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [type, param]], symbol[2]);
|
|
6283
6405
|
}
|
|
6406
|
+
case specialExpressionTypes['0_fn']:
|
|
6407
|
+
case specialExpressionTypes['0_def']:
|
|
6408
|
+
case specialExpressionTypes['0_defn']:
|
|
6409
|
+
throw new LitsError("".concat(type, " is not allowed"), symbol[2]);
|
|
6410
|
+
/* v8 ignore next 2 */
|
|
6411
|
+
default:
|
|
6412
|
+
throw new Error("Unknown special expression: ".concat(type));
|
|
6284
6413
|
}
|
|
6285
|
-
|
|
6414
|
+
}
|
|
6415
|
+
else if (isNormalBuiltinSymbolNode(symbol) || isNormalBuiltinSymbolNode(symbol)) {
|
|
6416
|
+
return createNamedNormalExpressionNode(symbol, params, symbol[2]);
|
|
6286
6417
|
}
|
|
6287
6418
|
else {
|
|
6288
|
-
return
|
|
6289
|
-
type: 'NormalExpression',
|
|
6290
|
-
name: undefined,
|
|
6291
|
-
params: __spreadArray([symbol], __read(params), false),
|
|
6292
|
-
sourceCodeInfo: symbol.sourceCodeInfo,
|
|
6293
|
-
};
|
|
6419
|
+
return withSourceCodeInfo([NodeTypes.NormalExpression, [symbol, params]], symbol[2]);
|
|
6294
6420
|
}
|
|
6295
6421
|
};
|
|
6296
6422
|
Parser.prototype.parseLambdaFunction = function () {
|
|
@@ -6307,16 +6433,10 @@ var Lits = (function (exports) {
|
|
|
6307
6433
|
}
|
|
6308
6434
|
this.advance();
|
|
6309
6435
|
var body = this.parseExpression();
|
|
6310
|
-
return
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
function: {
|
|
6315
|
-
arguments: functionArguments,
|
|
6316
|
-
body: [body],
|
|
6317
|
-
},
|
|
6318
|
-
sourceCodeInfo: firstToken[2],
|
|
6319
|
-
};
|
|
6436
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_fn'], [
|
|
6437
|
+
functionArguments,
|
|
6438
|
+
[body],
|
|
6439
|
+
]]], firstToken[2]);
|
|
6320
6440
|
}
|
|
6321
6441
|
catch (_a) {
|
|
6322
6442
|
return null;
|
|
@@ -6325,11 +6445,7 @@ var Lits = (function (exports) {
|
|
|
6325
6445
|
Parser.prototype.parseFunctionArguments = function () {
|
|
6326
6446
|
var firstToken = this.peek();
|
|
6327
6447
|
if (isSymbolToken(firstToken)) {
|
|
6328
|
-
return [
|
|
6329
|
-
type: 'symbol',
|
|
6330
|
-
name: this.parseSymbol().value,
|
|
6331
|
-
sourceCodeInfo: firstToken[2],
|
|
6332
|
-
}];
|
|
6448
|
+
return [withSourceCodeInfo([bindingTargetTypes.symbol, [this.parseSymbol(), undefined]], firstToken[2])];
|
|
6333
6449
|
}
|
|
6334
6450
|
assertLParenToken(firstToken);
|
|
6335
6451
|
this.advance();
|
|
@@ -6341,13 +6457,13 @@ var Lits = (function (exports) {
|
|
|
6341
6457
|
throw new LitsError('Rest argument must be last', this.peek()[2]);
|
|
6342
6458
|
}
|
|
6343
6459
|
var bindingTarget = this.parseBindingTarget();
|
|
6344
|
-
if (bindingTarget
|
|
6460
|
+
if (bindingTarget[1][1] !== undefined) {
|
|
6345
6461
|
defaults = true;
|
|
6346
6462
|
}
|
|
6347
|
-
if (bindingTarget
|
|
6463
|
+
if (bindingTarget[0] === bindingTargetTypes.rest) {
|
|
6348
6464
|
rest = true;
|
|
6349
6465
|
}
|
|
6350
|
-
if (defaults && !bindingTarget
|
|
6466
|
+
if (defaults && !bindingTarget[1][1]) {
|
|
6351
6467
|
throw new LitsError('Default arguments must be last', this.peek()[2]);
|
|
6352
6468
|
}
|
|
6353
6469
|
functionArguments.push(bindingTarget);
|
|
@@ -6394,22 +6510,16 @@ var Lits = (function (exports) {
|
|
|
6394
6510
|
var functionArguments = [];
|
|
6395
6511
|
for (var i = 1; i <= arity; i += 1) {
|
|
6396
6512
|
if (i === 1 && dollar1 === 'NAKED') {
|
|
6397
|
-
functionArguments.push(
|
|
6513
|
+
functionArguments.push(withSourceCodeInfo([bindingTargetTypes.symbol, [[NodeTypes.UserDefinedSymbol, '$'], undefined]], firstToken[2]));
|
|
6398
6514
|
}
|
|
6399
6515
|
else {
|
|
6400
|
-
functionArguments.push(
|
|
6516
|
+
functionArguments.push(withSourceCodeInfo([bindingTargetTypes.symbol, [[NodeTypes.UserDefinedSymbol, "$".concat(i)], undefined]], firstToken[2]));
|
|
6401
6517
|
}
|
|
6402
6518
|
}
|
|
6403
|
-
var node =
|
|
6404
|
-
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
function: {
|
|
6408
|
-
arguments: functionArguments,
|
|
6409
|
-
body: [exprNode],
|
|
6410
|
-
},
|
|
6411
|
-
sourceCodeInfo: firstToken[2],
|
|
6412
|
-
};
|
|
6519
|
+
var node = withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_fn'], [
|
|
6520
|
+
functionArguments,
|
|
6521
|
+
[exprNode],
|
|
6522
|
+
]]], firstToken[2]);
|
|
6413
6523
|
return node;
|
|
6414
6524
|
};
|
|
6415
6525
|
Parser.prototype.parseOptionalDefaulValue = function () {
|
|
@@ -6425,16 +6535,14 @@ var Lits = (function (exports) {
|
|
|
6425
6535
|
// Symbol
|
|
6426
6536
|
if (isSymbolToken(firstToken)) {
|
|
6427
6537
|
var symbol = this.parseSymbol();
|
|
6538
|
+
if (!isUserDefinedSymbolNode(symbol)) {
|
|
6539
|
+
throw new LitsError('Expected user defined symbol', firstToken[2]);
|
|
6540
|
+
}
|
|
6428
6541
|
var defaultValue = this.parseOptionalDefaulValue();
|
|
6429
6542
|
if (requireDefaultValue && !defaultValue) {
|
|
6430
6543
|
throw new LitsError('Expected assignment', this.peek()[2]);
|
|
6431
6544
|
}
|
|
6432
|
-
return
|
|
6433
|
-
type: 'symbol',
|
|
6434
|
-
name: symbol.value,
|
|
6435
|
-
default: defaultValue,
|
|
6436
|
-
sourceCodeInfo: firstToken[2],
|
|
6437
|
-
};
|
|
6545
|
+
return withSourceCodeInfo([bindingTargetTypes.symbol, [symbol, defaultValue]], firstToken[2]);
|
|
6438
6546
|
}
|
|
6439
6547
|
// Rest
|
|
6440
6548
|
if (isOperatorToken(firstToken, '...')) {
|
|
@@ -6442,15 +6550,11 @@ var Lits = (function (exports) {
|
|
|
6442
6550
|
throw new LitsError('Rest element not allowed', firstToken[2]);
|
|
6443
6551
|
}
|
|
6444
6552
|
this.advance();
|
|
6445
|
-
var symbol = this.parseSymbol();
|
|
6553
|
+
var symbol = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6446
6554
|
if (isOperatorToken(this.peek(), ':=')) {
|
|
6447
6555
|
throw new LitsError('Rest argument can not have default value', this.peek()[2]);
|
|
6448
6556
|
}
|
|
6449
|
-
return
|
|
6450
|
-
type: 'rest',
|
|
6451
|
-
name: symbol.value,
|
|
6452
|
-
sourceCodeInfo: firstToken[2],
|
|
6453
|
-
};
|
|
6557
|
+
return withSourceCodeInfo([bindingTargetTypes.rest, [symbol[1], undefined]], firstToken[2]);
|
|
6454
6558
|
}
|
|
6455
6559
|
// Array
|
|
6456
6560
|
if (isLBracketToken(firstToken)) {
|
|
@@ -6469,7 +6573,7 @@ var Lits = (function (exports) {
|
|
|
6469
6573
|
continue;
|
|
6470
6574
|
}
|
|
6471
6575
|
var target = this.parseBindingTarget();
|
|
6472
|
-
if (target
|
|
6576
|
+
if (target[0] === bindingTargetTypes.rest) {
|
|
6473
6577
|
rest = true;
|
|
6474
6578
|
}
|
|
6475
6579
|
elements.push(target);
|
|
@@ -6485,12 +6589,7 @@ var Lits = (function (exports) {
|
|
|
6485
6589
|
if (requireDefaultValue && !defaultValue) {
|
|
6486
6590
|
throw new LitsError('Expected assignment', this.peek()[2]);
|
|
6487
6591
|
}
|
|
6488
|
-
return
|
|
6489
|
-
type: 'array',
|
|
6490
|
-
elements: elements,
|
|
6491
|
-
default: defaultValue,
|
|
6492
|
-
sourceCodeInfo: firstToken[2],
|
|
6493
|
-
};
|
|
6592
|
+
return withSourceCodeInfo([bindingTargetTypes.array, [elements, defaultValue]], firstToken[2]);
|
|
6494
6593
|
}
|
|
6495
6594
|
// Object
|
|
6496
6595
|
if (isLBraceToken(firstToken)) {
|
|
@@ -6506,40 +6605,32 @@ var Lits = (function (exports) {
|
|
|
6506
6605
|
rest = true;
|
|
6507
6606
|
this.advance();
|
|
6508
6607
|
}
|
|
6509
|
-
var key = this.parseSymbol()
|
|
6608
|
+
var key = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6510
6609
|
token = this.peek();
|
|
6511
6610
|
if (isReservedSymbolToken(token, 'as')) {
|
|
6512
6611
|
if (rest) {
|
|
6513
6612
|
throw new LitsError('Rest argument can not have alias', token[2]);
|
|
6514
6613
|
}
|
|
6515
6614
|
this.advance();
|
|
6516
|
-
var
|
|
6517
|
-
if (elements[
|
|
6518
|
-
throw new LitsError("Duplicate binding name: ".concat(
|
|
6615
|
+
var name_2 = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6616
|
+
if (elements[name_2[1]]) {
|
|
6617
|
+
throw new LitsError("Duplicate binding name: ".concat(name_2), token[2]);
|
|
6519
6618
|
}
|
|
6520
|
-
elements[key] =
|
|
6521
|
-
type: 'symbol',
|
|
6522
|
-
name: name_3,
|
|
6523
|
-
default: this.parseOptionalDefaulValue(),
|
|
6524
|
-
sourceCodeInfo: firstToken[2],
|
|
6525
|
-
};
|
|
6619
|
+
elements[key[1]] = withSourceCodeInfo([bindingTargetTypes.symbol, [name_2, this.parseOptionalDefaulValue()]], firstToken[2]);
|
|
6526
6620
|
}
|
|
6527
6621
|
else if (isRBraceToken(token) || isOperatorToken(token, ',') || isOperatorToken(token, ':=')) {
|
|
6528
|
-
if (elements[key]) {
|
|
6622
|
+
if (elements[key[1]]) {
|
|
6529
6623
|
throw new LitsError("Duplicate binding name: ".concat(key), token[2]);
|
|
6530
6624
|
}
|
|
6531
6625
|
if (rest && isOperatorToken(this.peek(), ':=')) {
|
|
6532
6626
|
throw new LitsError('Rest argument can not have default value', this.peek()[2]);
|
|
6533
6627
|
}
|
|
6534
|
-
elements[key] =
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
default: this.parseOptionalDefaulValue(),
|
|
6538
|
-
sourceCodeInfo: firstToken[2],
|
|
6539
|
-
};
|
|
6628
|
+
elements[key[1]] = rest
|
|
6629
|
+
? withSourceCodeInfo([bindingTargetTypes.rest, [key[1], this.parseOptionalDefaulValue()]], firstToken[2])
|
|
6630
|
+
: withSourceCodeInfo([bindingTargetTypes.symbol, [key, this.parseOptionalDefaulValue()]], firstToken[2]);
|
|
6540
6631
|
}
|
|
6541
6632
|
else if (isLBraceToken(token) || isLBracketToken(token)) {
|
|
6542
|
-
elements[key] = this.parseBindingTarget();
|
|
6633
|
+
elements[key[1]] = this.parseBindingTarget();
|
|
6543
6634
|
}
|
|
6544
6635
|
if (!isRBraceToken(this.peek())) {
|
|
6545
6636
|
assertOperatorToken(this.peek(), ',');
|
|
@@ -6553,12 +6644,7 @@ var Lits = (function (exports) {
|
|
|
6553
6644
|
if (requireDefaultValue && !defaultValue) {
|
|
6554
6645
|
throw new LitsError('Expected assignment', token[2]);
|
|
6555
6646
|
}
|
|
6556
|
-
return
|
|
6557
|
-
type: 'object',
|
|
6558
|
-
elements: elements,
|
|
6559
|
-
default: defaultValue,
|
|
6560
|
-
sourceCodeInfo: firstToken[2],
|
|
6561
|
-
};
|
|
6647
|
+
return withSourceCodeInfo([bindingTargetTypes.object, [elements, defaultValue]], firstToken[2]);
|
|
6562
6648
|
}
|
|
6563
6649
|
throw new LitsError('Expected symbol', this.peek()[2]);
|
|
6564
6650
|
};
|
|
@@ -6566,22 +6652,13 @@ var Lits = (function (exports) {
|
|
|
6566
6652
|
if (optionalSemicolon === void 0) { optionalSemicolon = false; }
|
|
6567
6653
|
this.advance();
|
|
6568
6654
|
var target = this.parseBindingTarget({ requireDefaultValue: true, noRest: true });
|
|
6569
|
-
var value = target
|
|
6570
|
-
|
|
6655
|
+
var value = target[1][1];
|
|
6656
|
+
target[1][1] = undefined;
|
|
6571
6657
|
if (!optionalSemicolon) {
|
|
6572
6658
|
assertOperatorToken(this.peek(), ';');
|
|
6573
6659
|
}
|
|
6574
|
-
|
|
6575
|
-
|
|
6576
|
-
name: 'let',
|
|
6577
|
-
bindingNode: {
|
|
6578
|
-
type: 'Binding',
|
|
6579
|
-
target: target,
|
|
6580
|
-
value: value,
|
|
6581
|
-
sourceCodeInfo: token[2],
|
|
6582
|
-
},
|
|
6583
|
-
sourceCodeInfo: token[2],
|
|
6584
|
-
};
|
|
6660
|
+
var bindingTarget = withSourceCodeInfo([NodeTypes.Binding, [target, value]], token[2]);
|
|
6661
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.let, bindingTarget]], token[2]);
|
|
6585
6662
|
};
|
|
6586
6663
|
Parser.prototype.parseDo = function (token) {
|
|
6587
6664
|
this.advance();
|
|
@@ -6597,12 +6674,7 @@ var Lits = (function (exports) {
|
|
|
6597
6674
|
}
|
|
6598
6675
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6599
6676
|
this.advance();
|
|
6600
|
-
return
|
|
6601
|
-
type: 'SpecialExpression',
|
|
6602
|
-
name: 'do',
|
|
6603
|
-
params: expressions,
|
|
6604
|
-
sourceCodeInfo: token[2],
|
|
6605
|
-
};
|
|
6677
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, expressions]], token[2]);
|
|
6606
6678
|
};
|
|
6607
6679
|
Parser.prototype.parseLoop = function (firstToken) {
|
|
6608
6680
|
this.advance();
|
|
@@ -6612,14 +6684,9 @@ var Lits = (function (exports) {
|
|
|
6612
6684
|
assertSymbolToken(token, 'let');
|
|
6613
6685
|
this.advance();
|
|
6614
6686
|
var target = this.parseBindingTarget({ requireDefaultValue: true, noRest: true });
|
|
6615
|
-
var value = target
|
|
6616
|
-
|
|
6617
|
-
bindingNodes.push(
|
|
6618
|
-
type: 'Binding',
|
|
6619
|
-
target: target,
|
|
6620
|
-
value: value,
|
|
6621
|
-
sourceCodeInfo: token[2],
|
|
6622
|
-
});
|
|
6687
|
+
var value = target[1][1];
|
|
6688
|
+
target[1][1] = undefined;
|
|
6689
|
+
bindingNodes.push(withSourceCodeInfo([NodeTypes.Binding, [target, value]], token[2]));
|
|
6623
6690
|
if (isOperatorToken(this.peek(), ',')) {
|
|
6624
6691
|
this.advance();
|
|
6625
6692
|
}
|
|
@@ -6642,13 +6709,7 @@ var Lits = (function (exports) {
|
|
|
6642
6709
|
}
|
|
6643
6710
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6644
6711
|
this.advance();
|
|
6645
|
-
return
|
|
6646
|
-
type: 'SpecialExpression',
|
|
6647
|
-
name: 'loop',
|
|
6648
|
-
params: params,
|
|
6649
|
-
bindingNodes: bindingNodes,
|
|
6650
|
-
sourceCodeInfo: firstToken[2],
|
|
6651
|
-
};
|
|
6712
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.loop, bindingNodes, params]], firstToken[2]);
|
|
6652
6713
|
};
|
|
6653
6714
|
Parser.prototype.parseTry = function (token) {
|
|
6654
6715
|
this.advance();
|
|
@@ -6664,12 +6725,7 @@ var Lits = (function (exports) {
|
|
|
6664
6725
|
}
|
|
6665
6726
|
var tryExpression = tryExpressions.length === 1
|
|
6666
6727
|
? tryExpressions[0]
|
|
6667
|
-
:
|
|
6668
|
-
type: 'SpecialExpression',
|
|
6669
|
-
name: 'do',
|
|
6670
|
-
params: tryExpressions,
|
|
6671
|
-
sourceCodeInfo: token[2],
|
|
6672
|
-
};
|
|
6728
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, tryExpressions]], token[2]);
|
|
6673
6729
|
assertReservedSymbolToken(this.peek(), 'catch');
|
|
6674
6730
|
this.advance();
|
|
6675
6731
|
var errorSymbol;
|
|
@@ -6693,20 +6749,8 @@ var Lits = (function (exports) {
|
|
|
6693
6749
|
this.advance();
|
|
6694
6750
|
var catchExpression = catchExpressions.length === 1
|
|
6695
6751
|
? catchExpressions[0]
|
|
6696
|
-
:
|
|
6697
|
-
|
|
6698
|
-
name: 'do',
|
|
6699
|
-
params: catchExpressions,
|
|
6700
|
-
sourceCodeInfo: token[2],
|
|
6701
|
-
};
|
|
6702
|
-
return {
|
|
6703
|
-
type: 'SpecialExpression',
|
|
6704
|
-
name: 'try',
|
|
6705
|
-
params: [tryExpression],
|
|
6706
|
-
ce: catchExpression,
|
|
6707
|
-
e: errorSymbol,
|
|
6708
|
-
sourceCodeInfo: token[2],
|
|
6709
|
-
};
|
|
6752
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, catchExpressions]], token[2]);
|
|
6753
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.try, tryExpression, errorSymbol, catchExpression]], token[2]);
|
|
6710
6754
|
};
|
|
6711
6755
|
Parser.prototype.parseForOrDoseq = function (firstToken) {
|
|
6712
6756
|
var isDoseq = firstToken[1] === 'doseq';
|
|
@@ -6714,10 +6758,10 @@ var Lits = (function (exports) {
|
|
|
6714
6758
|
var forLoopBindings = [];
|
|
6715
6759
|
var _loop_1 = function () {
|
|
6716
6760
|
var loopBinding = this_1.parseForLoopBinding();
|
|
6717
|
-
var existingBoundNames = forLoopBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b
|
|
6718
|
-
var newBoundNames = getAllBindingTargetNames(loopBinding
|
|
6761
|
+
var existingBoundNames = forLoopBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b[0][1][0])); });
|
|
6762
|
+
var newBoundNames = getAllBindingTargetNames(loopBinding[0][1][0]);
|
|
6719
6763
|
if (Object.keys(newBoundNames).some(function (n) { return existingBoundNames.includes(n); })) {
|
|
6720
|
-
throw new LitsError('Duplicate binding', loopBinding
|
|
6764
|
+
throw new LitsError('Duplicate binding', loopBinding[0][2]);
|
|
6721
6765
|
}
|
|
6722
6766
|
forLoopBindings.push(loopBinding);
|
|
6723
6767
|
};
|
|
@@ -6739,13 +6783,9 @@ var Lits = (function (exports) {
|
|
|
6739
6783
|
}
|
|
6740
6784
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6741
6785
|
this.advance();
|
|
6742
|
-
return
|
|
6743
|
-
|
|
6744
|
-
|
|
6745
|
-
params: expressions,
|
|
6746
|
-
sourceCodeInfo: firstToken[2],
|
|
6747
|
-
l: forLoopBindings,
|
|
6748
|
-
};
|
|
6786
|
+
return isDoseq
|
|
6787
|
+
? withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.doseq, forLoopBindings, expressions]], firstToken[2])
|
|
6788
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.for, forLoopBindings, expressions]], firstToken[2]);
|
|
6749
6789
|
};
|
|
6750
6790
|
Parser.prototype.parseForLoopBinding = function () {
|
|
6751
6791
|
assertReservedSymbolToken(this.peek(), 'each');
|
|
@@ -6767,18 +6807,17 @@ var Lits = (function (exports) {
|
|
|
6767
6807
|
&& !isReservedSymbolToken(token, 'each')) {
|
|
6768
6808
|
throw new LitsError('Expected symbol each, do, let, when or while', token[2]);
|
|
6769
6809
|
}
|
|
6770
|
-
var letBindings;
|
|
6810
|
+
var letBindings = [];
|
|
6771
6811
|
if (token[1] === 'let') {
|
|
6772
6812
|
modifiers.push('&let');
|
|
6773
|
-
letBindings = [];
|
|
6774
6813
|
var _loop_2 = function () {
|
|
6775
6814
|
var letNode = this_2.parseLet(token, true);
|
|
6776
|
-
var existingBoundNames = letBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b
|
|
6777
|
-
var newBoundNames = Object.keys(getAllBindingTargetNames(letNode
|
|
6815
|
+
var existingBoundNames = letBindings.flatMap(function (b) { return Object.keys(getAllBindingTargetNames(b[1][0])); });
|
|
6816
|
+
var newBoundNames = Object.keys(getAllBindingTargetNames(letNode[1][1][1][0]));
|
|
6778
6817
|
if (newBoundNames.some(function (n) { return existingBoundNames.includes(n); })) {
|
|
6779
|
-
throw new LitsError('Duplicate binding', letNode
|
|
6818
|
+
throw new LitsError('Duplicate binding', letNode[1][1][2]);
|
|
6780
6819
|
}
|
|
6781
|
-
letBindings.push(letNode
|
|
6820
|
+
letBindings.push(letNode[1][1]);
|
|
6782
6821
|
token = this_2.peek();
|
|
6783
6822
|
if (!isSymbolToken(token, 'do') && !isReservedSymbolToken(this_2.peek(), 'each') && !isOperatorToken(token, ',')) {
|
|
6784
6823
|
throw new LitsError('Expected do, each or comma', token[2]);
|
|
@@ -6824,31 +6863,21 @@ var Lits = (function (exports) {
|
|
|
6824
6863
|
if (!isSymbolToken(token, 'do') && !isReservedSymbolToken(this.peek(), 'each')) {
|
|
6825
6864
|
throw new LitsError('Expected do or each', token[2]);
|
|
6826
6865
|
}
|
|
6827
|
-
return
|
|
6828
|
-
b: bindingNode,
|
|
6829
|
-
m: modifiers,
|
|
6830
|
-
l: letBindings,
|
|
6831
|
-
wn: whenNode,
|
|
6832
|
-
we: whileNode,
|
|
6833
|
-
};
|
|
6866
|
+
return [bindingNode, letBindings, whenNode, whileNode];
|
|
6834
6867
|
};
|
|
6835
6868
|
Parser.prototype.parseBinding = function () {
|
|
6836
6869
|
var firstToken = asSymbolToken(this.peek());
|
|
6837
|
-
var name =
|
|
6838
|
-
this.advance();
|
|
6870
|
+
var name = asUserDefinedSymbolNode(this.parseSymbol());
|
|
6839
6871
|
assertReservedSymbolToken(this.peek(), 'in');
|
|
6840
6872
|
this.advance();
|
|
6841
6873
|
var value = this.parseExpression();
|
|
6842
|
-
var node =
|
|
6843
|
-
|
|
6844
|
-
|
|
6845
|
-
|
|
6846
|
-
|
|
6847
|
-
|
|
6848
|
-
|
|
6849
|
-
value: value,
|
|
6850
|
-
sourceCodeInfo: firstToken[2],
|
|
6851
|
-
};
|
|
6874
|
+
var node = withSourceCodeInfo([
|
|
6875
|
+
NodeTypes.Binding,
|
|
6876
|
+
[
|
|
6877
|
+
withSourceCodeInfo([bindingTargetTypes.symbol, [name, undefined]], firstToken[2]),
|
|
6878
|
+
value,
|
|
6879
|
+
],
|
|
6880
|
+
], firstToken[2]);
|
|
6852
6881
|
return node;
|
|
6853
6882
|
};
|
|
6854
6883
|
Parser.prototype.parseIfOrUnless = function (token) {
|
|
@@ -6871,12 +6900,7 @@ var Lits = (function (exports) {
|
|
|
6871
6900
|
}
|
|
6872
6901
|
var thenExpression = thenExpressions.length === 1
|
|
6873
6902
|
? thenExpressions[0]
|
|
6874
|
-
:
|
|
6875
|
-
type: 'SpecialExpression',
|
|
6876
|
-
name: 'do',
|
|
6877
|
-
params: thenExpressions,
|
|
6878
|
-
sourceCodeInfo: token[2],
|
|
6879
|
-
};
|
|
6903
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, thenExpressions]], token[2]);
|
|
6880
6904
|
var elseExpression;
|
|
6881
6905
|
if (isReservedSymbolToken(this.peek(), 'else')) {
|
|
6882
6906
|
this.advance();
|
|
@@ -6892,25 +6916,13 @@ var Lits = (function (exports) {
|
|
|
6892
6916
|
}
|
|
6893
6917
|
elseExpression = elseExpressions.length === 1
|
|
6894
6918
|
? elseExpressions[0]
|
|
6895
|
-
:
|
|
6896
|
-
type: 'SpecialExpression',
|
|
6897
|
-
name: 'do',
|
|
6898
|
-
params: elseExpressions,
|
|
6899
|
-
sourceCodeInfo: token[2],
|
|
6900
|
-
};
|
|
6919
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, elseExpressions]], token[2]);
|
|
6901
6920
|
}
|
|
6902
6921
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6903
6922
|
this.advance();
|
|
6904
|
-
|
|
6905
|
-
|
|
6906
|
-
|
|
6907
|
-
}
|
|
6908
|
-
return {
|
|
6909
|
-
type: 'SpecialExpression',
|
|
6910
|
-
name: isUnless ? 'unless' : 'if',
|
|
6911
|
-
params: params,
|
|
6912
|
-
sourceCodeInfo: token[2],
|
|
6913
|
-
};
|
|
6923
|
+
return isUnless
|
|
6924
|
+
? withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.unless, [condition, thenExpression, elseExpression]]], token[2])
|
|
6925
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.if, [condition, thenExpression, elseExpression]]], token[2]);
|
|
6914
6926
|
};
|
|
6915
6927
|
Parser.prototype.parseCond = function (token) {
|
|
6916
6928
|
this.advance();
|
|
@@ -6918,7 +6930,7 @@ var Lits = (function (exports) {
|
|
|
6918
6930
|
while (!this.isAtEnd() && !isReservedSymbolToken(this.peek(), 'end')) {
|
|
6919
6931
|
assertReservedSymbolToken(this.peek(), 'case');
|
|
6920
6932
|
this.advance();
|
|
6921
|
-
|
|
6933
|
+
var caseExpression = this.parseExpression();
|
|
6922
6934
|
assertReservedSymbolToken(this.peek(), 'then');
|
|
6923
6935
|
this.advance();
|
|
6924
6936
|
var expressions = [];
|
|
@@ -6933,14 +6945,10 @@ var Lits = (function (exports) {
|
|
|
6933
6945
|
throw new LitsError('Expected ;', this.peek()[2]);
|
|
6934
6946
|
}
|
|
6935
6947
|
}
|
|
6936
|
-
|
|
6948
|
+
var thenExpression = expressions.length === 1
|
|
6937
6949
|
? expressions[0]
|
|
6938
|
-
:
|
|
6939
|
-
|
|
6940
|
-
name: 'do',
|
|
6941
|
-
params: expressions,
|
|
6942
|
-
sourceCodeInfo: token[2],
|
|
6943
|
-
});
|
|
6950
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, expressions]], token[2]);
|
|
6951
|
+
params.push([caseExpression, thenExpression]);
|
|
6944
6952
|
if (isReservedSymbolToken(this.peek(), 'end')) {
|
|
6945
6953
|
break;
|
|
6946
6954
|
}
|
|
@@ -6948,20 +6956,16 @@ var Lits = (function (exports) {
|
|
|
6948
6956
|
}
|
|
6949
6957
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6950
6958
|
this.advance();
|
|
6951
|
-
return
|
|
6952
|
-
type: 'SpecialExpression',
|
|
6953
|
-
name: 'cond',
|
|
6954
|
-
params: params,
|
|
6955
|
-
sourceCodeInfo: token[2],
|
|
6956
|
-
};
|
|
6959
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.cond, params]], token[2]);
|
|
6957
6960
|
};
|
|
6958
6961
|
Parser.prototype.parseSwitch = function (token) {
|
|
6959
6962
|
this.advance();
|
|
6960
|
-
var
|
|
6963
|
+
var valueExpression = this.parseExpression();
|
|
6964
|
+
var params = [];
|
|
6961
6965
|
while (!this.isAtEnd() && !isReservedSymbolToken(this.peek(), 'end')) {
|
|
6962
6966
|
assertReservedSymbolToken(this.peek(), 'case');
|
|
6963
6967
|
this.advance();
|
|
6964
|
-
|
|
6968
|
+
var caseExpression = this.parseExpression();
|
|
6965
6969
|
assertReservedSymbolToken(this.peek(), 'then');
|
|
6966
6970
|
this.advance();
|
|
6967
6971
|
var expressions = [];
|
|
@@ -6976,14 +6980,10 @@ var Lits = (function (exports) {
|
|
|
6976
6980
|
throw new LitsError('Expected ;', this.peek()[2]);
|
|
6977
6981
|
}
|
|
6978
6982
|
}
|
|
6979
|
-
|
|
6983
|
+
var thenExpression = expressions.length === 1
|
|
6980
6984
|
? expressions[0]
|
|
6981
|
-
:
|
|
6982
|
-
|
|
6983
|
-
name: 'do',
|
|
6984
|
-
params: expressions,
|
|
6985
|
-
sourceCodeInfo: token[2],
|
|
6986
|
-
});
|
|
6985
|
+
: withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.do, expressions]], token[2]);
|
|
6986
|
+
params.push([caseExpression, thenExpression]);
|
|
6987
6987
|
if (isReservedSymbolToken(this.peek(), 'end')) {
|
|
6988
6988
|
break;
|
|
6989
6989
|
}
|
|
@@ -6991,12 +6991,7 @@ var Lits = (function (exports) {
|
|
|
6991
6991
|
}
|
|
6992
6992
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
6993
6993
|
this.advance();
|
|
6994
|
-
return
|
|
6995
|
-
type: 'SpecialExpression',
|
|
6996
|
-
name: 'switch',
|
|
6997
|
-
params: params,
|
|
6998
|
-
sourceCodeInfo: token[2],
|
|
6999
|
-
};
|
|
6994
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.switch, valueExpression, params]], token[2]);
|
|
7000
6995
|
};
|
|
7001
6996
|
Parser.prototype.parseFunction = function (token) {
|
|
7002
6997
|
this.advance();
|
|
@@ -7015,17 +7010,10 @@ var Lits = (function (exports) {
|
|
|
7015
7010
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
7016
7011
|
this.advance();
|
|
7017
7012
|
assertOperatorToken(this.peek(), ';');
|
|
7018
|
-
return
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
-
|
|
7022
|
-
params: [],
|
|
7023
|
-
function: {
|
|
7024
|
-
arguments: functionArguments,
|
|
7025
|
-
body: body,
|
|
7026
|
-
},
|
|
7027
|
-
sourceCodeInfo: token[2],
|
|
7028
|
-
};
|
|
7013
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes.function, symbol, [
|
|
7014
|
+
functionArguments,
|
|
7015
|
+
body,
|
|
7016
|
+
]]], token[2]);
|
|
7029
7017
|
};
|
|
7030
7018
|
Parser.prototype.isAtEnd = function () {
|
|
7031
7019
|
return this.parseState.position >= this.tokenStream.tokens.length;
|
|
@@ -7047,7 +7035,7 @@ var Lits = (function (exports) {
|
|
|
7047
7035
|
this.advance();
|
|
7048
7036
|
if (isSymbolToken(this.peek(), 'let')) {
|
|
7049
7037
|
var letNode = this.parseLet(asSymbolToken(this.peek()));
|
|
7050
|
-
return
|
|
7038
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_def'], letNode[1][1]]], token[2]);
|
|
7051
7039
|
}
|
|
7052
7040
|
else if (isReservedSymbolToken(this.peek(), 'function')) {
|
|
7053
7041
|
this.advance();
|
|
@@ -7065,71 +7053,57 @@ var Lits = (function (exports) {
|
|
|
7065
7053
|
}
|
|
7066
7054
|
assertReservedSymbolToken(this.peek(), 'end');
|
|
7067
7055
|
this.advance();
|
|
7068
|
-
return
|
|
7069
|
-
|
|
7070
|
-
|
|
7071
|
-
|
|
7072
|
-
params: [],
|
|
7073
|
-
function: {
|
|
7074
|
-
arguments: functionArguments,
|
|
7075
|
-
body: body,
|
|
7076
|
-
},
|
|
7077
|
-
sourceCodeInfo: token[2],
|
|
7078
|
-
};
|
|
7056
|
+
return withSourceCodeInfo([NodeTypes.SpecialExpression, [specialExpressionTypes['0_defn'], symbol, [
|
|
7057
|
+
functionArguments,
|
|
7058
|
+
body,
|
|
7059
|
+
]]], token[2]);
|
|
7079
7060
|
}
|
|
7080
7061
|
else {
|
|
7081
7062
|
throw new LitsError('Expected let or function', this.peek()[2]);
|
|
7082
7063
|
}
|
|
7083
7064
|
};
|
|
7065
|
+
Parser.prototype.stringToSymbolNode = function (value, sourceCodeInfo) {
|
|
7066
|
+
if (specialExpressionTypes[value] !== undefined && value !== 'fn' && value !== 'def' && value !== 'defn') {
|
|
7067
|
+
return withSourceCodeInfo([NodeTypes.SpecialBuiltinSymbol, specialExpressionTypes[value]], sourceCodeInfo);
|
|
7068
|
+
}
|
|
7069
|
+
if (normalExpressionTypes[value] !== undefined) {
|
|
7070
|
+
return withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes[value]], sourceCodeInfo);
|
|
7071
|
+
}
|
|
7072
|
+
return withSourceCodeInfo([NodeTypes.UserDefinedSymbol, value], sourceCodeInfo);
|
|
7073
|
+
};
|
|
7074
|
+
Parser.prototype.stringFromQuotedSymbol = function (value) {
|
|
7075
|
+
return value.substring(1, value.length - 1)
|
|
7076
|
+
.replace(/(\\{2})|(\\')|\\(.)/g, function (_, backslash, singleQuote, normalChar) {
|
|
7077
|
+
if (backslash) {
|
|
7078
|
+
return '\\';
|
|
7079
|
+
}
|
|
7080
|
+
if (singleQuote) {
|
|
7081
|
+
return '\'';
|
|
7082
|
+
}
|
|
7083
|
+
return "\\".concat(normalChar);
|
|
7084
|
+
});
|
|
7085
|
+
};
|
|
7084
7086
|
Parser.prototype.parseSymbol = function () {
|
|
7085
7087
|
var token = this.peek();
|
|
7086
7088
|
this.advance();
|
|
7087
7089
|
if (!isSymbolToken(token)) {
|
|
7088
7090
|
throw new LitsError("Expected symbol token, got ".concat(token[0]), token[2]);
|
|
7089
7091
|
}
|
|
7090
|
-
if (token[1][0]
|
|
7091
|
-
return
|
|
7092
|
-
type: 'Symbol',
|
|
7093
|
-
value: token[1],
|
|
7094
|
-
sourceCodeInfo: token[2],
|
|
7095
|
-
};
|
|
7092
|
+
if (token[1][0] === '\'') {
|
|
7093
|
+
return this.stringToSymbolNode(this.stringFromQuotedSymbol(token[1]), token[2]);
|
|
7096
7094
|
}
|
|
7097
7095
|
else {
|
|
7098
|
-
|
|
7099
|
-
.replace(/(\\{2})|(\\')|\\(.)/g, function (_, backslash, singleQuote, normalChar) {
|
|
7100
|
-
if (backslash) {
|
|
7101
|
-
return '\\';
|
|
7102
|
-
}
|
|
7103
|
-
if (singleQuote) {
|
|
7104
|
-
return '\'';
|
|
7105
|
-
}
|
|
7106
|
-
return "\\".concat(normalChar);
|
|
7107
|
-
});
|
|
7108
|
-
return {
|
|
7109
|
-
type: 'Symbol',
|
|
7110
|
-
value: value,
|
|
7111
|
-
sourceCodeInfo: token[2],
|
|
7112
|
-
};
|
|
7096
|
+
return this.stringToSymbolNode(token[1], token[2]);
|
|
7113
7097
|
}
|
|
7114
7098
|
};
|
|
7115
7099
|
Parser.prototype.parseReservedSymbol = function () {
|
|
7116
|
-
var token = this.peek();
|
|
7100
|
+
var token = asReservedSymbolToken(this.peek());
|
|
7117
7101
|
this.advance();
|
|
7118
|
-
|
|
7119
|
-
|
|
7120
|
-
|
|
7121
|
-
return {
|
|
7122
|
-
type: 'Number',
|
|
7123
|
-
value: numberReservedSymbolRecord[symbol],
|
|
7124
|
-
sourceCodeInfo: token[2],
|
|
7125
|
-
};
|
|
7126
|
-
}
|
|
7102
|
+
var symbol = token[1];
|
|
7103
|
+
if (isNumberReservedSymbol(symbol)) {
|
|
7104
|
+
return withSourceCodeInfo([NodeTypes.Number, numberReservedSymbolRecord[symbol]], token[2]);
|
|
7127
7105
|
}
|
|
7128
|
-
return
|
|
7129
|
-
type: 'ReservedSymbol',
|
|
7130
|
-
value: token[1],
|
|
7131
|
-
sourceCodeInfo: token[2],
|
|
7132
|
-
};
|
|
7106
|
+
return withSourceCodeInfo([NodeTypes.ReservedSymbol, token[1]], token[2]);
|
|
7133
7107
|
};
|
|
7134
7108
|
Parser.prototype.parseNumber = function () {
|
|
7135
7109
|
var token = this.peek();
|
|
@@ -7137,11 +7111,7 @@ var Lits = (function (exports) {
|
|
|
7137
7111
|
var value = token[1];
|
|
7138
7112
|
var negative = value[0] === '-';
|
|
7139
7113
|
var numberString = (negative ? value.substring(1) : value).replace(/_/g, '');
|
|
7140
|
-
return
|
|
7141
|
-
type: 'Number',
|
|
7142
|
-
value: negative ? -Number(numberString) : Number(numberString),
|
|
7143
|
-
sourceCodeInfo: token[2],
|
|
7144
|
-
};
|
|
7114
|
+
return withSourceCodeInfo([NodeTypes.Number, negative ? -Number(numberString) : Number(numberString)], token[2]);
|
|
7145
7115
|
};
|
|
7146
7116
|
Parser.prototype.parseString = function () {
|
|
7147
7117
|
var token = this.peek();
|
|
@@ -7173,11 +7143,7 @@ var Lits = (function (exports) {
|
|
|
7173
7143
|
}
|
|
7174
7144
|
return normalChar;
|
|
7175
7145
|
});
|
|
7176
|
-
return
|
|
7177
|
-
type: 'String',
|
|
7178
|
-
value: value,
|
|
7179
|
-
sourceCodeInfo: token[2],
|
|
7180
|
-
};
|
|
7146
|
+
return withSourceCodeInfo([NodeTypes.String, value], token[2]);
|
|
7181
7147
|
};
|
|
7182
7148
|
Parser.prototype.parseRegexpShorthand = function () {
|
|
7183
7149
|
var token = this.peek();
|
|
@@ -7185,22 +7151,15 @@ var Lits = (function (exports) {
|
|
|
7185
7151
|
var endStringPosition = token[1].lastIndexOf('"');
|
|
7186
7152
|
var regexpString = token[1].substring(2, endStringPosition);
|
|
7187
7153
|
var optionsString = token[1].substring(endStringPosition + 1);
|
|
7188
|
-
var stringNode =
|
|
7189
|
-
|
|
7190
|
-
|
|
7191
|
-
|
|
7192
|
-
|
|
7193
|
-
|
|
7194
|
-
|
|
7195
|
-
|
|
7196
|
-
|
|
7197
|
-
};
|
|
7198
|
-
var node = {
|
|
7199
|
-
type: 'NormalExpression',
|
|
7200
|
-
name: 'regexp',
|
|
7201
|
-
params: [stringNode, optionsNode],
|
|
7202
|
-
sourceCodeInfo: token[2],
|
|
7203
|
-
};
|
|
7154
|
+
var stringNode = withSourceCodeInfo([NodeTypes.String, regexpString], token[2]);
|
|
7155
|
+
var optionsNode = withSourceCodeInfo([NodeTypes.String, optionsString], token[2]);
|
|
7156
|
+
var node = withSourceCodeInfo([
|
|
7157
|
+
NodeTypes.NormalExpression,
|
|
7158
|
+
[
|
|
7159
|
+
withSourceCodeInfo([NodeTypes.NormalBuiltinSymbol, normalExpressionTypes.regexp], token[2]),
|
|
7160
|
+
[stringNode, optionsNode],
|
|
7161
|
+
],
|
|
7162
|
+
], token[2]);
|
|
7204
7163
|
return node;
|
|
7205
7164
|
};
|
|
7206
7165
|
return Parser;
|
|
@@ -7317,7 +7276,7 @@ var Lits = (function (exports) {
|
|
|
7317
7276
|
if (params === void 0) { params = {}; }
|
|
7318
7277
|
var ast = typeof programOrAst === 'string' ? this.generateAst(programOrAst, params) : programOrAst;
|
|
7319
7278
|
var contextStack = createContextStack(params);
|
|
7320
|
-
return getUndefinedSymbols(ast, contextStack, builtin,
|
|
7279
|
+
return getUndefinedSymbols(ast, contextStack, builtin, evaluateNode);
|
|
7321
7280
|
};
|
|
7322
7281
|
Lits.prototype.tokenize = function (program, tokenizeParams) {
|
|
7323
7282
|
if (tokenizeParams === void 0) { tokenizeParams = {}; }
|
|
@@ -7562,28 +7521,6 @@ var Lits = (function (exports) {
|
|
|
7562
7521
|
'replace',
|
|
7563
7522
|
'replace-all',
|
|
7564
7523
|
],
|
|
7565
|
-
specialExpressions: [
|
|
7566
|
-
'&&',
|
|
7567
|
-
'||',
|
|
7568
|
-
'def',
|
|
7569
|
-
'let',
|
|
7570
|
-
'fn',
|
|
7571
|
-
'defn',
|
|
7572
|
-
'function',
|
|
7573
|
-
'try',
|
|
7574
|
-
'throw',
|
|
7575
|
-
'if',
|
|
7576
|
-
'unless',
|
|
7577
|
-
'cond',
|
|
7578
|
-
'switch',
|
|
7579
|
-
'do',
|
|
7580
|
-
'recur',
|
|
7581
|
-
'loop',
|
|
7582
|
-
'doseq',
|
|
7583
|
-
'for',
|
|
7584
|
-
'defined?',
|
|
7585
|
-
'??',
|
|
7586
|
-
],
|
|
7587
7524
|
string: [
|
|
7588
7525
|
'string-repeat',
|
|
7589
7526
|
'str',
|
|
@@ -13219,8 +13156,7 @@ var Lits = (function (exports) {
|
|
|
13219
13156
|
var _b;
|
|
13220
13157
|
var _c = __read(_a, 2), key = _c[0], obj = _c[1];
|
|
13221
13158
|
if (isFunctionReference(obj)) {
|
|
13222
|
-
var
|
|
13223
|
-
var paramCount = (_b = specialExpressions[key]) === null || _b === void 0 ? void 0 : _b.paramCount;
|
|
13159
|
+
var paramCount = (_b = specialExpressions[specialExpressionTypes[key]]) === null || _b === void 0 ? void 0 : _b.paramCount;
|
|
13224
13160
|
if (paramCount && canBeOperator(paramCount)) {
|
|
13225
13161
|
obj._isOperator = true;
|
|
13226
13162
|
}
|