summaryrefslogtreecommitdiff
path: root/feature.h
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2022-02-14 15:25:40 -0700
committerKarl Williamson <khw@cpan.org>2022-03-19 23:17:51 -0600
commit9c9853e81d56a8abb664dd3e6332722675cc9a7c (patch)
tree037008c8765e0e8f02a99bde1a3144e3df3bf4b1 /feature.h
parentdce1e563ba694cbba6b45aaa354e0e0bacb26f69 (diff)
downloadperl-9c9853e81d56a8abb664dd3e6332722675cc9a7c.tar.gz
Add 'extra paired delimiters' feature
When this feature is enabled, one can use many more string delimiters that have an opening version and a mirrored closing one.
Diffstat (limited to 'feature.h')
-rw-r--r--feature.h52
1 files changed, 32 insertions, 20 deletions
diff --git a/feature.h b/feature.h
index 1087edcae9..5235659b8b 100644
--- a/feature.h
+++ b/feature.h
@@ -12,25 +12,26 @@
#define HINT_FEATURE_SHIFT 26
-#define FEATURE_BAREWORD_FILEHANDLES_BIT 0x0001
-#define FEATURE_BITWISE_BIT 0x0002
-#define FEATURE___SUB___BIT 0x0004
-#define FEATURE_MYREF_BIT 0x0008
-#define FEATURE_DEFER_BIT 0x0010
-#define FEATURE_EVALBYTES_BIT 0x0020
-#define FEATURE_FC_BIT 0x0040
-#define FEATURE_INDIRECT_BIT 0x0080
-#define FEATURE_ISA_BIT 0x0100
-#define FEATURE_MULTIDIMENSIONAL_BIT 0x0200
-#define FEATURE_POSTDEREF_QQ_BIT 0x0400
-#define FEATURE_REFALIASING_BIT 0x0800
-#define FEATURE_SAY_BIT 0x1000
-#define FEATURE_SIGNATURES_BIT 0x2000
-#define FEATURE_STATE_BIT 0x4000
-#define FEATURE_SWITCH_BIT 0x8000
-#define FEATURE_TRY_BIT 0x10000
-#define FEATURE_UNIEVAL_BIT 0x20000
-#define FEATURE_UNICODE_BIT 0x40000
+#define FEATURE_BAREWORD_FILEHANDLES_BIT 0x0001
+#define FEATURE_BITWISE_BIT 0x0002
+#define FEATURE___SUB___BIT 0x0004
+#define FEATURE_MYREF_BIT 0x0008
+#define FEATURE_DEFER_BIT 0x0010
+#define FEATURE_EVALBYTES_BIT 0x0020
+#define FEATURE_MORE_DELIMS_BIT 0x0040
+#define FEATURE_FC_BIT 0x0080
+#define FEATURE_INDIRECT_BIT 0x0100
+#define FEATURE_ISA_BIT 0x0200
+#define FEATURE_MULTIDIMENSIONAL_BIT 0x0400
+#define FEATURE_POSTDEREF_QQ_BIT 0x0800
+#define FEATURE_REFALIASING_BIT 0x1000
+#define FEATURE_SAY_BIT 0x2000
+#define FEATURE_SIGNATURES_BIT 0x4000
+#define FEATURE_STATE_BIT 0x8000
+#define FEATURE_SWITCH_BIT 0x10000
+#define FEATURE_TRY_BIT 0x20000
+#define FEATURE_UNIEVAL_BIT 0x40000
+#define FEATURE_UNICODE_BIT 0x80000
#define FEATURE_BUNDLE_DEFAULT 0
#define FEATURE_BUNDLE_510 1
@@ -192,6 +193,12 @@
FEATURE_IS_ENABLED_MASK(FEATURE_BAREWORD_FILEHANDLES_BIT)) \
)
+#define FEATURE_MORE_DELIMS_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_MORE_DELIMS_BIT) \
+ )
+
#define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
@@ -315,7 +322,12 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
return;
case 'm':
- if (keylen == sizeof("feature_multidimensional")-1
+ if (keylen == sizeof("feature_more_delims")-1
+ && memcmp(subf+1, "ore_delims", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_MORE_DELIMS_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_multidimensional")-1
&& memcmp(subf+1, "ultidimensional", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_MULTIDIMENSIONAL_BIT;
break;