Skip to content

Commit 6e925d8

Browse files
authored
Flatten nested condition
For improving readability
1 parent 91240e9 commit 6e925d8

File tree

1 file changed

+52
-63
lines changed

1 file changed

+52
-63
lines changed

src/QRegex/P6Regex/Optimizer.nqp

Lines changed: 52 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -22,50 +22,37 @@ class QRegex::Optimizer {
2222
method all_subtypes($node, $type) {
2323
my int $res := 0;
2424
for $node {
25-
if $node.rxtype eq $type {
26-
$res++
27-
} else {
28-
return -1;
29-
}
25+
return -1 if $node.rxtype ne $type;
26+
$res++;
3027
}
3128
return $res;
3229
}
3330

3431
method first_non_concat_child($node) {
3532
while nqp::elems(@($node)) >= 1 {
36-
if nqp::istype($node, QAST::Regex) {
37-
if $node.rxtype eq 'concat' {
38-
if $node[0].rxtype eq 'qastnode' && $node[0].subtype eq 'declarative' {
39-
# the debugger puts these all over our code; we should pretend we never saw them.
40-
$node := $node[1];
41-
} else {
42-
$node := $node[0];
43-
}
44-
} else {
45-
last;
46-
}
47-
} else {
48-
last;
49-
}
33+
last unless nqp::istype($node, QAST::Regex);
34+
last unless $node.rxtype eq 'concat';
35+
$node := ($node[0].rxtype eq 'qastnode' && $node[0].subtype eq 'declarative')
36+
?? $node[1] !! $node[0];
5037
}
5138
$node;
5239
}
5340

5441
method dont_scan($node) {
5542
while nqp::elems(@($node)) >= 1 {
56-
if nqp::istype($node, QAST::Regex) {
57-
if nqp::istype($node[0], QAST::Regex) && $node[0].rxtype eq 'scan' {
58-
$node.shift;
59-
last;
60-
}
61-
if $node.rxtype eq 'concat' {
62-
$node := $node[0];
63-
} else {
64-
last;
65-
}
43+
last unless nqp::istype($node, QAST::Regex);
44+
45+
if nqp::istype($node[0], QAST::Regex) && $node[0].rxtype eq 'scan' {
46+
$node.shift;
47+
last;
48+
}
49+
50+
if $node.rxtype eq 'concat' {
51+
$node := $node[0];
6652
} else {
6753
last;
6854
}
55+
6956
}
7057
}
7158

@@ -152,45 +139,47 @@ class QRegex::Optimizer {
152139
}
153140

154141
method visit_children($node) {
142+
if nqp::isstr($node) {
143+
return;
144+
}
145+
155146
my int $i := 0;
156-
unless nqp::isstr($node) {
157-
my int $n := nqp::elems(@($node));
158-
while $i < $n {
159-
my $visit := $node[$i];
160-
if nqp::istype($visit, QAST::Regex) {
161-
my $type := $visit.rxtype;
162-
if $type eq 'concat' {
163-
$node[$i] := self.visit_concat($visit);
164-
} elsif $type eq 'literal' {
165-
} elsif $type eq 'quant' {
166-
self.visit_children($visit);
167-
} elsif $type eq 'subrule' {
168-
$node[$i] := $!main_opt($node[$i]) if $!main_opt;
169-
$node[$i] := self.simplify_assertion($visit);
170-
} elsif $type eq 'qastnode' {
171-
$node[$i] := $!main_opt($node[$i]) if $!main_opt;
172-
} elsif $type eq 'anchor' {
173-
} elsif $type eq 'enumcharlist' {
174-
} elsif $type eq 'cclass' {
175-
} elsif $type eq 'scan' {
176-
} elsif $type eq 'charrange' {
177-
} elsif $type eq 'dynquant' {
178-
$node[$i] := $!main_opt($node[$i]) if $!main_opt;
179-
} elsif $type eq 'pass' || $type eq 'fail' {
180-
} else {
181-
# alt, altseq, conjseq, conj, quant
182-
self.visit_children($visit);
183-
}
184-
} elsif nqp::istype($visit, QAST::Block) {
185-
@!outer.push($visit);
147+
my int $n := nqp::elems(@($node));
148+
while $i < $n {
149+
my $visit := $node[$i];
150+
if nqp::istype($visit, QAST::Regex) {
151+
my $type := $visit.rxtype;
152+
if $type eq 'concat' {
153+
$node[$i] := self.visit_concat($visit);
154+
} elsif $type eq 'literal' {
155+
} elsif $type eq 'quant' {
186156
self.visit_children($visit);
187-
@!outer.pop();
188-
}
189-
else {
157+
} elsif $type eq 'subrule' {
158+
$node[$i] := $!main_opt($node[$i]) if $!main_opt;
159+
$node[$i] := self.simplify_assertion($visit);
160+
} elsif $type eq 'qastnode' {
161+
$node[$i] := $!main_opt($node[$i]) if $!main_opt;
162+
} elsif $type eq 'anchor' {
163+
} elsif $type eq 'enumcharlist' {
164+
} elsif $type eq 'cclass' {
165+
} elsif $type eq 'scan' {
166+
} elsif $type eq 'charrange' {
167+
} elsif $type eq 'dynquant' {
168+
$node[$i] := $!main_opt($node[$i]) if $!main_opt;
169+
} elsif $type eq 'pass' || $type eq 'fail' {
170+
} else {
171+
# alt, altseq, conjseq, conj, quant
190172
self.visit_children($visit);
191173
}
192-
$i := $i + 1;
174+
} elsif nqp::istype($visit, QAST::Block) {
175+
@!outer.push($visit);
176+
self.visit_children($visit);
177+
@!outer.pop();
178+
}
179+
else {
180+
self.visit_children($visit);
193181
}
182+
$i := $i + 1;
194183
}
195184
}
196185
}

0 commit comments

Comments
 (0)