Remove quad logic from perl.h; regen Configure;
[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 */
c5be433b 62 (void) PerlIO_vprintf(Perl_debug_log, pat, *args);
17c3b450 63#endif /* DEBUGGING */
79072805 64}
79072805 65
79072805 66I32
864dbfa3 67Perl_debstackptrs(pTHX)
79072805 68{
17c3b450 69#ifdef DEBUGGING
11343788 70 dTHR;
b900a521 71 PerlIO_printf(Perl_debug_log,
72 "%8"UVxf" %8"UVxf" %8"IVdf" %8"IVdf" %8"IVdf"\n",
73 PTR2UV(PL_curstack), PTR2UV(PL_stack_base),
74 (IV)*PL_markstack_ptr, (IV)(PL_stack_sp-PL_stack_base),
75 (IV)(PL_stack_max-PL_stack_base));
76 PerlIO_printf(Perl_debug_log,
77 "%8"UVxf" %8"UVxf" %8"UVuf" %8"UVuf" %8"UVuf"\n",
78 PTR2UV(PL_mainstack), PTR2UV(AvARRAY(PL_curstack)),
79 PTR2UV(PL_mainstack), PTR2UV(AvFILLp(PL_curstack)),
80 PTR2UV(AvMAX(PL_curstack)));
17c3b450 81#endif /* DEBUGGING */
79072805 82 return 0;
83}
84
85I32
864dbfa3 86Perl_debstack(pTHX)
79072805 87{
17c3b450 88#ifdef DEBUGGING
11343788 89 dTHR;
3280af22 90 I32 top = PL_stack_sp - PL_stack_base;
a0d0e21e 91 register I32 i = top - 30;
3280af22 92 I32 *markscan = PL_curstackinfo->si_markbase;
a0d0e21e 93
94 if (i < 0)
95 i = 0;
96
3280af22 97 while (++markscan <= PL_markstack_ptr)
a0d0e21e 98 if (*markscan >= i)
99 break;
79072805 100
11343788 101#ifdef USE_THREADS
b900a521 102 PerlIO_printf(Perl_debug_log,
103 i ? "0x%"UVxf" => ... " : "0x%lx => ",
104 PTR2UV(thr));
11343788 105#else
760ac839 106 PerlIO_printf(Perl_debug_log, i ? " => ... " : " => ");
11343788 107#endif /* USE_THREADS */
3280af22 108 if (PL_stack_base[0] != &PL_sv_undef || PL_stack_sp < PL_stack_base)
760ac839 109 PerlIO_printf(Perl_debug_log, " [STACK UNDERFLOW!!!]\n");
a0d0e21e 110 do {
111 ++i;
3280af22 112 if (markscan <= PL_markstack_ptr && *markscan < i) {
a0d0e21e 113 do {
114 ++markscan;
760ac839 115 PerlIO_putc(Perl_debug_log, '*');
a0d0e21e 116 }
3280af22 117 while (markscan <= PL_markstack_ptr && *markscan < i);
760ac839 118 PerlIO_printf(Perl_debug_log, " ");
79072805 119 }
a0d0e21e 120 if (i > top)
121 break;
3280af22 122 PerlIO_printf(Perl_debug_log, "%-4s ", SvPEEK(PL_stack_base[i]));
79072805 123 }
a0d0e21e 124 while (1);
760ac839 125 PerlIO_printf(Perl_debug_log, "\n");
17c3b450 126#endif /* DEBUGGING */
79072805 127 return 0;
128}