summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/perl/deb.c
diff options
context:
space:
mode:
authorJason Downs <downsj@cvs.openbsd.org>1996-08-19 10:13:38 +0000
committerJason Downs <downsj@cvs.openbsd.org>1996-08-19 10:13:38 +0000
commit14856225739aa48b6c9cf4c17925362b2d95cea3 (patch)
treedfd38f1b654fb5bbdfc38887c1a829b658e71530 /gnu/usr.bin/perl/deb.c
parent77469082517e44fe6ca347d9e8dc7dffd1583637 (diff)
Import of Perl 5.003 into the tree. Makefile.bsd-wrapper and
config.sh.OpenBSD are the only local changes.
Diffstat (limited to 'gnu/usr.bin/perl/deb.c')
-rw-r--r--gnu/usr.bin/perl/deb.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/gnu/usr.bin/perl/deb.c b/gnu/usr.bin/perl/deb.c
new file mode 100644
index 00000000000..f518b19ad24
--- /dev/null
+++ b/gnu/usr.bin/perl/deb.c
@@ -0,0 +1,132 @@
+/* deb.c
+ *
+ * Copyright (c) 1991-1994, Larry Wall
+ *
+ * You may distribute under the terms of either the GNU General Public
+ * License or the Artistic License, as specified in the README file.
+ *
+ */
+
+/*
+ * "Didst thou think that the eyes of the White Tower were blind? Nay, I
+ * have seen more than thou knowest, Gray Fool." --Denethor
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#ifdef DEBUGGING
+#if !defined(I_STDARG) && !defined(I_VARARGS)
+
+/*
+ * Fallback on the old hackers way of doing varargs
+ */
+
+/*VARARGS1*/
+void
+deb(pat,a1,a2,a3,a4,a5,a6,a7,a8)
+ char *pat;
+{
+ register I32 i;
+ GV* gv = curcop->cop_filegv;
+
+ fprintf(stderr,"(%s:%ld)\t",
+ SvTYPE(gv) == SVt_PVGV ? SvPVX(GvSV(gv)) : "<free>",
+ (long)curcop->cop_line);
+ for (i=0; i<dlevel; i++)
+ fprintf(stderr,"%c%c ",debname[i],debdelim[i]);
+ fprintf(stderr,pat,a1,a2,a3,a4,a5,a6,a7,a8);
+}
+
+#else /* !defined(I_STDARG) && !defined(I_VARARGS) */
+
+# ifdef I_STDARG
+void
+deb(char *pat, ...)
+# else
+/*VARARGS1*/
+void
+deb(pat, va_alist)
+ char *pat;
+ va_dcl
+# endif
+{
+ va_list args;
+ register I32 i;
+ GV* gv = curcop->cop_filegv;
+
+ fprintf(stderr,"(%s:%ld)\t",
+ SvTYPE(gv) == SVt_PVGV ? SvPVX(GvSV(gv)) : "<free>",
+ (long)curcop->cop_line);
+ for (i=0; i<dlevel; i++)
+ fprintf(stderr,"%c%c ",debname[i],debdelim[i]);
+
+# ifdef I_STDARG
+ va_start(args, pat);
+# else
+ va_start(args);
+# endif
+ (void) vfprintf(stderr,pat,args);
+ va_end( args );
+}
+#endif /* !defined(I_STDARG) && !defined(I_VARARGS) */
+
+void
+deb_growlevel()
+{
+ dlmax += 128;
+ Renew(debname, dlmax, char);
+ Renew(debdelim, dlmax, char);
+}
+
+I32
+debstackptrs()
+{
+ fprintf(stderr, "%8lx %8lx %8ld %8ld %8ld\n",
+ (unsigned long)stack, (unsigned long)stack_base,
+ (long)*markstack_ptr, (long)(stack_sp-stack_base),
+ (long)(stack_max-stack_base));
+ fprintf(stderr, "%8lx %8lx %8ld %8ld %8ld\n",
+ (unsigned long)mainstack, (unsigned long)AvARRAY(stack),
+ (long)mainstack, (long)AvFILL(stack), (long)AvMAX(stack));
+ return 0;
+}
+
+I32
+debstack()
+{
+ I32 top = stack_sp - stack_base;
+ register I32 i = top - 30;
+ I32 *markscan = markstack;
+
+ if (i < 0)
+ i = 0;
+
+ while (++markscan <= markstack_ptr)
+ if (*markscan >= i)
+ break;
+
+ fprintf(stderr, i ? " => ... " : " => ");
+ if (stack_base[0] != &sv_undef || stack_sp < stack_base)
+ fprintf(stderr, " [STACK UNDERFLOW!!!]\n");
+ do {
+ ++i;
+ if (markscan <= markstack_ptr && *markscan < i) {
+ do {
+ ++markscan;
+ putc('*', stderr);
+ }
+ while (markscan <= markstack_ptr && *markscan < i);
+ fprintf(stderr, " ");
+ }
+ if (i > top)
+ break;
+ fprintf(stderr, "%-4s ", SvPEEK(stack_base[i]));
+ }
+ while (1);
+ fprintf(stderr, "\n");
+ return 0;
+}
+#else
+static int dummy; /* avoid totally empty deb.o file */
+#endif /* DEBUGGING */