Skip to content

Commit

Permalink
Allow multiregexes of the form category:usage
Browse files Browse the repository at this point in the history
Before, we always had to use "category:sym<usage>" even if "usage" was
entirely <ident>
  • Loading branch information
Mouq committed Oct 28, 2013
1 parent 64007fd commit 1931744
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 12 deletions.
22 changes: 17 additions & 5 deletions src/NQP/Actions.nqp
Original file line number Diff line number Diff line change
Expand Up @@ -1751,12 +1751,24 @@ class NQP::RegexActions is QRegex::P6Regex::Actions {
}
elsif $name eq 'sym' {
my str $fullrxname := %*RX<name>;
my str $rxname := "";
my int $loc := nqp::index($fullrxname, ':sym<');
$loc := nqp::index($fullrxname, ':sym«')
if $loc < 0;
my str $rxname := nqp::substr($fullrxname, $loc + 5, nqp::chars($fullrxname) - $loc - 6);
$qast := QAST::Regex.new(:name('sym'), :rxtype<subcapture>, :node($/),
QAST::Regex.new(:rxtype<literal>, $rxname, :node($/)));
if $loc >= 0 {
$rxname := nqp::substr($fullrxname, $loc + 5 );
$rxname := nqp::substr( $rxname, 0, nqp::chars($rxname) - 1);
}
else {
$loc := nqp::index($fullrxname, ':');
my $angleloc := nqp::index($fullrxname, '<', $loc);
$rxname := nqp::substr($fullrxname, $loc + 1, $angleloc - $loc - 1) unless $loc < 0;
}
if $loc >= 0 {
$qast := QAST::Regex.new(:name('sym'), :rxtype<subcapture>, :node($/),
QAST::Regex.new(:rxtype<literal>, $rxname, :node($/)));
}
else {
self.panic("<sym> only valid in multiregexes");
}
}
else {
$qast := QAST::Regex.new(:rxtype<subrule>, :subtype<capture>,
Expand Down
2 changes: 1 addition & 1 deletion src/QRegex/Cursor.nqp
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ role NQPCursorRole is export {
my %protorx;
for self.HOW.methods(self) -> $meth {
my str $methname := $meth.name();
my int $sympos := nqp::index($methname, ':sym<');
my int $sympos := nqp::index($methname, ':');
if $sympos > 0 {
my str $prefix := nqp::substr($methname, 0, $sympos);
%protorx{$prefix} := [] unless nqp::existskey(%protorx, $prefix);
Expand Down
23 changes: 17 additions & 6 deletions src/QRegex/P6Regex/Actions.nqp
Original file line number Diff line number Diff line change
Expand Up @@ -489,13 +489,24 @@ class QRegex::P6Regex::Actions is HLL::Actions {
self.subrule_alias($qast, $name);
}
elsif $name eq 'sym' {
my $rxname := "";
my $loc := nqp::index(%*RX<name>, ':sym<');
$loc := nqp::index(%*RX<name>, ':sym«')
if $loc < 0;
my $rxname := nqp::substr(%*RX<name>, $loc + 5);
$rxname := nqp::substr( $rxname, 0, nqp::chars($rxname) - 1);
$qast := QAST::Regex.new(:name('sym'), :rxtype<subcapture>, :node($/),
QAST::Regex.new(:rxtype<literal>, $rxname, :node($/)));
if $loc >= 0 {
$rxname := nqp::substr(%*RX<name>, $loc + 5 );
$rxname := nqp::substr( $rxname, 0, nqp::chars($rxname) - 1);
}
else {
$loc := nqp::index(%*RX<name>, ':');
my $angleloc := nqp::index(%*RX<name>, '<', $loc);
$rxname := nqp::substr(%*RX<name>, $loc + 1, $angleloc - $loc - 1) unless $loc < 0;
}
if $loc >= 0 {
$qast := QAST::Regex.new(:name('sym'), :rxtype<subcapture>, :node($/),
QAST::Regex.new(:rxtype<literal>, $rxname, :node($/)));
}
else {
self.panic("<sym> is only valid in multiregexes");
}
}
else {
$qast := QAST::Regex.new(:rxtype<subrule>, :subtype<capture>,
Expand Down

0 comments on commit 1931744

Please sign in to comment.