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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
|
use lib (-e 't' ? 't' : 'test'), 'inc';
use TestModuleCompile tests => 9;
filters({ perl => 'process' });
no_diff;
run_is perl => 'folded';
sub process { Module::Compile->pmc_fold_blocks(shift) }
__DATA__
=== Fold a heredoc whilst preserving ~s
--- perl
my $x = "~ ~~ ~~~ ~~~~ ~~~~~";
sub foo {
my $self = shift;
$self->baz(<<END);
sub bar {
print "bar";
}
END
}
--- folded
my $x = "~ ~~ ~~~ ~~~~ ~~~~~";
sub foo {
my $self = shift;
$self->baz(<<END);
8dc957d71f448e926d28ebe8444d5b33c1d69dc2
END
}
=== Folded heredoc, ignoring <<=
--- perl
my $x = 1234;
$x <<= 3;
my $y = 4321;
sub foo {
my $self = shift;
$self->baz(<<END);
sub bar {
print "bar";
}
END
}
--- folded
my $x = 1234;
$x <<= 3;
my $y = 4321;
sub foo {
my $self = shift;
$self->baz(<<END);
8dc957d71f448e926d28ebe8444d5b33c1d69dc2
END
}
=== Empty string termination
--- perl
sub foo {
my $self = shift;
$self->baz(<<'');
sub bar {
print "bar";
}
}
--- folded
sub foo {
my $self = shift;
$self->baz(<<'');
8dc957d71f448e926d28ebe8444d5b33c1d69dc2
}
=== A double heredoc
--- perl
sub foo {
my $self = shift;
$self->baz(<<'THIS', <<"THAT");
THERE
THAT
THIS
THIS
THAT
THERE
}
--- folded
sub foo {
my $self = shift;
$self->baz(<<'THIS', <<"THAT");
fe5485c0595b48c3a4126af814e8d53517ecd1d8
THIS
5b35b1abf837461ac7f9b09d42f8560601b028f6
THAT
THERE
}
=== A double heredoc. Same END token
--- perl
sub foo {
my $self = shift;
$self->baz(<<END, <<END);
THERE
THAT
END
THIS
END
THERE
}
--- folded
sub foo {
my $self = shift;
$self->baz(<<END, <<END);
fe5485c0595b48c3a4126af814e8d53517ecd1d8
END
5b35b1abf837461ac7f9b09d42f8560601b028f6
END
THERE
}
=== A Heredoc inside Pod
--- perl
my $a = 1;
=head1 Stuffy Stuff
my $foo = <<END;
=cut
my $bar = <<END;
ONE
TWO
END
THREE
--- folded
my $a = 1;
=pod 6d44253d8e3ebb3bc202ea5a2585d542c7c3c57b
=cut
my $bar = <<END;
0a1177eb51a480f6ae3ff77264820e6068284b0f
END
THREE
=== A Heredoc inside comment block
--- perl
my $a = 1;
# my $foo = <<END;
# my $baz = <<END;
my $bar = <<END;
ONE
TWO
END
THREE
--- folded
my $a = 1;
# 04e1a5fcd227db0d2beed0a1dacadb4562451127
my $bar = <<END;
0a1177eb51a480f6ae3ff77264820e6068284b0f
END
THREE
=== Not a heredoc, but a literal "<<"
--- perl
(
'<<' =>
'>>',
);
--- folded
(
'<<' =>
'>>',
);
=== All kinds
--- perl
print "ok 1";
# $xxx = <<END;
# =head1 Hey1
# =cut
# __END__
=head1 Hey2
$xxx = <<END;
__END__
# comment
=cut
my $foo = <<'END';
__END__
$bar = <<BAR;
XXX
=head1 Hey3
=cut
END
print $foo;
__END__
$foo = <<FOO;
=head1 Hey4
# comment
--- folded
print "ok 1";
# 0aaf3d0e5f1c247fa72dd952df5728719b4f474e
=pod 401ec699fc81869e1c155a19c05ac9e9e622817b
=cut
my $foo = <<'END';
557737b9b1378f1b8ef45b92d739ddca273705f6
END
print $foo;
__DATA__
124fdf752349d6465bd0462bc8195df2ef333bc9
|