UNPKG

numenor

Version:

Customizable, safe evaluator of JavaScript-like expressions.

45 lines (32 loc) 1.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Sequence = void 0; var ExpressionType = _interopRequireWildcard(require("../ExpressionType")); var _ = require("./"); var _Lexer = require("../../Lexer"); var _Error = require("../Error"); var _Precedence = require("../Precedence"); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } var parselet = function parselet(parser, lhs, token) { if (token.type !== _Lexer.TokenType.Comma) { throw new SyntaxError((0, _Error.UnknownToken)(token)); } var expressions = [lhs]; var comma = token; do { if (parser.match(_Lexer.TokenType.EOF) || parser.match(_Lexer.TokenType.RParen)) { // do not allow trailing comma throw new SyntaxError((0, _Error.UnknownToken)(comma)); } expressions.push(parser.parse(_Precedence.Sequence)); comma = parser.token; } while (parser.accept(_Lexer.TokenType.Comma)); return { type: ExpressionType.Sequence, expressions: expressions }; }; var Sequence = (0, _.makeInfix)(parselet, _Precedence.Sequence); exports.Sequence = Sequence;