1 /* -*- buffer-read-only: t -*- 2 !!!!!!! DO NOT EDIT THIS FILE !!!!!!! 3 This file is built by regen/feature.pl. 4 Any changes made here will be lost! 5 */ 6 7 8 #if defined(PERL_CORE) || defined (PERL_EXT) 9 10 #define HINT_FEATURE_SHIFT 26 11 12 #define FEATURE_BUNDLE_DEFAULT 0 13 #define FEATURE_BUNDLE_510 1 14 #define FEATURE_BUNDLE_511 2 15 #define FEATURE_BUNDLE_515 3 16 #define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT) 17 18 #define CURRENT_HINTS \ 19 (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints) 20 #define CURRENT_FEATURE_BUNDLE \ 21 ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT) 22 23 /* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in 24 the HP-UX cc on PA-RISC */ 25 #define FEATURE_IS_ENABLED(name) \ 26 ((CURRENT_HINTS \ 27 & HINT_LOCALIZE_HH) \ 28 ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE) 29 /* The longest string we pass in. */ 30 #define MAX_FEATURE_LEN (sizeof("postderef_qq")-1) 31 32 #define FEATURE_FC_IS_ENABLED \ 33 ( \ 34 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ 35 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 36 FEATURE_IS_ENABLED("fc")) \ 37 ) 38 39 #define FEATURE_SAY_IS_ENABLED \ 40 ( \ 41 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ 42 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ 43 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 44 FEATURE_IS_ENABLED("say")) \ 45 ) 46 47 #define FEATURE_STATE_IS_ENABLED \ 48 ( \ 49 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ 50 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ 51 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 52 FEATURE_IS_ENABLED("state")) \ 53 ) 54 55 #define FEATURE_SWITCH_IS_ENABLED \ 56 ( \ 57 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ 58 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ 59 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 60 FEATURE_IS_ENABLED("switch")) \ 61 ) 62 63 #define FEATURE_EVALBYTES_IS_ENABLED \ 64 ( \ 65 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ 66 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 67 FEATURE_IS_ENABLED("evalbytes")) \ 68 ) 69 70 #define FEATURE_POSTDEREF_IS_ENABLED \ 71 ( \ 72 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 73 FEATURE_IS_ENABLED("postderef") \ 74 ) 75 76 #define FEATURE_ARYBASE_IS_ENABLED \ 77 ( \ 78 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_511 \ 79 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 80 FEATURE_IS_ENABLED("arybase")) \ 81 ) 82 83 #define FEATURE_SIGNATURES_IS_ENABLED \ 84 ( \ 85 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 86 FEATURE_IS_ENABLED("signatures") \ 87 ) 88 89 #define FEATURE___SUB___IS_ENABLED \ 90 ( \ 91 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ 92 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 93 FEATURE_IS_ENABLED("__SUB__")) \ 94 ) 95 96 #define FEATURE_LEXSUBS_IS_ENABLED \ 97 ( \ 98 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 99 FEATURE_IS_ENABLED("lexsubs") \ 100 ) 101 102 #define FEATURE_POSTDEREF_QQ_IS_ENABLED \ 103 ( \ 104 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 105 FEATURE_IS_ENABLED("postderef_qq") \ 106 ) 107 108 #define FEATURE_UNIEVAL_IS_ENABLED \ 109 ( \ 110 CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ 111 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 112 FEATURE_IS_ENABLED("unieval")) \ 113 ) 114 115 #define FEATURE_UNICODE_IS_ENABLED \ 116 ( \ 117 (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_511 && \ 118 CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ 119 || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ 120 FEATURE_IS_ENABLED("unicode")) \ 121 ) 122 123 124 #endif /* PERL_CORE or PERL_EXT */ 125 126 #ifdef PERL_IN_OP_C 127 PERL_STATIC_INLINE void 128 S_enable_feature_bundle(pTHX_ SV *ver) 129 { 130 SV *comp_ver = sv_newmortal(); 131 PL_hints = (PL_hints &~ HINT_FEATURE_MASK) 132 | ( 133 (sv_setnv(comp_ver, 5.015), 134 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) 135 ? FEATURE_BUNDLE_515 : 136 (sv_setnv(comp_ver, 5.011), 137 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) 138 ? FEATURE_BUNDLE_511 : 139 (sv_setnv(comp_ver, 5.009005), 140 vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) 141 ? FEATURE_BUNDLE_510 : 142 FEATURE_BUNDLE_DEFAULT 143 ) << HINT_FEATURE_SHIFT; 144 /* special case */ 145 assert(PL_curcop == &PL_compiling); 146 if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT; 147 else PL_hints &= ~HINT_UNI_8_BIT; 148 } 149 #endif /* PERL_IN_OP_C */ 150 151 /* ex: set ro: */ 152