Support attaching additional features
Leon Timmermans
10 years ago
1 | 1 |
|
2 | 2 |
{{$NEXT}}
|
3 | 3 |
Hard require 5.010
|
|
4 |
Support attaching additional features
|
4 | 5 |
|
5 | 6 |
0.005 2013-06-09 00:40:53 Europe/Amsterdam
|
6 | 7 |
Grandfathered lexical_topic
|
0 | 0 |
package experimental;
|
|
1 |
|
1 | 2 |
use strict;
|
2 | 3 |
use warnings;
|
3 | 4 |
|
|
13 | 14 |
array_base => 5
|
14 | 15 |
);
|
15 | 16 |
|
|
17 |
my %additional_features = (
|
|
18 |
);
|
|
19 |
|
16 | 20 |
sub import {
|
17 | 21 |
my ($self, @pragmas) = @_;
|
18 | 22 |
|
19 | 23 |
for my $pragma (@pragmas) {
|
20 | 24 |
if ($warnings{"experimental::$pragma"}) {
|
21 | 25 |
warnings->unimport("experimental::$pragma");
|
22 | |
feature->import($pragma) if $features{$pragma};
|
|
26 |
my @features = grep { $features{$_} } $pragma, @{ $additional_features{$pragma} || [] };
|
|
27 |
feature->import(@features) if @features;
|
23 | 28 |
}
|
24 | 29 |
elsif ($features{$pragma}) {
|
25 | 30 |
feature->import($pragma);
|
|
31 |
feature->import(@{ $additional_features{$pragma} }) if $additional_features{$pragma};
|
26 | 32 |
}
|
27 | 33 |
elsif (not $grandfathered{$pragma}) {
|
28 | 34 |
croak "Can't enable unknown feature $pragma";
|
|
40 | 46 |
for my $pragma (@pragmas) {
|
41 | 47 |
if ($warnings{"experimental::$pragma"}) {
|
42 | 48 |
warnings->import("experimental::$pragma");
|
43 | |
feature->unimport($pragma) if $features{$pragma};
|
|
49 |
feature->unimport(grep { $features{$_} } $pragma, @{ $additional_features{$pragma} || [] });
|
44 | 50 |
}
|
45 | 51 |
elsif ($features{$pragma}) {
|
46 | 52 |
feature->unimport($pragma);
|
|
53 |
feature->unimport(@{ $additional_features{$pragma} }) if $additional_features{$pragma};
|
47 | 54 |
}
|
48 | 55 |
elsif (not $grandfathered{$pragma}) {
|
49 | 56 |
carp "Can't disable unknown feature $pragma, ignoring";
|
4 | 4 |
local $SIG{__WARN__} = sub { fail("Got unexpected warning"); diag($_[0]) };
|
5 | 5 |
|
6 | 6 |
if ($] >= 5.010000) {
|
7 | |
is (eval <<'END', 1, 'lexical topic compiles');
|
|
7 |
is (eval <<'END', 1, 'lexical topic compiles') or diag $@;
|
8 | 8 |
use experimental 'lexical_topic';
|
9 | 9 |
my $_ = 1;
|
10 | 10 |
is($_, 1, '$_ is 1');
|
|
15 | 15 |
}
|
16 | 16 |
|
17 | 17 |
if ($] >= 5.010001) {
|
18 | |
is (eval <<'END', 1, 'smartmatch compiles');
|
|
18 |
is (eval <<'END', 1, 'smartmatch compiles') or diag $@;
|
19 | 19 |
use experimental 'smartmatch';
|
20 | 20 |
sub bar { 1 };
|
21 | 21 |
is(1 ~~ \&bar, 1, "is 1");
|
|
23 | 23 |
}
|
24 | 24 |
|
25 | 25 |
if ($] >= 5.018) {
|
26 | |
is (eval <<'END', 1, 'lexical subs compiles');
|
|
26 |
is (eval <<'END', 1, 'lexical subs compiles') or diag $@;
|
27 | 27 |
use experimental 'lexical_subs';
|
28 | 28 |
my sub foo { 1 };
|
29 | 29 |
is(foo(), 1, "foo is 1");
|