This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
feature.pm: Set bundle hints when dis/enabling features
authorFather Chrysostomos <sprout@cpan.org>
Fri, 23 Dec 2011 02:22:41 +0000 (18:22 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 24 Dec 2011 17:25:16 +0000 (09:25 -0800)
The core does not use these hints just yet, but feature.pm can start
setting them.

Currently, the hint bits for feature bundles (CURRENT_FEATURE_BUNDLE
in feature.h) are equal to FEATURE_BUNDLE_DEFAULT (0) by default.
feature.pm sets them to FEATURE_BUNDLE_CUSTOM when modifying
hint settings.

lib/feature.pm
regen/feature.pl

index 2c1d526..6f7af31 100644 (file)
@@ -301,6 +301,11 @@ sub import {
     if (@_ == 0) {
         croak("No features specified");
     }
+    if (my $features = current_bundle) {
+       # Features are enabled implicitly via bundle hints
+       unshift @_, @$features;
+       $^H |= $hint_mask;
+    }
     while (@_) {
         my $name = shift(@_);
         if (substr($name, 0, 1) eq ":") {
@@ -328,6 +333,13 @@ sub import {
 sub unimport {
     my $class = shift;
 
+    if (my $features = current_bundle) {
+       # Features are enabled implicitly via bundle hints
+       # Pass them to import() to put them in a form we can handle.
+       import(undef, @$features);
+       $^H |= $hint_mask;
+    }
+
     # A bare C<no feature> should disable *all* features
     if (!@_) {
         delete @^H{ values(%feature) };
index 2e8e8eb..cf3ba35 100755 (executable)
@@ -535,6 +535,11 @@ sub import {
     if (@_ == 0) {
         croak("No features specified");
     }
+    if (my $features = current_bundle) {
+       # Features are enabled implicitly via bundle hints
+       unshift @_, @$features;
+       $^H |= $hint_mask;
+    }
     while (@_) {
         my $name = shift(@_);
         if (substr($name, 0, 1) eq ":") {
@@ -562,6 +567,13 @@ sub import {
 sub unimport {
     my $class = shift;
 
+    if (my $features = current_bundle) {
+       # Features are enabled implicitly via bundle hints
+       # Pass them to import() to put them in a form we can handle.
+       import(undef, @$features);
+       $^H |= $hint_mask;
+    }
+
     # A bare C<no feature> should disable *all* features
     if (!@_) {
         delete @^H{ values(%feature) };