test for #2835 (yeah, better later than never)
[p5sagit/p5-mst-13.2.git] / deb.c
CommitLineData
a0d0e21e 1/* deb.c
79072805 2 *
4eb8286e 3 * Copyright (c) 1991-1999, 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 * "Didst thou think that the eyes of the White Tower were blind? Nay, I
12 * have seen more than thou knowest, Gray Fool." --Denethor
79072805 13 */
14
15#include "EXTERN.h"
864dbfa3 16#define PERL_IN_DEB_C
79072805 17#include "perl.h"
18
c5be433b 19#if defined(PERL_IMPLICIT_CONTEXT)
20void
21Perl_deb_nocontext(const char *pat, ...)
22{
23#ifdef DEBUGGING
24 dTHX;
25 va_list args;
26 va_start(args, pat);
27 vdeb(pat, &args);
28 va_end(args);
29#endif /* DEBUGGING */
30}
31#endif
32
8990e307 33void
864dbfa3 34Perl_deb(pTHX_ const char *pat, ...)
79072805 35{
17c3b450 36#ifdef DEBUGGING
79072805 37 va_list args;
c5be433b 38 va_start(args, pat);
39 vdeb(pat, &args);
40 va_end(args);
41#endif /* DEBUGGING */
42}
43
44void
45Perl_vdeb(pTHX_ const char *pat, va_list *args)
46{
47#ifdef DEBUGGING
48 dTHR;
79072805 49 register I32 i;
3280af22 50 GV* gv = PL_curcop->cop_filegv;
79072805 51
11343788 52#ifdef USE_THREADS
b900a521 53 PerlIO_printf(Perl_debug_log, "0x%"UVxf" (%s:%ld)\t",
54 PTR2UV(thr),
5dc0d613 55 SvTYPE(gv) == SVt_PVGV ? SvPVX(GvSV(gv)) : "<free>",
533c011a 56 (long)PL_curcop->cop_line);
11343788 57#else
760ac839 58 PerlIO_printf(Perl_debug_log, "(%s:%ld)\t",
a0d0e21e 59 SvTYPE(gv) == SVt_PVGV ? SvPVX(GvSV(gv)) : "<free>",
3280af22 60 (long)PL_curcop->cop_line);
11343788 61#endif /* USE_THREADS */
3280af22 62 for (i=0; i<PL_dlevel; i++)
63 PerlIO_printf(Perl_debug_log, "%c%c ",PL_debname[i],PL_debdelim[i]);
c5be433b 64 (void) PerlIO_vprintf(Perl_debug_log, pat, *args);
17c3b450 65#endif /* DEBUGGING */
79072805 66}
79072805 67
68void
864dbfa3 69Perl_deb_growlevel(pTHX)
79072805 70{
17c3b450 71#ifdef DEBUGGING
3280af22 72 PL_dlmax += 128;
73 Renew(PL_debname, PL_dlmax, char);
74 Renew(PL_debdelim, PL_dlmax, char);
17c3b450 75#endif /* DEBUGGING */
79072805 76}
77
78I32
864dbfa3 79Perl_debstackptrs(pTHX)
79072805 80{
17c3b450 81#ifdef DEBUGGING
11343788 82 dTHR;
b900a521 83 PerlIO_printf(Perl_debug_log,
84 "%8"UVxf" %8"UVxf" %8"IVdf" %8"IVdf" %8"IVdf"\n",
85 PTR2UV(PL_curstack), PTR2UV(PL_stack_base),
86 (IV)*PL_markstack_ptr, (IV)(PL_stack_sp-PL_stack_base),
87 (IV)(PL_stack_max-PL_stack_base));
88 PerlIO_printf(Perl_debug_log,
89 "%8"UVxf" %8"UVxf" %8"UVuf" %8"UVuf" %8"UVuf"\n",
90 PTR2UV(PL_mainstack), PTR2UV(AvARRAY(PL_curstack)),
91 PTR2UV(PL_mainstack), PTR2UV(AvFILLp(PL_curstack)),
92 PTR2UV(AvMAX(PL_curstack)));
17c3b450 93#endif /* DEBUGGING */
79072805 94 return 0;
95}
96
97I32
864dbfa3 98Perl_debstack(pTHX)
79072805 99{
17c3b450 100#ifdef DEBUGGING
11343788 101 dTHR;
3280af22 102 I32 top = PL_stack_sp - PL_stack_base;
a0d0e21e 103 register I32 i = top - 30;
3280af22 104 I32 *markscan = PL_curstackinfo->si_markbase;
a0d0e21e 105
106 if (i < 0)
107 i = 0;
108
3280af22 109 while (++markscan <= PL_markstack_ptr)
a0d0e21e 110 if (*markscan >= i)
111 break;
79072805 112
11343788 113#ifdef USE_THREADS
b900a521 114 PerlIO_printf(Perl_debug_log,
115 i ? "0x%"UVxf" => ... " : "0x%lx => ",
116 PTR2UV(thr));
11343788 117#else
760ac839 118 PerlIO_printf(Perl_debug_log, i ? " => ... " : " => ");
11343788 119#endif /* USE_THREADS */
3280af22 120 if (PL_stack_base[0] != &PL_sv_undef || PL_stack_sp < PL_stack_base)
760ac839 121 PerlIO_printf(Perl_debug_log, " [STACK UNDERFLOW!!!]\n");
a0d0e21e 122 do {
123 ++i;
3280af22 124 if (markscan <= PL_markstack_ptr && *markscan < i) {
a0d0e21e 125 do {
126 ++markscan;
760ac839 127 PerlIO_putc(Perl_debug_log, '*');
a0d0e21e 128 }
3280af22 129 while (markscan <= PL_markstack_ptr && *markscan < i);
760ac839 130 PerlIO_printf(Perl_debug_log, " ");
79072805 131 }
a0d0e21e 132 if (i > top)
133 break;
3280af22 134 PerlIO_printf(Perl_debug_log, "%-4s ", SvPEEK(PL_stack_base[i]));
79072805 135 }
a0d0e21e 136 while (1);
760ac839 137 PerlIO_printf(Perl_debug_log, "\n");
17c3b450 138#endif /* DEBUGGING */
79072805 139 return 0;
140}