diff --git a/src/RxOp.pm b/src/RxOp.pm index 4b76435a..e005fa1c 100644 --- a/src/RxOp.pm +++ b/src/RxOp.pm @@ -195,6 +195,33 @@ use CgOp; no Moose; } +{ + package RxOp::SeqAlt; + use Moose; + extends 'RxOp'; + + # zyg * N + + sub op { + my ($self, $cn, $cont) = @_; + + my $cni = Niecza::Actions->gensym; + my @terms; + for (@{ $self->zyg }) { + push @terms, Op::CallSub->new( + invocant => $self->_close_k($_->op($cn, $cont)), + positionals => [ Op::Lexical->new(name => $cni) ]); + } + + $cni, Op::StatementList->new(children => \@terms); + } + + sub lad { $_->zyg->[0]->lad } + + __PACKAGE__->meta->make_immutable; + no Moose; +} + { package RxOp::ConfineLang; use Moose; diff --git a/test.pl b/test.pl index 26d8b033..45035545 100644 --- a/test.pl +++ b/test.pl @@ -2,7 +2,7 @@ use Test; -plan 386; +plan 392; ok 1, "one is true"; ok 2, "two is also true"; @@ -905,3 +905,7 @@ ($rgx, $rgxname, @y, @n) rxtest /<[ y ]>/, '<[ y ]>', ("y"), (" ", "x", "z"); rxtest /<[ i .. k ]>/, '<[ i .. k ]>', ("i", "j", "k"), ("h", "l"); rxtest /<[ \W a..z ]>/, '<[\W a..z]>', ("a", "z", "+"), ("\x4E00"); + +rxtest /a || b/, 'a || b', ("a", "b"), ("c", ""); +rxtest /x [a || aa]: c/, 'x[a||b]:c', ("xac",), ("xaac",); +