@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.
@@ -410,6 +410,7 @@ var otherSymbolicOperators = [
410
410
  '.', // property accessor
411
411
  ',', // item separator
412
412
  '=', // property assignment
413
+ ';', // statement terminator
413
414
  ];
414
415
  var symbolicOperators = __spreadArray(__spreadArray(__spreadArray([], __read(symbolicUnaryOperators), false), __read(symbolicBinaryOperators), false), __read(otherSymbolicOperators), false);
415
416
  var nonFunctionOperators = [
@@ -3082,7 +3083,7 @@ var mathNormalExpression = {
3082
3083
  },
3083
3084
  };
3084
3085
 
3085
- var version = "2.0.13";
3086
+ var version = "2.0.14";
3086
3087
 
3087
3088
  var uuidTemplate = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
3088
3089
  var xyRegexp = /[xy]/g;
@@ -7112,6 +7113,7 @@ function fromBinaryOperatorToAstNode(operator, left, right, token) {
7112
7113
  token: getTokenDebugData(token) && token,
7113
7114
  };
7114
7115
  /* v8 ignore next 8 */
7116
+ case ';':
7115
7117
  case '!':
7116
7118
  case '~':
7117
7119
  case '=':
@@ -7132,14 +7134,33 @@ var AlgebraicParser = /** @class */ (function () {
7132
7134
  this.parseState.position += 1;
7133
7135
  };
7134
7136
  AlgebraicParser.prototype.parse = function () {
7135
- return this.parseExpression();
7137
+ var nodes = [];
7138
+ while (!this.isAtEnd()) {
7139
+ nodes.push(this.parseExpression());
7140
+ if (!isA_OperatorToken(this.peek(), ';')) {
7141
+ break;
7142
+ }
7143
+ this.advance();
7144
+ }
7145
+ return nodes;
7136
7146
  };
7137
7147
  AlgebraicParser.prototype.parseExpression = function (precedence) {
7138
7148
  var _a;
7139
7149
  if (precedence === void 0) { precedence = 0; }
7150
+ var firstToken = this.peek();
7151
+ if (isA_SymbolToken(firstToken) && firstToken[1] === 'def') {
7152
+ return this.parseDef(firstToken);
7153
+ }
7154
+ if (isA_SymbolToken(firstToken) && firstToken[1] === 'defn') {
7155
+ return this.parseDefn(firstToken);
7156
+ }
7140
7157
  var left = this.parseOperand();
7141
- while (!this.isAtEnd() && !isA_OperatorToken(this.peek(), ',') && !isRBracketToken(this.peek()) && !isRParenToken(this.peek())) {
7142
- var operator = this.peek();
7158
+ var operator = this.peek();
7159
+ while (!this.isAtEnd()
7160
+ && !isA_OperatorToken(operator, ',')
7161
+ && !isA_OperatorToken(operator, ';')
7162
+ && !isRBracketToken(operator)
7163
+ && !isRParenToken(operator)) {
7143
7164
  if (isA_BinaryOperatorToken(operator)) {
7144
7165
  var name_1 = operator[1];
7145
7166
  var newPrecedece = getPrecedence(name_1);
@@ -7169,6 +7190,7 @@ var AlgebraicParser = /** @class */ (function () {
7169
7190
  else {
7170
7191
  break;
7171
7192
  }
7193
+ operator = this.peek();
7172
7194
  }
7173
7195
  if (!left) {
7174
7196
  throw new LitsError('Expected operand', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
@@ -7415,13 +7437,11 @@ var AlgebraicParser = /** @class */ (function () {
7415
7437
  }
7416
7438
  case 'let':
7417
7439
  return this.parseLet(symbol, params);
7418
- case 'def':
7419
7440
  case 'defs':
7420
7441
  case 'if-let':
7421
7442
  case 'when-let':
7422
7443
  case 'when-first':
7423
7444
  case 'fn':
7424
- case 'defn':
7425
7445
  case 'defns':
7426
7446
  case 'try':
7427
7447
  case 'recur':
@@ -7444,8 +7464,32 @@ var AlgebraicParser = /** @class */ (function () {
7444
7464
  }
7445
7465
  };
7446
7466
  AlgebraicParser.prototype.parseLambdaFunction = function () {
7447
- var _a, _b;
7448
7467
  var firstToken = this.peek();
7468
+ try {
7469
+ var _a = this.parseFunctionArguments(), functionArguments = _a.functionArguments, arity = _a.arity;
7470
+ if (!isA_OperatorToken(this.peek(), '=>')) {
7471
+ return null;
7472
+ }
7473
+ this.advance();
7474
+ var body = this.parseExpression();
7475
+ return {
7476
+ t: AstNodeType.SpecialExpression,
7477
+ n: 'fn',
7478
+ p: [],
7479
+ o: [{
7480
+ as: functionArguments,
7481
+ b: [body],
7482
+ a: arity,
7483
+ }],
7484
+ token: getTokenDebugData(firstToken) && firstToken,
7485
+ };
7486
+ }
7487
+ catch (_b) {
7488
+ return null;
7489
+ }
7490
+ };
7491
+ AlgebraicParser.prototype.parseFunctionArguments = function () {
7492
+ var _a, _b, _c, _d, _e;
7449
7493
  this.advance();
7450
7494
  var rest = false;
7451
7495
  var letBindingObject;
@@ -7468,7 +7512,7 @@ var AlgebraicParser = /** @class */ (function () {
7468
7512
  }
7469
7513
  var symbolToken = this.peek();
7470
7514
  if (!isA_SymbolToken(symbolToken)) {
7471
- return null;
7515
+ throw new LitsError('Expected symbol', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
7472
7516
  }
7473
7517
  if (rest) {
7474
7518
  restArg = symbolToken[1];
@@ -7479,47 +7523,36 @@ var AlgebraicParser = /** @class */ (function () {
7479
7523
  this.advance();
7480
7524
  }
7481
7525
  if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek())) {
7482
- return null;
7526
+ throw new LitsError('Expected comma or closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
7483
7527
  }
7484
7528
  if (isA_OperatorToken(this.peek(), ',')) {
7485
7529
  this.advance();
7486
7530
  }
7487
7531
  }
7532
+ var arity = restArg !== undefined ? { min: args.length } : args.length;
7488
7533
  if (!isRParenToken(this.peek())) {
7489
- return null;
7490
- }
7491
- this.advance();
7492
- if (!isA_OperatorToken(this.peek(), '=>')) {
7493
- return null;
7534
+ throw new LitsError('Expected closing parenthesis', (_e = getTokenDebugData(this.peek())) === null || _e === void 0 ? void 0 : _e.sourceCodeInfo);
7494
7535
  }
7495
- this.advance();
7496
7536
  var letBindings = letBindingObject ? arrayToPairs(letBindingObject.p) : [];
7497
- var body = this.parseExpression();
7498
- var arity = restArg !== undefined ? { min: args.length } : args.length;
7537
+ var functionArguments = {
7538
+ m: args,
7539
+ r: restArg,
7540
+ b: letBindings.map(function (pair) {
7541
+ var key = pair[0];
7542
+ var value = pair[1];
7543
+ return {
7544
+ t: AstNodeType.Binding,
7545
+ n: key.v,
7546
+ v: value,
7547
+ p: [],
7548
+ token: getTokenDebugData(key.token) && key.token,
7549
+ };
7550
+ }),
7551
+ };
7552
+ this.advance();
7499
7553
  return {
7500
- t: AstNodeType.SpecialExpression,
7501
- n: 'fn',
7502
- p: [],
7503
- o: [{
7504
- as: {
7505
- m: args,
7506
- r: restArg,
7507
- b: letBindings.map(function (pair) {
7508
- var key = pair[0];
7509
- var value = pair[1];
7510
- return {
7511
- t: AstNodeType.Binding,
7512
- n: key.v,
7513
- v: value,
7514
- p: [],
7515
- token: getTokenDebugData(key.token) && key.token,
7516
- };
7517
- }),
7518
- },
7519
- b: [body],
7520
- a: arity,
7521
- }],
7522
- token: getTokenDebugData(firstToken) && firstToken,
7554
+ functionArguments: functionArguments,
7555
+ arity: arity,
7523
7556
  };
7524
7557
  };
7525
7558
  AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
@@ -7711,6 +7744,50 @@ var AlgebraicParser = /** @class */ (function () {
7711
7744
  };
7712
7745
  return node;
7713
7746
  };
7747
+ AlgebraicParser.prototype.parseDef = function (token) {
7748
+ this.advance();
7749
+ var symbol = parseSymbol(this.tokenStream, this.parseState);
7750
+ assertA_OperatorToken(this.peek(), '=');
7751
+ this.advance();
7752
+ var value = this.parseExpression();
7753
+ return {
7754
+ t: AstNodeType.SpecialExpression,
7755
+ n: 'def',
7756
+ p: [symbol, value],
7757
+ token: getTokenDebugData(token) && token,
7758
+ };
7759
+ };
7760
+ AlgebraicParser.prototype.parseDefn = function (token) {
7761
+ var _a;
7762
+ this.advance();
7763
+ var symbol = parseSymbol(this.tokenStream, this.parseState);
7764
+ var _b = this.parseFunctionArguments(), functionArguments = _b.functionArguments, arity = _b.arity;
7765
+ assertLBraceToken(this.peek());
7766
+ this.advance();
7767
+ var body = [];
7768
+ while (!this.isAtEnd() && !isRBraceToken(this.peek())) {
7769
+ body.push(this.parseExpression());
7770
+ if (isA_OperatorToken(this.peek(), ';')) {
7771
+ this.advance();
7772
+ }
7773
+ }
7774
+ if (!isRBraceToken(this.peek())) {
7775
+ throw new LitsError('Expected closing brace', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
7776
+ }
7777
+ this.advance();
7778
+ return {
7779
+ t: AstNodeType.SpecialExpression,
7780
+ n: 'defn',
7781
+ f: symbol,
7782
+ p: [],
7783
+ o: [{
7784
+ as: functionArguments,
7785
+ b: body,
7786
+ a: arity,
7787
+ }],
7788
+ token: getTokenDebugData(token) && token,
7789
+ };
7790
+ };
7714
7791
  AlgebraicParser.prototype.isAtEnd = function () {
7715
7792
  return this.parseState.position >= this.tokenStream.tokens.length;
7716
7793
  };
@@ -8000,10 +8077,18 @@ function parsePolishToken(tokenStream, parseState) {
8000
8077
  parseState.position += 1;
8001
8078
  parseState.algebraic = true;
8002
8079
  var algebraicParser = new AlgebraicParser(tokenStream, parseState);
8003
- var node = algebraicParser.parse();
8080
+ var nodes = algebraicParser.parse();
8004
8081
  assertEndNotationToken(tokenStream.tokens[parseState.position++]);
8005
8082
  parseState.algebraic = false;
8006
- return node;
8083
+ if (nodes.length === 1) {
8084
+ return nodes[0];
8085
+ }
8086
+ return {
8087
+ t: AstNodeType.SpecialExpression,
8088
+ n: 'do',
8089
+ p: nodes,
8090
+ token: nodes[0].token,
8091
+ };
8007
8092
  }
8008
8093
  case 'PolNotation': {
8009
8094
  var astNodes = [];
@@ -8070,7 +8155,16 @@ function removeUnnecessaryTokens(tokenStream) {
8070
8155
  function parseToken(tokenStream, parseState) {
8071
8156
  if (parseState.algebraic) {
8072
8157
  var algebraicParser = new AlgebraicParser(tokenStream, parseState);
8073
- return algebraicParser.parse();
8158
+ var nodes = algebraicParser.parse();
8159
+ if (nodes.length === 1) {
8160
+ return nodes[0];
8161
+ }
8162
+ return {
8163
+ t: AstNodeType.SpecialExpression,
8164
+ n: 'do',
8165
+ p: nodes,
8166
+ token: nodes[0].token,
8167
+ };
8074
8168
  }
8075
8169
  return parsePolishToken(tokenStream, parseState);
8076
8170
  }
@@ -8160,13 +8254,10 @@ var algebraicReservedNamesRecord = {
8160
8254
  'false': { value: false },
8161
8255
  'nil': { value: null },
8162
8256
  'null': { value: null },
8163
- 'def': { value: null, forbidden: true },
8164
- 'defs': { value: null, forbidden: true },
8165
8257
  'if-let': { value: null, forbidden: true },
8166
8258
  'when-let': { value: null, forbidden: true },
8167
8259
  'when-first': { value: null, forbidden: true },
8168
8260
  'fn': { value: null, forbidden: true },
8169
- 'defn': { value: null, forbidden: true },
8170
8261
  'defns': { value: null, forbidden: true },
8171
8262
  'try': { value: null, forbidden: true },
8172
8263
  'recur': { value: null, forbidden: true },