Skip to content

Commit 6b9d226

Browse files
committed
Use faster nqp::elems instead of + on QAST nodes
Bench shows it being about 20% faster
1 parent f760f56 commit 6b9d226

18 files changed

+57
-52
lines changed

src/NQP/Optimizer.nqp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ class NQP::Optimizer {
361361
method visit_children($node, :$skip_selectors) {
362362
my int $i := 0;
363363
unless nqp::isstr($node) || !nqp::defined($node) {
364-
while $i < +@($node) {
364+
while $i < nqp::elems(@($node)) {
365365
unless $skip_selectors && $i % 2 {
366366
my $visit := $node[$i];
367367
if nqp::istype($visit, QAST::Op) {

src/NQP/World.nqp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ class NQP::World is HLL::World {
240240

241241
# Clear up the fixup statements.
242242
my $fixup_stmts := %!code_object_fixup_list{$subid};
243-
$fixup_stmts.shift() while +@($fixup_stmts);
243+
$fixup_stmts.shift() while nqp::elems(@($fixup_stmts));
244244
}
245245
$i := $i + 1;
246246
}

src/QAST/Block.nqp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class QAST::Block is QAST::Node does QAST::Children {
8484
method evaluate_unquotes(@unquotes) {
8585
my $result := self.shallow_clone();
8686
my $i := 0;
87-
my $elems := +@(self);
87+
my $elems := nqp::elems(@(self));
8888
while $i < $elems {
8989
$result[$i] := self[$i].evaluate_unquotes(@unquotes);
9090
$i := $i + 1;

src/QAST/Op.nqp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class QAST::Op is QAST::Node does QAST::Children {
3030

3131
method count_inline_placeholder_usages(@usages) {
3232
my int $i := 0;
33-
my int $elems := +@(self);
33+
my int $elems := nqp::elems(@(self));
3434
while $i < $elems {
3535
self[$i].count_inline_placeholder_usages(@usages);
3636
$i++;
@@ -40,7 +40,7 @@ class QAST::Op is QAST::Node does QAST::Children {
4040
method substitute_inline_placeholders(@fillers) {
4141
my $result := self.shallow_clone();
4242
my int $i := 0;
43-
my int $elems := +@(self);
43+
my int $elems := nqp::elems(@(self));
4444
while $i < $elems {
4545
$result[$i] := self[$i].substitute_inline_placeholders(@fillers)
4646
unless nqp::isstr(self[$i]);
@@ -52,7 +52,7 @@ class QAST::Op is QAST::Node does QAST::Children {
5252
method evaluate_unquotes(@unquotes) {
5353
my $result := self.shallow_clone();
5454
my $i := 0;
55-
my $elems := +@(self);
55+
my $elems := nqp::elems(@(self));
5656
while $i < $elems {
5757
$result[$i] := self[$i].evaluate_unquotes(@unquotes)
5858
unless nqp::isstr(self[$i]);

src/QAST/Stmt.nqp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class QAST::Stmt is QAST::Node does QAST::Children {
1313

1414
method count_inline_placeholder_usages(@usages) {
1515
my int $i := 0;
16-
my int $elems := +@(self);
16+
my int $elems := nqp::elems(@(self));
1717
while $i < $elems {
1818
self[$i].count_inline_placeholder_usages(@usages);
1919
$i++;
@@ -23,7 +23,7 @@ class QAST::Stmt is QAST::Node does QAST::Children {
2323
method substitute_inline_placeholders(@fillers) {
2424
my $result := self.shallow_clone();
2525
my int $i := 0;
26-
my int $elems := +@(self);
26+
my int $elems := nqp::elems(@(self));
2727
while $i < $elems {
2828
$result[$i] := self[$i].substitute_inline_placeholders(@fillers);
2929
$i++;
@@ -34,7 +34,7 @@ class QAST::Stmt is QAST::Node does QAST::Children {
3434
method evaluate_unquotes(@unquotes) {
3535
my $result := self.shallow_clone();
3636
my $i := 0;
37-
my $elems := +@(self);
37+
my $elems := nqp::elems(@(self));
3838
while $i < $elems {
3939
$result[$i] := self[$i].evaluate_unquotes(@unquotes);
4040
$i := $i + 1;

src/QAST/Stmts.nqp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class QAST::Stmts is QAST::Node does QAST::Children {
1313

1414
method count_inline_placeholder_usages(@usages) {
1515
my int $i := 0;
16-
my int $elems := +@(self);
16+
my int $elems := nqp::elems(@(self));
1717
while $i < $elems {
1818
self[$i].count_inline_placeholder_usages(@usages);
1919
$i++;
@@ -23,7 +23,7 @@ class QAST::Stmts is QAST::Node does QAST::Children {
2323
method substitute_inline_placeholders(@fillers) {
2424
my $result := self.shallow_clone();
2525
my $i := 0;
26-
my $elems := +@(self);
26+
my $elems := nqp::elems(@(self));
2727
while $i < $elems {
2828
$result[$i] := self[$i].substitute_inline_placeholders(@fillers);
2929
$i := $i + 1;
@@ -34,7 +34,7 @@ class QAST::Stmts is QAST::Node does QAST::Children {
3434
method evaluate_unquotes(@unquotes) {
3535
my $result := self.shallow_clone();
3636
my $i := 0;
37-
my $elems := +@(self);
37+
my $elems := nqp::elems(@(self));
3838
while $i < $elems {
3939
$result[$i] := self[$i].evaluate_unquotes(@unquotes);
4040
$i := $i + 1;

src/QAST/Want.nqp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class QAST::Want is QAST::Node does QAST::Children {
1919

2020
method count_inline_placeholder_usages(@usages) {
2121
my int $i := 0;
22-
my int $elems := +@(self);
22+
my int $elems := nqp::elems(@(self));
2323
while $i < $elems {
2424
self[$i].count_inline_placeholder_usages(@usages);
2525
$i := $i + 2;
@@ -29,7 +29,7 @@ class QAST::Want is QAST::Node does QAST::Children {
2929
method substitute_inline_placeholders(@fillers) {
3030
my $result := self.shallow_clone();
3131
my int $i := 0;
32-
my int $elems := +@(self);
32+
my int $elems := nqp::elems(@(self));
3333
while $i < $elems {
3434
$result[$i] := self[$i].substitute_inline_placeholders(@fillers);
3535
$i := $i + 2;
@@ -40,7 +40,7 @@ class QAST::Want is QAST::Node does QAST::Children {
4040
method evaluate_unquotes(@unquotes) {
4141
my $result := self.shallow_clone();
4242
my $i := 0;
43-
my $elems := +@(self);
43+
my $elems := nqp::elems(@(self));
4444
while $i < $elems {
4545
$result[$i] := self[$i].evaluate_unquotes(@unquotes);
4646
$i := $i + 2;

src/QRegex/NFA.nqp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ class QRegex::NFA {
168168
}
169169

170170
method altseq($node, $from, $to) {
171-
if +@($node) {
171+
if nqp::elems(@($node)) {
172172
my $indent := dentin();
173173
my int $st := self.regex_nfa($node[0], $from, $to);
174174
$to := $st if $to < 0 && $st > 0;

src/QRegex/P5Regex/Actions.nqp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,8 +455,8 @@ class QRegex::P5Regex::Actions is HLL::Actions {
455455
}
456456
elsif $qast.rxtype eq 'concat' {
457457
my @tmp;
458-
while +@($qast) { @tmp.push(@($qast).shift) }
459-
while @tmp { @($qast).push(self.flip_ast(@tmp.pop)) }
458+
while nqp::elems(@($qast)) { @tmp.push(@($qast).shift) }
459+
while @tmp { @($qast).push(self.flip_ast(@tmp.pop)) }
460460
}
461461
else {
462462
for @($qast) { self.flip_ast($_) }

src/QRegex/P6Regex/Actions.nqp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -993,8 +993,8 @@ class QRegex::P6Regex::Actions is HLL::Actions {
993993
}
994994
elsif $qast.rxtype eq 'concat' {
995995
my @tmp;
996-
while +@($qast) { @tmp.push(@($qast).shift) }
997-
while @tmp { @($qast).push(self.flip_ast(@tmp.pop)) }
996+
while nqp::elems(@($qast)) { @tmp.push(@($qast).shift) }
997+
while @tmp { @($qast).push(self.flip_ast(@tmp.pop)) }
998998
}
999999
else {
10001000
for @($qast) { self.flip_ast($_) }

0 commit comments

Comments
 (0)