| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
#!/usr/bin/perl |
|
2
|
37
|
|
|
37
|
|
296
|
use strict; |
|
|
37
|
|
|
|
|
172
|
|
|
|
37
|
|
|
|
|
1086
|
|
|
3
|
37
|
|
|
37
|
|
221
|
use warnings; |
|
|
37
|
|
|
|
|
101
|
|
|
|
37
|
|
|
|
|
1387
|
|
|
4
|
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
package WWW::Shopify::Liquid::Tag::If; |
|
6
|
37
|
|
|
37
|
|
229
|
use base 'WWW::Shopify::Liquid::Tag::Enclosing'; |
|
|
37
|
|
|
|
|
104
|
|
|
|
37
|
|
|
|
|
3834
|
|
|
7
|
37
|
|
|
37
|
|
261
|
use Scalar::Util qw(blessed); |
|
|
37
|
|
|
|
|
88
|
|
|
|
37
|
|
|
|
|
26479
|
|
|
8
|
|
|
|
|
|
|
|
|
9
|
0
|
|
|
0
|
0
|
0
|
sub min_arguments { return 1; } |
|
10
|
0
|
|
|
0
|
0
|
0
|
sub max_arguments { return 1; } |
|
11
|
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
sub new { |
|
13
|
190
|
|
|
190
|
0
|
493
|
my $package = shift; |
|
14
|
190
|
|
|
|
|
1148
|
my $self = bless { |
|
15
|
|
|
|
|
|
|
line => shift, |
|
16
|
|
|
|
|
|
|
core => shift, |
|
17
|
|
|
|
|
|
|
arguments => shift, |
|
18
|
|
|
|
|
|
|
true_path => undef, |
|
19
|
|
|
|
|
|
|
false_path => undef |
|
20
|
|
|
|
|
|
|
}, $package; |
|
21
|
190
|
|
|
|
|
477
|
$self->interpret_inner_tokens(@{$_[0]}); |
|
|
190
|
|
|
|
|
964
|
|
|
22
|
190
|
|
|
|
|
584
|
return $self; |
|
23
|
|
|
|
|
|
|
} |
|
24
|
353
|
|
|
353
|
0
|
1269
|
sub inner_tags { return qw(elsif else) } |
|
25
|
7
|
|
|
7
|
0
|
33
|
sub subelements { qw(true_path false_path arguments); } |
|
26
|
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
sub interpret_inner_tokens { |
|
28
|
190
|
|
|
190
|
0
|
629
|
my ($self, @tokens) = @_; |
|
29
|
|
|
|
|
|
|
# Comes in [true_path], [tag, other_path], [tag, other_path], ... |
|
30
|
190
|
|
|
|
|
434
|
my $token = shift(@tokens); |
|
31
|
190
|
50
|
|
|
|
627
|
return undef unless $token; |
|
32
|
190
|
|
|
|
|
634
|
$self->{true_path} = $token->[0]; |
|
33
|
190
|
100
|
|
|
|
858
|
if (int(@tokens) > 0) { |
|
34
|
62
|
50
|
66
|
|
|
285
|
die new WWW::Shopify::Liquid::Exception::Parser($self, "else cannot be anywhere, except the end tag of an if statement.") if $tokens[0]->[0]->tag eq "else" && int(@tokens) > 1; |
|
35
|
62
|
100
|
|
|
|
244
|
if ($tokens[0]->[0]->tag eq "elsif") { |
|
36
|
12
|
|
|
|
|
31
|
$token = shift(@tokens); |
|
37
|
12
|
|
|
|
|
33
|
my $arguments = $token->[0]->{arguments}; |
|
38
|
12
|
|
|
|
|
65
|
$self->{false_path} = WWW::Shopify::Liquid::Tag::If->new($token->[0]->{line}, "if", $arguments, [[$token->[1]], @tokens]); |
|
39
|
|
|
|
|
|
|
} |
|
40
|
|
|
|
|
|
|
else { |
|
41
|
50
|
|
|
|
|
173
|
$self->{false_path} = $tokens[0]->[1]; |
|
42
|
|
|
|
|
|
|
} |
|
43
|
|
|
|
|
|
|
} |
|
44
|
|
|
|
|
|
|
} |
|
45
|
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
sub render { |
|
47
|
412
|
|
|
412
|
0
|
1961
|
my ($self, $renderer, $hash) = @_; |
|
48
|
412
|
50
|
33
|
|
|
1367
|
return $renderer->state->value($self) if $renderer->state && $renderer->state->value($self); |
|
49
|
412
|
|
|
|
|
1768
|
my $arguments = $self->render_subelement($renderer, $hash, $self->{arguments}); |
|
50
|
412
|
|
|
|
|
904
|
my $result; |
|
51
|
412
|
|
|
|
|
810
|
eval { |
|
52
|
412
|
100
|
100
|
|
|
1254
|
my $path = $self->{((!$self->inversion && $arguments->[0]) || ($self->inversion && !$arguments->[0])) ? 'true_path' : 'false_path'}; |
|
53
|
412
|
100
|
100
|
|
|
1806
|
$result = $path && !$self->is_processed($path) ? $path->render($renderer, $hash) : $path; |
|
54
|
|
|
|
|
|
|
}; |
|
55
|
412
|
100
|
|
|
|
1269
|
if (my $exp = $@) { |
|
56
|
4
|
50
|
33
|
|
|
34
|
$exp->value($self->{arguments}, $arguments) if blessed($exp) && $exp->isa('WWW::Shopify::Liquid::Exception::Control::Pause'); |
|
57
|
4
|
|
|
|
|
19
|
die $exp; |
|
58
|
|
|
|
|
|
|
} |
|
59
|
408
|
100
|
|
|
|
4650
|
return defined $result ? $result : ''; |
|
60
|
|
|
|
|
|
|
} |
|
61
|
|
|
|
|
|
|
|
|
62
|
754
|
|
|
754
|
0
|
4073
|
sub inversion { return 0; } |
|
63
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
sub optimize { |
|
65
|
43
|
|
|
43
|
0
|
148
|
my ($self, $optimizer, $hash) = @_; |
|
66
|
43
|
50
|
|
|
|
242
|
$self->{arguments}->[0] = $self->{arguments}->[0]->optimize($optimizer, $hash) if !$self->is_processed($self->{arguments}->[0]); |
|
67
|
43
|
100
|
|
|
|
235
|
if ($self->is_processed($self->{arguments}->[0])) { |
|
68
|
24
|
100
|
100
|
|
|
93
|
my $path = $self->{((!$self->inversion && $self->{arguments}->[0]) || ($self->inversion && !$self->{arguments}->[0])) ? 'true_path' : 'false_path'}; |
|
69
|
24
|
100
|
|
|
|
94
|
return $self->is_processed($path) ? $path : $path->optimize($optimizer, $hash); |
|
70
|
|
|
|
|
|
|
} |
|
71
|
19
|
100
|
|
|
|
89
|
if (!$self->is_processed($self->{false_path})) { |
|
72
|
1
|
|
|
|
|
7
|
$optimizer->push_conditional_state; |
|
73
|
1
|
|
|
|
|
4
|
$self->{false_path} = $self->{false_path}->optimize($optimizer, $hash); |
|
74
|
1
|
|
|
|
|
6
|
$optimizer->pop_conditional_state($hash); |
|
75
|
|
|
|
|
|
|
} |
|
76
|
19
|
50
|
|
|
|
77
|
if (!$self->is_processed($self->{true_path})) { |
|
77
|
19
|
|
|
|
|
108
|
$optimizer->push_conditional_state; |
|
78
|
19
|
|
|
|
|
103
|
$self->{true_path} = $self->{true_path}->optimize($optimizer, $hash); |
|
79
|
19
|
|
|
|
|
109
|
$optimizer->pop_conditional_state($hash); |
|
80
|
|
|
|
|
|
|
} |
|
81
|
19
|
|
|
|
|
73
|
return $self; |
|
82
|
|
|
|
|
|
|
} |
|
83
|
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
1; |