Skip to content

Commit be2cabf

Browse files
committed
create the :42 feature bundle
The FEATURE_BUNDLE_xxx constants in feature.h must be ordered by version. The 'as_bundles' sort function ensures that all bundles will be sorted correctly (except for 5.9.5, which ends up between 5.41 and 41).
1 parent be6a05d commit be2cabf

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

lib/feature.pm

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

regen/feature.pl

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,18 @@ BEGIN
107107
"5.39" => [ +V5_39 ],
108108
# using 5.41 features bundle
109109
"5.41" => [ +V5_41 ],
110+
# using 41 features bundle
111+
"41" => [ +V5_41 ],
110112
);
111113

114+
# actually, 5.9.5 ends up between 5.41 and 41
115+
sub as_bundles {
116+
$a eq 'default' ? -1 : $b eq 'default' ? 1 # default first
117+
: $a eq 'all' ? 1 : $b eq 'all' ? -1 # all last
118+
: $a =~ /\./ ? $b =~ /\./ ? $a cmp $b : -1 # 5.x in order, before
119+
: $b =~ /\./ ? 1 : $a <=> $b; # integers in order
120+
}
121+
112122
my @noops = qw( postderef lexical_subs );
113123
my @removed = qw( array_base switch );
114124

@@ -128,13 +138,18 @@ BEGIN
128138
}
129139

130140
for (keys %feature_bundle) {
131-
next unless /^5\.(\d*[13579])\z/;
132-
$feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
141+
if (/^5\.(\d*[13579])\z/) { # 5.x dev series
142+
$feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
143+
}
144+
elsif (/^([4-9][13579]|[1-9][0-9]+[13579])\z/) { # 41 and above
145+
$feature_bundle{($1+1)} ||= $feature_bundle{$_};
146+
}
133147
}
148+
delete $feature_bundle{"5.42"}; # this one does not exist
134149

135150
my %UniqueBundles; # "say state switch" => 5.10
136151
my %Aliases; # 5.12 => 5.11
137-
for( sort keys %feature_bundle ) {
152+
for( sort as_bundles keys %feature_bundle ) {
138153
my $value = join(' ', sort @{$feature_bundle{$_}});
139154
if (exists $UniqueBundles{$value}) {
140155
$Aliases{$_} = $UniqueBundles{$value};
@@ -146,8 +161,7 @@ BEGIN
146161
# start end
147162
my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
148163
for my $bund (
149-
sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
150-
values %UniqueBundles
164+
sort as_bundles values %UniqueBundles
151165
) {
152166
next if $bund =~ /[^\d.]/ and $bund ne 'default';
153167
for (@{$feature_bundle{$bund}}) {
@@ -193,7 +207,7 @@ BEGIN
193207
die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
194208

195209
my @HintedBundles =
196-
('default', grep !/[^\d.]/, sort values %UniqueBundles);
210+
('default', grep !/[^\d.]/, sort as_bundles values %UniqueBundles);
197211

198212

199213
###########################################################################
@@ -240,7 +254,7 @@ sub longest {
240254
}
241255
print $pm ");\n\n";
242256

243-
for (sort keys %Aliases) {
257+
for (sort as_bundles keys %Aliases) {
244258
print $pm
245259
qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
246260
};
@@ -277,7 +291,7 @@ sub longest {
277291
$::bundle, $::feature
278292
.
279293

280-
for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
294+
for ('default', sort as_bundles grep /[02468]\z/, keys %feature_bundle) {
281295
$::bundle = ":$_";
282296
$::feature = join ' ', @{$feature_bundle{$_}};
283297
write $pm;

0 commit comments

Comments
 (0)