summaryrefslogtreecommitdiff
path: root/scope.c
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2019-10-25 05:26:53 +1100
committerTony Cook <tony@develop-help.com>2019-10-30 20:09:37 +0100
commit9f601cf3bbfa6be3e2ab3468e77a7b79c80ff5cf (patch)
treecfb97c690e5e69e19f3e73fe532606008a1cd5ab /scope.c
parent698f6cc7d55bb6b96940a610be050d2c6331ae04 (diff)
downloadperl-9f601cf3bbfa6be3e2ab3468e77a7b79c80ff5cf.tar.gz
Faster feature checks
Perform only a bit check instead of a much more expensive hash lookup to test features. For now I've just added a U32 to the cop structure to store the bits, if we need more we could either add more bits directly, or make it a pointer. We don't have the immediate need for a pointer that warning do since we don't dynamically add new features during compilation/runtime. The changes to %^H are retained so that caller() can be used from perl code to check the features enabled at a given caller's scope.
Diffstat (limited to 'scope.c')
-rw-r--r--scope.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/scope.c b/scope.c
index c6616440f6..35f510ea06 100644
--- a/scope.c
+++ b/scope.c
@@ -25,6 +25,7 @@
#include "EXTERN.h"
#define PERL_IN_SCOPE_C
#include "perl.h"
+#include "feature.h"
SV**
Perl_stack_grow(pTHX_ SV **sp, SV **p, SSize_t n)
@@ -688,6 +689,7 @@ Perl_save_hints(pTHX)
save_pushptri32ptr(oldhh, PL_hints, save_cophh, SAVEt_HINTS);
GvHV(PL_hintgv) = NULL; /* in case copying dies */
GvHV(PL_hintgv) = hv_copy_hints_hv(oldhh);
+ SAVEFEATUREBITS();
} else {
save_pushi32ptr(PL_hints, save_cophh, SAVEt_HINTS);
}