xref: /openbsd-src/gnu/usr.bin/perl/cop.h (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1 /*    cop.h
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  * Control ops (cops) are one of the two ops OP_NEXTSTATE and OP_DBSTATE,
10  * that (loosely speaking) are separate statements.
11  * They hold information important for lexical state and error reporting.
12  * At run time, PL_curcop is set to point to the most recently executed cop,
13  * and thus can be used to determine our current state.
14  */
15 
16 /* A jmpenv packages the state required to perform a proper non-local jump.
17  * Note that there is a PL_start_env initialized when perl starts, and
18  * PL_top_env points to this initially, so PL_top_env should always be
19  * non-null.
20  *
21  * Existence of a non-null PL_top_env->je_prev implies it is valid to call
22  * longjmp() at that runlevel (we make sure PL_start_env.je_prev is always
23  * null to ensure this).
24  *
25  * je_mustcatch, when set at any runlevel to TRUE, means eval ops must
26  * establish a local jmpenv to handle exception traps.  Care must be taken
27  * to restore the previous value of je_mustcatch before exiting the
28  * stack frame iff JMPENV_PUSH was not called in that stack frame.
29  * GSAR 97-03-27
30  */
31 
32 struct jmpenv {
33     struct jmpenv *	je_prev;
34     Sigjmp_buf		je_buf;		/* uninit if je_prev is NULL */
35     int			je_ret;		/* last exception thrown */
36     bool		je_mustcatch;	/* need to call longjmp()? */
37 };
38 
39 typedef struct jmpenv JMPENV;
40 
41 /*
42  * How to build the first jmpenv.
43  *
44  * top_env needs to be non-zero. It points to an area
45  * in which longjmp() stuff is stored, as C callstack
46  * info there at least is thread specific this has to
47  * be per-thread. Otherwise a 'die' in a thread gives
48  * that thread the C stack of last thread to do an eval {}!
49  */
50 
51 #define JMPENV_BOOTSTRAP \
52     STMT_START {				\
53 	PERL_POISON_EXPR(PoisonNew(&PL_start_env, 1, JMPENV));\
54 	PL_top_env = &PL_start_env;		\
55 	PL_start_env.je_prev = NULL;		\
56 	PL_start_env.je_ret = -1;		\
57 	PL_start_env.je_mustcatch = TRUE;	\
58     } STMT_END
59 
60 /*
61  *   PERL_FLEXIBLE_EXCEPTIONS
62  *
63  * All the flexible exceptions code has been removed.
64  * See the following threads for details:
65  *
66  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-07/msg00378.html
67  *
68  * Joshua's original patches (which weren't applied) and discussion:
69  *
70  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01396.html
71  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01489.html
72  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01491.html
73  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01608.html
74  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg02144.html
75  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg02998.html
76  *
77  * Chip's reworked patch and discussion:
78  *
79  *   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1999-03/msg00520.html
80  *
81  * The flaw in these patches (which went unnoticed at the time) was
82  * that they moved some code that could potentially die() out of the
83  * region protected by the setjmp()s.  This caused exceptions within
84  * END blocks and such to not be handled by the correct setjmp().
85  *
86  * The original patches that introduces flexible exceptions were:
87  *
88  * http://perl5.git.perl.org/perl.git/commit/312caa8e97f1c7ee342a9895c2f0e749625b4929
89  * http://perl5.git.perl.org/perl.git/commit/14dd3ad8c9bf82cf09798a22cc89a9862dfd6d1a
90  *
91  */
92 
93 #define dJMPENV		JMPENV cur_env
94 
95 #define JMPENV_PUSH(v) \
96     STMT_START {							\
97 	DEBUG_l({							\
98 	    int i = 0; JMPENV *p = PL_top_env;				\
99 	    while (p) { i++; p = p->je_prev; }				\
100 	    Perl_deb(aTHX_ "JUMPENV_PUSH level=%d at %s:%d\n",		\
101 		         i,  __FILE__, __LINE__);})			\
102 	cur_env.je_prev = PL_top_env;					\
103 	cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK);		\
104 	PL_top_env = &cur_env;						\
105 	cur_env.je_mustcatch = FALSE;					\
106 	(v) = cur_env.je_ret;						\
107     } STMT_END
108 
109 #define JMPENV_POP \
110     STMT_START {							\
111 	DEBUG_l({							\
112 	    int i = -1; JMPENV *p = PL_top_env;				\
113 	    while (p) { i++; p = p->je_prev; }				\
114 	    Perl_deb(aTHX_ "JUMPENV_POP level=%d at %s:%d\n",		\
115 		         i, __FILE__, __LINE__);})			\
116 	assert(PL_top_env == &cur_env);					\
117 	PL_top_env = cur_env.je_prev;					\
118     } STMT_END
119 
120 #define JMPENV_JUMP(v) \
121     STMT_START {						\
122 	DEBUG_l({						\
123 	    int i = -1; JMPENV *p = PL_top_env;			\
124 	    while (p) { i++; p = p->je_prev; }			\
125 	    Perl_deb(aTHX_ "JUMPENV_JUMP(%d) level=%d at %s:%d\n", \
126 		         (int)v, i, __FILE__, __LINE__);})	\
127 	if (PL_top_env->je_prev)				\
128 	    PerlProc_longjmp(PL_top_env->je_buf, (v));		\
129 	if ((v) == 2)						\
130 	    PerlProc_exit(STATUS_EXIT);		                \
131 	PerlIO_printf(PerlIO_stderr(), "panic: top_env, v=%d\n", (int)v); \
132 	PerlProc_exit(1);					\
133     } STMT_END
134 
135 #define CATCH_GET		(PL_top_env->je_mustcatch)
136 #define CATCH_SET(v) \
137     STMT_START {							\
138 	DEBUG_l(							\
139 	    Perl_deb(aTHX_						\
140 		"JUMPLEVEL set catch %d => %d (for %p) at %s:%d\n",	\
141 		 PL_top_env->je_mustcatch, v, (void*)PL_top_env,	\
142 		 __FILE__, __LINE__);)					\
143 	PL_top_env->je_mustcatch = (v);					\
144     } STMT_END
145 
146 /*
147 =head1 COP Hint Hashes
148 */
149 
150 typedef struct refcounted_he COPHH;
151 
152 #define COPHH_KEY_UTF8 REFCOUNTED_HE_KEY_UTF8
153 
154 /*
155 =for apidoc Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
156 
157 Look up the entry in the cop hints hash I<cophh> with the key specified by
158 I<keypv> and I<keylen>.  If I<flags> has the C<COPHH_KEY_UTF8> bit set,
159 the key octets are interpreted as UTF-8, otherwise they are interpreted
160 as Latin-1.  I<hash> is a precomputed hash of the key string, or zero if
161 it has not been precomputed.  Returns a mortal scalar copy of the value
162 associated with the key, or C<&PL_sv_placeholder> if there is no value
163 associated with the key.
164 
165 =cut
166 */
167 
168 #define cophh_fetch_pvn(cophh, keypv, keylen, hash, flags) \
169     Perl_refcounted_he_fetch_pvn(aTHX_ cophh, keypv, keylen, hash, flags)
170 
171 /*
172 =for apidoc Amx|SV *|cophh_fetch_pvs|const COPHH *cophh|const char *key|U32 flags
173 
174 Like L</cophh_fetch_pvn>, but takes a literal string instead of a
175 string/length pair, and no precomputed hash.
176 
177 =cut
178 */
179 
180 #define cophh_fetch_pvs(cophh, key, flags) \
181     Perl_refcounted_he_fetch_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, flags)
182 
183 /*
184 =for apidoc Amx|SV *|cophh_fetch_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
185 
186 Like L</cophh_fetch_pvn>, but takes a nul-terminated string instead of
187 a string/length pair.
188 
189 =cut
190 */
191 
192 #define cophh_fetch_pv(cophh, key, hash, flags) \
193     Perl_refcounted_he_fetch_pv(aTHX_ cophh, key, hash, flags)
194 
195 /*
196 =for apidoc Amx|SV *|cophh_fetch_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
197 
198 Like L</cophh_fetch_pvn>, but takes a Perl scalar instead of a
199 string/length pair.
200 
201 =cut
202 */
203 
204 #define cophh_fetch_sv(cophh, key, hash, flags) \
205     Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags)
206 
207 /*
208 =for apidoc Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags
209 
210 Generates and returns a standard Perl hash representing the full set of
211 key/value pairs in the cop hints hash I<cophh>.  I<flags> is currently
212 unused and must be zero.
213 
214 =cut
215 */
216 
217 #define cophh_2hv(cophh, flags) \
218     Perl_refcounted_he_chain_2hv(aTHX_ cophh, flags)
219 
220 /*
221 =for apidoc Amx|COPHH *|cophh_copy|COPHH *cophh
222 
223 Make and return a complete copy of the cop hints hash I<cophh>.
224 
225 =cut
226 */
227 
228 #define cophh_copy(cophh) Perl_refcounted_he_inc(aTHX_ cophh)
229 
230 /*
231 =for apidoc Amx|void|cophh_free|COPHH *cophh
232 
233 Discard the cop hints hash I<cophh>, freeing all resources associated
234 with it.
235 
236 =cut
237 */
238 
239 #define cophh_free(cophh) Perl_refcounted_he_free(aTHX_ cophh)
240 
241 /*
242 =for apidoc Amx|COPHH *|cophh_new_empty
243 
244 Generate and return a fresh cop hints hash containing no entries.
245 
246 =cut
247 */
248 
249 #define cophh_new_empty() ((COPHH *)NULL)
250 
251 /*
252 =for apidoc Amx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
253 
254 Stores a value, associated with a key, in the cop hints hash I<cophh>,
255 and returns the modified hash.  The returned hash pointer is in general
256 not the same as the hash pointer that was passed in.  The input hash is
257 consumed by the function, and the pointer to it must not be subsequently
258 used.  Use L</cophh_copy> if you need both hashes.
259 
260 The key is specified by I<keypv> and I<keylen>.  If I<flags> has the
261 C<COPHH_KEY_UTF8> bit set, the key octets are interpreted as UTF-8,
262 otherwise they are interpreted as Latin-1.  I<hash> is a precomputed
263 hash of the key string, or zero if it has not been precomputed.
264 
265 I<value> is the scalar value to store for this key.  I<value> is copied
266 by this function, which thus does not take ownership of any reference
267 to it, and later changes to the scalar will not be reflected in the
268 value visible in the cop hints hash.  Complex types of scalar will not
269 be stored with referential integrity, but will be coerced to strings.
270 
271 =cut
272 */
273 
274 #define cophh_store_pvn(cophh, keypv, keylen, hash, value, flags) \
275     Perl_refcounted_he_new_pvn(aTHX_ cophh, keypv, keylen, hash, value, flags)
276 
277 /*
278 =for apidoc Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|const char *key|SV *value|U32 flags
279 
280 Like L</cophh_store_pvn>, but takes a literal string instead of a
281 string/length pair, and no precomputed hash.
282 
283 =cut
284 */
285 
286 #define cophh_store_pvs(cophh, key, value, flags) \
287     Perl_refcounted_he_new_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, value, flags)
288 
289 /*
290 =for apidoc Amx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
291 
292 Like L</cophh_store_pvn>, but takes a nul-terminated string instead of
293 a string/length pair.
294 
295 =cut
296 */
297 
298 #define cophh_store_pv(cophh, key, hash, value, flags) \
299     Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, value, flags)
300 
301 /*
302 =for apidoc Amx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
303 
304 Like L</cophh_store_pvn>, but takes a Perl scalar instead of a
305 string/length pair.
306 
307 =cut
308 */
309 
310 #define cophh_store_sv(cophh, key, hash, value, flags) \
311     Perl_refcounted_he_new_sv(aTHX_ cophh, key, hash, value, flags)
312 
313 /*
314 =for apidoc Amx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
315 
316 Delete a key and its associated value from the cop hints hash I<cophh>,
317 and returns the modified hash.  The returned hash pointer is in general
318 not the same as the hash pointer that was passed in.  The input hash is
319 consumed by the function, and the pointer to it must not be subsequently
320 used.  Use L</cophh_copy> if you need both hashes.
321 
322 The key is specified by I<keypv> and I<keylen>.  If I<flags> has the
323 C<COPHH_KEY_UTF8> bit set, the key octets are interpreted as UTF-8,
324 otherwise they are interpreted as Latin-1.  I<hash> is a precomputed
325 hash of the key string, or zero if it has not been precomputed.
326 
327 =cut
328 */
329 
330 #define cophh_delete_pvn(cophh, keypv, keylen, hash, flags) \
331     Perl_refcounted_he_new_pvn(aTHX_ cophh, keypv, keylen, hash, \
332 	(SV *)NULL, flags)
333 
334 /*
335 =for apidoc Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|const char *key|U32 flags
336 
337 Like L</cophh_delete_pvn>, but takes a literal string instead of a
338 string/length pair, and no precomputed hash.
339 
340 =cut
341 */
342 
343 #define cophh_delete_pvs(cophh, key, flags) \
344     Perl_refcounted_he_new_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, \
345 	(SV *)NULL, flags)
346 
347 /*
348 =for apidoc Amx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
349 
350 Like L</cophh_delete_pvn>, but takes a nul-terminated string instead of
351 a string/length pair.
352 
353 =cut
354 */
355 
356 #define cophh_delete_pv(cophh, key, hash, flags) \
357     Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, (SV *)NULL, flags)
358 
359 /*
360 =for apidoc Amx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
361 
362 Like L</cophh_delete_pvn>, but takes a Perl scalar instead of a
363 string/length pair.
364 
365 =cut
366 */
367 
368 #define cophh_delete_sv(cophh, key, hash, flags) \
369     Perl_refcounted_he_new_sv(aTHX_ cophh, key, hash, (SV *)NULL, flags)
370 
371 #include "mydtrace.h"
372 
373 struct cop {
374     BASEOP
375     /* On LP64 putting this here takes advantage of the fact that BASEOP isn't
376        an exact multiple of 8 bytes to save structure padding.  */
377     line_t      cop_line;       /* line # of this command */
378     /* label for this construct is now stored in cop_hints_hash */
379 #ifdef USE_ITHREADS
380     PADOFFSET	cop_stashoff;	/* offset into PL_stashpad, for the
381 				   package the line was compiled in */
382     char *	cop_file;	/* file name the following line # is from */
383 #else
384     HV *	cop_stash;	/* package line was compiled in */
385     GV *	cop_filegv;	/* file the following line # is from */
386 #endif
387     U32		cop_hints;	/* hints bits from pragmata */
388     U32		cop_seq;	/* parse sequence number */
389     /* Beware. mg.c and warnings.pl assume the type of this is STRLEN *:  */
390     STRLEN *	cop_warnings;	/* lexical warnings bitmask */
391     /* compile time state of %^H.  See the comment in op.c for how this is
392        used to recreate a hash to return from caller.  */
393     COPHH *	cop_hints_hash;
394 };
395 
396 #ifdef USE_ITHREADS
397 #  define CopFILE(c)		((c)->cop_file)
398 #  define CopFILEGV(c)		(CopFILE(c) \
399 				 ? gv_fetchfile(CopFILE(c)) : NULL)
400 
401 #  ifdef NETWARE
402 #    define CopFILE_set(c,pv)	((c)->cop_file = savepv(pv))
403 #    define CopFILE_setn(c,pv,l)  ((c)->cop_file = savepvn((pv),(l)))
404 #  else
405 #    define CopFILE_set(c,pv)	((c)->cop_file = savesharedpv(pv))
406 #    define CopFILE_setn(c,pv,l)  ((c)->cop_file = savesharedpvn((pv),(l)))
407 #  endif
408 
409 #  define CopFILESV(c)		(CopFILE(c) \
410 				 ? GvSV(gv_fetchfile(CopFILE(c))) : NULL)
411 #  define CopFILEAV(c)		(CopFILE(c) \
412 				 ? GvAV(gv_fetchfile(CopFILE(c))) : NULL)
413 #  define CopFILEAVx(c)		(assert_(CopFILE(c)) \
414 				   GvAV(gv_fetchfile(CopFILE(c))))
415 
416 #  define CopSTASH(c)           PL_stashpad[(c)->cop_stashoff]
417 #  define CopSTASH_set(c,hv)	((c)->cop_stashoff = (hv)		\
418 				    ? alloccopstash(hv)			\
419 				    : 0)
420 #  ifdef NETWARE
421 #    define CopFILE_free(c) SAVECOPFILE_FREE(c)
422 #  else
423 #    define CopFILE_free(c)	(PerlMemShared_free(CopFILE(c)),(CopFILE(c) = NULL))
424 #  endif
425 #else
426 #  define CopFILEGV(c)		((c)->cop_filegv)
427 #  define CopFILEGV_set(c,gv)	((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
428 #  define CopFILE_set(c,pv)	CopFILEGV_set((c), gv_fetchfile(pv))
429 #  define CopFILE_setn(c,pv,l)	CopFILEGV_set((c), gv_fetchfile_flags((pv),(l),0))
430 #  define CopFILESV(c)		(CopFILEGV(c) ? GvSV(CopFILEGV(c)) : NULL)
431 #  define CopFILEAV(c)		(CopFILEGV(c) ? GvAV(CopFILEGV(c)) : NULL)
432 #  ifdef DEBUGGING
433 #    define CopFILEAVx(c)	(assert(CopFILEGV(c)), GvAV(CopFILEGV(c)))
434 #  else
435 #    define CopFILEAVx(c)	(GvAV(CopFILEGV(c)))
436 # endif
437 #  define CopFILE(c)		(CopFILEGV(c) \
438 				    ? GvNAME(CopFILEGV(c))+2 : NULL)
439 #  define CopSTASH(c)		((c)->cop_stash)
440 #  define CopSTASH_set(c,hv)	((c)->cop_stash = (hv))
441 #  define CopFILE_free(c)	(SvREFCNT_dec(CopFILEGV(c)),(CopFILEGV(c) = NULL))
442 
443 #endif /* USE_ITHREADS */
444 
445 #define CopSTASHPV(c)		(CopSTASH(c) ? HvNAME_get(CopSTASH(c)) : NULL)
446    /* cop_stash is not refcounted */
447 #define CopSTASHPV_set(c,pv)	CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
448 #define CopSTASH_eq(c,hv)	(CopSTASH(c) == (hv))
449 
450 #define CopHINTHASH_get(c)	((COPHH*)((c)->cop_hints_hash))
451 #define CopHINTHASH_set(c,h)	((c)->cop_hints_hash = (h))
452 
453 /*
454 =head1 COP Hint Reading
455 */
456 
457 /*
458 =for apidoc Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
459 
460 Look up the hint entry in the cop I<cop> with the key specified by
461 I<keypv> and I<keylen>.  If I<flags> has the C<COPHH_KEY_UTF8> bit set,
462 the key octets are interpreted as UTF-8, otherwise they are interpreted
463 as Latin-1.  I<hash> is a precomputed hash of the key string, or zero if
464 it has not been precomputed.  Returns a mortal scalar copy of the value
465 associated with the key, or C<&PL_sv_placeholder> if there is no value
466 associated with the key.
467 
468 =cut
469 */
470 
471 #define cop_hints_fetch_pvn(cop, keypv, keylen, hash, flags) \
472     cophh_fetch_pvn(CopHINTHASH_get(cop), keypv, keylen, hash, flags)
473 
474 /*
475 =for apidoc Am|SV *|cop_hints_fetch_pvs|const COP *cop|const char *key|U32 flags
476 
477 Like L</cop_hints_fetch_pvn>, but takes a literal string instead of a
478 string/length pair, and no precomputed hash.
479 
480 =cut
481 */
482 
483 #define cop_hints_fetch_pvs(cop, key, flags) \
484     cophh_fetch_pvs(CopHINTHASH_get(cop), key, flags)
485 
486 /*
487 =for apidoc Am|SV *|cop_hints_fetch_pv|const COP *cop|const char *key|U32 hash|U32 flags
488 
489 Like L</cop_hints_fetch_pvn>, but takes a nul-terminated string instead
490 of a string/length pair.
491 
492 =cut
493 */
494 
495 #define cop_hints_fetch_pv(cop, key, hash, flags) \
496     cophh_fetch_pv(CopHINTHASH_get(cop), key, hash, flags)
497 
498 /*
499 =for apidoc Am|SV *|cop_hints_fetch_sv|const COP *cop|SV *key|U32 hash|U32 flags
500 
501 Like L</cop_hints_fetch_pvn>, but takes a Perl scalar instead of a
502 string/length pair.
503 
504 =cut
505 */
506 
507 #define cop_hints_fetch_sv(cop, key, hash, flags) \
508     cophh_fetch_sv(CopHINTHASH_get(cop), key, hash, flags)
509 
510 /*
511 =for apidoc Am|HV *|cop_hints_2hv|const COP *cop|U32 flags
512 
513 Generates and returns a standard Perl hash representing the full set of
514 hint entries in the cop I<cop>.  I<flags> is currently unused and must
515 be zero.
516 
517 =cut
518 */
519 
520 #define cop_hints_2hv(cop, flags) \
521     cophh_2hv(CopHINTHASH_get(cop), flags)
522 
523 #define CopLABEL(c)  Perl_cop_fetch_label(aTHX_ (c), NULL, NULL)
524 #define CopLABEL_len(c,len)  Perl_cop_fetch_label(aTHX_ (c), len, NULL)
525 #define CopLABEL_len_flags(c,len,flags)  Perl_cop_fetch_label(aTHX_ (c), len, flags)
526 #define CopLABEL_alloc(pv)	((pv)?savepv(pv):NULL)
527 
528 #define CopSTASH_ne(c,hv)	(!CopSTASH_eq(c,hv))
529 #define CopLINE(c)		((c)->cop_line)
530 #define CopLINE_inc(c)		(++CopLINE(c))
531 #define CopLINE_dec(c)		(--CopLINE(c))
532 #define CopLINE_set(c,l)	(CopLINE(c) = (l))
533 
534 /* OutCopFILE() is CopFILE for output (caller, die, warn, etc.) */
535 #define OutCopFILE(c) CopFILE(c)
536 
537 #define CopHINTS_get(c)		((c)->cop_hints + 0)
538 #define CopHINTS_set(c, h)	STMT_START {				\
539 				    (c)->cop_hints = (h);		\
540 				} STMT_END
541 
542 /*
543  * Here we have some enormously heavy (or at least ponderous) wizardry.
544  */
545 
546 /* subroutine context */
547 struct block_sub {
548     OP *	retop;	/* op to execute on exit from sub */
549     /* Above here is the same for sub, format and eval.  */
550     CV *	cv;
551     /* Above here is the same for sub and format.  */
552     AV *	savearray;
553     AV *	argarray;
554     I32		olddepth;
555     PAD		*oldcomppad;
556 };
557 
558 
559 /* format context */
560 struct block_format {
561     OP *	retop;	/* op to execute on exit from sub */
562     /* Above here is the same for sub, format and eval.  */
563     CV *	cv;
564     /* Above here is the same for sub and format.  */
565     GV *	gv;
566     GV *	dfoutgv;
567 };
568 
569 /* base for the next two macros. Don't use directly.
570  * Note that the refcnt of the cv is incremented twice;  The CX one is
571  * decremented by LEAVESUB, the other by LEAVE. */
572 
573 #define PUSHSUB_BASE(cx)						\
574 	ENTRY_PROBE(CvNAMED(cv)						\
575 			? HEK_KEY(CvNAME_HEK(cv))			\
576 			: GvENAME(CvGV(cv)),	       			\
577 		CopFILE((const COP *)CvSTART(cv)),			\
578 		CopLINE((const COP *)CvSTART(cv)),			\
579 		CopSTASHPV((const COP *)CvSTART(cv)));			\
580 									\
581 	cx->blk_sub.cv = cv;						\
582 	cx->blk_sub.olddepth = CvDEPTH(cv);				\
583 	cx->cx_type |= (hasargs) ? CXp_HASARGS : 0;			\
584 	cx->blk_sub.retop = NULL;					\
585 	if (!CvDEPTH(cv)) {						\
586 	    SvREFCNT_inc_simple_void_NN(cv);				\
587 	    SvREFCNT_inc_simple_void_NN(cv);				\
588 	    SAVEFREESV(cv);						\
589 	}
590 
591 #define PUSHSUB_GET_LVALUE_MASK(func) \
592 	/* If the context is indeterminate, then only the lvalue */	\
593 	/* flags that the caller also has are applicable.        */	\
594 	(								\
595 	   (PL_op->op_flags & OPf_WANT)					\
596 	       ? OPpENTERSUB_LVAL_MASK					\
597 	       : !(PL_op->op_private & OPpENTERSUB_LVAL_MASK)		\
598 	           ? 0 : (U8)func(aTHX)					\
599 	)
600 
601 #define PUSHSUB(cx)							\
602     {									\
603 	U8 phlags = PUSHSUB_GET_LVALUE_MASK(Perl_was_lvalue_sub);	\
604 	PUSHSUB_BASE(cx)						\
605 	cx->blk_u16 = PL_op->op_private &				\
606 	                  (phlags|OPpDEREF);				\
607     }
608 
609 /* variant for use by OP_DBSTATE, where op_private holds hint bits */
610 #define PUSHSUB_DB(cx)							\
611 	PUSHSUB_BASE(cx)						\
612 	cx->blk_u16 = 0;
613 
614 
615 #define PUSHFORMAT(cx, retop)						\
616 	cx->blk_format.cv = cv;						\
617 	cx->blk_format.gv = gv;						\
618 	cx->blk_format.retop = (retop);					\
619 	cx->blk_format.dfoutgv = PL_defoutgv;				\
620 	cx->blk_u16 = 0;                                                \
621 	if (!CvDEPTH(cv)) SvREFCNT_inc_simple_void_NN(cv);		\
622 	CvDEPTH(cv)++;							\
623 	SvREFCNT_inc_void(cx->blk_format.dfoutgv)
624 
625 #define POP_SAVEARRAY()						\
626     STMT_START {							\
627 	SvREFCNT_dec(GvAV(PL_defgv));					\
628 	GvAV(PL_defgv) = cx->blk_sub.savearray;				\
629     } STMT_END
630 
631 /* junk in @_ spells trouble when cloning CVs and in pp_caller(), so don't
632  * leave any (a fast av_clear(ary), basically) */
633 #define CLEAR_ARGARRAY(ary) \
634     STMT_START {							\
635 	AvMAX(ary) += AvARRAY(ary) - AvALLOC(ary);			\
636 	AvARRAY(ary) = AvALLOC(ary);					\
637 	AvFILLp(ary) = -1;						\
638     } STMT_END
639 
640 #define POPSUB(cx,sv)							\
641     STMT_START {							\
642 	const I32 olddepth = cx->blk_sub.olddepth;			\
643         if (!(cx->blk_u16 & CxPOPSUB_DONE)) {                           \
644         cx->blk_u16 |= CxPOPSUB_DONE;                                   \
645 	RETURN_PROBE(CvNAMED(cx->blk_sub.cv)				\
646 			? HEK_KEY(CvNAME_HEK(cx->blk_sub.cv))		\
647 			: GvENAME(CvGV(cx->blk_sub.cv)),		\
648 		CopFILE((COP*)CvSTART((const CV*)cx->blk_sub.cv)),	\
649 		CopLINE((COP*)CvSTART((const CV*)cx->blk_sub.cv)),	\
650 		CopSTASHPV((COP*)CvSTART((const CV*)cx->blk_sub.cv)));	\
651 									\
652 	if (CxHASARGS(cx)) {						\
653 	    POP_SAVEARRAY();						\
654 	    /* abandon @_ if it got reified */				\
655 	    if (AvREAL(cx->blk_sub.argarray)) {				\
656 		const SSize_t fill = AvFILLp(cx->blk_sub.argarray);	\
657 		SvREFCNT_dec_NN(cx->blk_sub.argarray);			\
658 		cx->blk_sub.argarray = newAV();				\
659 		av_extend(cx->blk_sub.argarray, fill);			\
660 		AvREIFY_only(cx->blk_sub.argarray);			\
661 		CX_CURPAD_SV(cx->blk_sub, 0) = MUTABLE_SV(cx->blk_sub.argarray); \
662 	    }								\
663 	    else {							\
664 		CLEAR_ARGARRAY(cx->blk_sub.argarray);			\
665 	    }								\
666 	}								\
667         }                                                               \
668 	sv = MUTABLE_SV(cx->blk_sub.cv);				\
669 	LEAVE_SCOPE(PL_scopestack[cx->blk_oldscopesp-1]);		\
670 	if (sv && (CvDEPTH((const CV*)sv) = olddepth))			\
671 	    sv = NULL;						\
672     } STMT_END
673 
674 #define LEAVESUB(sv)							\
675     STMT_START {							\
676 	SvREFCNT_dec(sv);						\
677     } STMT_END
678 
679 #define POPFORMAT(cx)							\
680     STMT_START {							\
681         if (!(cx->blk_u16 & CxPOPSUB_DONE)) {                           \
682 	CV * const cv = cx->blk_format.cv;				\
683 	GV * const dfuot = cx->blk_format.dfoutgv;			\
684         cx->blk_u16 |= CxPOPSUB_DONE;                                   \
685 	setdefout(dfuot);						\
686 	LEAVE_SCOPE(PL_scopestack[cx->blk_oldscopesp-1]);		\
687 	if (!--CvDEPTH(cv))						\
688 	    SvREFCNT_dec_NN(cx->blk_format.cv);				\
689 	SvREFCNT_dec_NN(dfuot);						\
690         }                                                               \
691     } STMT_END
692 
693 /* eval context */
694 struct block_eval {
695     OP *	retop;	/* op to execute on exit from eval */
696     /* Above here is the same for sub, format and eval.  */
697     SV *	old_namesv;
698     OP *	old_eval_root;
699     SV *	cur_text;
700     CV *	cv;
701     JMPENV *	cur_top_env; /* value of PL_top_env when eval CX created */
702 };
703 
704 /* If we ever need more than 512 op types, change the shift from 7.
705    blku_gimme is actually also only 2 bits, so could be merged with something.
706 */
707 
708 #define CxOLD_IN_EVAL(cx)	(((cx)->blk_u16) & 0x7F)
709 #define CxOLD_OP_TYPE(cx)	(((cx)->blk_u16) >> 7)
710 
711 #define PUSHEVAL(cx,n)							\
712     STMT_START {							\
713 	assert(!(PL_in_eval & ~0x7F));					\
714 	assert(!(PL_op->op_type & ~0x1FF));				\
715 	cx->blk_u16 = (PL_in_eval & 0x7F) | ((U16)PL_op->op_type << 7);	\
716 	cx->blk_eval.old_namesv = (n ? newSVpv(n,0) : NULL);		\
717 	cx->blk_eval.old_eval_root = PL_eval_root;			\
718 	cx->blk_eval.cur_text = PL_parser ? PL_parser->linestr : NULL;	\
719 	cx->blk_eval.cv = NULL; /* set by doeval(), as applicable */	\
720 	cx->blk_eval.retop = NULL;					\
721 	cx->blk_eval.cur_top_env = PL_top_env; 				\
722     } STMT_END
723 
724 #define POPEVAL(cx)							\
725     STMT_START {							\
726 	PL_in_eval = CxOLD_IN_EVAL(cx);					\
727 	optype = CxOLD_OP_TYPE(cx);					\
728 	PL_eval_root = cx->blk_eval.old_eval_root;			\
729 	if (cx->blk_eval.cur_text && SvSCREAM(cx->blk_eval.cur_text))	\
730 	    SvREFCNT_dec_NN(cx->blk_eval.cur_text);			\
731 	if (cx->blk_eval.old_namesv)					\
732 	    sv_2mortal(cx->blk_eval.old_namesv);			\
733     } STMT_END
734 
735 /* loop context */
736 struct block_loop {
737     I32		resetsp;
738     LOOP *	my_op;	/* My op, that contains redo, next and last ops.  */
739     union {	/* different ways of locating the iteration variable */
740 	SV      **svp;
741 	GV      *gv;
742 	PAD     *oldcomppad; /* only used in ITHREADS */
743     } itervar_u;
744     union {
745 	struct { /* valid if type is LOOP_FOR or LOOP_PLAIN (but {NULL,0})*/
746 	    AV * ary; /* use the stack if this is NULL */
747 	    IV ix;
748 	} ary;
749 	struct { /* valid if type is LOOP_LAZYIV */
750 	    IV cur;
751 	    IV end;
752 	} lazyiv;
753 	struct { /* valid if type if LOOP_LAZYSV */
754 	    SV * cur;
755 	    SV * end; /* maxiumum value (or minimum in reverse) */
756 	} lazysv;
757     } state_u;
758 };
759 
760 #ifdef USE_ITHREADS
761 #  define CxITERVAR_PADSV(c) \
762 	&CX_CURPAD_SV( (c)->blk_loop.itervar_u, (c)->blk_loop.my_op->op_targ)
763 #else
764 #  define CxITERVAR_PADSV(c) ((c)->blk_loop.itervar_u.svp)
765 #endif
766 
767 #define CxITERVAR(c)							\
768 	((c)->blk_loop.itervar_u.oldcomppad				\
769 	 ? (CxPADLOOP(c) 						\
770 	    ? CxITERVAR_PADSV(c)					\
771 	    : &GvSV((c)->blk_loop.itervar_u.gv))			\
772 	 : (SV**)NULL)
773 
774 #define CxLABEL(c)	(0 + CopLABEL((c)->blk_oldcop))
775 #define CxLABEL_len(c,len)	(0 + CopLABEL_len((c)->blk_oldcop, len))
776 #define CxLABEL_len_flags(c,len,flags)	(0 + CopLABEL_len_flags((c)->blk_oldcop, len, flags))
777 #define CxHASARGS(c)	(((c)->cx_type & CXp_HASARGS) == CXp_HASARGS)
778 #define CxLVAL(c)	(0 + ((c)->blk_u16 & 0xff))
779 /* POPSUB has already been performed on this context frame */
780 #define CxPOPSUB_DONE 0x100
781 
782 
783 #define PUSHLOOP_PLAIN(cx, s)						\
784 	cx->blk_loop.resetsp = s - PL_stack_base;			\
785 	cx->blk_loop.my_op = cLOOP;					\
786 	cx->blk_loop.state_u.ary.ary = NULL;				\
787 	cx->blk_loop.state_u.ary.ix = 0;				\
788 	cx->blk_loop.itervar_u.svp = NULL;
789 
790 #define PUSHLOOP_FOR(cx, ivar, s)					\
791 	cx->blk_loop.resetsp = s - PL_stack_base;			\
792 	cx->blk_loop.my_op = cLOOP;					\
793 	cx->blk_loop.state_u.ary.ary = NULL;				\
794 	cx->blk_loop.state_u.ary.ix = 0;				\
795 	cx->blk_loop.itervar_u.svp = (SV**)(ivar);
796 
797 #define POPLOOP(cx)							\
798 	if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {				\
799 	    SvREFCNT_dec_NN(cx->blk_loop.state_u.lazysv.cur);		\
800 	    SvREFCNT_dec_NN(cx->blk_loop.state_u.lazysv.end);		\
801 	}								\
802 	if (CxTYPE(cx) == CXt_LOOP_FOR)					\
803 	    SvREFCNT_dec(cx->blk_loop.state_u.ary.ary);
804 
805 /* given/when context */
806 struct block_givwhen {
807 	OP *leave_op;
808 };
809 
810 #define PUSHGIVEN(cx)							\
811 	cx->blk_givwhen.leave_op = cLOGOP->op_other;
812 
813 #define PUSHWHEN PUSHGIVEN
814 
815 /* context common to subroutines, evals and loops */
816 struct block {
817     U8		blku_type;	/* what kind of context this is */
818     U8		blku_gimme;	/* is this block running in list context? */
819     U16		blku_u16;	/* used by block_sub and block_eval (so far) */
820     I32		blku_oldsp;	/* stack pointer to copy stuff down to */
821     COP *	blku_oldcop;	/* old curcop pointer */
822     I32		blku_oldmarksp;	/* mark stack index */
823     I32		blku_oldscopesp;	/* scope stack index */
824     PMOP *	blku_oldpm;	/* values of pattern match vars */
825 
826     union {
827 	struct block_sub	blku_sub;
828 	struct block_format	blku_format;
829 	struct block_eval	blku_eval;
830 	struct block_loop	blku_loop;
831 	struct block_givwhen	blku_givwhen;
832     } blk_u;
833 };
834 #define blk_oldsp	cx_u.cx_blk.blku_oldsp
835 #define blk_oldcop	cx_u.cx_blk.blku_oldcop
836 #define blk_oldmarksp	cx_u.cx_blk.blku_oldmarksp
837 #define blk_oldscopesp	cx_u.cx_blk.blku_oldscopesp
838 #define blk_oldpm	cx_u.cx_blk.blku_oldpm
839 #define blk_gimme	cx_u.cx_blk.blku_gimme
840 #define blk_u16		cx_u.cx_blk.blku_u16
841 #define blk_sub		cx_u.cx_blk.blk_u.blku_sub
842 #define blk_format	cx_u.cx_blk.blk_u.blku_format
843 #define blk_eval	cx_u.cx_blk.blk_u.blku_eval
844 #define blk_loop	cx_u.cx_blk.blk_u.blku_loop
845 #define blk_givwhen	cx_u.cx_blk.blk_u.blku_givwhen
846 
847 #define DEBUG_CX(action)						\
848     DEBUG_l(								\
849 	Perl_deb(aTHX_ "CX %ld %s %s (scope %ld,%ld) at %s:%d\n",	\
850 		    (long)cxstack_ix,					\
851 		    action,						\
852 		    PL_block_type[CxTYPE(&cxstack[cxstack_ix])],	\
853 		    (long)PL_scopestack_ix,				\
854 		    (long)(cxstack[cxstack_ix].blk_oldscopesp),		\
855 		    __FILE__, __LINE__));
856 
857 /* Enter a block. */
858 #define PUSHBLOCK(cx,t,sp) CXINC, cx = &cxstack[cxstack_ix],		\
859 	cx->cx_type		= t,					\
860 	cx->blk_oldsp		= sp - PL_stack_base,			\
861 	cx->blk_oldcop		= PL_curcop,				\
862 	cx->blk_oldmarksp	= PL_markstack_ptr - PL_markstack,	\
863 	cx->blk_oldscopesp	= PL_scopestack_ix,			\
864 	cx->blk_oldpm		= PL_curpm,				\
865 	cx->blk_gimme		= (U8)gimme;				\
866 	DEBUG_CX("PUSH");
867 
868 /* Exit a block (RETURN and LAST). */
869 #define POPBLOCK(cx,pm)							\
870 	DEBUG_CX("POP");						\
871 	cx = &cxstack[cxstack_ix--],					\
872 	newsp		 = PL_stack_base + cx->blk_oldsp,		\
873 	PL_curcop	 = cx->blk_oldcop,				\
874 	PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp,		\
875 	PL_scopestack_ix = cx->blk_oldscopesp,				\
876 	pm		 = cx->blk_oldpm,				\
877 	gimme		 = cx->blk_gimme;
878 
879 /* Continue a block elsewhere (NEXT and REDO). */
880 #define TOPBLOCK(cx)							\
881 	DEBUG_CX("TOP");						\
882 	cx  = &cxstack[cxstack_ix],					\
883 	PL_stack_sp	 = PL_stack_base + cx->blk_oldsp,		\
884 	PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp,		\
885 	PL_scopestack_ix = cx->blk_oldscopesp,				\
886 	PL_curpm         = cx->blk_oldpm;
887 
888 /* substitution context */
889 struct subst {
890     U8		sbu_type;	/* what kind of context this is */
891     U8		sbu_rflags;
892     U16		sbu_rxtainted;	/* matches struct block */
893     I32		sbu_iters;
894     I32		sbu_maxiters;
895     I32		sbu_oldsave;
896     char *	sbu_orig;
897     SV *	sbu_dstr;
898     SV *	sbu_targ;
899     char *	sbu_s;
900     char *	sbu_m;
901     char *	sbu_strend;
902     void *	sbu_rxres;
903     REGEXP *	sbu_rx;
904 };
905 #define sb_iters	cx_u.cx_subst.sbu_iters
906 #define sb_maxiters	cx_u.cx_subst.sbu_maxiters
907 #define sb_rflags	cx_u.cx_subst.sbu_rflags
908 #define sb_oldsave	cx_u.cx_subst.sbu_oldsave
909 #define sb_rxtainted	cx_u.cx_subst.sbu_rxtainted
910 #define sb_orig		cx_u.cx_subst.sbu_orig
911 #define sb_dstr		cx_u.cx_subst.sbu_dstr
912 #define sb_targ		cx_u.cx_subst.sbu_targ
913 #define sb_s		cx_u.cx_subst.sbu_s
914 #define sb_m		cx_u.cx_subst.sbu_m
915 #define sb_strend	cx_u.cx_subst.sbu_strend
916 #define sb_rxres	cx_u.cx_subst.sbu_rxres
917 #define sb_rx		cx_u.cx_subst.sbu_rx
918 
919 #ifdef PERL_CORE
920 #  define PUSHSUBST(cx) CXINC, cx = &cxstack[cxstack_ix],		\
921 	cx->sb_iters		= iters,				\
922 	cx->sb_maxiters		= maxiters,				\
923 	cx->sb_rflags		= r_flags,				\
924 	cx->sb_oldsave		= oldsave,				\
925 	cx->sb_rxtainted	= rxtainted,				\
926 	cx->sb_orig		= orig,					\
927 	cx->sb_dstr		= dstr,					\
928 	cx->sb_targ		= targ,					\
929 	cx->sb_s		= s,					\
930 	cx->sb_m		= m,					\
931 	cx->sb_strend		= strend,				\
932 	cx->sb_rxres		= NULL,					\
933 	cx->sb_rx		= rx,					\
934 	cx->cx_type		= CXt_SUBST | (once ? CXp_ONCE : 0);	\
935 	rxres_save(&cx->sb_rxres, rx);					\
936 	(void)ReREFCNT_inc(rx)
937 
938 #  define POPSUBST(cx) cx = &cxstack[cxstack_ix--];			\
939 	rxres_free(&cx->sb_rxres);					\
940 	ReREFCNT_dec(cx->sb_rx)
941 #endif
942 
943 #define CxONCE(cx)		((cx)->cx_type & CXp_ONCE)
944 
945 struct context {
946     union {
947 	struct block	cx_blk;
948 	struct subst	cx_subst;
949     } cx_u;
950 };
951 #define cx_type cx_u.cx_subst.sbu_type
952 
953 /* If you re-order these, there is also an array of uppercase names in perl.h
954    and a static array of context names in pp_ctl.c  */
955 #define CXTYPEMASK	0xf
956 #define CXt_NULL	0
957 #define CXt_WHEN	1
958 #define CXt_BLOCK	2
959 /* When micro-optimising :-) keep GIVEN next to the LOOPs, as these 5 share a
960    jump table in pp_ctl.c
961    The first 4 don't have a 'case' in at least one switch statement in pp_ctl.c
962 */
963 #define CXt_GIVEN	3
964 /* This is first so that CXt_LOOP_FOR|CXt_LOOP_LAZYIV is CXt_LOOP_LAZYIV */
965 #define CXt_LOOP_FOR	4
966 #define CXt_LOOP_PLAIN	5
967 #define CXt_LOOP_LAZYSV	6
968 #define CXt_LOOP_LAZYIV	7
969 #define CXt_SUB		8
970 #define CXt_FORMAT      9
971 #define CXt_EVAL       10
972 #define CXt_SUBST      11
973 /* SUBST doesn't feature in all switch statements.  */
974 
975 /* private flags for CXt_SUB and CXt_NULL
976    However, this is checked in many places which do not check the type, so
977    this bit needs to be kept clear for most everything else. For reasons I
978    haven't investigated, it can coexist with CXp_FOR_DEF */
979 #define CXp_MULTICALL	0x10	/* part of a multicall (so don't
980 				   tear down context on exit). */
981 
982 /* private flags for CXt_SUB and CXt_FORMAT */
983 #define CXp_HASARGS	0x20
984 #define CXp_SUB_RE	0x40    /* code called within regex, i.e. (?{}) */
985 #define CXp_SUB_RE_FAKE	0x80    /* fake sub CX for (?{}) in current scope */
986 
987 /* private flags for CXt_EVAL */
988 #define CXp_REAL	0x20	/* truly eval'', not a lookalike */
989 #define CXp_TRYBLOCK	0x40	/* eval{}, not eval'' or similar */
990 
991 /* private flags for CXt_LOOP */
992 #define CXp_FOR_DEF	0x10	/* foreach using $_ */
993 #define CxPADLOOP(c)	((c)->blk_loop.my_op->op_targ)
994 
995 /* private flags for CXt_SUBST */
996 #define CXp_ONCE	0x10	/* What was sbu_once in struct subst */
997 
998 #define CxTYPE(c)	((c)->cx_type & CXTYPEMASK)
999 #define CxTYPE_is_LOOP(c)	(((c)->cx_type & 0xC) == 0x4)
1000 #define CxMULTICALL(c)	(((c)->cx_type & CXp_MULTICALL)			\
1001 			 == CXp_MULTICALL)
1002 #define CxREALEVAL(c)	(((c)->cx_type & (CXTYPEMASK|CXp_REAL))		\
1003 			 == (CXt_EVAL|CXp_REAL))
1004 #define CxTRYBLOCK(c)	(((c)->cx_type & (CXTYPEMASK|CXp_TRYBLOCK))	\
1005 			 == (CXt_EVAL|CXp_TRYBLOCK))
1006 #define CxFOREACH(c)	(CxTYPE_is_LOOP(c) && CxTYPE(c) != CXt_LOOP_PLAIN)
1007 #define CxFOREACHDEF(c)	((CxTYPE_is_LOOP(c) && CxTYPE(c) != CXt_LOOP_PLAIN) \
1008 			 && ((c)->cx_type & CXp_FOR_DEF))
1009 
1010 #define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc()))
1011 
1012 /*
1013 =head1 "Gimme" Values
1014 */
1015 
1016 /*
1017 =for apidoc AmU||G_SCALAR
1018 Used to indicate scalar context.  See C<GIMME_V>, C<GIMME>, and
1019 L<perlcall>.
1020 
1021 =for apidoc AmU||G_ARRAY
1022 Used to indicate list context.  See C<GIMME_V>, C<GIMME> and
1023 L<perlcall>.
1024 
1025 =for apidoc AmU||G_VOID
1026 Used to indicate void context.  See C<GIMME_V> and L<perlcall>.
1027 
1028 =for apidoc AmU||G_DISCARD
1029 Indicates that arguments returned from a callback should be discarded.  See
1030 L<perlcall>.
1031 
1032 =for apidoc AmU||G_EVAL
1033 
1034 Used to force a Perl C<eval> wrapper around a callback.  See
1035 L<perlcall>.
1036 
1037 =for apidoc AmU||G_NOARGS
1038 
1039 Indicates that no arguments are being sent to a callback.  See
1040 L<perlcall>.
1041 
1042 =cut
1043 */
1044 
1045 #define G_SCALAR	2
1046 #define G_ARRAY		3
1047 #define G_VOID		1
1048 #define G_WANT		3
1049 
1050 /* extra flags for Perl_call_* routines */
1051 #define G_DISCARD	4	/* Call FREETMPS.
1052 				   Don't change this without consulting the
1053 				   hash actions codes defined in hv.h */
1054 #define G_EVAL		8	/* Assume eval {} around subroutine call. */
1055 #define G_NOARGS       16	/* Don't construct a @_ array. */
1056 #define G_KEEPERR      32	/* Warn for errors, don't overwrite $@ */
1057 #define G_NODEBUG      64	/* Disable debugging at toplevel.  */
1058 #define G_METHOD      128       /* Calling method. */
1059 #define G_FAKINGEVAL  256	/* Faking an eval context for call_sv or
1060 				   fold_constants. */
1061 #define G_UNDEF_FILL  512	/* Fill the stack with &PL_sv_undef
1062 				   A special case for UNSHIFT in
1063 				   Perl_magic_methcall().  */
1064 #define G_WRITING_TO_STDERR 1024 /* Perl_write_to_stderr() is calling
1065 				    Perl_magic_methcall().  */
1066 #define G_RE_REPARSING 0x800     /* compiling a run-time /(?{..})/ */
1067 #define G_METHOD_NAMED 4096	/* calling named method, eg without :: or ' */
1068 
1069 /* flag bits for PL_in_eval */
1070 #define EVAL_NULL	0	/* not in an eval */
1071 #define EVAL_INEVAL	1	/* some enclosing scope is an eval */
1072 #define EVAL_WARNONLY	2	/* used by yywarn() when calling yyerror() */
1073 #define EVAL_KEEPERR	4	/* set by Perl_call_sv if G_KEEPERR */
1074 #define EVAL_INREQUIRE	8	/* The code is being required. */
1075 #define EVAL_RE_REPARSING 0x10	/* eval_sv() called with G_RE_REPARSING */
1076 
1077 /* Support for switching (stack and block) contexts.
1078  * This ensures magic doesn't invalidate local stack and cx pointers.
1079  */
1080 
1081 #define PERLSI_UNKNOWN		-1
1082 #define PERLSI_UNDEF		0
1083 #define PERLSI_MAIN		1
1084 #define PERLSI_MAGIC		2
1085 #define PERLSI_SORT		3
1086 #define PERLSI_SIGNAL		4
1087 #define PERLSI_OVERLOAD		5
1088 #define PERLSI_DESTROY		6
1089 #define PERLSI_WARNHOOK		7
1090 #define PERLSI_DIEHOOK		8
1091 #define PERLSI_REQUIRE		9
1092 
1093 struct stackinfo {
1094     AV *		si_stack;	/* stack for current runlevel */
1095     PERL_CONTEXT *	si_cxstack;	/* context stack for runlevel */
1096     struct stackinfo *	si_prev;
1097     struct stackinfo *	si_next;
1098     I32			si_cxix;	/* current context index */
1099     I32			si_cxmax;	/* maximum allocated index */
1100     I32			si_type;	/* type of runlevel */
1101     I32			si_markoff;	/* offset where markstack begins for us.
1102 					 * currently used only with DEBUGGING,
1103 					 * but not #ifdef-ed for bincompat */
1104 };
1105 
1106 typedef struct stackinfo PERL_SI;
1107 
1108 #define cxstack		(PL_curstackinfo->si_cxstack)
1109 #define cxstack_ix	(PL_curstackinfo->si_cxix)
1110 #define cxstack_max	(PL_curstackinfo->si_cxmax)
1111 
1112 #ifdef DEBUGGING
1113 #  define	SET_MARK_OFFSET \
1114     PL_curstackinfo->si_markoff = PL_markstack_ptr - PL_markstack
1115 #else
1116 #  define	SET_MARK_OFFSET NOOP
1117 #endif
1118 
1119 #define PUSHSTACKi(type) \
1120     STMT_START {							\
1121 	PERL_SI *next = PL_curstackinfo->si_next;			\
1122 	DEBUG_l({							\
1123 	    int i = 0; PERL_SI *p = PL_curstackinfo;			\
1124 	    while (p) { i++; p = p->si_prev; }				\
1125 	    Perl_deb(aTHX_ "push STACKINFO %d at %s:%d\n",		\
1126 		         i, __FILE__, __LINE__);})			\
1127 	if (!next) {							\
1128 	    next = new_stackinfo(32, 2048/sizeof(PERL_CONTEXT) - 1);	\
1129 	    next->si_prev = PL_curstackinfo;				\
1130 	    PL_curstackinfo->si_next = next;				\
1131 	}								\
1132 	next->si_type = type;						\
1133 	next->si_cxix = -1;						\
1134 	AvFILLp(next->si_stack) = 0;					\
1135 	SWITCHSTACK(PL_curstack,next->si_stack);			\
1136 	PL_curstackinfo = next;						\
1137 	SET_MARK_OFFSET;						\
1138     } STMT_END
1139 
1140 #define PUSHSTACK PUSHSTACKi(PERLSI_UNKNOWN)
1141 
1142 /* POPSTACK works with PL_stack_sp, so it may need to be bracketed by
1143  * PUTBACK/SPAGAIN to flush/refresh any local SP that may be active */
1144 #define POPSTACK \
1145     STMT_START {							\
1146 	dSP;								\
1147 	PERL_SI * const prev = PL_curstackinfo->si_prev;		\
1148 	DEBUG_l({							\
1149 	    int i = -1; PERL_SI *p = PL_curstackinfo;			\
1150 	    while (p) { i++; p = p->si_prev; }				\
1151 	    Perl_deb(aTHX_ "pop  STACKINFO %d at %s:%d\n",		\
1152 		         i, __FILE__, __LINE__);})			\
1153 	if (!prev) {							\
1154 	    Perl_croak_popstack();					\
1155 	}								\
1156 	SWITCHSTACK(PL_curstack,prev->si_stack);			\
1157 	/* don't free prev here, free them all at the END{} */		\
1158 	PL_curstackinfo = prev;						\
1159     } STMT_END
1160 
1161 #define POPSTACK_TO(s) \
1162     STMT_START {							\
1163 	while (PL_curstack != s) {					\
1164 	    dounwind(-1);						\
1165 	    POPSTACK;							\
1166 	}								\
1167     } STMT_END
1168 
1169 #define IN_PERL_COMPILETIME	(PL_curcop == &PL_compiling)
1170 #define IN_PERL_RUNTIME		(PL_curcop != &PL_compiling)
1171 
1172 /*
1173 =head1 Multicall Functions
1174 
1175 =for apidoc Ams||dMULTICALL
1176 Declare local variables for a multicall.  See L<perlcall/LIGHTWEIGHT CALLBACKS>.
1177 
1178 =for apidoc Ams||PUSH_MULTICALL
1179 Opening bracket for a lightweight callback.
1180 See L<perlcall/LIGHTWEIGHT CALLBACKS>.
1181 
1182 =for apidoc Ams||MULTICALL
1183 Make a lightweight callback.  See L<perlcall/LIGHTWEIGHT CALLBACKS>.
1184 
1185 =for apidoc Ams||POP_MULTICALL
1186 Closing bracket for a lightweight callback.
1187 See L<perlcall/LIGHTWEIGHT CALLBACKS>.
1188 
1189 =cut
1190 */
1191 
1192 #define dMULTICALL \
1193     SV **newsp;			/* set by POPBLOCK */			\
1194     PERL_CONTEXT *cx;							\
1195     CV *multicall_cv;							\
1196     OP *multicall_cop;							\
1197     bool multicall_oldcatch; 						\
1198     U8 hasargs = 0		/* used by PUSHSUB */
1199 
1200 #define PUSH_MULTICALL(the_cv) \
1201     PUSH_MULTICALL_FLAGS(the_cv, 0)
1202 
1203 /* Like PUSH_MULTICALL, but allows you to specify extra flags
1204  * for the CX stack entry (this isn't part of the public API) */
1205 
1206 #define PUSH_MULTICALL_FLAGS(the_cv, flags) \
1207     STMT_START {							\
1208 	CV * const _nOnclAshIngNamE_ = the_cv;				\
1209 	CV * const cv = _nOnclAshIngNamE_;				\
1210 	PADLIST * const padlist = CvPADLIST(cv);			\
1211 	ENTER;								\
1212  	multicall_oldcatch = CATCH_GET;					\
1213 	SAVETMPS; SAVEVPTR(PL_op);					\
1214 	CATCH_SET(TRUE);						\
1215 	PUSHSTACKi(PERLSI_SORT);					\
1216 	PUSHBLOCK(cx, (CXt_SUB|CXp_MULTICALL|flags), PL_stack_sp);	\
1217 	PUSHSUB(cx);							\
1218         if (!(flags & CXp_SUB_RE_FAKE))                                 \
1219             CvDEPTH(cv)++;						\
1220 	if (CvDEPTH(cv) >= 2) {						\
1221 	    PERL_STACK_OVERFLOW_CHECK();				\
1222 	    Perl_pad_push(aTHX_ padlist, CvDEPTH(cv));			\
1223 	}								\
1224 	SAVECOMPPAD();							\
1225 	PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));			\
1226 	multicall_cv = cv;						\
1227 	multicall_cop = CvSTART(cv);					\
1228     } STMT_END
1229 
1230 #define MULTICALL \
1231     STMT_START {							\
1232 	PL_op = multicall_cop;						\
1233 	CALLRUNOPS(aTHX);						\
1234     } STMT_END
1235 
1236 #define POP_MULTICALL \
1237     STMT_START {							\
1238 	cx = &cxstack[cxstack_ix];					\
1239         if (! ((CvDEPTH(multicall_cv) = cx->blk_sub.olddepth)) ) {	\
1240 		LEAVESUB(multicall_cv);					\
1241 	}								\
1242 	POPBLOCK(cx,PL_curpm);						\
1243 	POPSTACK;							\
1244 	CATCH_SET(multicall_oldcatch);					\
1245 	LEAVE;								\
1246 	SPAGAIN;							\
1247     } STMT_END
1248 
1249 /* Change the CV of an already-pushed MULTICALL CxSUB block.
1250  * (this isn't part of the public API) */
1251 
1252 #define CHANGE_MULTICALL_FLAGS(the_cv, flags) \
1253     STMT_START {							\
1254 	CV * const _nOnclAshIngNamE_ = the_cv;				\
1255 	CV * const cv = _nOnclAshIngNamE_;				\
1256 	PADLIST * const padlist = CvPADLIST(cv);			\
1257 	cx = &cxstack[cxstack_ix];					\
1258 	assert(cx->cx_type & CXp_MULTICALL);				\
1259 	if (! ((CvDEPTH(multicall_cv) = cx->blk_sub.olddepth)) ) {	\
1260 		LEAVESUB(multicall_cv);					\
1261 	}								\
1262 	cx->cx_type = (CXt_SUB|CXp_MULTICALL|flags);                    \
1263 	PUSHSUB(cx);							\
1264         if (!(flags & CXp_SUB_RE_FAKE))                                 \
1265             CvDEPTH(cv)++;						\
1266 	if (CvDEPTH(cv) >= 2) {						\
1267 	    PERL_STACK_OVERFLOW_CHECK();				\
1268 	    Perl_pad_push(aTHX_ padlist, CvDEPTH(cv));			\
1269 	}								\
1270 	SAVECOMPPAD();							\
1271 	PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));			\
1272 	multicall_cv = cv;						\
1273 	multicall_cop = CvSTART(cv);					\
1274     } STMT_END
1275 /*
1276  * Local variables:
1277  * c-indentation-style: bsd
1278  * c-basic-offset: 4
1279  * indent-tabs-mode: nil
1280  * End:
1281  *
1282  * ex: set ts=8 sts=4 sw=4 et:
1283  */
1284