summaryrefslogtreecommitdiff
path: root/feature.h
diff options
context:
space:
mode:
authorDagfinn Ilmari Mannsåker <ilmari@ilmari.org>2020-01-21 10:35:05 +0000
committerDagfinn Ilmari Mannsåker <ilmari@ilmari.org>2020-02-16 16:00:00 +0000
commit0b657b1955a40e49c93ca32fe32822f4a8a5205b (patch)
tree721d79576c2b14e92a42f28cff484d6f7a49632f /feature.h
parente3f228dfa28c62cea97de225b6d49e4b4ff87d07 (diff)
downloadperl-0b657b1955a40e49c93ca32fe32822f4a8a5205b.tar.gz
Add 'indirect' feature that can be turned off to disable indirect object syntax
Co-authored-by: Tony Cook <tony@develop-help.com>
Diffstat (limited to 'feature.h')
-rw-r--r--feature.h33
1 files changed, 23 insertions, 10 deletions
diff --git a/feature.h b/feature.h
index 0044b06b42..2f2f23c4da 100644
--- a/feature.h
+++ b/feature.h
@@ -17,15 +17,16 @@
#define FEATURE_MYREF_BIT 0x0004
#define FEATURE_EVALBYTES_BIT 0x0008
#define FEATURE_FC_BIT 0x0010
-#define FEATURE_ISA_BIT 0x0020
-#define FEATURE_POSTDEREF_QQ_BIT 0x0040
-#define FEATURE_REFALIASING_BIT 0x0080
-#define FEATURE_SAY_BIT 0x0100
-#define FEATURE_SIGNATURES_BIT 0x0200
-#define FEATURE_STATE_BIT 0x0400
-#define FEATURE_SWITCH_BIT 0x0800
-#define FEATURE_UNIEVAL_BIT 0x1000
-#define FEATURE_UNICODE_BIT 0x2000
+#define FEATURE_INDIRECT_BIT 0x0020
+#define FEATURE_ISA_BIT 0x0040
+#define FEATURE_POSTDEREF_QQ_BIT 0x0080
+#define FEATURE_REFALIASING_BIT 0x0100
+#define FEATURE_SAY_BIT 0x0200
+#define FEATURE_SIGNATURES_BIT 0x0400
+#define FEATURE_STATE_BIT 0x0800
+#define FEATURE_SWITCH_BIT 0x1000
+#define FEATURE_UNIEVAL_BIT 0x2000
+#define FEATURE_UNICODE_BIT 0x4000
#define FEATURE_BUNDLE_DEFAULT 0
#define FEATURE_BUNDLE_510 1
@@ -92,6 +93,13 @@
FEATURE_IS_ENABLED_MASK(FEATURE_BITWISE_BIT)) \
)
+#define FEATURE_INDIRECT_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_INDIRECT_BIT)) \
+ )
+
#define FEATURE_EVALBYTES_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
@@ -244,7 +252,12 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
return;
case 'i':
- if (keylen == sizeof("feature_isa")-1
+ if (keylen == sizeof("feature_indirect")-1
+ && memcmp(subf+1, "ndirect", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_INDIRECT_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_isa")-1
&& memcmp(subf+1, "sa", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_ISA_BIT;
break;