numenor
Version:
Customizable, safe evaluator of JavaScript-like expressions.
45 lines (32 loc) • 1.53 kB
JavaScript
;
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;