Introduce pp_lock.
[p5sagit/p5-mst-13.2.git] / scope.c
CommitLineData
a0d0e21e 1/* scope.c
79072805 2 *
9607fc9c 3 * Copyright (c) 1991-1997, Larry Wall
79072805 4 *
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
7 *
a0d0e21e 8 */
9
10/*
11 * "For the fashion of Minas Tirith was such that it was built on seven
12 * levels..."
79072805 13 */
14
15#include "EXTERN.h"
16#include "perl.h"
17
a0d0e21e 18SV**
19stack_grow(sp, p, n)
20SV** sp;
21SV** p;
22int n;
23{
11343788 24 dTHR;
a0d0e21e 25 stack_sp = sp;
1f96a9ed 26 av_extend(curstack, (p - stack_base) + (n) + 128);
a0d0e21e 27 return stack_sp;
28}
29
79072805 30I32
31cxinc()
32{
11343788 33 dTHR;
79072805 34 cxstack_max = cxstack_max * 3 / 2;
a38d6535 35 Renew(cxstack, cxstack_max + 1, CONTEXT); /* XXX should fix CXINC macro */
79072805 36 return cxstack_ix + 1;
37}
38
39void
40push_return(retop)
41OP *retop;
42{
11343788 43 dTHR;
79072805 44 if (retstack_ix == retstack_max) {
45 retstack_max = retstack_max * 3 / 2;
46 Renew(retstack, retstack_max, OP*);
47 }
48 retstack[retstack_ix++] = retop;
49}
50
51OP *
52pop_return()
53{
11343788 54 dTHR;
79072805 55 if (retstack_ix > 0)
56 return retstack[--retstack_ix];
57 else
58 return Nullop;
59}
60
61void
62push_scope()
63{
11343788 64 dTHR;
79072805 65 if (scopestack_ix == scopestack_max) {
66 scopestack_max = scopestack_max * 3 / 2;
67 Renew(scopestack, scopestack_max, I32);
68 }
69 scopestack[scopestack_ix++] = savestack_ix;
70
71}
72
73void
74pop_scope()
75{
11343788 76 dTHR;
79072805 77 I32 oldsave = scopestack[--scopestack_ix];
8990e307 78 LEAVE_SCOPE(oldsave);
79072805 79}
80
81void
a0d0e21e 82markstack_grow()
83{
11343788 84 dTHR;
a0d0e21e 85 I32 oldmax = markstack_max - markstack;
86 I32 newmax = oldmax * 3 / 2;
87
88 Renew(markstack, newmax, I32);
89 markstack_ptr = markstack + oldmax;
90 markstack_max = markstack + newmax;
91}
92
93void
79072805 94savestack_grow()
95{
11343788 96 dTHR;
79072805 97 savestack_max = savestack_max * 3 / 2;
98 Renew(savestack, savestack_max, ANY);
99}
100
101void
102free_tmps()
103{
11343788 104 dTHR;
79072805 105 /* XXX should tmps_floor live in cxstack? */
106 I32 myfloor = tmps_floor;
107 while (tmps_ix > myfloor) { /* clean up after last statement */
108 SV* sv = tmps_stack[tmps_ix];
109 tmps_stack[tmps_ix--] = Nullsv;
463ee0b2 110 if (sv) {
111#ifdef DEBUGGING
112 SvTEMP_off(sv);
113#endif
8990e307 114 SvREFCNT_dec(sv); /* note, can modify tmps_ix!!! */
463ee0b2 115 }
79072805 116 }
117}
118
7a4c00b4 119static SV *
120save_scalar_at(sptr)
121SV **sptr;
79072805 122{
11343788 123 dTHR;
79072805 124 register SV *sv;
7a4c00b4 125 SV *osv = *sptr;
79072805 126
7a4c00b4 127 sv = *sptr = NEWSV(0,0);
a0d0e21e 128 if (SvTYPE(osv) >= SVt_PVMG && SvMAGIC(osv) && SvTYPE(osv) != SVt_PVGV) {
79072805 129 sv_upgrade(sv, SvTYPE(osv));
a0d0e21e 130 if (SvGMAGICAL(osv)) {
748a9306 131 MAGIC* mg;
132 bool oldtainted = tainted;
a0d0e21e 133 mg_get(osv);
748a9306 134 if (tainting && tainted && (mg = mg_find(osv, 't'))) {
135 SAVESPTR(mg->mg_obj);
136 mg->mg_obj = osv;
137 }
a0d0e21e 138 SvFLAGS(osv) |= (SvFLAGS(osv) &
139 (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
748a9306 140 tainted = oldtainted;
a0d0e21e 141 }
79072805 142 SvMAGIC(sv) = SvMAGIC(osv);
a0d0e21e 143 SvFLAGS(sv) |= SvMAGICAL(osv);
748a9306 144 localizing = 1;
79072805 145 SvSETMAGIC(sv);
748a9306 146 localizing = 0;
79072805 147 }
148 return sv;
149}
150
7a4c00b4 151SV *
152save_scalar(gv)
153GV *gv;
154{
11343788 155 dTHR;
7a4c00b4 156 SSCHECK(3);
157 SSPUSHPTR(gv);
158 SSPUSHPTR(GvSV(gv));
159 SSPUSHINT(SAVEt_SV);
160 return save_scalar_at(&GvSV(gv));
161}
162
163SV*
164save_svref(sptr)
165SV **sptr;
166{
11343788 167 dTHR;
7a4c00b4 168 SSCHECK(3);
169 SSPUSHPTR(sptr);
170 SSPUSHPTR(*sptr);
171 SSPUSHINT(SAVEt_SVREF);
172 return save_scalar_at(sptr);
173}
174
79072805 175void
5f05dabc 176save_gp(gv, empty)
79072805 177GV *gv;
5f05dabc 178I32 empty;
79072805 179{
e858de61 180 dTHR;
79072805 181 SSCHECK(3);
4633a7c4 182 SSPUSHPTR(SvREFCNT_inc(gv));
5f05dabc 183 SSPUSHPTR(GvGP(gv));
79072805 184 SSPUSHINT(SAVEt_GP);
185
5f05dabc 186 if (empty) {
187 register GP *gp;
188 Newz(602, gp, 1, GP);
44a8e56a 189 GvGP(gv) = gp_ref(gp);
5f05dabc 190 GvSV(gv) = NEWSV(72,0);
191 GvLINE(gv) = curcop->cop_line;
192 GvEGV(gv) = gv;
193 }
194 else {
44a8e56a 195 gp_ref(GvGP(gv));
5f05dabc 196 GvINTRO_on(gv);
197 }
79072805 198}
79072805 199
79072805 200AV *
201save_ary(gv)
202GV *gv;
203{
11343788 204 dTHR;
79072805 205 SSCHECK(3);
206 SSPUSHPTR(gv);
207 SSPUSHPTR(GvAVn(gv));
208 SSPUSHINT(SAVEt_AV);
209
210 GvAV(gv) = Null(AV*);
211 return GvAVn(gv);
212}
213
214HV *
215save_hash(gv)
216GV *gv;
217{
11343788 218 dTHR;
79072805 219 SSCHECK(3);
220 SSPUSHPTR(gv);
221 SSPUSHPTR(GvHVn(gv));
222 SSPUSHINT(SAVEt_HV);
223
224 GvHV(gv) = Null(HV*);
225 return GvHVn(gv);
226}
227
228void
229save_item(item)
230register SV *item;
231{
11343788 232 dTHR;
79072805 233 register SV *sv;
234
235 SSCHECK(3);
236 SSPUSHPTR(item); /* remember the pointer */
237 sv = NEWSV(0,0);
238 sv_setsv(sv,item);
239 SSPUSHPTR(sv); /* remember the value */
240 SSPUSHINT(SAVEt_ITEM);
241}
242
243void
244save_int(intp)
245int *intp;
246{
11343788 247 dTHR;
79072805 248 SSCHECK(3);
249 SSPUSHINT(*intp);
250 SSPUSHPTR(intp);
251 SSPUSHINT(SAVEt_INT);
252}
253
254void
85e6fe83 255save_long(longp)
256long *longp;
257{
11343788 258 dTHR;
85e6fe83 259 SSCHECK(3);
260 SSPUSHLONG(*longp);
261 SSPUSHPTR(longp);
262 SSPUSHINT(SAVEt_LONG);
263}
264
265void
79072805 266save_I32(intp)
267I32 *intp;
268{
11343788 269 dTHR;
79072805 270 SSCHECK(3);
271 SSPUSHINT(*intp);
272 SSPUSHPTR(intp);
273 SSPUSHINT(SAVEt_I32);
274}
275
a0d0e21e 276void
55497cff 277save_I16(intp)
278I16 *intp;
279{
e858de61 280 dTHR;
55497cff 281 SSCHECK(3);
282 SSPUSHINT(*intp);
283 SSPUSHPTR(intp);
284 SSPUSHINT(SAVEt_I16);
285}
286
287void
a0d0e21e 288save_iv(ivp)
289IV *ivp;
290{
11343788 291 dTHR;
a0d0e21e 292 SSCHECK(3);
4aa0a1f7 293 SSPUSHIV(*ivp);
a0d0e21e 294 SSPUSHPTR(ivp);
295 SSPUSHINT(SAVEt_IV);
296}
297
85e6fe83 298/* Cannot use save_sptr() to store a char* since the SV** cast will
299 * force word-alignment and we'll miss the pointer.
300 */
301void
302save_pptr(pptr)
303char **pptr;
304{
11343788 305 dTHR;
85e6fe83 306 SSCHECK(3);
307 SSPUSHPTR(*pptr);
308 SSPUSHPTR(pptr);
309 SSPUSHINT(SAVEt_PPTR);
310}
311
79072805 312void
313save_sptr(sptr)
314SV **sptr;
315{
11343788 316 dTHR;
79072805 317 SSCHECK(3);
318 SSPUSHPTR(*sptr);
319 SSPUSHPTR(sptr);
320 SSPUSHINT(SAVEt_SPTR);
321}
322
323void
324save_nogv(gv)
325GV *gv;
326{
11343788 327 dTHR;
79072805 328 SSCHECK(2);
329 SSPUSHPTR(gv);
330 SSPUSHINT(SAVEt_NSTAB);
331}
332
333void
334save_hptr(hptr)
335HV **hptr;
336{
11343788 337 dTHR;
79072805 338 SSCHECK(3);
85e6fe83 339 SSPUSHPTR(*hptr);
79072805 340 SSPUSHPTR(hptr);
341 SSPUSHINT(SAVEt_HPTR);
342}
343
344void
345save_aptr(aptr)
346AV **aptr;
347{
11343788 348 dTHR;
79072805 349 SSCHECK(3);
85e6fe83 350 SSPUSHPTR(*aptr);
79072805 351 SSPUSHPTR(aptr);
352 SSPUSHINT(SAVEt_APTR);
353}
354
355void
8990e307 356save_freesv(sv)
357SV *sv;
358{
11343788 359 dTHR;
8990e307 360 SSCHECK(2);
361 SSPUSHPTR(sv);
362 SSPUSHINT(SAVEt_FREESV);
363}
364
365void
11343788 366save_freeop(o)
367OP *o;
8990e307 368{
11343788 369 dTHR;
8990e307 370 SSCHECK(2);
11343788 371 SSPUSHPTR(o);
8990e307 372 SSPUSHINT(SAVEt_FREEOP);
373}
374
375void
376save_freepv(pv)
377char *pv;
378{
11343788 379 dTHR;
8990e307 380 SSCHECK(2);
381 SSPUSHPTR(pv);
382 SSPUSHINT(SAVEt_FREEPV);
383}
384
385void
386save_clearsv(svp)
387SV** svp;
388{
11343788 389 dTHR;
8990e307 390 SSCHECK(2);
4aa0a1f7 391 SSPUSHLONG((long)(svp-curpad));
8990e307 392 SSPUSHINT(SAVEt_CLEARSV);
393}
394
395void
396save_delete(hv,key,klen)
397HV *hv;
398char *key;
399I32 klen;
400{
11343788 401 dTHR;
8990e307 402 SSCHECK(4);
403 SSPUSHINT(klen);
404 SSPUSHPTR(key);
405 SSPUSHPTR(hv);
406 SSPUSHINT(SAVEt_DELETE);
407}
408
409void
79072805 410save_list(sarg,maxsarg)
411register SV **sarg;
412I32 maxsarg;
413{
11343788 414 dTHR;
79072805 415 register SV *sv;
416 register I32 i;
417
418 SSCHECK(3 * maxsarg);
419 for (i = 1; i <= maxsarg; i++) {
420 SSPUSHPTR(sarg[i]); /* remember the pointer */
421 sv = NEWSV(0,0);
422 sv_setsv(sv,sarg[i]);
423 SSPUSHPTR(sv); /* remember the value */
424 SSPUSHINT(SAVEt_ITEM);
425 }
426}
427
428void
a0d0e21e 429save_destructor(f,p)
430void (*f) _((void*));
431void* p;
432{
11343788 433 dTHR;
a0d0e21e 434 SSCHECK(3);
435 SSPUSHDPTR(f);
436 SSPUSHPTR(p);
437 SSPUSHINT(SAVEt_DESTRUCTOR);
438}
439
440void
462e5cf6 441save_op()
442{
443 dTHR;
444 SSCHECK(2);
445 SSPUSHPTR(op);
446 SSPUSHINT(SAVEt_OP);
447}
448
449void
79072805 450leave_scope(base)
451I32 base;
452{
11343788 453 dTHR;
79072805 454 register SV *sv;
455 register SV *value;
456 register GV *gv;
457 register AV *av;
458 register HV *hv;
459 register void* ptr;
460
461 if (base < -1)
463ee0b2 462 croak("panic: corrupt saved stack index");
79072805 463 while (savestack_ix > base) {
464 switch (SSPOPINT) {
465 case SAVEt_ITEM: /* normal string */
466 value = (SV*)SSPOPPTR;
467 sv = (SV*)SSPOPPTR;
468 sv_replace(sv,value);
748a9306 469 localizing = 2;
79072805 470 SvSETMAGIC(sv);
748a9306 471 localizing = 0;
79072805 472 break;
473 case SAVEt_SV: /* scalar reference */
474 value = (SV*)SSPOPPTR;
475 gv = (GV*)SSPOPPTR;
7a4c00b4 476 ptr = &GvSV(gv);
477 goto restore_sv;
79072805 478 case SAVEt_SVREF: /* scalar reference */
7a4c00b4 479 value = (SV*)SSPOPPTR;
79072805 480 ptr = SSPOPPTR;
7a4c00b4 481 restore_sv:
79072805 482 sv = *(SV**)ptr;
748a9306 483 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv) &&
484 SvTYPE(sv) != SVt_PVGV)
485 {
a0d0e21e 486 (void)SvUPGRADE(value, SvTYPE(sv));
487 SvMAGIC(value) = SvMAGIC(sv);
488 SvFLAGS(value) |= SvMAGICAL(sv);
489 SvMAGICAL_off(sv);
79072805 490 SvMAGIC(sv) = 0;
a0d0e21e 491 }
7a4c00b4 492 else if (SvTYPE(value) >= SVt_PVMG && SvMAGIC(value) &&
493 SvTYPE(value) != SVt_PVGV)
494 {
495 SvFLAGS(value) |= (SvFLAGS(value) &
496 (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
497 SvMAGICAL_off(value);
498 SvMAGIC(value) = 0;
499 }
8990e307 500 SvREFCNT_dec(sv);
a0d0e21e 501 *(SV**)ptr = value;
748a9306 502 localizing = 2;
a0d0e21e 503 SvSETMAGIC(value);
748a9306 504 localizing = 0;
79072805 505 break;
506 case SAVEt_AV: /* array reference */
507 av = (AV*)SSPOPPTR;
508 gv = (GV*)SSPOPPTR;
8990e307 509 SvREFCNT_dec(GvAV(gv));
79072805 510 GvAV(gv) = av;
511 break;
512 case SAVEt_HV: /* hash reference */
513 hv = (HV*)SSPOPPTR;
514 gv = (GV*)SSPOPPTR;
8990e307 515 SvREFCNT_dec(GvHV(gv));
79072805 516 GvHV(gv) = hv;
517 break;
518 case SAVEt_INT: /* int reference */
519 ptr = SSPOPPTR;
520 *(int*)ptr = (int)SSPOPINT;
521 break;
85e6fe83 522 case SAVEt_LONG: /* long reference */
523 ptr = SSPOPPTR;
524 *(long*)ptr = (long)SSPOPLONG;
525 break;
79072805 526 case SAVEt_I32: /* I32 reference */
527 ptr = SSPOPPTR;
528 *(I32*)ptr = (I32)SSPOPINT;
529 break;
55497cff 530 case SAVEt_I16: /* I16 reference */
531 ptr = SSPOPPTR;
532 *(I16*)ptr = (I16)SSPOPINT;
533 break;
a0d0e21e 534 case SAVEt_IV: /* IV reference */
535 ptr = SSPOPPTR;
536 *(IV*)ptr = (IV)SSPOPIV;
537 break;
79072805 538 case SAVEt_SPTR: /* SV* reference */
539 ptr = SSPOPPTR;
540 *(SV**)ptr = (SV*)SSPOPPTR;
541 break;
85e6fe83 542 case SAVEt_PPTR: /* char* reference */
543 ptr = SSPOPPTR;
544 *(char**)ptr = (char*)SSPOPPTR;
545 break;
79072805 546 case SAVEt_HPTR: /* HV* reference */
547 ptr = SSPOPPTR;
548 *(HV**)ptr = (HV*)SSPOPPTR;
549 break;
550 case SAVEt_APTR: /* AV* reference */
551 ptr = SSPOPPTR;
552 *(AV**)ptr = (AV*)SSPOPPTR;
553 break;
554 case SAVEt_NSTAB:
555 gv = (GV*)SSPOPPTR;
1f96a9ed 556 (void)sv_clear((SV*)gv);
79072805 557 break;
558 case SAVEt_GP: /* scalar reference */
559 ptr = SSPOPPTR;
560 gv = (GV*)SSPOPPTR;
561 gp_free(gv);
562 GvGP(gv) = (GP*)ptr;
4633a7c4 563 SvREFCNT_dec(gv);
79072805 564 break;
8990e307 565 case SAVEt_FREESV:
566 ptr = SSPOPPTR;
567 SvREFCNT_dec((SV*)ptr);
568 break;
569 case SAVEt_FREEOP:
570 ptr = SSPOPPTR;
46fc3d4c 571 if (comppad)
572 curpad = AvARRAY(comppad);
8990e307 573 op_free((OP*)ptr);
574 break;
575 case SAVEt_FREEPV:
576 ptr = SSPOPPTR;
577 Safefree((char*)ptr);
578 break;
579 case SAVEt_CLEARSV:
4aa0a1f7 580 ptr = (void*)&curpad[SSPOPLONG];
8990e307 581 sv = *(SV**)ptr;
a0d0e21e 582 if (SvREFCNT(sv) <= 1) { /* Can clear pad variable in place. */
8990e307 583 if (SvTHINKFIRST(sv)) {
584 if (SvREADONLY(sv))
585 croak("panic: leave_scope clearsv");
586 if (SvROK(sv))
587 sv_unref(sv);
588 }
a0d0e21e 589 if (SvMAGICAL(sv))
590 mg_free(sv);
8990e307 591
592 switch (SvTYPE(sv)) {
593 case SVt_NULL:
594 break;
595 case SVt_PVAV:
44a8e56a 596 av_clear((AV*)sv);
8990e307 597 break;
598 case SVt_PVHV:
44a8e56a 599 hv_clear((HV*)sv);
8990e307 600 break;
601 case SVt_PVCV:
5377b701 602 croak("panic: leave_scope pad code");
603 case SVt_RV:
604 case SVt_IV:
605 case SVt_NV:
606 (void)SvOK_off(sv);
8990e307 607 break;
608 default:
a0d0e21e 609 (void)SvOK_off(sv);
5377b701 610 (void)SvOOK_off(sv);
8990e307 611 break;
612 }
613 }
614 else { /* Someone has a claim on this, so abandon it. */
4aa0a1f7 615 U32 padflags = SvFLAGS(sv) & (SVs_PADBUSY|SVs_PADMY|SVs_PADTMP);
8990e307 616 SvREFCNT_dec(sv); /* Cast current value to the winds. */
617 switch (SvTYPE(sv)) { /* Console ourselves with a new value */
618 case SVt_PVAV: *(SV**)ptr = (SV*)newAV(); break;
619 case SVt_PVHV: *(SV**)ptr = (SV*)newHV(); break;
620 default: *(SV**)ptr = NEWSV(0,0); break;
621 }
4aa0a1f7 622 SvFLAGS(*(SV**)ptr) |= padflags; /* preserve pad nature */
8990e307 623 }
624 break;
625 case SAVEt_DELETE:
626 ptr = SSPOPPTR;
627 hv = (HV*)ptr;
628 ptr = SSPOPPTR;
748a9306 629 (void)hv_delete(hv, (char*)ptr, (U32)SSPOPINT, G_DISCARD);
adbc6bb1 630 Safefree(ptr);
8990e307 631 break;
a0d0e21e 632 case SAVEt_DESTRUCTOR:
633 ptr = SSPOPPTR;
634 (*SSPOPDPTR)(ptr);
635 break;
636 case SAVEt_REGCONTEXT:
8e07c86e 637 {
638 I32 delta = SSPOPINT;
639 savestack_ix -= delta; /* regexp must have croaked */
640 }
a0d0e21e 641 break;
55497cff 642 case SAVEt_STACK_POS: /* Position on Perl stack */
643 {
644 I32 delta = SSPOPINT;
645 stack_sp = stack_base + delta;
646 }
647 break;
462e5cf6 648 case SAVEt_OP:
649 op = (OP*)SSPOPPTR;
650 break;
79072805 651 default:
463ee0b2 652 croak("panic: leave_scope inconsistency");
79072805 653 }
654 }
655}
8990e307 656
657#ifdef DEBUGGING
1f96a9ed 658
8990e307 659void
660cx_dump(cx)
661CONTEXT* cx;
662{
11343788 663 dTHR;
760ac839 664 PerlIO_printf(Perl_debug_log, "CX %d = %s\n", cx - cxstack, block_type[cx->cx_type]);
8990e307 665 if (cx->cx_type != CXt_SUBST) {
760ac839 666 PerlIO_printf(Perl_debug_log, "BLK_OLDSP = %ld\n", (long)cx->blk_oldsp);
667 PerlIO_printf(Perl_debug_log, "BLK_OLDCOP = 0x%lx\n", (long)cx->blk_oldcop);
668 PerlIO_printf(Perl_debug_log, "BLK_OLDMARKSP = %ld\n", (long)cx->blk_oldmarksp);
669 PerlIO_printf(Perl_debug_log, "BLK_OLDSCOPESP = %ld\n", (long)cx->blk_oldscopesp);
670 PerlIO_printf(Perl_debug_log, "BLK_OLDRETSP = %ld\n", (long)cx->blk_oldretsp);
671 PerlIO_printf(Perl_debug_log, "BLK_OLDPM = 0x%lx\n", (long)cx->blk_oldpm);
672 PerlIO_printf(Perl_debug_log, "BLK_GIMME = %s\n", cx->blk_gimme ? "LIST" : "SCALAR");
8990e307 673 }
674 switch (cx->cx_type) {
675 case CXt_NULL:
676 case CXt_BLOCK:
677 break;
678 case CXt_SUB:
760ac839 679 PerlIO_printf(Perl_debug_log, "BLK_SUB.CV = 0x%lx\n",
8990e307 680 (long)cx->blk_sub.cv);
760ac839 681 PerlIO_printf(Perl_debug_log, "BLK_SUB.GV = 0x%lx\n",
8990e307 682 (long)cx->blk_sub.gv);
760ac839 683 PerlIO_printf(Perl_debug_log, "BLK_SUB.DFOUTGV = 0x%lx\n",
8990e307 684 (long)cx->blk_sub.dfoutgv);
760ac839 685 PerlIO_printf(Perl_debug_log, "BLK_SUB.OLDDEPTH = %ld\n",
8990e307 686 (long)cx->blk_sub.olddepth);
760ac839 687 PerlIO_printf(Perl_debug_log, "BLK_SUB.HASARGS = %d\n",
8990e307 688 (int)cx->blk_sub.hasargs);
689 break;
690 case CXt_EVAL:
760ac839 691 PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_IN_EVAL = %ld\n",
8990e307 692 (long)cx->blk_eval.old_in_eval);
760ac839 693 PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_OP_TYPE = %s (%s)\n",
c07a80fd 694 op_name[cx->blk_eval.old_op_type],
695 op_desc[cx->blk_eval.old_op_type]);
760ac839 696 PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_NAME = %s\n",
8990e307 697 cx->blk_eval.old_name);
760ac839 698 PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_EVAL_ROOT = 0x%lx\n",
8990e307 699 (long)cx->blk_eval.old_eval_root);
700 break;
701
702 case CXt_LOOP:
760ac839 703 PerlIO_printf(Perl_debug_log, "BLK_LOOP.LABEL = %s\n",
8990e307 704 cx->blk_loop.label);
760ac839 705 PerlIO_printf(Perl_debug_log, "BLK_LOOP.RESETSP = %ld\n",
8990e307 706 (long)cx->blk_loop.resetsp);
760ac839 707 PerlIO_printf(Perl_debug_log, "BLK_LOOP.REDO_OP = 0x%lx\n",
8990e307 708 (long)cx->blk_loop.redo_op);
760ac839 709 PerlIO_printf(Perl_debug_log, "BLK_LOOP.NEXT_OP = 0x%lx\n",
8990e307 710 (long)cx->blk_loop.next_op);
760ac839 711 PerlIO_printf(Perl_debug_log, "BLK_LOOP.LAST_OP = 0x%lx\n",
8990e307 712 (long)cx->blk_loop.last_op);
760ac839 713 PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERIX = %ld\n",
8990e307 714 (long)cx->blk_loop.iterix);
760ac839 715 PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERARY = 0x%lx\n",
8990e307 716 (long)cx->blk_loop.iterary);
760ac839 717 PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERVAR = 0x%lx\n",
8990e307 718 (long)cx->blk_loop.itervar);
719 if (cx->blk_loop.itervar)
760ac839 720 PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERSAVE = 0x%lx\n",
8990e307 721 (long)cx->blk_loop.itersave);
7a4c00b4 722 PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERLVAL = 0x%lx\n",
723 (long)cx->blk_loop.iterlval);
8990e307 724 break;
725
726 case CXt_SUBST:
760ac839 727 PerlIO_printf(Perl_debug_log, "SB_ITERS = %ld\n",
8990e307 728 (long)cx->sb_iters);
760ac839 729 PerlIO_printf(Perl_debug_log, "SB_MAXITERS = %ld\n",
8990e307 730 (long)cx->sb_maxiters);
760ac839 731 PerlIO_printf(Perl_debug_log, "SB_SAFEBASE = %ld\n",
8990e307 732 (long)cx->sb_safebase);
760ac839 733 PerlIO_printf(Perl_debug_log, "SB_ONCE = %ld\n",
8990e307 734 (long)cx->sb_once);
760ac839 735 PerlIO_printf(Perl_debug_log, "SB_ORIG = %s\n",
8990e307 736 cx->sb_orig);
760ac839 737 PerlIO_printf(Perl_debug_log, "SB_DSTR = 0x%lx\n",
8990e307 738 (long)cx->sb_dstr);
760ac839 739 PerlIO_printf(Perl_debug_log, "SB_TARG = 0x%lx\n",
8990e307 740 (long)cx->sb_targ);
760ac839 741 PerlIO_printf(Perl_debug_log, "SB_S = 0x%lx\n",
8990e307 742 (long)cx->sb_s);
760ac839 743 PerlIO_printf(Perl_debug_log, "SB_M = 0x%lx\n",
8990e307 744 (long)cx->sb_m);
760ac839 745 PerlIO_printf(Perl_debug_log, "SB_STREND = 0x%lx\n",
8990e307 746 (long)cx->sb_strend);
c90c0ff4 747 PerlIO_printf(Perl_debug_log, "SB_RXRES = 0x%lx\n",
748 (long)cx->sb_rxres);
8990e307 749 break;
750 }
751}
752#endif