summaryrefslogtreecommitdiff
path: root/feature.h
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2020-05-27 10:41:32 +1000
committerKarl Williamson <khw@cpan.org>2020-08-10 22:33:10 -0600
commit1ad5a39ccaca372a3b35f5a76e16aa2aacab104a (patch)
tree4d371a3ec4b024192afe2119ba9e5b712b384413 /feature.h
parentd410bf072ab36a21fd6ad66e99bdf6f24ae54ef6 (diff)
downloadperl-1ad5a39ccaca372a3b35f5a76e16aa2aacab104a.tar.gz
add a default enabled feature "multidimensional"
Like "indirect" this feature is enabled by default and enables the perl4 hash-based multidimensional array emulation documented under $; in perlvar.
Diffstat (limited to 'feature.h')
-rw-r--r--feature.h47
1 files changed, 30 insertions, 17 deletions
diff --git a/feature.h b/feature.h
index 2f2f23c4da..20f799696a 100644
--- a/feature.h
+++ b/feature.h
@@ -12,21 +12,22 @@
#define HINT_FEATURE_SHIFT 26
-#define FEATURE_BITWISE_BIT 0x0001
-#define FEATURE___SUB___BIT 0x0002
-#define FEATURE_MYREF_BIT 0x0004
-#define FEATURE_EVALBYTES_BIT 0x0008
-#define FEATURE_FC_BIT 0x0010
-#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_BITWISE_BIT 0x0001
+#define FEATURE___SUB___BIT 0x0002
+#define FEATURE_MYREF_BIT 0x0004
+#define FEATURE_EVALBYTES_BIT 0x0008
+#define FEATURE_FC_BIT 0x0010
+#define FEATURE_INDIRECT_BIT 0x0020
+#define FEATURE_ISA_BIT 0x0040
+#define FEATURE_MULTIDIMENSIONAL_BIT 0x0080
+#define FEATURE_POSTDEREF_QQ_BIT 0x0100
+#define FEATURE_REFALIASING_BIT 0x0200
+#define FEATURE_SAY_BIT 0x0400
+#define FEATURE_SIGNATURES_BIT 0x0800
+#define FEATURE_STATE_BIT 0x1000
+#define FEATURE_SWITCH_BIT 0x2000
+#define FEATURE_UNIEVAL_BIT 0x4000
+#define FEATURE_UNICODE_BIT 0x8000
#define FEATURE_BUNDLE_DEFAULT 0
#define FEATURE_BUNDLE_510 1
@@ -46,7 +47,7 @@
? (PL_curcop->cop_features & (mask)) : FALSE)
/* The longest string we pass in. */
-#define MAX_FEATURE_LEN (sizeof("postderef_qq")-1)
+#define MAX_FEATURE_LEN (sizeof("multidimensional")-1)
#define FEATURE_FC_IS_ENABLED \
( \
@@ -158,6 +159,13 @@
FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \
)
+#define FEATURE_MULTIDIMENSIONAL_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_MULTIDIMENSIONAL_BIT)) \
+ )
+
#define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
@@ -265,7 +273,12 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
return;
case 'm':
- if (keylen == sizeof("feature_myref")-1
+ if (keylen == sizeof("feature_multidimensional")-1
+ && memcmp(subf+1, "ultidimensional", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_MULTIDIMENSIONAL_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_myref")-1
&& memcmp(subf+1, "yref", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_MYREF_BIT;
break;