From 9df20fcbc5f9d2ef01ac90010427c8baca3f461a Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 23 Apr 2022 09:38:05 +0100 Subject: [PATCH] support `cat`ting subpatterns, fixes #87 --- packages/core/pattern.mjs | 5 ++++- packages/core/test/pattern.test.mjs | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 3662b405..4c8df71d 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -837,7 +837,10 @@ export function stack(...pats) { export function slowcat(...pats) { // Concatenation: combines a list of patterns, switching between them // successively, one per cycle. - pats = pats.map(reify); + + // Array test here is to avoid infinite recursions.. + pats = pats.map(pat => Array.isArray(pat) ? sequence(...pat) : reify(pat)); + const query = function (state) { const span = state.span; const pat_n = mod(span.begin.sam(), pats.length); diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs index 1c60766a..17385c78 100644 --- a/packages/core/test/pattern.test.mjs +++ b/packages/core/test/pattern.test.mjs @@ -413,6 +413,12 @@ describe('Pattern', function () { ['c'], ); }); + it ('Can cat subpatterns', () => { + sameFirst( + slowcat('a', ['b','c']).fast(4), + sequence('a', ['b', 'c']).fast(2) + ) + }) }); describe('rev()', function () { it('Can reverse things', function () {