UNPKG

parjs

Version:

A parser-combinator library for JavaScript.

49 lines (48 loc) 1.61 kB
"use strict"; /** * @module parjs/combinators */ /** */ Object.defineProperty(exports, "__esModule", { value: true }); const issues_1 = require("../issues"); const result_1 = require("../result"); const combinator_1 = require("./combinator"); const parser_1 = require("../parser"); function many(maxIterations = Infinity) { return combinator_1.defineCombinator(source => { return new class Many extends parser_1.ParjserBase { constructor() { super(...arguments); this.type = "many"; this.expecting = source.expecting; } _apply(ps) { let { position } = ps; let arr = []; let i = 0; while (true) { source.apply(ps); if (!ps.isOk) break; if (i >= maxIterations) break; if (maxIterations === Infinity && ps.position === position) { issues_1.Issues.guardAgainstInfiniteLoop("many"); } position = ps.position; arr.push(ps.value); i++; } if (ps.atLeast(result_1.ResultKind.HardFail)) { return; } ps.value = arr; // recover from the last failure. ps.position = position; ps.kind = result_1.ResultKind.Ok; } }(); }); } exports.many = many; //# sourceMappingURL=many.js.map