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