@mojir/lits 2.0.8 → 2.0.10
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/dist/cli/cli.js +130 -177
- package/dist/cli/src/builtin/index.d.ts +3 -0
- package/dist/cli/src/builtin/interface.d.ts +4 -2
- package/dist/cli/src/builtin/specialExpressions/commonParser.d.ts +4 -0
- package/dist/cli/src/parser/AlgebraicParser.d.ts +2 -1
- package/dist/index.esm.js +130 -177
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +130 -177
- package/dist/index.js.map +1 -1
- package/dist/lits.iife.js +130 -177
- package/dist/lits.iife.js.map +1 -1
- package/dist/src/builtin/index.d.ts +3 -0
- package/dist/src/builtin/interface.d.ts +4 -2
- package/dist/src/builtin/specialExpressions/commonParser.d.ts +4 -0
- package/dist/src/parser/AlgebraicParser.d.ts +2 -1
- package/dist/testFramework.esm.js +130 -177
- package/dist/testFramework.esm.js.map +1 -1
- package/dist/testFramework.js +130 -177
- package/dist/testFramework.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/cli.js
CHANGED
|
@@ -92,7 +92,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
92
92
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
-
var version = "2.0.
|
|
95
|
+
var version = "2.0.10";
|
|
96
96
|
|
|
97
97
|
var AstNodeType;
|
|
98
98
|
(function (AstNodeType) {
|
|
@@ -4344,6 +4344,7 @@ var andSpecialExpression = {
|
|
|
4344
4344
|
};
|
|
4345
4345
|
return node;
|
|
4346
4346
|
},
|
|
4347
|
+
validateParameterCount: function () { return undefined; },
|
|
4347
4348
|
evaluate: function (node, contextStack, _a) {
|
|
4348
4349
|
var e_1, _b;
|
|
4349
4350
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -4371,42 +4372,30 @@ var andSpecialExpression = {
|
|
|
4371
4372
|
},
|
|
4372
4373
|
};
|
|
4373
4374
|
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
var parseToken = _a.parseToken;
|
|
4377
|
-
var node = {
|
|
4378
|
-
t: AstNodeType.SpecialExpression,
|
|
4379
|
-
n: 'comment',
|
|
4380
|
-
p: [],
|
|
4381
|
-
token: undefined,
|
|
4382
|
-
};
|
|
4383
|
-
var tkn = asToken(tokenStream.tokens[parseState.position]);
|
|
4384
|
-
while (!isRParenToken(tkn)) {
|
|
4385
|
-
node.p.push(parseToken(tokenStream, parseState));
|
|
4386
|
-
tkn = asToken(tokenStream.tokens[parseState.position]);
|
|
4387
|
-
}
|
|
4388
|
-
parseState.position += 1;
|
|
4389
|
-
node.token = getTokenDebugData(firstToken) && firstToken;
|
|
4390
|
-
return node;
|
|
4391
|
-
},
|
|
4392
|
-
evaluate: function () { return null; },
|
|
4393
|
-
findUnresolvedIdentifiers: function () { return new Set(); },
|
|
4394
|
-
};
|
|
4395
|
-
|
|
4396
|
-
var condSpecialExpression = {
|
|
4397
|
-
parse: function (tokenStream, parseState, firstToken, _a) {
|
|
4375
|
+
function getCommonParser(name) {
|
|
4376
|
+
return function (tokenStream, parseState, firstToken, _a) {
|
|
4398
4377
|
var parseTokensUntilClosingBracket = _a.parseTokensUntilClosingBracket;
|
|
4399
4378
|
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
4400
4379
|
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
4401
|
-
|
|
4380
|
+
return {
|
|
4402
4381
|
t: AstNodeType.SpecialExpression,
|
|
4403
|
-
n:
|
|
4382
|
+
n: name,
|
|
4404
4383
|
p: params,
|
|
4405
4384
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
4406
4385
|
};
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4386
|
+
};
|
|
4387
|
+
}
|
|
4388
|
+
|
|
4389
|
+
var commentSpecialExpression = {
|
|
4390
|
+
parse: getCommonParser('comment'),
|
|
4391
|
+
validateParameterCount: function () { return undefined; },
|
|
4392
|
+
evaluate: function () { return null; },
|
|
4393
|
+
findUnresolvedIdentifiers: function () { return new Set(); },
|
|
4394
|
+
};
|
|
4395
|
+
|
|
4396
|
+
var condSpecialExpression = {
|
|
4397
|
+
parse: getCommonParser('cond'),
|
|
4398
|
+
validateParameterCount: function (node) { return assertEvenNumberOfParams(node); },
|
|
4410
4399
|
evaluate: function (node, contextStack, _a) {
|
|
4411
4400
|
var e_1, _b;
|
|
4412
4401
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -4435,19 +4424,8 @@ var condSpecialExpression = {
|
|
|
4435
4424
|
};
|
|
4436
4425
|
|
|
4437
4426
|
var declaredSpecialExpression = {
|
|
4438
|
-
parse:
|
|
4439
|
-
|
|
4440
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
4441
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
4442
|
-
var node = {
|
|
4443
|
-
t: AstNodeType.SpecialExpression,
|
|
4444
|
-
n: 'declared?',
|
|
4445
|
-
p: params,
|
|
4446
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
4447
|
-
};
|
|
4448
|
-
assertNumberOfParams(1, node);
|
|
4449
|
-
return node;
|
|
4450
|
-
},
|
|
4427
|
+
parse: getCommonParser('declared?'),
|
|
4428
|
+
validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
|
|
4451
4429
|
evaluate: function (node, contextStack) {
|
|
4452
4430
|
var lookUpResult = contextStack.lookUp(node.p[0]);
|
|
4453
4431
|
return lookUpResult !== null;
|
|
@@ -4493,9 +4471,9 @@ var defSpecialExpression = {
|
|
|
4493
4471
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
4494
4472
|
};
|
|
4495
4473
|
assertSymbolNode(node.p[0], (_b = getTokenDebugData(node.token)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
|
|
4496
|
-
assertNumberOfParams(2, node);
|
|
4497
4474
|
return node;
|
|
4498
4475
|
},
|
|
4476
|
+
validateParameterCount: function (node) { return assertNumberOfParams(2, node); },
|
|
4499
4477
|
evaluate: function (node, contextStack, _a) {
|
|
4500
4478
|
var _b;
|
|
4501
4479
|
var evaluateAstNode = _a.evaluateAstNode, builtin = _a.builtin;
|
|
@@ -4531,9 +4509,9 @@ var defsSpecialExpression = {
|
|
|
4531
4509
|
p: params,
|
|
4532
4510
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
4533
4511
|
};
|
|
4534
|
-
assertNumberOfParams(2, node);
|
|
4535
4512
|
return node;
|
|
4536
4513
|
},
|
|
4514
|
+
validateParameterCount: function (node) { return assertNumberOfParams(2, node); },
|
|
4537
4515
|
evaluate: function (node, contextStack, _a) {
|
|
4538
4516
|
var _b, _c;
|
|
4539
4517
|
var evaluateAstNode = _a.evaluateAstNode, builtin = _a.builtin;
|
|
@@ -4561,23 +4539,8 @@ var defsSpecialExpression = {
|
|
|
4561
4539
|
};
|
|
4562
4540
|
|
|
4563
4541
|
var doSpecialExpression = {
|
|
4564
|
-
parse:
|
|
4565
|
-
|
|
4566
|
-
var node = {
|
|
4567
|
-
t: AstNodeType.SpecialExpression,
|
|
4568
|
-
n: 'do',
|
|
4569
|
-
p: [],
|
|
4570
|
-
token: undefined,
|
|
4571
|
-
};
|
|
4572
|
-
var tkn = asToken(tokenStream.tokens[parseState.position]);
|
|
4573
|
-
while (!isRParenToken(tkn)) {
|
|
4574
|
-
node.p.push(parseToken(tokenStream, parseState));
|
|
4575
|
-
tkn = asToken(tokenStream.tokens[parseState.position]);
|
|
4576
|
-
}
|
|
4577
|
-
parseState.position += 1;
|
|
4578
|
-
node.token = getTokenDebugData(firstToken) && firstToken;
|
|
4579
|
-
return node;
|
|
4580
|
-
},
|
|
4542
|
+
parse: getCommonParser('do'),
|
|
4543
|
+
validateParameterCount: function () { return undefined; },
|
|
4581
4544
|
evaluate: function (node, contextStack, _a) {
|
|
4582
4545
|
var e_1, _b;
|
|
4583
4546
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -4654,6 +4617,7 @@ var defnSpecialExpression = {
|
|
|
4654
4617
|
};
|
|
4655
4618
|
return node;
|
|
4656
4619
|
},
|
|
4620
|
+
validateParameterCount: function () { return undefined; },
|
|
4657
4621
|
evaluate: function (node, contextStack, _a) {
|
|
4658
4622
|
var _b;
|
|
4659
4623
|
var _c, _d;
|
|
@@ -4695,6 +4659,7 @@ var defnsSpecialExpression = {
|
|
|
4695
4659
|
};
|
|
4696
4660
|
return node;
|
|
4697
4661
|
},
|
|
4662
|
+
validateParameterCount: function () { return undefined; },
|
|
4698
4663
|
evaluate: function (node, contextStack, _a) {
|
|
4699
4664
|
var _b;
|
|
4700
4665
|
var _c, _d;
|
|
@@ -4738,6 +4703,7 @@ var fnSpecialExpression = {
|
|
|
4738
4703
|
};
|
|
4739
4704
|
return node;
|
|
4740
4705
|
},
|
|
4706
|
+
validateParameterCount: function () { return undefined; },
|
|
4741
4707
|
evaluate: function (node, contextStack, _a) {
|
|
4742
4708
|
var _b;
|
|
4743
4709
|
var _c;
|
|
@@ -4969,19 +4935,8 @@ function parseFunctionArguments(tokenStream, parseState, parsers) {
|
|
|
4969
4935
|
}
|
|
4970
4936
|
|
|
4971
4937
|
var ifSpecialExpression = {
|
|
4972
|
-
parse:
|
|
4973
|
-
|
|
4974
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
4975
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
4976
|
-
var node = {
|
|
4977
|
-
t: AstNodeType.SpecialExpression,
|
|
4978
|
-
n: 'if',
|
|
4979
|
-
p: params,
|
|
4980
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
4981
|
-
};
|
|
4982
|
-
assertNumberOfParams({ min: 2, max: 3 }, node);
|
|
4983
|
-
return node;
|
|
4984
|
-
},
|
|
4938
|
+
parse: getCommonParser('if'),
|
|
4939
|
+
validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
|
|
4985
4940
|
evaluate: function (node, contextStack, _a) {
|
|
4986
4941
|
var _b;
|
|
4987
4942
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5020,9 +4975,9 @@ var ifLetSpecialExpression = {
|
|
|
5020
4975
|
p: params,
|
|
5021
4976
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
5022
4977
|
};
|
|
5023
|
-
assertNumberOfParams({ min: 1, max: 2 }, node);
|
|
5024
4978
|
return node;
|
|
5025
4979
|
},
|
|
4980
|
+
validateParameterCount: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
|
|
5026
4981
|
evaluate: function (node, contextStack, _a) {
|
|
5027
4982
|
var _b;
|
|
5028
4983
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5052,19 +5007,8 @@ var ifLetSpecialExpression = {
|
|
|
5052
5007
|
};
|
|
5053
5008
|
|
|
5054
5009
|
var ifNotSpecialExpression = {
|
|
5055
|
-
parse:
|
|
5056
|
-
|
|
5057
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
5058
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
5059
|
-
var node = {
|
|
5060
|
-
t: AstNodeType.SpecialExpression,
|
|
5061
|
-
n: 'if-not',
|
|
5062
|
-
p: params,
|
|
5063
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
5064
|
-
};
|
|
5065
|
-
assertNumberOfParams({ min: 2, max: 3 }, node);
|
|
5066
|
-
return node;
|
|
5067
|
-
},
|
|
5010
|
+
parse: getCommonParser('if-not'),
|
|
5011
|
+
validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
|
|
5068
5012
|
evaluate: function (node, contextStack, _a) {
|
|
5069
5013
|
var _b;
|
|
5070
5014
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5101,6 +5045,7 @@ var letSpecialExpression = {
|
|
|
5101
5045
|
};
|
|
5102
5046
|
return node;
|
|
5103
5047
|
},
|
|
5048
|
+
validateParameterCount: function () { return undefined; },
|
|
5104
5049
|
evaluate: function (node, contextStack, _a) {
|
|
5105
5050
|
var e_1, _b, e_2, _c;
|
|
5106
5051
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5172,6 +5117,7 @@ var loopSpecialExpression = {
|
|
|
5172
5117
|
};
|
|
5173
5118
|
return node;
|
|
5174
5119
|
},
|
|
5120
|
+
validateParameterCount: function () { return undefined; },
|
|
5175
5121
|
evaluate: function (node, contextStack, _a) {
|
|
5176
5122
|
var _b;
|
|
5177
5123
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5435,9 +5381,9 @@ var forSpecialExpression = {
|
|
|
5435
5381
|
p: params,
|
|
5436
5382
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
5437
5383
|
};
|
|
5438
|
-
assertNumberOfParams(1, node);
|
|
5439
5384
|
return node;
|
|
5440
5385
|
},
|
|
5386
|
+
validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
|
|
5441
5387
|
evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.evaluateAstNode); },
|
|
5442
5388
|
findUnresolvedIdentifiers: function (node, contextStack, _a) {
|
|
5443
5389
|
var findUnresolvedIdentifiers = _a.findUnresolvedIdentifiers, builtin = _a.builtin;
|
|
@@ -5457,9 +5403,9 @@ var doseqSpecialExpression = {
|
|
|
5457
5403
|
p: params,
|
|
5458
5404
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
5459
5405
|
};
|
|
5460
|
-
assertNumberOfParams(1, node);
|
|
5461
5406
|
return node;
|
|
5462
5407
|
},
|
|
5408
|
+
validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
|
|
5463
5409
|
evaluate: function (node, contextStack, helpers) {
|
|
5464
5410
|
evaluateLoop(false, node, contextStack, helpers.evaluateAstNode);
|
|
5465
5411
|
return null;
|
|
@@ -5471,18 +5417,8 @@ var doseqSpecialExpression = {
|
|
|
5471
5417
|
};
|
|
5472
5418
|
|
|
5473
5419
|
var orSpecialExpression = {
|
|
5474
|
-
parse:
|
|
5475
|
-
|
|
5476
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
5477
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
5478
|
-
var node = {
|
|
5479
|
-
t: AstNodeType.SpecialExpression,
|
|
5480
|
-
n: 'or',
|
|
5481
|
-
p: params,
|
|
5482
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
5483
|
-
};
|
|
5484
|
-
return node;
|
|
5485
|
-
},
|
|
5420
|
+
parse: getCommonParser('or'),
|
|
5421
|
+
validateParameterCount: function () { return undefined; },
|
|
5486
5422
|
evaluate: function (node, contextStack, _a) {
|
|
5487
5423
|
var e_1, _b;
|
|
5488
5424
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5511,19 +5447,8 @@ var orSpecialExpression = {
|
|
|
5511
5447
|
};
|
|
5512
5448
|
|
|
5513
5449
|
var qqSpecialExpression = {
|
|
5514
|
-
parse:
|
|
5515
|
-
|
|
5516
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
5517
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
5518
|
-
var node = {
|
|
5519
|
-
t: AstNodeType.SpecialExpression,
|
|
5520
|
-
n: '??',
|
|
5521
|
-
p: params,
|
|
5522
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
5523
|
-
};
|
|
5524
|
-
assertNumberOfParams({ min: 1, max: 2 }, node);
|
|
5525
|
-
return node;
|
|
5526
|
-
},
|
|
5450
|
+
parse: getCommonParser('??'),
|
|
5451
|
+
validateParameterCount: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
|
|
5527
5452
|
evaluate: function (node, contextStack, _a) {
|
|
5528
5453
|
var _b;
|
|
5529
5454
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5555,6 +5480,7 @@ var recurSpecialExpression = {
|
|
|
5555
5480
|
};
|
|
5556
5481
|
return node;
|
|
5557
5482
|
},
|
|
5483
|
+
validateParameterCount: function () { return undefined; },
|
|
5558
5484
|
evaluate: function (node, contextStack, _a) {
|
|
5559
5485
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
5560
5486
|
var params = node.p.map(function (paramNode) { return evaluateAstNode(paramNode, contextStack); });
|
|
@@ -5567,19 +5493,8 @@ var recurSpecialExpression = {
|
|
|
5567
5493
|
};
|
|
5568
5494
|
|
|
5569
5495
|
var throwSpecialExpression = {
|
|
5570
|
-
parse:
|
|
5571
|
-
|
|
5572
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
5573
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
5574
|
-
var node = {
|
|
5575
|
-
t: AstNodeType.SpecialExpression,
|
|
5576
|
-
n: 'throw',
|
|
5577
|
-
p: params,
|
|
5578
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
5579
|
-
};
|
|
5580
|
-
assertNumberOfParams(1, node);
|
|
5581
|
-
return node;
|
|
5582
|
-
},
|
|
5496
|
+
parse: getCommonParser('throw'),
|
|
5497
|
+
validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
|
|
5583
5498
|
evaluate: function (node, contextStack, _a) {
|
|
5584
5499
|
var _b, _c;
|
|
5585
5500
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5595,19 +5510,8 @@ var throwSpecialExpression = {
|
|
|
5595
5510
|
};
|
|
5596
5511
|
|
|
5597
5512
|
var timeSpecialExpression = {
|
|
5598
|
-
parse:
|
|
5599
|
-
|
|
5600
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
5601
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
5602
|
-
var node = {
|
|
5603
|
-
t: AstNodeType.SpecialExpression,
|
|
5604
|
-
n: 'time!',
|
|
5605
|
-
p: params,
|
|
5606
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
5607
|
-
};
|
|
5608
|
-
assertNumberOfParams(1, node);
|
|
5609
|
-
return node;
|
|
5610
|
-
},
|
|
5513
|
+
parse: getCommonParser('time!'),
|
|
5514
|
+
validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
|
|
5611
5515
|
evaluate: function (node, contextStack, _a) {
|
|
5612
5516
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
5613
5517
|
var param = node.p[0];
|
|
@@ -5648,9 +5552,9 @@ var trySpecialExpression = {
|
|
|
5648
5552
|
e: error,
|
|
5649
5553
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
5650
5554
|
};
|
|
5651
|
-
assertNumberOfParams(1, node);
|
|
5652
5555
|
return node;
|
|
5653
5556
|
},
|
|
5557
|
+
validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
|
|
5654
5558
|
evaluate: function (node, contextStack, _a) {
|
|
5655
5559
|
var _b;
|
|
5656
5560
|
var _c;
|
|
@@ -5680,19 +5584,8 @@ var trySpecialExpression = {
|
|
|
5680
5584
|
};
|
|
5681
5585
|
|
|
5682
5586
|
var whenSpecialExpression = {
|
|
5683
|
-
parse:
|
|
5684
|
-
|
|
5685
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
5686
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
5687
|
-
var node = {
|
|
5688
|
-
t: AstNodeType.SpecialExpression,
|
|
5689
|
-
n: 'when',
|
|
5690
|
-
p: params,
|
|
5691
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
5692
|
-
};
|
|
5693
|
-
assertNumberOfParams({ min: 1 }, node);
|
|
5694
|
-
return node;
|
|
5695
|
-
},
|
|
5587
|
+
parse: getCommonParser('when'),
|
|
5588
|
+
validateParameterCount: function (node) { return assertNumberOfParams({ min: 1 }, node); },
|
|
5696
5589
|
evaluate: function (node, contextStack, _a) {
|
|
5697
5590
|
var e_1, _b;
|
|
5698
5591
|
var _c;
|
|
@@ -5742,6 +5635,7 @@ var whenFirstSpecialExpression = {
|
|
|
5742
5635
|
};
|
|
5743
5636
|
return node;
|
|
5744
5637
|
},
|
|
5638
|
+
validateParameterCount: function () { return undefined; },
|
|
5745
5639
|
evaluate: function (node, contextStack, _a) {
|
|
5746
5640
|
var e_1, _b;
|
|
5747
5641
|
var _c;
|
|
@@ -5803,6 +5697,7 @@ var whenLetSpecialExpression = {
|
|
|
5803
5697
|
};
|
|
5804
5698
|
return node;
|
|
5805
5699
|
},
|
|
5700
|
+
validateParameterCount: function () { return undefined; },
|
|
5806
5701
|
evaluate: function (node, contextStack, _a) {
|
|
5807
5702
|
var e_1, _b;
|
|
5808
5703
|
var evaluateAstNode = _a.evaluateAstNode;
|
|
@@ -5841,19 +5736,8 @@ var whenLetSpecialExpression = {
|
|
|
5841
5736
|
};
|
|
5842
5737
|
|
|
5843
5738
|
var whenNotSpecialExpression = {
|
|
5844
|
-
parse:
|
|
5845
|
-
|
|
5846
|
-
var params = parseTokensUntilClosingBracket(tokenStream, parseState);
|
|
5847
|
-
assertRParenToken(tokenStream.tokens[parseState.position++]);
|
|
5848
|
-
var node = {
|
|
5849
|
-
t: AstNodeType.SpecialExpression,
|
|
5850
|
-
n: 'when-not',
|
|
5851
|
-
p: params,
|
|
5852
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
5853
|
-
};
|
|
5854
|
-
assertNumberOfParams({ min: 1 }, node);
|
|
5855
|
-
return node;
|
|
5856
|
-
},
|
|
5739
|
+
parse: getCommonParser('when-not'),
|
|
5740
|
+
validateParameterCount: function (node) { return assertNumberOfParams({ min: 1 }, node); },
|
|
5857
5741
|
evaluate: function (node, contextStack, _a) {
|
|
5858
5742
|
var e_1, _b;
|
|
5859
5743
|
var _c;
|
|
@@ -7081,6 +6965,7 @@ function parseString(tokenStream, parseState) {
|
|
|
7081
6965
|
}
|
|
7082
6966
|
|
|
7083
6967
|
var exponentiationPrecedence = 9;
|
|
6968
|
+
var placeholderRegexp$1 = /^\$([1-9]\d?)?$/;
|
|
7084
6969
|
function getPrecedence(operator) {
|
|
7085
6970
|
var operatorSign = operator[1];
|
|
7086
6971
|
switch (operatorSign) {
|
|
@@ -7313,7 +7198,7 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7313
7198
|
// Parentheses
|
|
7314
7199
|
if (isLParenToken(token)) {
|
|
7315
7200
|
var positionBefore = this.parseState.position;
|
|
7316
|
-
var lamdaFunction = this.
|
|
7201
|
+
var lamdaFunction = this.parseLambdaFunction();
|
|
7317
7202
|
if (lamdaFunction) {
|
|
7318
7203
|
return lamdaFunction;
|
|
7319
7204
|
}
|
|
@@ -7334,6 +7219,9 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7334
7219
|
var operand = this.parseOperand();
|
|
7335
7220
|
return fromUnaryAlgebraicToAstNode(token, operand);
|
|
7336
7221
|
}
|
|
7222
|
+
else if (operatorName === '=>') {
|
|
7223
|
+
return this.parseShorthandLamdaFunction();
|
|
7224
|
+
}
|
|
7337
7225
|
else {
|
|
7338
7226
|
throw new Error("Unknown unary operator: ".concat(operatorName));
|
|
7339
7227
|
}
|
|
@@ -7449,7 +7337,7 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7449
7337
|
};
|
|
7450
7338
|
};
|
|
7451
7339
|
AlgebraicParser.prototype.parseFunctionCall = function (symbol) {
|
|
7452
|
-
var _a, _b;
|
|
7340
|
+
var _a, _b, _c;
|
|
7453
7341
|
var params = [];
|
|
7454
7342
|
this.advance();
|
|
7455
7343
|
while (!this.isAtEnd() && !isRParenToken(this.peek())) {
|
|
@@ -7481,13 +7369,17 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7481
7369
|
case 'when':
|
|
7482
7370
|
case 'when-not':
|
|
7483
7371
|
case 'do':
|
|
7484
|
-
case '
|
|
7485
|
-
|
|
7372
|
+
case 'time!':
|
|
7373
|
+
case 'throw': {
|
|
7374
|
+
var node_1 = {
|
|
7486
7375
|
t: AstNodeType.SpecialExpression,
|
|
7487
7376
|
n: name_1,
|
|
7488
7377
|
p: params,
|
|
7489
7378
|
token: getTokenDebugData(symbol.token) && symbol.token,
|
|
7490
7379
|
};
|
|
7380
|
+
builtin.specialExpressions[node_1.n].validateParameterCount(node_1);
|
|
7381
|
+
return node_1;
|
|
7382
|
+
}
|
|
7491
7383
|
case 'def':
|
|
7492
7384
|
case 'defs':
|
|
7493
7385
|
case 'let':
|
|
@@ -7500,7 +7392,6 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7500
7392
|
case 'try':
|
|
7501
7393
|
case 'recur':
|
|
7502
7394
|
case 'loop':
|
|
7503
|
-
case 'time!':
|
|
7504
7395
|
case 'doseq':
|
|
7505
7396
|
case 'for':
|
|
7506
7397
|
throw new Error("Special expression ".concat(name_1, " is not available in algebraic notation"));
|
|
@@ -7508,7 +7399,12 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7508
7399
|
throw new Error("Unknown special expression: ".concat(name_1));
|
|
7509
7400
|
}
|
|
7510
7401
|
}
|
|
7511
|
-
|
|
7402
|
+
var node = createNamedNormalExpressionNode(symbol.v, params, symbol.token);
|
|
7403
|
+
var builtinExpression = builtin.normalExpressions[node.n];
|
|
7404
|
+
if (builtinExpression) {
|
|
7405
|
+
(_c = builtinExpression.validate) === null || _c === void 0 ? void 0 : _c.call(builtinExpression, __assign(__assign({}, node), { p: withoutCommentNodes(node.p) }));
|
|
7406
|
+
}
|
|
7407
|
+
return node;
|
|
7512
7408
|
}
|
|
7513
7409
|
else {
|
|
7514
7410
|
return {
|
|
@@ -7519,7 +7415,7 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7519
7415
|
};
|
|
7520
7416
|
}
|
|
7521
7417
|
};
|
|
7522
|
-
AlgebraicParser.prototype.
|
|
7418
|
+
AlgebraicParser.prototype.parseLambdaFunction = function () {
|
|
7523
7419
|
var _a;
|
|
7524
7420
|
var firstToken = this.peek();
|
|
7525
7421
|
this.advance();
|
|
@@ -7578,6 +7474,62 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7578
7474
|
token: getTokenDebugData(firstToken) && firstToken,
|
|
7579
7475
|
};
|
|
7580
7476
|
};
|
|
7477
|
+
AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
|
|
7478
|
+
var _a, _b, _c, _d;
|
|
7479
|
+
var firstToken = this.peek();
|
|
7480
|
+
this.advance();
|
|
7481
|
+
var startPos = this.parseState.position;
|
|
7482
|
+
var exprNode = this.parseExpression();
|
|
7483
|
+
var endPos = this.parseState.position - 1;
|
|
7484
|
+
var arity = 0;
|
|
7485
|
+
var percent1 = 'NOT_SET'; // referring to argument bindings. % = NAKED, %1, %2, %3, etc = WITH_1
|
|
7486
|
+
for (var pos = startPos; pos <= endPos; pos += 1) {
|
|
7487
|
+
var tkn = this.tokenStream.tokens[pos];
|
|
7488
|
+
if (isA_SymbolToken(tkn)) {
|
|
7489
|
+
var match = placeholderRegexp$1.exec(tkn[1]);
|
|
7490
|
+
if (match) {
|
|
7491
|
+
var number = (_a = match[1]) !== null && _a !== void 0 ? _a : '1';
|
|
7492
|
+
if (number === '1') {
|
|
7493
|
+
var mixedPercent1 = (!match[1] && percent1 === 'WITH_1') || (match[1] && percent1 === 'NAKED');
|
|
7494
|
+
if (mixedPercent1)
|
|
7495
|
+
throw new LitsError('Please make up your mind, either use $ or $1', (_b = getTokenDebugData(firstToken)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
|
|
7496
|
+
percent1 = match[1] ? 'WITH_1' : 'NAKED';
|
|
7497
|
+
}
|
|
7498
|
+
arity = Math.max(arity, Number(number));
|
|
7499
|
+
if (arity > 20)
|
|
7500
|
+
throw new LitsError('Can\'t specify more than 20 arguments', (_c = getTokenDebugData(firstToken)) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
|
|
7501
|
+
}
|
|
7502
|
+
}
|
|
7503
|
+
if (isA_OperatorToken(tkn, '=>')) {
|
|
7504
|
+
throw new LitsError('Nested shortcut functions are not allowed', (_d = getTokenDebugData(firstToken)) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
|
|
7505
|
+
}
|
|
7506
|
+
}
|
|
7507
|
+
var mandatoryArguments = [];
|
|
7508
|
+
for (var i = 1; i <= arity; i += 1) {
|
|
7509
|
+
if (i === 1 && percent1 === 'NAKED')
|
|
7510
|
+
mandatoryArguments.push('$');
|
|
7511
|
+
else
|
|
7512
|
+
mandatoryArguments.push("$".concat(i));
|
|
7513
|
+
}
|
|
7514
|
+
var args = {
|
|
7515
|
+
b: [],
|
|
7516
|
+
m: mandatoryArguments,
|
|
7517
|
+
};
|
|
7518
|
+
var node = {
|
|
7519
|
+
t: AstNodeType.SpecialExpression,
|
|
7520
|
+
n: 'fn',
|
|
7521
|
+
p: [],
|
|
7522
|
+
o: [
|
|
7523
|
+
{
|
|
7524
|
+
as: args,
|
|
7525
|
+
b: [exprNode],
|
|
7526
|
+
a: args.m.length,
|
|
7527
|
+
},
|
|
7528
|
+
],
|
|
7529
|
+
token: getTokenDebugData(firstToken) && firstToken,
|
|
7530
|
+
};
|
|
7531
|
+
return node;
|
|
7532
|
+
};
|
|
7581
7533
|
AlgebraicParser.prototype.isAtEnd = function () {
|
|
7582
7534
|
return this.parseState.position >= this.tokenStream.tokens.length;
|
|
7583
7535
|
};
|
|
@@ -7821,7 +7773,7 @@ function parseSpecialExpression(tokenStream, parseState) {
|
|
|
7821
7773
|
var firstToken = asLParenToken(tokenStream.tokens[parseState.position++]);
|
|
7822
7774
|
var nameToken = asP_SymbolToken(tokenStream.tokens[parseState.position++]);
|
|
7823
7775
|
var expressionName = nameToken[1];
|
|
7824
|
-
var
|
|
7776
|
+
var _b = asNonUndefined(builtin.specialExpressions[expressionName], (_a = getTokenDebugData(nameToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo), parse = _b.parse, validateParameterCount = _b.validateParameterCount;
|
|
7825
7777
|
var node = parse(tokenStream, parseState, firstToken, {
|
|
7826
7778
|
parseExpression: parseExpression,
|
|
7827
7779
|
parseTokensUntilClosingBracket: parseTokensUntilClosingBracket,
|
|
@@ -7830,6 +7782,7 @@ function parseSpecialExpression(tokenStream, parseState) {
|
|
|
7830
7782
|
parseBindings: parseBindings,
|
|
7831
7783
|
parseArgument: parseArgument,
|
|
7832
7784
|
});
|
|
7785
|
+
validateParameterCount(node);
|
|
7833
7786
|
return node;
|
|
7834
7787
|
}
|
|
7835
7788
|
function parsePolishToken(tokenStream, parseState) {
|
|
@@ -29,8 +29,11 @@ declare const specialExpressions: {
|
|
|
29
29
|
readonly '??': import("./interface").BuiltinSpecialExpression<import("../interface").Any, import("./specialExpressions/qq").QqNode>;
|
|
30
30
|
};
|
|
31
31
|
export type SpecialExpressionName = keyof typeof specialExpressions;
|
|
32
|
+
export type CommonSpecialExpressionName = keyof Pick<typeof specialExpressions, '??' | '??' | 'and' | 'comment' | 'cond' | 'declared?' | 'do' | 'if' | 'if-not' | 'or' | 'time!' | 'when' | 'when-not' | 'throw'>;
|
|
32
33
|
export type BuiltinSpecialExpressions = typeof specialExpressions;
|
|
33
34
|
export type BuiltinSpecialExpression = typeof specialExpressions[SpecialExpressionName];
|
|
35
|
+
export type BuiltinCommonSpecialExpression = typeof specialExpressions[CommonSpecialExpressionName];
|
|
36
|
+
export type GenericCommonSpecialExpressionNode<T extends CommonSpecialExpressionName> = ReturnType<typeof specialExpressions[T]['parse']>;
|
|
34
37
|
export type SpecialExpressionNode = ReturnType<typeof specialExpressions[SpecialExpressionName]['parse']>;
|
|
35
38
|
export declare const builtin: Builtin;
|
|
36
39
|
export declare const normalExpressionKeys: string[];
|
|
@@ -9,10 +9,11 @@ import type { BuiltinSpecialExpressions, SpecialExpressionNode } from '.';
|
|
|
9
9
|
export type NormalExpressionEvaluator<T> = (params: Arr, sourceCodeInfo: SourceCodeInfo | undefined, contextStack: ContextStack, { executeFunction }: {
|
|
10
10
|
executeFunction: ExecuteFunction;
|
|
11
11
|
}) => T;
|
|
12
|
-
type
|
|
12
|
+
type ValidateNormalExpressionNode = (node: NormalExpressionNode) => void;
|
|
13
|
+
type ValidateSpecialExpressionNode = (node: SpecialExpressionNode) => void;
|
|
13
14
|
interface BuiltinNormalExpression<T> {
|
|
14
15
|
evaluate: NormalExpressionEvaluator<T>;
|
|
15
|
-
validate?:
|
|
16
|
+
validate?: ValidateNormalExpressionNode;
|
|
16
17
|
}
|
|
17
18
|
export interface ParserHelpers {
|
|
18
19
|
parseExpression: ParseExpression;
|
|
@@ -30,6 +31,7 @@ interface EvaluateHelpers {
|
|
|
30
31
|
export interface BuiltinSpecialExpression<T, N extends SpecialExpressionNode> {
|
|
31
32
|
parse: (tokenStream: TokenStream, parseState: ParseState, firstToken: Token, parsers: ParserHelpers) => N;
|
|
32
33
|
evaluate: (node: N, contextStack: ContextStack, helpers: EvaluateHelpers) => T;
|
|
34
|
+
validateParameterCount: ValidateSpecialExpressionNode;
|
|
33
35
|
findUnresolvedIdentifiers: (node: N, contextStack: ContextStack, params: {
|
|
34
36
|
findUnresolvedIdentifiers: FindUnresolvedIdentifiers;
|
|
35
37
|
builtin: Builtin;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CommonSpecialExpressionName, GenericCommonSpecialExpressionNode } from '..';
|
|
2
|
+
import type { Any } from '../../interface';
|
|
3
|
+
import type { BuiltinSpecialExpression } from '../interface';
|
|
4
|
+
export declare function getCommonParser<T extends CommonSpecialExpressionName>(name: T): BuiltinSpecialExpression<Any, GenericCommonSpecialExpressionNode<T>>['parse'];
|
|
@@ -11,7 +11,8 @@ export declare class AlgebraicParser {
|
|
|
11
11
|
private parseObject;
|
|
12
12
|
private parseArray;
|
|
13
13
|
private parseFunctionCall;
|
|
14
|
-
|
|
14
|
+
parseLambdaFunction(): AstNode | null;
|
|
15
|
+
private parseShorthandLamdaFunction;
|
|
15
16
|
private isAtEnd;
|
|
16
17
|
private peek;
|
|
17
18
|
}
|