From 1ad5a39ccaca372a3b35f5a76e16aa2aacab104a Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Wed, 27 May 2020 10:41:32 +1000 Subject: 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. --- feature.h | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) (limited to 'feature.h') 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; -- cgit v1.2.1