Skip to content

Commit 2c8b03a

Browse files
committed
Add some ints and other micro-opts to NFA code
Reduces BOOTNum allocations when compiling and makes compiling slightly faster.
1 parent 0d461d6 commit 2c8b03a

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

src/QRegex/NFA.nqp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class QRegex::NFA {
2828

2929
my $ACTIONS;
3030
my $nfadeb;
31-
my $ind;
31+
my int $ind;
3232

3333
sub dentin() {
3434
if $nfadeb {
@@ -513,7 +513,7 @@ class QRegex::NFA {
513513
dentout($!states)
514514
}
515515

516-
method mergesubrule($start, $to, $fate, $cursor, $name, %caller_seen?) {
516+
method mergesubrule(int $start, int $to, int $fate, $cursor, $name, %caller_seen?) {
517517
my $indent := dentin();
518518
my %seen := nqp::clone(%caller_seen);
519519
my @substates;
@@ -588,7 +588,7 @@ class QRegex::NFA {
588588
while $s < $send {
589589
note("$s:");
590590
for @substates[$s] -> $a, $v, $t {
591-
my $act := nqp::bitand_i($a,0xff);
591+
my int $act := nqp::bitand_i($a,0xff);
592592
my $action := $ACTIONS[$act];
593593
if $act == $EDGE_CODEPOINT || $act == $EDGE_CODEPOINT_LL {
594594
note("\t$t $action " ~ nqp::chr($v));
@@ -617,7 +617,7 @@ class QRegex::NFA {
617617
dentout(self.mergesubstates($start, $to, $fate, @substates, $cursor, %seen));
618618
}
619619

620-
method mergesubstates($start, $to, $fate, @substates, $cursor, %seen?) {
620+
method mergesubstates(int $start, int $to, int $fate, @substates, $cursor, %seen?) {
621621
my $indent := dentin();
622622
note("$indent mergesubstates start $start to $to fate $fate") if $nfadeb;
623623
$!states[0][$fate] := $fate; # overridden by !protoregex_nfa
@@ -652,7 +652,7 @@ class QRegex::NFA {
652652
}
653653
}
654654
elsif $substate[$j] == $EDGE_SUBRULE {
655-
my $j2 := $substate[$j+2];
655+
my int $j2 := $substate[$j+2];
656656
my $j1 := $substate[$j+1];
657657
nqp::splice($substate,[], $j, 3);
658658
self.mergesubrule($i, $j2, $fate, $cursor, $j1, %seen);
@@ -814,11 +814,11 @@ class QRegex::NFA {
814814
note("now $send states before unlinking empties") if $nfadeb;
815815
$s := 1;
816816
while $s < $send {
817-
my $edges := $!states[$s];
818817
if nqp::atpos_i($remap,$s) && $s > 1 {
819818
$!states[$s] := [];
820819
}
821820
else {
821+
my $edges := $!states[$s];
822822
my int $eend := nqp::elems($edges);
823823
my int $e := 2;
824824
while $e < $eend {
@@ -859,8 +859,7 @@ class QRegex::NFA {
859859
$edges[$e + 1] := $sedges[1];
860860
$edges[$e + 2] := $sedges[2];
861861

862-
my int $refcnt := nqp::atpos_i($refs,$to);
863-
$refcnt := $refcnt - 1;
862+
my int $refcnt := nqp::atpos_i($refs,$to) - 1;
864863
nqp::bindpos_i($refs,$to,$refcnt);
865864
$!states[$to] := [] unless $refcnt; # remove if no refs remaining
866865
}
@@ -908,7 +907,7 @@ class QRegex::NFA {
908907
$s := 1;
909908
while $s < $send {
910909
if +$!states[$s] {
911-
my $newpos := nqp::atpos_i($remap,$s);
910+
my int $newpos := nqp::atpos_i($remap,$s);
912911
note("OOPS outrageous $newpos") if $newpos > $s;
913912
if $newpos {
914913
nqp::bindpos($newstates, $newpos, $!states[$s]);
@@ -919,7 +918,7 @@ class QRegex::NFA {
919918
my int $to := $edges[$e];
920919
my int $act := nqp::bitand_i($edges[$e-2], 0xff);
921920
if $to {
922-
my $to2 := nqp::atpos_i($remap,$to);
921+
my int $to2 := nqp::atpos_i($remap,$to);
923922
note("In $s -> $newpos remapping " ~ $ACTIONS[$act] ~ " $to -> $to2") if $nfadeb;
924923
$edges[$e] := $to2;
925924
}
@@ -930,7 +929,7 @@ class QRegex::NFA {
930929
while $e < $eend {
931930
my int $act := nqp::bitand_i($edges[$e], 0xff);
932931
if $act < $EDGE_CHARLIST {
933-
my $f := 0;
932+
my int $f := 0;
934933
while $f < $e {
935934
if $act == $edges[$f] && $edges[$e+2] == $edges[$f+2] && $edges[$e+1] == $edges[$f+1] {
936935
note("Deleting dup edge at $s $e/$f") if $nfadeb;

0 commit comments

Comments
 (0)