@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/index.js CHANGED
@@ -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 = [
@@ -3119,7 +3120,7 @@ var mathNormalExpression = {
3119
3120
  },
3120
3121
  };
3121
3122
 
3122
- var version = "2.0.13";
3123
+ var version = "2.0.14";
3123
3124
 
3124
3125
  var uuidTemplate = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
3125
3126
  var xyRegexp = /[xy]/g;
@@ -7150,6 +7151,7 @@ function fromBinaryOperatorToAstNode(operator, left, right, token) {
7150
7151
  token: getTokenDebugData(token) && token,
7151
7152
  };
7152
7153
  /* v8 ignore next 8 */
7154
+ case ';':
7153
7155
  case '!':
7154
7156
  case '~':
7155
7157
  case '=':
@@ -7170,14 +7172,33 @@ var AlgebraicParser = /** @class */ (function () {
7170
7172
  this.parseState.position += 1;
7171
7173
  };
7172
7174
  AlgebraicParser.prototype.parse = function () {
7173
- return this.parseExpression();
7175
+ var nodes = [];
7176
+ while (!this.isAtEnd()) {
7177
+ nodes.push(this.parseExpression());
7178
+ if (!isA_OperatorToken(this.peek(), ';')) {
7179
+ break;
7180
+ }
7181
+ this.advance();
7182
+ }
7183
+ return nodes;
7174
7184
  };
7175
7185
  AlgebraicParser.prototype.parseExpression = function (precedence) {
7176
7186
  var _a;
7177
7187
  if (precedence === void 0) { precedence = 0; }
7188
+ var firstToken = this.peek();
7189
+ if (isA_SymbolToken(firstToken) && firstToken[1] === 'def') {
7190
+ return this.parseDef(firstToken);
7191
+ }
7192
+ if (isA_SymbolToken(firstToken) && firstToken[1] === 'defn') {
7193
+ return this.parseDefn(firstToken);
7194
+ }
7178
7195
  var left = this.parseOperand();
7179
- while (!this.isAtEnd() && !isA_OperatorToken(this.peek(), ',') && !isRBracketToken(this.peek()) && !isRParenToken(this.peek())) {
7180
- var operator = this.peek();
7196
+ var operator = this.peek();
7197
+ while (!this.isAtEnd()
7198
+ && !isA_OperatorToken(operator, ',')
7199
+ && !isA_OperatorToken(operator, ';')
7200
+ && !isRBracketToken(operator)
7201
+ && !isRParenToken(operator)) {
7181
7202
  if (isA_BinaryOperatorToken(operator)) {
7182
7203
  var name_1 = operator[1];
7183
7204
  var newPrecedece = getPrecedence(name_1);
@@ -7207,6 +7228,7 @@ var AlgebraicParser = /** @class */ (function () {
7207
7228
  else {
7208
7229
  break;
7209
7230
  }
7231
+ operator = this.peek();
7210
7232
  }
7211
7233
  if (!left) {
7212
7234
  throw new LitsError('Expected operand', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
@@ -7453,13 +7475,11 @@ var AlgebraicParser = /** @class */ (function () {
7453
7475
  }
7454
7476
  case 'let':
7455
7477
  return this.parseLet(symbol, params);
7456
- case 'def':
7457
7478
  case 'defs':
7458
7479
  case 'if-let':
7459
7480
  case 'when-let':
7460
7481
  case 'when-first':
7461
7482
  case 'fn':
7462
- case 'defn':
7463
7483
  case 'defns':
7464
7484
  case 'try':
7465
7485
  case 'recur':
@@ -7482,8 +7502,32 @@ var AlgebraicParser = /** @class */ (function () {
7482
7502
  }
7483
7503
  };
7484
7504
  AlgebraicParser.prototype.parseLambdaFunction = function () {
7485
- var _a, _b;
7486
7505
  var firstToken = this.peek();
7506
+ try {
7507
+ var _a = this.parseFunctionArguments(), functionArguments = _a.functionArguments, arity = _a.arity;
7508
+ if (!isA_OperatorToken(this.peek(), '=>')) {
7509
+ return null;
7510
+ }
7511
+ this.advance();
7512
+ var body = this.parseExpression();
7513
+ return {
7514
+ t: exports.AstNodeType.SpecialExpression,
7515
+ n: 'fn',
7516
+ p: [],
7517
+ o: [{
7518
+ as: functionArguments,
7519
+ b: [body],
7520
+ a: arity,
7521
+ }],
7522
+ token: getTokenDebugData(firstToken) && firstToken,
7523
+ };
7524
+ }
7525
+ catch (_b) {
7526
+ return null;
7527
+ }
7528
+ };
7529
+ AlgebraicParser.prototype.parseFunctionArguments = function () {
7530
+ var _a, _b, _c, _d, _e;
7487
7531
  this.advance();
7488
7532
  var rest = false;
7489
7533
  var letBindingObject;
@@ -7506,7 +7550,7 @@ var AlgebraicParser = /** @class */ (function () {
7506
7550
  }
7507
7551
  var symbolToken = this.peek();
7508
7552
  if (!isA_SymbolToken(symbolToken)) {
7509
- return null;
7553
+ throw new LitsError('Expected symbol', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
7510
7554
  }
7511
7555
  if (rest) {
7512
7556
  restArg = symbolToken[1];
@@ -7517,47 +7561,36 @@ var AlgebraicParser = /** @class */ (function () {
7517
7561
  this.advance();
7518
7562
  }
7519
7563
  if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek())) {
7520
- return null;
7564
+ throw new LitsError('Expected comma or closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
7521
7565
  }
7522
7566
  if (isA_OperatorToken(this.peek(), ',')) {
7523
7567
  this.advance();
7524
7568
  }
7525
7569
  }
7570
+ var arity = restArg !== undefined ? { min: args.length } : args.length;
7526
7571
  if (!isRParenToken(this.peek())) {
7527
- return null;
7528
- }
7529
- this.advance();
7530
- if (!isA_OperatorToken(this.peek(), '=>')) {
7531
- return null;
7572
+ throw new LitsError('Expected closing parenthesis', (_e = getTokenDebugData(this.peek())) === null || _e === void 0 ? void 0 : _e.sourceCodeInfo);
7532
7573
  }
7533
- this.advance();
7534
7574
  var letBindings = letBindingObject ? arrayToPairs(letBindingObject.p) : [];
7535
- var body = this.parseExpression();
7536
- var arity = restArg !== undefined ? { min: args.length } : args.length;
7575
+ var functionArguments = {
7576
+ m: args,
7577
+ r: restArg,
7578
+ b: letBindings.map(function (pair) {
7579
+ var key = pair[0];
7580
+ var value = pair[1];
7581
+ return {
7582
+ t: exports.AstNodeType.Binding,
7583
+ n: key.v,
7584
+ v: value,
7585
+ p: [],
7586
+ token: getTokenDebugData(key.token) && key.token,
7587
+ };
7588
+ }),
7589
+ };
7590
+ this.advance();
7537
7591
  return {
7538
- t: exports.AstNodeType.SpecialExpression,
7539
- n: 'fn',
7540
- p: [],
7541
- o: [{
7542
- as: {
7543
- m: args,
7544
- r: restArg,
7545
- b: letBindings.map(function (pair) {
7546
- var key = pair[0];
7547
- var value = pair[1];
7548
- return {
7549
- t: exports.AstNodeType.Binding,
7550
- n: key.v,
7551
- v: value,
7552
- p: [],
7553
- token: getTokenDebugData(key.token) && key.token,
7554
- };
7555
- }),
7556
- },
7557
- b: [body],
7558
- a: arity,
7559
- }],
7560
- token: getTokenDebugData(firstToken) && firstToken,
7592
+ functionArguments: functionArguments,
7593
+ arity: arity,
7561
7594
  };
7562
7595
  };
7563
7596
  AlgebraicParser.prototype.parseShorthandLamdaFunction = function () {
@@ -7749,6 +7782,50 @@ var AlgebraicParser = /** @class */ (function () {
7749
7782
  };
7750
7783
  return node;
7751
7784
  };
7785
+ AlgebraicParser.prototype.parseDef = function (token) {
7786
+ this.advance();
7787
+ var symbol = parseSymbol(this.tokenStream, this.parseState);
7788
+ assertA_OperatorToken(this.peek(), '=');
7789
+ this.advance();
7790
+ var value = this.parseExpression();
7791
+ return {
7792
+ t: exports.AstNodeType.SpecialExpression,
7793
+ n: 'def',
7794
+ p: [symbol, value],
7795
+ token: getTokenDebugData(token) && token,
7796
+ };
7797
+ };
7798
+ AlgebraicParser.prototype.parseDefn = function (token) {
7799
+ var _a;
7800
+ this.advance();
7801
+ var symbol = parseSymbol(this.tokenStream, this.parseState);
7802
+ var _b = this.parseFunctionArguments(), functionArguments = _b.functionArguments, arity = _b.arity;
7803
+ assertLBraceToken(this.peek());
7804
+ this.advance();
7805
+ var body = [];
7806
+ while (!this.isAtEnd() && !isRBraceToken(this.peek())) {
7807
+ body.push(this.parseExpression());
7808
+ if (isA_OperatorToken(this.peek(), ';')) {
7809
+ this.advance();
7810
+ }
7811
+ }
7812
+ if (!isRBraceToken(this.peek())) {
7813
+ throw new LitsError('Expected closing brace', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
7814
+ }
7815
+ this.advance();
7816
+ return {
7817
+ t: exports.AstNodeType.SpecialExpression,
7818
+ n: 'defn',
7819
+ f: symbol,
7820
+ p: [],
7821
+ o: [{
7822
+ as: functionArguments,
7823
+ b: body,
7824
+ a: arity,
7825
+ }],
7826
+ token: getTokenDebugData(token) && token,
7827
+ };
7828
+ };
7752
7829
  AlgebraicParser.prototype.isAtEnd = function () {
7753
7830
  return this.parseState.position >= this.tokenStream.tokens.length;
7754
7831
  };
@@ -8038,10 +8115,18 @@ function parsePolishToken(tokenStream, parseState) {
8038
8115
  parseState.position += 1;
8039
8116
  parseState.algebraic = true;
8040
8117
  var algebraicParser = new AlgebraicParser(tokenStream, parseState);
8041
- var node = algebraicParser.parse();
8118
+ var nodes = algebraicParser.parse();
8042
8119
  assertEndNotationToken(tokenStream.tokens[parseState.position++]);
8043
8120
  parseState.algebraic = false;
8044
- return node;
8121
+ if (nodes.length === 1) {
8122
+ return nodes[0];
8123
+ }
8124
+ return {
8125
+ t: exports.AstNodeType.SpecialExpression,
8126
+ n: 'do',
8127
+ p: nodes,
8128
+ token: nodes[0].token,
8129
+ };
8045
8130
  }
8046
8131
  case 'PolNotation': {
8047
8132
  var astNodes = [];
@@ -8108,7 +8193,16 @@ function removeUnnecessaryTokens(tokenStream) {
8108
8193
  function parseToken(tokenStream, parseState) {
8109
8194
  if (parseState.algebraic) {
8110
8195
  var algebraicParser = new AlgebraicParser(tokenStream, parseState);
8111
- return algebraicParser.parse();
8196
+ var nodes = algebraicParser.parse();
8197
+ if (nodes.length === 1) {
8198
+ return nodes[0];
8199
+ }
8200
+ return {
8201
+ t: exports.AstNodeType.SpecialExpression,
8202
+ n: 'do',
8203
+ p: nodes,
8204
+ token: nodes[0].token,
8205
+ };
8112
8206
  }
8113
8207
  return parsePolishToken(tokenStream, parseState);
8114
8208
  }
@@ -8199,13 +8293,10 @@ var algebraicReservedNamesRecord = {
8199
8293
  'false': { value: false },
8200
8294
  'nil': { value: null },
8201
8295
  'null': { value: null },
8202
- 'def': { value: null, forbidden: true },
8203
- 'defs': { value: null, forbidden: true },
8204
8296
  'if-let': { value: null, forbidden: true },
8205
8297
  'when-let': { value: null, forbidden: true },
8206
8298
  'when-first': { value: null, forbidden: true },
8207
8299
  'fn': { value: null, forbidden: true },
8208
- 'defn': { value: null, forbidden: true },
8209
8300
  'defns': { value: null, forbidden: true },
8210
8301
  'try': { value: null, forbidden: true },
8211
8302
  'recur': { value: null, forbidden: true },