This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
locale.c: Add fallbacks if no mbtowc()
[perl5.git] / mg_vtable.h
CommitLineData
8b09643d
NC
1/* -*- buffer-read-only: t -*-
2 *
3 * mg_vtable.h
4 * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
5 * This file is built by regen/mg_vtable.pl.
6 * Any changes made here will be lost!
7 */
8
abf9aa7a
NC
9/* These constants should be used in preference to raw characters
10 * when using magic. Note that some perl guts still assume
11 * certain character properties of these constants, namely that
12 * isUPPER() and toLOWER() may do useful mappings.
13 */
14
15#define PERL_MAGIC_sv '\0' /* Special scalar variable */
23cfd2fc 16#define PERL_MAGIC_arylen '#' /* Array length ($#ary) */
e5e1ee61 17#define PERL_MAGIC_rhash '%' /* Extra data for restricted hashes */
a6d69523 18#define PERL_MAGIC_debugvar '*' /* $DB::single, signal, trace vars */
23cfd2fc 19#define PERL_MAGIC_pos '.' /* pos() lvalue */
e5e1ee61
FC
20#define PERL_MAGIC_symtab ':' /* Extra data for symbol tables */
21#define PERL_MAGIC_backref '<' /* For weak ref data */
22#define PERL_MAGIC_arylen_p '@' /* To move arylen out of XPVAV */
abf9aa7a 23#define PERL_MAGIC_bm 'B' /* Boyer-Moore (fast string search) */
23cfd2fc 24#define PERL_MAGIC_overload_table 'c' /* Holds overload table (AMT) on stash */
abf9aa7a
NC
25#define PERL_MAGIC_regdata 'D' /* Regex match position data
26 (@+ and @- vars) */
27#define PERL_MAGIC_regdatum 'd' /* Regex match position data element */
28#define PERL_MAGIC_env 'E' /* %ENV hash */
29#define PERL_MAGIC_envelem 'e' /* %ENV hash element */
30#define PERL_MAGIC_fm 'f' /* Formline ('compiled' format) */
0177730e 31#define PERL_MAGIC_regex_global 'g' /* m//g target */
abf9aa7a
NC
32#define PERL_MAGIC_hints 'H' /* %^H hash */
33#define PERL_MAGIC_hintselem 'h' /* %^H hash element */
34#define PERL_MAGIC_isa 'I' /* @ISA array */
35#define PERL_MAGIC_isaelem 'i' /* @ISA array element */
36#define PERL_MAGIC_nkeys 'k' /* scalar(keys()) lvalue */
37#define PERL_MAGIC_dbfile 'L' /* Debugger %_<filename */
38#define PERL_MAGIC_dbline 'l' /* Debugger %_<filename element */
39#define PERL_MAGIC_shared 'N' /* Shared between threads */
40#define PERL_MAGIC_shared_scalar 'n' /* Shared between threads */
41#define PERL_MAGIC_collxfrm 'o' /* Locale transformation */
42#define PERL_MAGIC_tied 'P' /* Tied array or hash */
43#define PERL_MAGIC_tiedelem 'p' /* Tied array or hash element */
44#define PERL_MAGIC_tiedscalar 'q' /* Tied scalar or handle */
e5e1ee61 45#define PERL_MAGIC_qr 'r' /* Precompiled qr// regex */
abf9aa7a
NC
46#define PERL_MAGIC_sig 'S' /* %SIG hash */
47#define PERL_MAGIC_sigelem 's' /* %SIG hash element */
48#define PERL_MAGIC_taint 't' /* Taintedness */
49#define PERL_MAGIC_uvar 'U' /* Available for use by extensions */
50#define PERL_MAGIC_uvar_elem 'u' /* Reserved for use by extensions */
abf9aa7a 51#define PERL_MAGIC_vstring 'V' /* SV was vstring literal */
23cfd2fc 52#define PERL_MAGIC_vec 'v' /* vec() lvalue */
abf9aa7a
NC
53#define PERL_MAGIC_utf8 'w' /* Cached UTF-8 information */
54#define PERL_MAGIC_substr 'x' /* substr() lvalue */
1f1dcfb5 55#define PERL_MAGIC_nonelem 'Y' /* Array element that does not exist */
abf9aa7a
NC
56#define PERL_MAGIC_defelem 'y' /* Shadow "foreach" iterator variable /
57 smart parameter vivification */
baabe3fb 58#define PERL_MAGIC_lvref '\\' /* Lvalue reference constructor */
e5e1ee61 59#define PERL_MAGIC_checkcall ']' /* Inlining/mutation of call to this CV */
23cfd2fc 60#define PERL_MAGIC_ext '~' /* Available for use by extensions */
abf9aa7a 61
ca298f7d 62enum { /* pass one of these to get_vtbl */
23cfd2fc
NC
63 want_vtbl_arylen,
64 want_vtbl_arylen_p,
65 want_vtbl_backref,
09fb282d 66 want_vtbl_checkcall,
23cfd2fc
NC
67 want_vtbl_collxfrm,
68 want_vtbl_dbline,
a6d69523 69 want_vtbl_debugvar,
23cfd2fc 70 want_vtbl_defelem,
ca298f7d
NC
71 want_vtbl_env,
72 want_vtbl_envelem,
23cfd2fc
NC
73 want_vtbl_hints,
74 want_vtbl_hintselem,
ca298f7d
NC
75 want_vtbl_isa,
76 want_vtbl_isaelem,
9cce4f9a 77 want_vtbl_lvref,
ca298f7d
NC
78 want_vtbl_mglob,
79 want_vtbl_nkeys,
1f1dcfb5 80 want_vtbl_nonelem,
23cfd2fc
NC
81 want_vtbl_ovrld,
82 want_vtbl_pack,
83 want_vtbl_packelem,
ca298f7d 84 want_vtbl_pos,
ca298f7d
NC
85 want_vtbl_regdata,
86 want_vtbl_regdatum,
23cfd2fc 87 want_vtbl_regexp,
55f5e765 88 want_vtbl_sig,
23cfd2fc
NC
89 want_vtbl_sigelem,
90 want_vtbl_substr,
91 want_vtbl_sv,
92 want_vtbl_taint,
ca298f7d 93 want_vtbl_utf8,
23cfd2fc
NC
94 want_vtbl_uvar,
95 want_vtbl_vec,
c7fdacb9 96 magic_vtable_max
ca298f7d
NC
97};
98
2d1f1fe5 99#ifdef DOINIT
bfd14e52 100EXTCONST char * const PL_magic_vtable_names[magic_vtable_max] = {
23cfd2fc
NC
101 "arylen",
102 "arylen_p",
103 "backref",
09fb282d 104 "checkcall",
23cfd2fc
NC
105 "collxfrm",
106 "dbline",
a6d69523 107 "debugvar",
23cfd2fc 108 "defelem",
2d1f1fe5
NC
109 "env",
110 "envelem",
23cfd2fc
NC
111 "hints",
112 "hintselem",
2d1f1fe5
NC
113 "isa",
114 "isaelem",
9cce4f9a 115 "lvref",
2d1f1fe5
NC
116 "mglob",
117 "nkeys",
1f1dcfb5 118 "nonelem",
23cfd2fc
NC
119 "ovrld",
120 "pack",
121 "packelem",
2d1f1fe5 122 "pos",
2d1f1fe5
NC
123 "regdata",
124 "regdatum",
23cfd2fc 125 "regexp",
55f5e765 126 "sig",
23cfd2fc
NC
127 "sigelem",
128 "substr",
129 "sv",
130 "taint",
2d1f1fe5 131 "utf8",
23cfd2fc 132 "uvar",
4499db73 133 "vec"
2d1f1fe5
NC
134};
135#else
bfd14e52 136EXTCONST char * const PL_magic_vtable_names[magic_vtable_max];
2d1f1fe5
NC
137#endif
138
8b09643d
NC
139/* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
140 * pointer to data, whereas we're assigning pointers to functions, which are
141 * not the same beast. ANSI doesn't allow the assignment from one to the other.
142 * (although most, but not all, compilers are prepared to do it)
143 */
144
0ffb5b03 145/* order is:
8b09643d
NC
146 get
147 set
148 len
149 clear
150 free
151 copy
152 dup
153 local
154*/
155
0ffb5b03 156#ifdef DOINIT
c7fdacb9 157EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = {
23cfd2fc 158 { (int (*)(pTHX_ SV *, MAGIC *))Perl_magic_getarylen, Perl_magic_setarylen, 0, 0, 0, 0, 0, 0 },
83f29afa 159 { 0, 0, 0, Perl_magic_cleararylen_p, Perl_magic_freearylen_p, 0, 0, 0 },
23cfd2fc 160 { 0, 0, 0, 0, Perl_magic_killbackrefs, 0, 0, 0 },
09fb282d 161 { 0, 0, 0, 0, 0, Perl_magic_copycallchecker, 0, 0 },
23cfd2fc 162#ifdef USE_LOCALE_COLLATE
a457b73c 163 { 0, Perl_magic_setcollxfrm, 0, 0, Perl_magic_freecollxfrm, 0, 0, 0 },
b7b5e578
NC
164#else
165 { 0, 0, 0, 0, 0, 0, 0, 0 },
166#endif
b7b5e578 167 { 0, Perl_magic_setdbline, 0, 0, 0, 0, 0, 0 },
a6d69523 168 { Perl_magic_getdebugvar, Perl_magic_setdebugvar, 0, 0, 0, 0, 0, 0 },
23cfd2fc
NC
169 { Perl_magic_getdefelem, Perl_magic_setdefelem, 0, 0, 0, 0, 0, 0 },
170 { 0, Perl_magic_set_all_env, 0, Perl_magic_clear_all_env, 0, 0, 0, 0 },
171 { 0, Perl_magic_setenv, 0, Perl_magic_clearenv, 0, 0, 0, 0 },
172 { 0, 0, 0, Perl_magic_clearhints, 0, 0, 0, 0 },
173 { 0, Perl_magic_sethint, 0, Perl_magic_clearhint, 0, 0, 0, 0 },
b7b5e578
NC
174 { 0, Perl_magic_setisa, 0, Perl_magic_clearisa, 0, 0, 0, 0 },
175 { 0, Perl_magic_setisa, 0, 0, 0, 0, 0, 0 },
9cce4f9a 176 { 0, Perl_magic_setlvref, 0, 0, 0, 0, 0, 0 },
02a48966 177 { 0, Perl_magic_setmglob, 0, 0, Perl_magic_freemglob, 0, 0, 0 },
b7b5e578 178 { Perl_magic_getnkeys, Perl_magic_setnkeys, 0, 0, 0, 0, 0, 0 },
1f1dcfb5 179 { 0, Perl_magic_setnonelem, 0, 0, 0, 0, 0, 0 },
23cfd2fc
NC
180 { 0, 0, 0, 0, Perl_magic_freeovrld, 0, 0, 0 },
181 { 0, 0, Perl_magic_sizepack, Perl_magic_wipepack, 0, 0, 0, 0 },
182 { Perl_magic_getpack, Perl_magic_setpack, 0, Perl_magic_clearpack, 0, 0, 0, 0 },
b7b5e578 183 { Perl_magic_getpos, Perl_magic_setpos, 0, 0, 0, 0, 0, 0 },
b7b5e578
NC
184 { 0, 0, Perl_magic_regdata_cnt, 0, 0, 0, 0, 0 },
185 { Perl_magic_regdatum_get, Perl_magic_regdatum_set, 0, 0, 0, 0, 0, 0 },
23cfd2fc 186 { 0, Perl_magic_setregexp, 0, 0, 0, 0, 0, 0 },
55f5e765 187 { 0, Perl_magic_setsigall, 0, 0, 0, 0, 0, 0 },
23cfd2fc
NC
188#ifndef PERL_MICRO
189 { Perl_magic_getsig, Perl_magic_setsig, 0, Perl_magic_clearsig, 0, 0, 0, 0 },
0ffb5b03 190#else
b7b5e578 191 { 0, 0, 0, 0, 0, 0, 0, 0 },
0ffb5b03 192#endif
23cfd2fc 193 { Perl_magic_getsubstr, Perl_magic_setsubstr, 0, 0, 0, 0, 0, 0 },
9bb29b68 194 { Perl_magic_get, Perl_magic_set, 0, 0, 0, 0, 0, 0 },
23cfd2fc 195 { Perl_magic_gettaint, Perl_magic_settaint, 0, 0, 0, 0, 0, 0 },
032a4919 196 { 0, Perl_magic_setutf8, 0, 0, Perl_magic_freeutf8, 0, 0, 0 },
23cfd2fc 197 { Perl_magic_getuvar, Perl_magic_setuvar, 0, 0, 0, 0, 0, 0 },
4499db73 198 { Perl_magic_getvec, Perl_magic_setvec, 0, 0, 0, 0, 0, 0 }
b7b5e578 199};
0ffb5b03 200#else
c7fdacb9 201EXT_MGVTBL PL_magic_vtables[magic_vtable_max];
b7b5e578
NC
202#endif
203
b2e9fc6f
NC
204#define want_vtbl_bm want_vtbl_regexp
205#define want_vtbl_fm want_vtbl_regexp
206
b7b5e578
NC
207#define PL_vtbl_arylen PL_magic_vtables[want_vtbl_arylen]
208#define PL_vtbl_arylen_p PL_magic_vtables[want_vtbl_arylen_p]
209#define PL_vtbl_backref PL_magic_vtables[want_vtbl_backref]
210#define PL_vtbl_bm PL_magic_vtables[want_vtbl_bm]
09fb282d 211#define PL_vtbl_checkcall PL_magic_vtables[want_vtbl_checkcall]
b7b5e578
NC
212#define PL_vtbl_collxfrm PL_magic_vtables[want_vtbl_collxfrm]
213#define PL_vtbl_dbline PL_magic_vtables[want_vtbl_dbline]
a6d69523 214#define PL_vtbl_debugvar PL_magic_vtables[want_vtbl_debugvar]
b7b5e578
NC
215#define PL_vtbl_defelem PL_magic_vtables[want_vtbl_defelem]
216#define PL_vtbl_env PL_magic_vtables[want_vtbl_env]
217#define PL_vtbl_envelem PL_magic_vtables[want_vtbl_envelem]
218#define PL_vtbl_fm PL_magic_vtables[want_vtbl_fm]
219#define PL_vtbl_hints PL_magic_vtables[want_vtbl_hints]
220#define PL_vtbl_hintselem PL_magic_vtables[want_vtbl_hintselem]
221#define PL_vtbl_isa PL_magic_vtables[want_vtbl_isa]
222#define PL_vtbl_isaelem PL_magic_vtables[want_vtbl_isaelem]
9cce4f9a 223#define PL_vtbl_lvref PL_magic_vtables[want_vtbl_lvref]
b7b5e578
NC
224#define PL_vtbl_mglob PL_magic_vtables[want_vtbl_mglob]
225#define PL_vtbl_nkeys PL_magic_vtables[want_vtbl_nkeys]
1f1dcfb5 226#define PL_vtbl_nonelem PL_magic_vtables[want_vtbl_nonelem]
b7b5e578
NC
227#define PL_vtbl_ovrld PL_magic_vtables[want_vtbl_ovrld]
228#define PL_vtbl_pack PL_magic_vtables[want_vtbl_pack]
229#define PL_vtbl_packelem PL_magic_vtables[want_vtbl_packelem]
230#define PL_vtbl_pos PL_magic_vtables[want_vtbl_pos]
231#define PL_vtbl_regdata PL_magic_vtables[want_vtbl_regdata]
232#define PL_vtbl_regdatum PL_magic_vtables[want_vtbl_regdatum]
233#define PL_vtbl_regexp PL_magic_vtables[want_vtbl_regexp]
55f5e765 234#define PL_vtbl_sig PL_magic_vtables[want_vtbl_sig]
b7b5e578
NC
235#define PL_vtbl_sigelem PL_magic_vtables[want_vtbl_sigelem]
236#define PL_vtbl_substr PL_magic_vtables[want_vtbl_substr]
237#define PL_vtbl_sv PL_magic_vtables[want_vtbl_sv]
238#define PL_vtbl_taint PL_magic_vtables[want_vtbl_taint]
239#define PL_vtbl_utf8 PL_magic_vtables[want_vtbl_utf8]
240#define PL_vtbl_uvar PL_magic_vtables[want_vtbl_uvar]
241#define PL_vtbl_vec PL_magic_vtables[want_vtbl_vec]
8b09643d
NC
242
243/* ex: set ro: */