@mojir/lits 2.0.13 → 2.0.14
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 +137 -46
- package/dist/cli/src/parser/AlgebraicParser.d.ts +11 -1
- package/dist/cli/src/tokenizer/algebraic/algebraicTokens.d.ts +1 -1
- package/dist/index.esm.js +137 -46
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +137 -46
- package/dist/index.js.map +1 -1
- package/dist/lits.iife.js +137 -46
- package/dist/lits.iife.js.map +1 -1
- package/dist/src/parser/AlgebraicParser.d.ts +11 -1
- package/dist/src/tokenizer/algebraic/algebraicTokens.d.ts +1 -1
- package/dist/testFramework.esm.js +137 -46
- package/dist/testFramework.esm.js.map +1 -1
- package/dist/testFramework.js +137 -46
- 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.14";
|
|
96
96
|
|
|
97
97
|
var AstNodeType;
|
|
98
98
|
(function (AstNodeType) {
|
|
@@ -415,6 +415,7 @@ var otherSymbolicOperators = [
|
|
|
415
415
|
'.', // property accessor
|
|
416
416
|
',', // item separator
|
|
417
417
|
'=', // property assignment
|
|
418
|
+
';', // statement terminator
|
|
418
419
|
];
|
|
419
420
|
var symbolicOperators = __spreadArray(__spreadArray(__spreadArray([], __read(symbolicUnaryOperators), false), __read(symbolicBinaryOperators), false), __read(otherSymbolicOperators), false);
|
|
420
421
|
var nonFunctionOperators = [
|
|
@@ -7116,6 +7117,7 @@ function fromBinaryOperatorToAstNode(operator, left, right, token) {
|
|
|
7116
7117
|
token: getTokenDebugData(token) && token,
|
|
7117
7118
|
};
|
|
7118
7119
|
/* v8 ignore next 8 */
|
|
7120
|
+
case ';':
|
|
7119
7121
|
case '!':
|
|
7120
7122
|
case '~':
|
|
7121
7123
|
case '=':
|
|
@@ -7136,14 +7138,33 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7136
7138
|
this.parseState.position += 1;
|
|
7137
7139
|
};
|
|
7138
7140
|
AlgebraicParser.prototype.parse = function () {
|
|
7139
|
-
|
|
7141
|
+
var nodes = [];
|
|
7142
|
+
while (!this.isAtEnd()) {
|
|
7143
|
+
nodes.push(this.parseExpression());
|
|
7144
|
+
if (!isA_OperatorToken(this.peek(), ';')) {
|
|
7145
|
+
break;
|
|
7146
|
+
}
|
|
7147
|
+
this.advance();
|
|
7148
|
+
}
|
|
7149
|
+
return nodes;
|
|
7140
7150
|
};
|
|
7141
7151
|
AlgebraicParser.prototype.parseExpression = function (precedence) {
|
|
7142
7152
|
var _a;
|
|
7143
7153
|
if (precedence === void 0) { precedence = 0; }
|
|
7154
|
+
var firstToken = this.peek();
|
|
7155
|
+
if (isA_SymbolToken(firstToken) && firstToken[1] === 'def') {
|
|
7156
|
+
return this.parseDef(firstToken);
|
|
7157
|
+
}
|
|
7158
|
+
if (isA_SymbolToken(firstToken) && firstToken[1] === 'defn') {
|
|
7159
|
+
return this.parseDefn(firstToken);
|
|
7160
|
+
}
|
|
7144
7161
|
var left = this.parseOperand();
|
|
7145
|
-
|
|
7146
|
-
|
|
7162
|
+
var operator = this.peek();
|
|
7163
|
+
while (!this.isAtEnd()
|
|
7164
|
+
&& !isA_OperatorToken(operator, ',')
|
|
7165
|
+
&& !isA_OperatorToken(operator, ';')
|
|
7166
|
+
&& !isRBracketToken(operator)
|
|
7167
|
+
&& !isRParenToken(operator)) {
|
|
7147
7168
|
if (isA_BinaryOperatorToken(operator)) {
|
|
7148
7169
|
var name_1 = operator[1];
|
|
7149
7170
|
var newPrecedece = getPrecedence(name_1);
|
|
@@ -7173,6 +7194,7 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7173
7194
|
else {
|
|
7174
7195
|
break;
|
|
7175
7196
|
}
|
|
7197
|
+
operator = this.peek();
|
|
7176
7198
|
}
|
|
7177
7199
|
if (!left) {
|
|
7178
7200
|
throw new LitsError('Expected operand', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
|
|
@@ -7419,13 +7441,11 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7419
7441
|
}
|
|
7420
7442
|
case 'let':
|
|
7421
7443
|
return this.parseLet(symbol, params);
|
|
7422
|
-
case 'def':
|
|
7423
7444
|
case 'defs':
|
|
7424
7445
|
case 'if-let':
|
|
7425
7446
|
case 'when-let':
|
|
7426
7447
|
case 'when-first':
|
|
7427
7448
|
case 'fn':
|
|
7428
|
-
case 'defn':
|
|
7429
7449
|
case 'defns':
|
|
7430
7450
|
case 'try':
|
|
7431
7451
|
case 'recur':
|
|
@@ -7448,8 +7468,32 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7448
7468
|
}
|
|
7449
7469
|
};
|
|
7450
7470
|
AlgebraicParser.prototype.parseLambdaFunction = function () {
|
|
7451
|
-
var _a, _b;
|
|
7452
7471
|
var firstToken = this.peek();
|
|
7472
|
+
try {
|
|
7473
|
+
var _a = this.parseFunctionArguments(), functionArguments = _a.functionArguments, arity = _a.arity;
|
|
7474
|
+
if (!isA_OperatorToken(this.peek(), '=>')) {
|
|
7475
|
+
return null;
|
|
7476
|
+
}
|
|
7477
|
+
this.advance();
|
|
7478
|
+
var body = this.parseExpression();
|
|
7479
|
+
return {
|
|
7480
|
+
t: AstNodeType.SpecialExpression,
|
|
7481
|
+
n: 'fn',
|
|
7482
|
+
p: [],
|
|
7483
|
+
o: [{
|
|
7484
|
+
as: functionArguments,
|
|
7485
|
+
b: [body],
|
|
7486
|
+
a: arity,
|
|
7487
|
+
}],
|
|
7488
|
+
token: getTokenDebugData(firstToken) && firstToken,
|
|
7489
|
+
};
|
|
7490
|
+
}
|
|
7491
|
+
catch (_b) {
|
|
7492
|
+
return null;
|
|
7493
|
+
}
|
|
7494
|
+
};
|
|
7495
|
+
AlgebraicParser.prototype.parseFunctionArguments = function () {
|
|
7496
|
+
var _a, _b, _c, _d, _e;
|
|
7453
7497
|
this.advance();
|
|
7454
7498
|
var rest = false;
|
|
7455
7499
|
var letBindingObject;
|
|
@@ -7472,7 +7516,7 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7472
7516
|
}
|
|
7473
7517
|
var symbolToken = this.peek();
|
|
7474
7518
|
if (!isA_SymbolToken(symbolToken)) {
|
|
7475
|
-
|
|
7519
|
+
throw new LitsError('Expected symbol', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
|
|
7476
7520
|
}
|
|
7477
7521
|
if (rest) {
|
|
7478
7522
|
restArg = symbolToken[1];
|
|
@@ -7483,47 +7527,36 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7483
7527
|
this.advance();
|
|
7484
7528
|
}
|
|
7485
7529
|
if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek())) {
|
|
7486
|
-
|
|
7530
|
+
throw new LitsError('Expected comma or closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
|
|
7487
7531
|
}
|
|
7488
7532
|
if (isA_OperatorToken(this.peek(), ',')) {
|
|
7489
7533
|
this.advance();
|
|
7490
7534
|
}
|
|
7491
7535
|
}
|
|
7536
|
+
var arity = restArg !== undefined ? { min: args.length } : args.length;
|
|
7492
7537
|
if (!isRParenToken(this.peek())) {
|
|
7493
|
-
|
|
7494
|
-
}
|
|
7495
|
-
this.advance();
|
|
7496
|
-
if (!isA_OperatorToken(this.peek(), '=>')) {
|
|
7497
|
-
return null;
|
|
7538
|
+
throw new LitsError('Expected closing parenthesis', (_e = getTokenDebugData(this.peek())) === null || _e === void 0 ? void 0 : _e.sourceCodeInfo);
|
|
7498
7539
|
}
|
|
7499
|
-
this.advance();
|
|
7500
7540
|
var letBindings = letBindingObject ? arrayToPairs(letBindingObject.p) : [];
|
|
7501
|
-
var
|
|
7502
|
-
|
|
7541
|
+
var functionArguments = {
|
|
7542
|
+
m: args,
|
|
7543
|
+
r: restArg,
|
|
7544
|
+
b: letBindings.map(function (pair) {
|
|
7545
|
+
var key = pair[0];
|
|
7546
|
+
var value = pair[1];
|
|
7547
|
+
return {
|
|
7548
|
+
t: AstNodeType.Binding,
|
|
7549
|
+
n: key.v,
|
|
7550
|
+
v: value,
|
|
7551
|
+
p: [],
|
|
7552
|
+
token: getTokenDebugData(key.token) && key.token,
|
|
7553
|
+
};
|
|
7554
|
+
}),
|
|
7555
|
+
};
|
|
7556
|
+
this.advance();
|
|
7503
7557
|
return {
|
|
7504
|
-
|
|
7505
|
-
|
|
7506
|
-
p: [],
|
|
7507
|
-
o: [{
|
|
7508
|
-
as: {
|
|
7509
|
-
m: args,
|
|
7510
|
-
r: restArg,
|
|
7511
|
-
b: letBindings.map(function (pair) {
|
|
7512
|
-
var key = pair[0];
|
|
7513
|
-
var value = pair[1];
|
|
7514
|
-
return {
|
|
7515
|
-
t: AstNodeType.Binding,
|
|
7516
|
-
n: key.v,
|
|
7517
|
-
v: value,
|
|
7518
|
-
p: [],
|
|
7519
|
-
token: getTokenDebugData(key.token) && key.token,
|
|
7520
|
-
};
|
|
7521
|
-
}),
|
|
7522
|
-
},
|
|
7523
|
-
b: [body],
|
|
7524
|
-
a: arity,
|
|
7525
|
-
}],
|
|
7526
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
7558
|
+
functionArguments: functionArguments,
|
|
7559
|
+
arity: arity,
|
|
7527
7560
|
};
|
|
7528
7561
|
};
|
|
7529
7562
|
AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
|
|
@@ -7715,6 +7748,50 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7715
7748
|
};
|
|
7716
7749
|
return node;
|
|
7717
7750
|
};
|
|
7751
|
+
AlgebraicParser.prototype.parseDef = function (token) {
|
|
7752
|
+
this.advance();
|
|
7753
|
+
var symbol = parseSymbol(this.tokenStream, this.parseState);
|
|
7754
|
+
assertA_OperatorToken(this.peek(), '=');
|
|
7755
|
+
this.advance();
|
|
7756
|
+
var value = this.parseExpression();
|
|
7757
|
+
return {
|
|
7758
|
+
t: AstNodeType.SpecialExpression,
|
|
7759
|
+
n: 'def',
|
|
7760
|
+
p: [symbol, value],
|
|
7761
|
+
token: getTokenDebugData(token) && token,
|
|
7762
|
+
};
|
|
7763
|
+
};
|
|
7764
|
+
AlgebraicParser.prototype.parseDefn = function (token) {
|
|
7765
|
+
var _a;
|
|
7766
|
+
this.advance();
|
|
7767
|
+
var symbol = parseSymbol(this.tokenStream, this.parseState);
|
|
7768
|
+
var _b = this.parseFunctionArguments(), functionArguments = _b.functionArguments, arity = _b.arity;
|
|
7769
|
+
assertLBraceToken(this.peek());
|
|
7770
|
+
this.advance();
|
|
7771
|
+
var body = [];
|
|
7772
|
+
while (!this.isAtEnd() && !isRBraceToken(this.peek())) {
|
|
7773
|
+
body.push(this.parseExpression());
|
|
7774
|
+
if (isA_OperatorToken(this.peek(), ';')) {
|
|
7775
|
+
this.advance();
|
|
7776
|
+
}
|
|
7777
|
+
}
|
|
7778
|
+
if (!isRBraceToken(this.peek())) {
|
|
7779
|
+
throw new LitsError('Expected closing brace', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
|
|
7780
|
+
}
|
|
7781
|
+
this.advance();
|
|
7782
|
+
return {
|
|
7783
|
+
t: AstNodeType.SpecialExpression,
|
|
7784
|
+
n: 'defn',
|
|
7785
|
+
f: symbol,
|
|
7786
|
+
p: [],
|
|
7787
|
+
o: [{
|
|
7788
|
+
as: functionArguments,
|
|
7789
|
+
b: body,
|
|
7790
|
+
a: arity,
|
|
7791
|
+
}],
|
|
7792
|
+
token: getTokenDebugData(token) && token,
|
|
7793
|
+
};
|
|
7794
|
+
};
|
|
7718
7795
|
AlgebraicParser.prototype.isAtEnd = function () {
|
|
7719
7796
|
return this.parseState.position >= this.tokenStream.tokens.length;
|
|
7720
7797
|
};
|
|
@@ -8004,10 +8081,18 @@ function parsePolishToken(tokenStream, parseState) {
|
|
|
8004
8081
|
parseState.position += 1;
|
|
8005
8082
|
parseState.algebraic = true;
|
|
8006
8083
|
var algebraicParser = new AlgebraicParser(tokenStream, parseState);
|
|
8007
|
-
var
|
|
8084
|
+
var nodes = algebraicParser.parse();
|
|
8008
8085
|
assertEndNotationToken(tokenStream.tokens[parseState.position++]);
|
|
8009
8086
|
parseState.algebraic = false;
|
|
8010
|
-
|
|
8087
|
+
if (nodes.length === 1) {
|
|
8088
|
+
return nodes[0];
|
|
8089
|
+
}
|
|
8090
|
+
return {
|
|
8091
|
+
t: AstNodeType.SpecialExpression,
|
|
8092
|
+
n: 'do',
|
|
8093
|
+
p: nodes,
|
|
8094
|
+
token: nodes[0].token,
|
|
8095
|
+
};
|
|
8011
8096
|
}
|
|
8012
8097
|
case 'PolNotation': {
|
|
8013
8098
|
var astNodes = [];
|
|
@@ -8074,7 +8159,16 @@ function removeUnnecessaryTokens(tokenStream) {
|
|
|
8074
8159
|
function parseToken(tokenStream, parseState) {
|
|
8075
8160
|
if (parseState.algebraic) {
|
|
8076
8161
|
var algebraicParser = new AlgebraicParser(tokenStream, parseState);
|
|
8077
|
-
|
|
8162
|
+
var nodes = algebraicParser.parse();
|
|
8163
|
+
if (nodes.length === 1) {
|
|
8164
|
+
return nodes[0];
|
|
8165
|
+
}
|
|
8166
|
+
return {
|
|
8167
|
+
t: AstNodeType.SpecialExpression,
|
|
8168
|
+
n: 'do',
|
|
8169
|
+
p: nodes,
|
|
8170
|
+
token: nodes[0].token,
|
|
8171
|
+
};
|
|
8078
8172
|
}
|
|
8079
8173
|
return parsePolishToken(tokenStream, parseState);
|
|
8080
8174
|
}
|
|
@@ -8165,13 +8259,10 @@ var algebraicReservedNamesRecord = {
|
|
|
8165
8259
|
'false': { value: false },
|
|
8166
8260
|
'nil': { value: null },
|
|
8167
8261
|
'null': { value: null },
|
|
8168
|
-
'def': { value: null, forbidden: true },
|
|
8169
|
-
'defs': { value: null, forbidden: true },
|
|
8170
8262
|
'if-let': { value: null, forbidden: true },
|
|
8171
8263
|
'when-let': { value: null, forbidden: true },
|
|
8172
8264
|
'when-first': { value: null, forbidden: true },
|
|
8173
8265
|
'fn': { value: null, forbidden: true },
|
|
8174
|
-
'defn': { value: null, forbidden: true },
|
|
8175
8266
|
'defns': { value: null, forbidden: true },
|
|
8176
8267
|
'try': { value: null, forbidden: true },
|
|
8177
8268
|
'recur': { value: null, forbidden: true },
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import type { DefNode } from '../builtin/specialExpressions/def';
|
|
2
|
+
import type { DefnNode } from '../builtin/specialExpressions/functions';
|
|
3
|
+
import type { Arity, FunctionArguments } from '../builtin/utils';
|
|
4
|
+
import type { A_SymbolToken } from '../tokenizer/algebraic/algebraicTokens';
|
|
1
5
|
import type { TokenStream } from '../tokenizer/interface';
|
|
2
6
|
import type { AstNode, ParseState } from './interface';
|
|
3
7
|
export declare class AlgebraicParser {
|
|
@@ -5,7 +9,7 @@ export declare class AlgebraicParser {
|
|
|
5
9
|
private parseState;
|
|
6
10
|
constructor(tokenStream: TokenStream, parseState: ParseState);
|
|
7
11
|
private advance;
|
|
8
|
-
parse(): AstNode;
|
|
12
|
+
parse(): AstNode[];
|
|
9
13
|
private parseExpression;
|
|
10
14
|
private parseOperand;
|
|
11
15
|
private parseOperandPart;
|
|
@@ -13,11 +17,17 @@ export declare class AlgebraicParser {
|
|
|
13
17
|
private parseArray;
|
|
14
18
|
private parseFunctionCall;
|
|
15
19
|
parseLambdaFunction(): AstNode | null;
|
|
20
|
+
parseFunctionArguments(): {
|
|
21
|
+
functionArguments: FunctionArguments;
|
|
22
|
+
arity: Arity;
|
|
23
|
+
};
|
|
16
24
|
private parseShorthandLamdaFunction;
|
|
17
25
|
private parseLet;
|
|
18
26
|
private parseFor;
|
|
19
27
|
private parseForLoopBinding;
|
|
20
28
|
private parseBinding;
|
|
29
|
+
parseDef(token: A_SymbolToken): DefNode;
|
|
30
|
+
parseDefn(token: A_SymbolToken): DefnNode;
|
|
21
31
|
private isAtEnd;
|
|
22
32
|
private peek;
|
|
23
33
|
private peekAhead;
|
|
@@ -7,7 +7,7 @@ export declare const algebraicValueTokenTypes: readonly ["String", "A_Whitespace
|
|
|
7
7
|
export declare const algebraicTokenTypes: readonly ["LBrace", "LBracket", "LParen", "RBrace", "RBracket", "RParen", "AlgNotation", "PolNotation", "EndNotation", "String", "A_Whitespace", "A_Operator", "A_Symbol", "A_ReservedSymbol", "A_SingleLineComment", "A_MultiLineComment", "A_Number", "A_BasePrefixedNumber"];
|
|
8
8
|
declare const symbolicUnaryOperators: readonly ["!", "~", "+", "-"];
|
|
9
9
|
declare const symbolicBinaryOperators: readonly ["**", "*", "/", "%", "+", "-", "<<", ">>", ">>>", "++", "<", "<=", ">", ">=", "==", "!=", "&", "^", "|", "&&", "||", "??"];
|
|
10
|
-
declare const symbolicOperators: readonly ["!", "~", "+", "-", "**", "*", "/", "%", "+", "-", "<<", ">>", ">>>", "++", "<", "<=", ">", ">=", "==", "!=", "&", "^", "|", "&&", "||", "??", "=>", "...", ".", ",", "="];
|
|
10
|
+
declare const symbolicOperators: readonly ["!", "~", "+", "-", "**", "*", "/", "%", "+", "-", "<<", ">>", ">>>", "++", "<", "<=", ">", ">=", "==", "!=", "&", "^", "|", "&&", "||", "??", "=>", "...", ".", ",", "=", ";"];
|
|
11
11
|
export declare function isFunctionOperator(operator: string): boolean;
|
|
12
12
|
export type SymbolicUnaryOperator = typeof symbolicUnaryOperators[number];
|
|
13
13
|
export type SymbolicBinaryOperator = typeof symbolicBinaryOperators[number];
|
package/dist/index.esm.js
CHANGED
|
@@ -408,6 +408,7 @@ var otherSymbolicOperators = [
|
|
|
408
408
|
'.', // property accessor
|
|
409
409
|
',', // item separator
|
|
410
410
|
'=', // property assignment
|
|
411
|
+
';', // statement terminator
|
|
411
412
|
];
|
|
412
413
|
var symbolicOperators = __spreadArray(__spreadArray(__spreadArray([], __read(symbolicUnaryOperators), false), __read(symbolicBinaryOperators), false), __read(otherSymbolicOperators), false);
|
|
413
414
|
var nonFunctionOperators = [
|
|
@@ -3117,7 +3118,7 @@ var mathNormalExpression = {
|
|
|
3117
3118
|
},
|
|
3118
3119
|
};
|
|
3119
3120
|
|
|
3120
|
-
var version = "2.0.
|
|
3121
|
+
var version = "2.0.14";
|
|
3121
3122
|
|
|
3122
3123
|
var uuidTemplate = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
|
|
3123
3124
|
var xyRegexp = /[xy]/g;
|
|
@@ -7148,6 +7149,7 @@ function fromBinaryOperatorToAstNode(operator, left, right, token) {
|
|
|
7148
7149
|
token: getTokenDebugData(token) && token,
|
|
7149
7150
|
};
|
|
7150
7151
|
/* v8 ignore next 8 */
|
|
7152
|
+
case ';':
|
|
7151
7153
|
case '!':
|
|
7152
7154
|
case '~':
|
|
7153
7155
|
case '=':
|
|
@@ -7168,14 +7170,33 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7168
7170
|
this.parseState.position += 1;
|
|
7169
7171
|
};
|
|
7170
7172
|
AlgebraicParser.prototype.parse = function () {
|
|
7171
|
-
|
|
7173
|
+
var nodes = [];
|
|
7174
|
+
while (!this.isAtEnd()) {
|
|
7175
|
+
nodes.push(this.parseExpression());
|
|
7176
|
+
if (!isA_OperatorToken(this.peek(), ';')) {
|
|
7177
|
+
break;
|
|
7178
|
+
}
|
|
7179
|
+
this.advance();
|
|
7180
|
+
}
|
|
7181
|
+
return nodes;
|
|
7172
7182
|
};
|
|
7173
7183
|
AlgebraicParser.prototype.parseExpression = function (precedence) {
|
|
7174
7184
|
var _a;
|
|
7175
7185
|
if (precedence === void 0) { precedence = 0; }
|
|
7186
|
+
var firstToken = this.peek();
|
|
7187
|
+
if (isA_SymbolToken(firstToken) && firstToken[1] === 'def') {
|
|
7188
|
+
return this.parseDef(firstToken);
|
|
7189
|
+
}
|
|
7190
|
+
if (isA_SymbolToken(firstToken) && firstToken[1] === 'defn') {
|
|
7191
|
+
return this.parseDefn(firstToken);
|
|
7192
|
+
}
|
|
7176
7193
|
var left = this.parseOperand();
|
|
7177
|
-
|
|
7178
|
-
|
|
7194
|
+
var operator = this.peek();
|
|
7195
|
+
while (!this.isAtEnd()
|
|
7196
|
+
&& !isA_OperatorToken(operator, ',')
|
|
7197
|
+
&& !isA_OperatorToken(operator, ';')
|
|
7198
|
+
&& !isRBracketToken(operator)
|
|
7199
|
+
&& !isRParenToken(operator)) {
|
|
7179
7200
|
if (isA_BinaryOperatorToken(operator)) {
|
|
7180
7201
|
var name_1 = operator[1];
|
|
7181
7202
|
var newPrecedece = getPrecedence(name_1);
|
|
@@ -7205,6 +7226,7 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7205
7226
|
else {
|
|
7206
7227
|
break;
|
|
7207
7228
|
}
|
|
7229
|
+
operator = this.peek();
|
|
7208
7230
|
}
|
|
7209
7231
|
if (!left) {
|
|
7210
7232
|
throw new LitsError('Expected operand', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
|
|
@@ -7451,13 +7473,11 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7451
7473
|
}
|
|
7452
7474
|
case 'let':
|
|
7453
7475
|
return this.parseLet(symbol, params);
|
|
7454
|
-
case 'def':
|
|
7455
7476
|
case 'defs':
|
|
7456
7477
|
case 'if-let':
|
|
7457
7478
|
case 'when-let':
|
|
7458
7479
|
case 'when-first':
|
|
7459
7480
|
case 'fn':
|
|
7460
|
-
case 'defn':
|
|
7461
7481
|
case 'defns':
|
|
7462
7482
|
case 'try':
|
|
7463
7483
|
case 'recur':
|
|
@@ -7480,8 +7500,32 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7480
7500
|
}
|
|
7481
7501
|
};
|
|
7482
7502
|
AlgebraicParser.prototype.parseLambdaFunction = function () {
|
|
7483
|
-
var _a, _b;
|
|
7484
7503
|
var firstToken = this.peek();
|
|
7504
|
+
try {
|
|
7505
|
+
var _a = this.parseFunctionArguments(), functionArguments = _a.functionArguments, arity = _a.arity;
|
|
7506
|
+
if (!isA_OperatorToken(this.peek(), '=>')) {
|
|
7507
|
+
return null;
|
|
7508
|
+
}
|
|
7509
|
+
this.advance();
|
|
7510
|
+
var body = this.parseExpression();
|
|
7511
|
+
return {
|
|
7512
|
+
t: AstNodeType.SpecialExpression,
|
|
7513
|
+
n: 'fn',
|
|
7514
|
+
p: [],
|
|
7515
|
+
o: [{
|
|
7516
|
+
as: functionArguments,
|
|
7517
|
+
b: [body],
|
|
7518
|
+
a: arity,
|
|
7519
|
+
}],
|
|
7520
|
+
token: getTokenDebugData(firstToken) && firstToken,
|
|
7521
|
+
};
|
|
7522
|
+
}
|
|
7523
|
+
catch (_b) {
|
|
7524
|
+
return null;
|
|
7525
|
+
}
|
|
7526
|
+
};
|
|
7527
|
+
AlgebraicParser.prototype.parseFunctionArguments = function () {
|
|
7528
|
+
var _a, _b, _c, _d, _e;
|
|
7485
7529
|
this.advance();
|
|
7486
7530
|
var rest = false;
|
|
7487
7531
|
var letBindingObject;
|
|
@@ -7504,7 +7548,7 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7504
7548
|
}
|
|
7505
7549
|
var symbolToken = this.peek();
|
|
7506
7550
|
if (!isA_SymbolToken(symbolToken)) {
|
|
7507
|
-
|
|
7551
|
+
throw new LitsError('Expected symbol', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
|
|
7508
7552
|
}
|
|
7509
7553
|
if (rest) {
|
|
7510
7554
|
restArg = symbolToken[1];
|
|
@@ -7515,47 +7559,36 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7515
7559
|
this.advance();
|
|
7516
7560
|
}
|
|
7517
7561
|
if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek())) {
|
|
7518
|
-
|
|
7562
|
+
throw new LitsError('Expected comma or closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
|
|
7519
7563
|
}
|
|
7520
7564
|
if (isA_OperatorToken(this.peek(), ',')) {
|
|
7521
7565
|
this.advance();
|
|
7522
7566
|
}
|
|
7523
7567
|
}
|
|
7568
|
+
var arity = restArg !== undefined ? { min: args.length } : args.length;
|
|
7524
7569
|
if (!isRParenToken(this.peek())) {
|
|
7525
|
-
|
|
7526
|
-
}
|
|
7527
|
-
this.advance();
|
|
7528
|
-
if (!isA_OperatorToken(this.peek(), '=>')) {
|
|
7529
|
-
return null;
|
|
7570
|
+
throw new LitsError('Expected closing parenthesis', (_e = getTokenDebugData(this.peek())) === null || _e === void 0 ? void 0 : _e.sourceCodeInfo);
|
|
7530
7571
|
}
|
|
7531
|
-
this.advance();
|
|
7532
7572
|
var letBindings = letBindingObject ? arrayToPairs(letBindingObject.p) : [];
|
|
7533
|
-
var
|
|
7534
|
-
|
|
7573
|
+
var functionArguments = {
|
|
7574
|
+
m: args,
|
|
7575
|
+
r: restArg,
|
|
7576
|
+
b: letBindings.map(function (pair) {
|
|
7577
|
+
var key = pair[0];
|
|
7578
|
+
var value = pair[1];
|
|
7579
|
+
return {
|
|
7580
|
+
t: AstNodeType.Binding,
|
|
7581
|
+
n: key.v,
|
|
7582
|
+
v: value,
|
|
7583
|
+
p: [],
|
|
7584
|
+
token: getTokenDebugData(key.token) && key.token,
|
|
7585
|
+
};
|
|
7586
|
+
}),
|
|
7587
|
+
};
|
|
7588
|
+
this.advance();
|
|
7535
7589
|
return {
|
|
7536
|
-
|
|
7537
|
-
|
|
7538
|
-
p: [],
|
|
7539
|
-
o: [{
|
|
7540
|
-
as: {
|
|
7541
|
-
m: args,
|
|
7542
|
-
r: restArg,
|
|
7543
|
-
b: letBindings.map(function (pair) {
|
|
7544
|
-
var key = pair[0];
|
|
7545
|
-
var value = pair[1];
|
|
7546
|
-
return {
|
|
7547
|
-
t: AstNodeType.Binding,
|
|
7548
|
-
n: key.v,
|
|
7549
|
-
v: value,
|
|
7550
|
-
p: [],
|
|
7551
|
-
token: getTokenDebugData(key.token) && key.token,
|
|
7552
|
-
};
|
|
7553
|
-
}),
|
|
7554
|
-
},
|
|
7555
|
-
b: [body],
|
|
7556
|
-
a: arity,
|
|
7557
|
-
}],
|
|
7558
|
-
token: getTokenDebugData(firstToken) && firstToken,
|
|
7590
|
+
functionArguments: functionArguments,
|
|
7591
|
+
arity: arity,
|
|
7559
7592
|
};
|
|
7560
7593
|
};
|
|
7561
7594
|
AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
|
|
@@ -7747,6 +7780,50 @@ var AlgebraicParser = /** @class */ (function () {
|
|
|
7747
7780
|
};
|
|
7748
7781
|
return node;
|
|
7749
7782
|
};
|
|
7783
|
+
AlgebraicParser.prototype.parseDef = function (token) {
|
|
7784
|
+
this.advance();
|
|
7785
|
+
var symbol = parseSymbol(this.tokenStream, this.parseState);
|
|
7786
|
+
assertA_OperatorToken(this.peek(), '=');
|
|
7787
|
+
this.advance();
|
|
7788
|
+
var value = this.parseExpression();
|
|
7789
|
+
return {
|
|
7790
|
+
t: AstNodeType.SpecialExpression,
|
|
7791
|
+
n: 'def',
|
|
7792
|
+
p: [symbol, value],
|
|
7793
|
+
token: getTokenDebugData(token) && token,
|
|
7794
|
+
};
|
|
7795
|
+
};
|
|
7796
|
+
AlgebraicParser.prototype.parseDefn = function (token) {
|
|
7797
|
+
var _a;
|
|
7798
|
+
this.advance();
|
|
7799
|
+
var symbol = parseSymbol(this.tokenStream, this.parseState);
|
|
7800
|
+
var _b = this.parseFunctionArguments(), functionArguments = _b.functionArguments, arity = _b.arity;
|
|
7801
|
+
assertLBraceToken(this.peek());
|
|
7802
|
+
this.advance();
|
|
7803
|
+
var body = [];
|
|
7804
|
+
while (!this.isAtEnd() && !isRBraceToken(this.peek())) {
|
|
7805
|
+
body.push(this.parseExpression());
|
|
7806
|
+
if (isA_OperatorToken(this.peek(), ';')) {
|
|
7807
|
+
this.advance();
|
|
7808
|
+
}
|
|
7809
|
+
}
|
|
7810
|
+
if (!isRBraceToken(this.peek())) {
|
|
7811
|
+
throw new LitsError('Expected closing brace', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
|
|
7812
|
+
}
|
|
7813
|
+
this.advance();
|
|
7814
|
+
return {
|
|
7815
|
+
t: AstNodeType.SpecialExpression,
|
|
7816
|
+
n: 'defn',
|
|
7817
|
+
f: symbol,
|
|
7818
|
+
p: [],
|
|
7819
|
+
o: [{
|
|
7820
|
+
as: functionArguments,
|
|
7821
|
+
b: body,
|
|
7822
|
+
a: arity,
|
|
7823
|
+
}],
|
|
7824
|
+
token: getTokenDebugData(token) && token,
|
|
7825
|
+
};
|
|
7826
|
+
};
|
|
7750
7827
|
AlgebraicParser.prototype.isAtEnd = function () {
|
|
7751
7828
|
return this.parseState.position >= this.tokenStream.tokens.length;
|
|
7752
7829
|
};
|
|
@@ -8036,10 +8113,18 @@ function parsePolishToken(tokenStream, parseState) {
|
|
|
8036
8113
|
parseState.position += 1;
|
|
8037
8114
|
parseState.algebraic = true;
|
|
8038
8115
|
var algebraicParser = new AlgebraicParser(tokenStream, parseState);
|
|
8039
|
-
var
|
|
8116
|
+
var nodes = algebraicParser.parse();
|
|
8040
8117
|
assertEndNotationToken(tokenStream.tokens[parseState.position++]);
|
|
8041
8118
|
parseState.algebraic = false;
|
|
8042
|
-
|
|
8119
|
+
if (nodes.length === 1) {
|
|
8120
|
+
return nodes[0];
|
|
8121
|
+
}
|
|
8122
|
+
return {
|
|
8123
|
+
t: AstNodeType.SpecialExpression,
|
|
8124
|
+
n: 'do',
|
|
8125
|
+
p: nodes,
|
|
8126
|
+
token: nodes[0].token,
|
|
8127
|
+
};
|
|
8043
8128
|
}
|
|
8044
8129
|
case 'PolNotation': {
|
|
8045
8130
|
var astNodes = [];
|
|
@@ -8106,7 +8191,16 @@ function removeUnnecessaryTokens(tokenStream) {
|
|
|
8106
8191
|
function parseToken(tokenStream, parseState) {
|
|
8107
8192
|
if (parseState.algebraic) {
|
|
8108
8193
|
var algebraicParser = new AlgebraicParser(tokenStream, parseState);
|
|
8109
|
-
|
|
8194
|
+
var nodes = algebraicParser.parse();
|
|
8195
|
+
if (nodes.length === 1) {
|
|
8196
|
+
return nodes[0];
|
|
8197
|
+
}
|
|
8198
|
+
return {
|
|
8199
|
+
t: AstNodeType.SpecialExpression,
|
|
8200
|
+
n: 'do',
|
|
8201
|
+
p: nodes,
|
|
8202
|
+
token: nodes[0].token,
|
|
8203
|
+
};
|
|
8110
8204
|
}
|
|
8111
8205
|
return parsePolishToken(tokenStream, parseState);
|
|
8112
8206
|
}
|
|
@@ -8197,13 +8291,10 @@ var algebraicReservedNamesRecord = {
|
|
|
8197
8291
|
'false': { value: false },
|
|
8198
8292
|
'nil': { value: null },
|
|
8199
8293
|
'null': { value: null },
|
|
8200
|
-
'def': { value: null, forbidden: true },
|
|
8201
|
-
'defs': { value: null, forbidden: true },
|
|
8202
8294
|
'if-let': { value: null, forbidden: true },
|
|
8203
8295
|
'when-let': { value: null, forbidden: true },
|
|
8204
8296
|
'when-first': { value: null, forbidden: true },
|
|
8205
8297
|
'fn': { value: null, forbidden: true },
|
|
8206
|
-
'defn': { value: null, forbidden: true },
|
|
8207
8298
|
'defns': { value: null, forbidden: true },
|
|
8208
8299
|
'try': { value: null, forbidden: true },
|
|
8209
8300
|
'recur': { value: null, forbidden: true },
|