diff options
author | Dagfinn Ilmari Mannsåker <ilmari@ilmari.org> | 2020-01-21 10:35:05 +0000 |
---|---|---|
committer | Dagfinn Ilmari Mannsåker <ilmari@ilmari.org> | 2020-02-16 16:00:00 +0000 |
commit | 0b657b1955a40e49c93ca32fe32822f4a8a5205b (patch) | |
tree | 721d79576c2b14e92a42f28cff484d6f7a49632f /feature.h | |
parent | e3f228dfa28c62cea97de225b6d49e4b4ff87d07 (diff) | |
download | perl-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.h | 33 |
1 files changed, 23 insertions, 10 deletions
@@ -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; |