-
Notifications
You must be signed in to change notification settings - Fork 131
/
Op.nqp
48 lines (44 loc) · 1.28 KB
/
Op.nqp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class QAST::Op is QAST::Node {
has str $!name;
has str $!op;
has str $!childorder;
method name(*@value) {
$!name := @value[0] if @value;
nqp::isnull_s($!name) ?? "" !! $!name
}
method op(*@value) {
$!op := @value[0] if @value;
nqp::isnull_s($!op) ?? "" !! $!op
}
method childorder(*@value) {
$!childorder := @value[0] if @value;
nqp::isnull_s($!childorder) ?? "" !! $!childorder
}
method substitute_inline_placeholders(@fillers) {
my $result := self.shallow_clone();
my $i := 0;
my $elems := +@(self);
while $i < $elems {
$result[$i] := self[$i].substitute_inline_placeholders(@fillers)
unless nqp::isstr(self[$i]);
$i := $i + 1;
}
$result
}
method evaluate_unquotes(@unquotes) {
my $result := self.shallow_clone();
my $i := 0;
my $elems := +@(self);
while $i < $elems {
$result[$i] := self[$i].evaluate_unquotes(@unquotes)
unless nqp::isstr(self[$i]);
$i := $i + 1;
}
$result
}
method dump_extra_node_info() {
!nqp::isnull_s($!name) && nqp::chars($!name)
?? "$!op $!name"
!! $!op;
}
}