xref: /openbsd/gnu/usr.bin/perl/mg_vtable.h (revision e0680481)
1*e0680481Safresh1 /* -*- mode: C; buffer-read-only: t -*-
2898184e3Ssthen  *
3898184e3Ssthen  *    mg_vtable.h
4898184e3Ssthen  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
5898184e3Ssthen  * This file is built by regen/mg_vtable.pl.
6898184e3Ssthen  * Any changes made here will be lost!
7898184e3Ssthen  */
8898184e3Ssthen 
9898184e3Ssthen /* These constants should be used in preference to raw characters
10898184e3Ssthen  * when using magic. Note that some perl guts still assume
11898184e3Ssthen  * certain character properties of these constants, namely that
12898184e3Ssthen  * isUPPER() and toLOWER() may do useful mappings.
13898184e3Ssthen  */
14898184e3Ssthen 
15898184e3Ssthen #define PERL_MAGIC_sv             '\0' /* Special scalar variable */
16898184e3Ssthen #define PERL_MAGIC_arylen         '#' /* Array length ($#ary) */
17b8851fccSafresh1 #define PERL_MAGIC_rhash          '%' /* Extra data for restricted hashes */
18b8851fccSafresh1 #define PERL_MAGIC_debugvar       '*' /* $DB::single, signal, trace vars */
19898184e3Ssthen #define PERL_MAGIC_pos            '.' /* pos() lvalue */
20b8851fccSafresh1 #define PERL_MAGIC_symtab         ':' /* Extra data for symbol tables */
21b8851fccSafresh1 #define PERL_MAGIC_backref        '<' /* For weak ref data */
22b8851fccSafresh1 #define PERL_MAGIC_arylen_p       '@' /* To move arylen out of XPVAV */
23898184e3Ssthen #define PERL_MAGIC_bm             'B' /* Boyer-Moore (fast string search) */
24898184e3Ssthen #define PERL_MAGIC_overload_table 'c' /* Holds overload table (AMT) on stash */
25898184e3Ssthen #define PERL_MAGIC_regdata        'D' /* Regex match position data
26898184e3Ssthen                                          (@+ and @- vars) */
27898184e3Ssthen #define PERL_MAGIC_regdatum       'd' /* Regex match position data element */
28898184e3Ssthen #define PERL_MAGIC_env            'E' /* %ENV hash */
29898184e3Ssthen #define PERL_MAGIC_envelem        'e' /* %ENV hash element */
30898184e3Ssthen #define PERL_MAGIC_fm             'f' /* Formline ('compiled' format) */
31898184e3Ssthen #define PERL_MAGIC_regex_global   'g' /* m//g target */
32898184e3Ssthen #define PERL_MAGIC_hints          'H' /* %^H hash */
33898184e3Ssthen #define PERL_MAGIC_hintselem      'h' /* %^H hash element */
34898184e3Ssthen #define PERL_MAGIC_isa            'I' /* @ISA array */
35898184e3Ssthen #define PERL_MAGIC_isaelem        'i' /* @ISA array element */
36898184e3Ssthen #define PERL_MAGIC_nkeys          'k' /* scalar(keys()) lvalue */
37898184e3Ssthen #define PERL_MAGIC_dbfile         'L' /* Debugger %_<filename */
38898184e3Ssthen #define PERL_MAGIC_dbline         'l' /* Debugger %_<filename element */
39898184e3Ssthen #define PERL_MAGIC_shared         'N' /* Shared between threads */
40898184e3Ssthen #define PERL_MAGIC_shared_scalar  'n' /* Shared between threads */
41898184e3Ssthen #define PERL_MAGIC_collxfrm       'o' /* Locale transformation */
42898184e3Ssthen #define PERL_MAGIC_tied           'P' /* Tied array or hash */
43898184e3Ssthen #define PERL_MAGIC_tiedelem       'p' /* Tied array or hash element */
44898184e3Ssthen #define PERL_MAGIC_tiedscalar     'q' /* Tied scalar or handle */
45b8851fccSafresh1 #define PERL_MAGIC_qr             'r' /* Precompiled qr// regex */
46898184e3Ssthen #define PERL_MAGIC_sig            'S' /* %SIG hash */
47898184e3Ssthen #define PERL_MAGIC_sigelem        's' /* %SIG hash element */
48898184e3Ssthen #define PERL_MAGIC_taint          't' /* Taintedness */
49898184e3Ssthen #define PERL_MAGIC_uvar           'U' /* Available for use by extensions */
50898184e3Ssthen #define PERL_MAGIC_uvar_elem      'u' /* Reserved for use by extensions */
51898184e3Ssthen #define PERL_MAGIC_vstring        'V' /* SV was vstring literal */
52898184e3Ssthen #define PERL_MAGIC_vec            'v' /* vec() lvalue */
53898184e3Ssthen #define PERL_MAGIC_utf8           'w' /* Cached UTF-8 information */
54*e0680481Safresh1 #define PERL_MAGIC_destruct       'X' /* destruct callback */
55898184e3Ssthen #define PERL_MAGIC_substr         'x' /* substr() lvalue */
569f11ffb7Safresh1 #define PERL_MAGIC_nonelem        'Y' /* Array element that does not exist */
57898184e3Ssthen #define PERL_MAGIC_defelem        'y' /* Shadow "foreach" iterator variable /
58898184e3Ssthen                                          smart parameter vivification */
59*e0680481Safresh1 #define PERL_MAGIC_hook           'Z' /* %{^HOOK} hash */
60*e0680481Safresh1 #define PERL_MAGIC_hookelem       'z' /* %{^HOOK} hash element */
61b8851fccSafresh1 #define PERL_MAGIC_lvref          '\\' /* Lvalue reference constructor */
62b8851fccSafresh1 #define PERL_MAGIC_checkcall      ']' /* Inlining/mutation of call to this CV */
63*e0680481Safresh1 #define PERL_MAGIC_extvalue       '^' /* Value magic available for use by extensions */
64*e0680481Safresh1 #define PERL_MAGIC_ext            '~' /* Variable magic available for use by extensions */
65898184e3Ssthen 
66898184e3Ssthen enum {		/* pass one of these to get_vtbl */
67898184e3Ssthen     want_vtbl_arylen,
68898184e3Ssthen     want_vtbl_arylen_p,
69898184e3Ssthen     want_vtbl_backref,
7091f110e0Safresh1     want_vtbl_checkcall,
71898184e3Ssthen     want_vtbl_collxfrm,
72898184e3Ssthen     want_vtbl_dbline,
73b8851fccSafresh1     want_vtbl_debugvar,
74898184e3Ssthen     want_vtbl_defelem,
75*e0680481Safresh1     want_vtbl_destruct,
76898184e3Ssthen     want_vtbl_env,
77898184e3Ssthen     want_vtbl_envelem,
78898184e3Ssthen     want_vtbl_hints,
79898184e3Ssthen     want_vtbl_hintselem,
80*e0680481Safresh1     want_vtbl_hook,
81*e0680481Safresh1     want_vtbl_hookelem,
82898184e3Ssthen     want_vtbl_isa,
83898184e3Ssthen     want_vtbl_isaelem,
84b8851fccSafresh1     want_vtbl_lvref,
85898184e3Ssthen     want_vtbl_mglob,
86898184e3Ssthen     want_vtbl_nkeys,
879f11ffb7Safresh1     want_vtbl_nonelem,
88898184e3Ssthen     want_vtbl_ovrld,
89898184e3Ssthen     want_vtbl_pack,
90898184e3Ssthen     want_vtbl_packelem,
91898184e3Ssthen     want_vtbl_pos,
92898184e3Ssthen     want_vtbl_regdata,
93898184e3Ssthen     want_vtbl_regdatum,
94898184e3Ssthen     want_vtbl_regexp,
95eac174f2Safresh1     want_vtbl_sig,
96898184e3Ssthen     want_vtbl_sigelem,
97898184e3Ssthen     want_vtbl_substr,
98898184e3Ssthen     want_vtbl_sv,
99898184e3Ssthen     want_vtbl_taint,
100898184e3Ssthen     want_vtbl_utf8,
101898184e3Ssthen     want_vtbl_uvar,
102898184e3Ssthen     want_vtbl_vec,
103898184e3Ssthen     magic_vtable_max
104898184e3Ssthen };
105898184e3Ssthen 
106898184e3Ssthen #ifdef DOINIT
10791f110e0Safresh1 EXTCONST char * const PL_magic_vtable_names[magic_vtable_max] = {
108898184e3Ssthen     "arylen",
109898184e3Ssthen     "arylen_p",
110898184e3Ssthen     "backref",
11191f110e0Safresh1     "checkcall",
112898184e3Ssthen     "collxfrm",
113898184e3Ssthen     "dbline",
114b8851fccSafresh1     "debugvar",
115898184e3Ssthen     "defelem",
116*e0680481Safresh1     "destruct",
117898184e3Ssthen     "env",
118898184e3Ssthen     "envelem",
119898184e3Ssthen     "hints",
120898184e3Ssthen     "hintselem",
121*e0680481Safresh1     "hook",
122*e0680481Safresh1     "hookelem",
123898184e3Ssthen     "isa",
124898184e3Ssthen     "isaelem",
125b8851fccSafresh1     "lvref",
126898184e3Ssthen     "mglob",
127898184e3Ssthen     "nkeys",
1289f11ffb7Safresh1     "nonelem",
129898184e3Ssthen     "ovrld",
130898184e3Ssthen     "pack",
131898184e3Ssthen     "packelem",
132898184e3Ssthen     "pos",
133898184e3Ssthen     "regdata",
134898184e3Ssthen     "regdatum",
135898184e3Ssthen     "regexp",
136eac174f2Safresh1     "sig",
137898184e3Ssthen     "sigelem",
138898184e3Ssthen     "substr",
139898184e3Ssthen     "sv",
140898184e3Ssthen     "taint",
141898184e3Ssthen     "utf8",
142898184e3Ssthen     "uvar",
14391f110e0Safresh1     "vec"
144898184e3Ssthen };
145898184e3Ssthen #else
14691f110e0Safresh1 EXTCONST char * const PL_magic_vtable_names[magic_vtable_max];
147898184e3Ssthen #endif
148898184e3Ssthen 
149898184e3Ssthen /* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
150898184e3Ssthen  * pointer to data, whereas we're assigning pointers to functions, which are
151898184e3Ssthen  * not the same beast. ANSI doesn't allow the assignment from one to the other.
152898184e3Ssthen  * (although most, but not all, compilers are prepared to do it)
153898184e3Ssthen  */
154898184e3Ssthen 
155898184e3Ssthen /* order is:
156898184e3Ssthen     get
157898184e3Ssthen     set
158898184e3Ssthen     len
159898184e3Ssthen     clear
160898184e3Ssthen     free
161898184e3Ssthen     copy
162898184e3Ssthen     dup
163898184e3Ssthen     local
164898184e3Ssthen */
165898184e3Ssthen 
166898184e3Ssthen #ifdef DOINIT
167898184e3Ssthen EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = {
168898184e3Ssthen   { (int (*)(pTHX_ SV *, MAGIC *))Perl_magic_getarylen, Perl_magic_setarylen, 0, 0, 0, 0, 0, 0 },
16991f110e0Safresh1   { 0, 0, 0, Perl_magic_cleararylen_p, Perl_magic_freearylen_p, 0, 0, 0 },
170898184e3Ssthen   { 0, 0, 0, 0, Perl_magic_killbackrefs, 0, 0, 0 },
17191f110e0Safresh1   { 0, 0, 0, 0, 0, Perl_magic_copycallchecker, 0, 0 },
172898184e3Ssthen #ifdef USE_LOCALE_COLLATE
173eac174f2Safresh1   { 0, Perl_magic_setcollxfrm, 0, 0, Perl_magic_freecollxfrm, 0, 0, 0 },
174898184e3Ssthen #else
175898184e3Ssthen   { 0, 0, 0, 0, 0, 0, 0, 0 },
176898184e3Ssthen #endif
177898184e3Ssthen   { 0, Perl_magic_setdbline, 0, 0, 0, 0, 0, 0 },
178b8851fccSafresh1   { Perl_magic_getdebugvar, Perl_magic_setdebugvar, 0, 0, 0, 0, 0, 0 },
179898184e3Ssthen   { Perl_magic_getdefelem, Perl_magic_setdefelem, 0, 0, 0, 0, 0, 0 },
180*e0680481Safresh1   { 0, 0, 0, 0, Perl_magic_freedestruct, 0, 0, 0 },
181898184e3Ssthen   { 0, Perl_magic_set_all_env, 0, Perl_magic_clear_all_env, 0, 0, 0, 0 },
182898184e3Ssthen   { 0, Perl_magic_setenv, 0, Perl_magic_clearenv, 0, 0, 0, 0 },
183898184e3Ssthen   { 0, 0, 0, Perl_magic_clearhints, 0, 0, 0, 0 },
184898184e3Ssthen   { 0, Perl_magic_sethint, 0, Perl_magic_clearhint, 0, 0, 0, 0 },
185*e0680481Safresh1   { 0, Perl_magic_sethookall, 0, Perl_magic_clearhookall, 0, 0, 0, 0 },
186*e0680481Safresh1   { 0, Perl_magic_sethook, 0, Perl_magic_clearhook, 0, 0, 0, 0 },
187898184e3Ssthen   { 0, Perl_magic_setisa, 0, Perl_magic_clearisa, 0, 0, 0, 0 },
188898184e3Ssthen   { 0, Perl_magic_setisa, 0, 0, 0, 0, 0, 0 },
189b8851fccSafresh1   { 0, Perl_magic_setlvref, 0, 0, 0, 0, 0, 0 },
190eac174f2Safresh1   { 0, Perl_magic_setmglob, 0, 0, Perl_magic_freemglob, 0, 0, 0 },
191898184e3Ssthen   { Perl_magic_getnkeys, Perl_magic_setnkeys, 0, 0, 0, 0, 0, 0 },
1929f11ffb7Safresh1   { 0, Perl_magic_setnonelem, 0, 0, 0, 0, 0, 0 },
193898184e3Ssthen   { 0, 0, 0, 0, Perl_magic_freeovrld, 0, 0, 0 },
194898184e3Ssthen   { 0, 0, Perl_magic_sizepack, Perl_magic_wipepack, 0, 0, 0, 0 },
195898184e3Ssthen   { Perl_magic_getpack, Perl_magic_setpack, 0, Perl_magic_clearpack, 0, 0, 0, 0 },
196898184e3Ssthen   { Perl_magic_getpos, Perl_magic_setpos, 0, 0, 0, 0, 0, 0 },
197898184e3Ssthen   { 0, 0, Perl_magic_regdata_cnt, 0, 0, 0, 0, 0 },
198898184e3Ssthen   { Perl_magic_regdatum_get, Perl_magic_regdatum_set, 0, 0, 0, 0, 0, 0 },
199898184e3Ssthen   { 0, Perl_magic_setregexp, 0, 0, 0, 0, 0, 0 },
200eac174f2Safresh1   { 0, Perl_magic_setsigall, 0, 0, 0, 0, 0, 0 },
201898184e3Ssthen #ifndef PERL_MICRO
202898184e3Ssthen   { Perl_magic_getsig, Perl_magic_setsig, 0, Perl_magic_clearsig, 0, 0, 0, 0 },
203898184e3Ssthen #else
204898184e3Ssthen   { 0, 0, 0, 0, 0, 0, 0, 0 },
205898184e3Ssthen #endif
206898184e3Ssthen   { Perl_magic_getsubstr, Perl_magic_setsubstr, 0, 0, 0, 0, 0, 0 },
20791f110e0Safresh1   { Perl_magic_get, Perl_magic_set, 0, 0, 0, 0, 0, 0 },
208898184e3Ssthen   { Perl_magic_gettaint, Perl_magic_settaint, 0, 0, 0, 0, 0, 0 },
209eac174f2Safresh1   { 0, Perl_magic_setutf8, 0, 0, Perl_magic_freeutf8, 0, 0, 0 },
210898184e3Ssthen   { Perl_magic_getuvar, Perl_magic_setuvar, 0, 0, 0, 0, 0, 0 },
21191f110e0Safresh1   { Perl_magic_getvec, Perl_magic_setvec, 0, 0, 0, 0, 0, 0 }
212898184e3Ssthen };
213898184e3Ssthen #else
214898184e3Ssthen EXT_MGVTBL PL_magic_vtables[magic_vtable_max];
215898184e3Ssthen #endif
216898184e3Ssthen 
217898184e3Ssthen #define want_vtbl_bm want_vtbl_regexp
218898184e3Ssthen #define want_vtbl_fm want_vtbl_regexp
219898184e3Ssthen 
220898184e3Ssthen #define PL_vtbl_arylen PL_magic_vtables[want_vtbl_arylen]
221898184e3Ssthen #define PL_vtbl_arylen_p PL_magic_vtables[want_vtbl_arylen_p]
222898184e3Ssthen #define PL_vtbl_backref PL_magic_vtables[want_vtbl_backref]
223898184e3Ssthen #define PL_vtbl_bm PL_magic_vtables[want_vtbl_bm]
22491f110e0Safresh1 #define PL_vtbl_checkcall PL_magic_vtables[want_vtbl_checkcall]
225898184e3Ssthen #define PL_vtbl_collxfrm PL_magic_vtables[want_vtbl_collxfrm]
226898184e3Ssthen #define PL_vtbl_dbline PL_magic_vtables[want_vtbl_dbline]
227b8851fccSafresh1 #define PL_vtbl_debugvar PL_magic_vtables[want_vtbl_debugvar]
228898184e3Ssthen #define PL_vtbl_defelem PL_magic_vtables[want_vtbl_defelem]
229*e0680481Safresh1 #define PL_vtbl_destruct PL_magic_vtables[want_vtbl_destruct]
230898184e3Ssthen #define PL_vtbl_env PL_magic_vtables[want_vtbl_env]
231898184e3Ssthen #define PL_vtbl_envelem PL_magic_vtables[want_vtbl_envelem]
232898184e3Ssthen #define PL_vtbl_fm PL_magic_vtables[want_vtbl_fm]
233898184e3Ssthen #define PL_vtbl_hints PL_magic_vtables[want_vtbl_hints]
234898184e3Ssthen #define PL_vtbl_hintselem PL_magic_vtables[want_vtbl_hintselem]
235*e0680481Safresh1 #define PL_vtbl_hook PL_magic_vtables[want_vtbl_hook]
236*e0680481Safresh1 #define PL_vtbl_hookelem PL_magic_vtables[want_vtbl_hookelem]
237898184e3Ssthen #define PL_vtbl_isa PL_magic_vtables[want_vtbl_isa]
238898184e3Ssthen #define PL_vtbl_isaelem PL_magic_vtables[want_vtbl_isaelem]
239b8851fccSafresh1 #define PL_vtbl_lvref PL_magic_vtables[want_vtbl_lvref]
240898184e3Ssthen #define PL_vtbl_mglob PL_magic_vtables[want_vtbl_mglob]
241898184e3Ssthen #define PL_vtbl_nkeys PL_magic_vtables[want_vtbl_nkeys]
2429f11ffb7Safresh1 #define PL_vtbl_nonelem PL_magic_vtables[want_vtbl_nonelem]
243898184e3Ssthen #define PL_vtbl_ovrld PL_magic_vtables[want_vtbl_ovrld]
244898184e3Ssthen #define PL_vtbl_pack PL_magic_vtables[want_vtbl_pack]
245898184e3Ssthen #define PL_vtbl_packelem PL_magic_vtables[want_vtbl_packelem]
246898184e3Ssthen #define PL_vtbl_pos PL_magic_vtables[want_vtbl_pos]
247898184e3Ssthen #define PL_vtbl_regdata PL_magic_vtables[want_vtbl_regdata]
248898184e3Ssthen #define PL_vtbl_regdatum PL_magic_vtables[want_vtbl_regdatum]
249898184e3Ssthen #define PL_vtbl_regexp PL_magic_vtables[want_vtbl_regexp]
250eac174f2Safresh1 #define PL_vtbl_sig PL_magic_vtables[want_vtbl_sig]
251898184e3Ssthen #define PL_vtbl_sigelem PL_magic_vtables[want_vtbl_sigelem]
252898184e3Ssthen #define PL_vtbl_substr PL_magic_vtables[want_vtbl_substr]
253898184e3Ssthen #define PL_vtbl_sv PL_magic_vtables[want_vtbl_sv]
254898184e3Ssthen #define PL_vtbl_taint PL_magic_vtables[want_vtbl_taint]
255898184e3Ssthen #define PL_vtbl_utf8 PL_magic_vtables[want_vtbl_utf8]
256898184e3Ssthen #define PL_vtbl_uvar PL_magic_vtables[want_vtbl_uvar]
257898184e3Ssthen #define PL_vtbl_vec PL_magic_vtables[want_vtbl_vec]
258898184e3Ssthen 
259*e0680481Safresh1 /* ex: set ro ft=c: */
260