Skip to content

Commit de60ecd

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 9eacc8f commit de60ecd

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

@@ -134,13 +144,18 @@ BEGIN
134144
my $cop_feature_size = $mask == 1 ? $index : $index + 1;
135145

136146
for (keys %feature_bundle) {
137-
next unless /^5\.(\d*[13579])\z/;
138-
$feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
147+
if (/^5\.(\d*[13579])\z/) { # 5.x dev series
148+
$feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
149+
}
150+
elsif (/^([4-9][13579]|[1-9][0-9]+[13579])\z/) { # 41 and above
151+
$feature_bundle{($1+1)} ||= $feature_bundle{$_};
152+
}
139153
}
154+
delete $feature_bundle{"5.42"}; # this one does not exist
140155

141156
my %UniqueBundles; # "say state switch" => 5.10
142157
my %Aliases; # 5.12 => 5.11
143-
for( sort keys %feature_bundle ) {
158+
for( sort as_bundles keys %feature_bundle ) {
144159
my $value = join(' ', sort @{$feature_bundle{$_}});
145160
if (exists $UniqueBundles{$value}) {
146161
$Aliases{$_} = $UniqueBundles{$value};
@@ -152,8 +167,7 @@ BEGIN
152167
# start end
153168
my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
154169
for my $bund (
155-
sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
156-
values %UniqueBundles
170+
sort as_bundles values %UniqueBundles
157171
) {
158172
next if $bund =~ /[^\d.]/ and $bund ne 'default';
159173
for (@{$feature_bundle{$bund}}) {
@@ -199,7 +213,7 @@ BEGIN
199213
die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
200214

201215
my @HintedBundles =
202-
('default', grep !/[^\d.]/, sort values %UniqueBundles);
216+
('default', grep !/[^\d.]/, sort as_bundles values %UniqueBundles);
203217

204218

205219
###########################################################################
@@ -246,7 +260,7 @@ sub longest {
246260
}
247261
print $pm ");\n\n";
248262

249-
for (sort keys %Aliases) {
263+
for (sort as_bundles keys %Aliases) {
250264
print $pm
251265
qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
252266
};
@@ -283,7 +297,7 @@ sub longest {
283297
$::bundle, $::feature
284298
.
285299

286-
for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
300+
for ('default', sort as_bundles grep /[02468]\z/, keys %feature_bundle) {
287301
$::bundle = ":$_";
288302
$::feature = join ' ', @{$feature_bundle{$_}};
289303
write $pm;

0 commit comments

Comments
 (0)