summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/CORE/feature.h
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/CORE/feature.h')
-rw-r--r--Master/tlpkg/tlperl/lib/CORE/feature.h145
1 files changed, 109 insertions, 36 deletions
diff --git a/Master/tlpkg/tlperl/lib/CORE/feature.h b/Master/tlpkg/tlperl/lib/CORE/feature.h
index 501bc3a3b18..c862864a063 100644
--- a/Master/tlpkg/tlperl/lib/CORE/feature.h
+++ b/Master/tlpkg/tlperl/lib/CORE/feature.h
@@ -1,4 +1,4 @@
-/* -*- buffer-read-only: t -*-
+/* -*- mode: C; buffer-read-only: t -*-
!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by regen/feature.pl.
Any changes made here will be lost!
@@ -12,24 +12,28 @@
#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_EVALBYTES_BIT 0x0010
-#define FEATURE_FC_BIT 0x0020
-#define FEATURE_INDIRECT_BIT 0x0040
-#define FEATURE_ISA_BIT 0x0080
-#define FEATURE_MULTIDIMENSIONAL_BIT 0x0100
-#define FEATURE_POSTDEREF_QQ_BIT 0x0200
-#define FEATURE_REFALIASING_BIT 0x0400
-#define FEATURE_SAY_BIT 0x0800
-#define FEATURE_SIGNATURES_BIT 0x1000
-#define FEATURE_STATE_BIT 0x2000
-#define FEATURE_SWITCH_BIT 0x4000
-#define FEATURE_TRY_BIT 0x8000
-#define FEATURE_UNIEVAL_BIT 0x10000
-#define FEATURE_UNICODE_BIT 0x20000
+#define FEATURE_BAREWORD_FILEHANDLES_BIT 0x0001
+#define FEATURE_BITWISE_BIT 0x0002
+#define FEATURE_CLASS_BIT 0x0004
+#define FEATURE___SUB___BIT 0x0008
+#define FEATURE_MYREF_BIT 0x0010
+#define FEATURE_DEFER_BIT 0x0020
+#define FEATURE_EVALBYTES_BIT 0x0040
+#define FEATURE_MORE_DELIMS_BIT 0x0080
+#define FEATURE_FC_BIT 0x0100
+#define FEATURE_INDIRECT_BIT 0x0200
+#define FEATURE_ISA_BIT 0x0400
+#define FEATURE_MODULE_TRUE_BIT 0x0800
+#define FEATURE_MULTIDIMENSIONAL_BIT 0x1000
+#define FEATURE_POSTDEREF_QQ_BIT 0x2000
+#define FEATURE_REFALIASING_BIT 0x4000
+#define FEATURE_SAY_BIT 0x8000
+#define FEATURE_SIGNATURES_BIT 0x10000
+#define FEATURE_STATE_BIT 0x20000
+#define FEATURE_SWITCH_BIT 0x40000
+#define FEATURE_TRY_BIT 0x80000
+#define FEATURE_UNIEVAL_BIT 0x100000
+#define FEATURE_UNICODE_BIT 0x200000
#define FEATURE_BUNDLE_DEFAULT 0
#define FEATURE_BUNDLE_510 1
@@ -37,10 +41,17 @@
#define FEATURE_BUNDLE_515 3
#define FEATURE_BUNDLE_523 4
#define FEATURE_BUNDLE_527 5
+#define FEATURE_BUNDLE_535 6
+#define FEATURE_BUNDLE_537 7
#define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
-#define CURRENT_HINTS \
+/* this is preserved for testing and asserts */
+#define OLD_CURRENT_HINTS \
(PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
+/* this is the same thing, but simpler (no if) as PL_hints expands
+ to PL_compiling.cop_hints */
+#define CURRENT_HINTS \
+ PL_curcop->cop_hints
#define CURRENT_FEATURE_BUNDLE \
((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
@@ -54,21 +65,23 @@
#define FEATURE_FC_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_FC_BIT)) \
)
#define FEATURE_ISA_IS_ENABLED \
( \
- CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED_MASK(FEATURE_ISA_BIT) \
+ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_535 && \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_ISA_BIT)) \
)
#define FEATURE_SAY_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_SAY_BIT)) \
)
@@ -79,10 +92,22 @@
FEATURE_IS_ENABLED_MASK(FEATURE_TRY_BIT) \
)
+#define FEATURE_CLASS_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_CLASS_BIT) \
+ )
+
+#define FEATURE_DEFER_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_DEFER_BIT) \
+ )
+
#define FEATURE_STATE_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_STATE_BIT)) \
)
@@ -97,7 +122,8 @@
#define FEATURE_BITWISE_IS_ENABLED \
( \
- CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_527 \
+ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_527 && \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_BITWISE_BIT)) \
)
@@ -112,25 +138,34 @@
#define FEATURE_EVALBYTES_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_EVALBYTES_BIT)) \
)
#define FEATURE_SIGNATURES_IS_ENABLED \
( \
- CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED_MASK(FEATURE_SIGNATURES_BIT) \
+ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_535 && \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_SIGNATURES_BIT)) \
)
#define FEATURE___SUB___IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE___SUB___BIT)) \
)
+#define FEATURE_MODULE_TRUE_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_537 \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_MODULE_TRUE_BIT)) \
+ )
+
#define FEATURE_REFALIASING_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
@@ -140,7 +175,7 @@
#define FEATURE_POSTDEREF_QQ_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_523 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_POSTDEREF_QQ_BIT)) \
)
@@ -148,7 +183,7 @@
#define FEATURE_UNIEVAL_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_UNIEVAL_BIT)) \
)
@@ -162,7 +197,7 @@
#define FEATURE_UNICODE_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_511 && \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_537) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \
)
@@ -176,11 +211,17 @@
#define FEATURE_BAREWORD_FILEHANDLES_IS_ENABLED \
( \
- CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535 \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
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)
@@ -204,6 +245,12 @@ S_enable_feature_bundle(pTHX_ SV *ver)
SV *comp_ver = sv_newmortal();
PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
| (
+ (sv_setnv(comp_ver, 5.037),
+ vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
+ ? FEATURE_BUNDLE_537 :
+ (sv_setnv(comp_ver, 5.035),
+ vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
+ ? FEATURE_BUNDLE_535 :
(sv_setnv(comp_ver, 5.027),
vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
? FEATURE_BUNDLE_527 :
@@ -263,6 +310,22 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
}
return;
+ case 'c':
+ if (keylen == sizeof("feature_class")-1
+ && memcmp(subf+1, "lass", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_CLASS_BIT;
+ break;
+ }
+ return;
+
+ case 'd':
+ if (keylen == sizeof("feature_defer")-1
+ && memcmp(subf+1, "efer", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_DEFER_BIT;
+ break;
+ }
+ return;
+
case 'e':
if (keylen == sizeof("feature_evalbytes")-1
&& memcmp(subf+1, "valbytes", keylen - sizeof("feature_")) == 0) {
@@ -293,7 +356,17 @@ 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_module_true")-1
+ && memcmp(subf+1, "odule_true", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_MODULE_TRUE_BIT;
+ break;
+ }
+ else 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;
@@ -378,4 +451,4 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
#endif /* PERL_FEATURE_H_ */
-/* ex: set ro: */
+/* ex: set ro ft=c: */