source: trunk/third/perl/run.c @ 14545

Revision 14545, 2.7 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
1/*    run.c
2 *
3 *    Copyright (c) 1991-2000, Larry Wall
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 *
8 */
9
10#include "EXTERN.h"
11#define PERL_IN_RUN_C
12#include "perl.h"
13
14/*
15 * "Away now, Shadowfax!  Run, greatheart, run as you have never run before!
16 * Now we are come to the lands where you were foaled, and every stone you
17 * know.  Run now!  Hope is in speed!"  --Gandalf
18 */
19
20int
21Perl_runops_standard(pTHX)
22{
23    dTHR;
24
25    while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX))) {
26        PERL_ASYNC_CHECK();
27    }
28
29    TAINT_NOT;
30    return 0;
31}
32
33int
34Perl_runops_debug(pTHX)
35{
36#ifdef DEBUGGING
37    dTHR;
38    if (!PL_op) {
39        if (ckWARN_d(WARN_DEBUGGING))
40            Perl_warner(aTHX_ WARN_DEBUGGING, "NULL OP IN RUN");
41        return 0;
42    }
43
44    do {
45        PERL_ASYNC_CHECK();
46        if (PL_debug) {
47            if (PL_watchaddr != 0 && *PL_watchaddr != PL_watchok)
48                PerlIO_printf(Perl_debug_log,
49                              "WARNING: %"UVxf" changed from %"UVxf" to %"UVxf"\n",
50                              PTR2UV(PL_watchaddr), PTR2UV(PL_watchok),
51                              PTR2UV(*PL_watchaddr));
52            DEBUG_s(debstack());
53            DEBUG_t(debop(PL_op));
54            DEBUG_P(debprof(PL_op));
55        }
56    } while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX)));
57
58    TAINT_NOT;
59    return 0;
60#else
61    return runops_standard();
62#endif  /* DEBUGGING */
63}
64
65I32
66Perl_debop(pTHX_ OP *o)
67{
68#ifdef DEBUGGING
69    SV *sv;
70    STRLEN n_a;
71    Perl_deb(aTHX_ "%s", PL_op_name[o->op_type]);
72    switch (o->op_type) {
73    case OP_CONST:
74        PerlIO_printf(Perl_debug_log, "(%s)", SvPEEK(cSVOPo_sv));
75        break;
76    case OP_GVSV:
77    case OP_GV:
78        if (cGVOPo_gv) {
79            sv = NEWSV(0,0);
80            gv_fullname3(sv, cGVOPo_gv, Nullch);
81            PerlIO_printf(Perl_debug_log, "(%s)", SvPV(sv, n_a));
82            SvREFCNT_dec(sv);
83        }
84        else
85            PerlIO_printf(Perl_debug_log, "(NULL)");
86        break;
87    default:
88        break;
89    }
90    PerlIO_printf(Perl_debug_log, "\n");
91#endif  /* DEBUGGING */
92    return 0;
93}
94
95void
96Perl_watch(pTHX_ char **addr)
97{
98#ifdef DEBUGGING
99    dTHR;
100    PL_watchaddr = addr;
101    PL_watchok = *addr;
102    PerlIO_printf(Perl_debug_log, "WATCHING, %"UVxf" is currently %"UVxf"\n",
103        PTR2UV(PL_watchaddr), PTR2UV(PL_watchok));
104#endif  /* DEBUGGING */
105}
106
107STATIC void
108S_debprof(pTHX_ OP *o)
109{
110#ifdef DEBUGGING
111    if (!PL_profiledata)
112        Newz(000, PL_profiledata, MAXO, U32);
113    ++PL_profiledata[o->op_type];
114#endif /* DEBUGGING */
115}
116
117void
118Perl_debprofdump(pTHX)
119{
120#ifdef DEBUGGING
121    unsigned i;
122    if (!PL_profiledata)
123        return;
124    for (i = 0; i < MAXO; i++) {
125        if (PL_profiledata[i])
126            PerlIO_printf(Perl_debug_log,
127                          "%5lu %s\n", (unsigned long)PL_profiledata[i],
128                                       PL_op_name[i]);
129    }
130#endif  /* DEBUGGING */
131}
Note: See TracBrowser for help on using the repository browser.