diff options
author | Larry Wall <lwall@netlabs.com> | 1994-10-17 23:00:00 +0000 |
---|---|---|
committer | Larry Wall <lwall@netlabs.com> | 1994-10-17 23:00:00 +0000 |
commit | a0d0e21ea6ea90a22318550944fe6cb09ae10cda (patch) | |
tree | faca1018149b736b1142f487e44d1ff2de5cc1fa /run.c | |
parent | 85e6fe838fb25b257a1b363debf8691c0992ef71 (diff) | |
download | perl-a0d0e21ea6ea90a22318550944fe6cb09ae10cda.tar.gz |
perl 5.000perl-5.000
[editor's note: this commit combines approximate 4 months of furious
releases of Andy Dougherty and Larry Wall - see pod/perlhist.pod for
details. Andy notes that;
Alas neither my "Irwin AccuTrack" nor my DC 600A quarter-inch cartridge
backup tapes from that era seem to be readable anymore. I guess 13 years
exceeds the shelf life for that backup technology :-(.
]
Diffstat (limited to 'run.c')
-rw-r--r-- | run.c | 63 |
1 files changed, 58 insertions, 5 deletions
@@ -1,35 +1,62 @@ +/* run.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. + * + */ + #include "EXTERN.h" #include "perl.h" +/* + * "Away now, Shadowfax! Run, greatheart, run as you have never run before! + * Now we are come to the lands where you were foaled, and every stone you + * know. Run now! Hope is in speed!" --Gandalf + */ + char **watchaddr = 0; char *watchok; #ifndef DEBUGGING +int run() { + SAVEI32(runlevel); + runlevel++; + while ( op = (*op->op_ppaddr)() ) ; + return 0; } #else +static void debprof _((OP*op)); + +int run() { if (!op) { warn("NULL OP IN RUN"); - return; + return 0; } + + SAVEI32(runlevel); + runlevel++; + do { if (debug) { if (watchaddr != 0 && *watchaddr != watchok) fprintf(stderr, "WARNING: %lx changed from %lx to %lx\n", - watchaddr, watchok, *watchaddr); + (long)watchaddr, (long)watchok, (long)*watchaddr); DEBUG_s(debstack()); DEBUG_t(debop(op)); + DEBUG_P(debprof(op)); } } while ( op = (*op->op_ppaddr)() ); + return 0; } -#endif - I32 debop(op) OP *op; @@ -51,6 +78,8 @@ OP *op; else fprintf(stderr, "(NULL)"); break; + default: + break; } fprintf(stderr, "\n"); return 0; @@ -63,5 +92,29 @@ char **addr; watchaddr = addr; watchok = *addr; fprintf(stderr, "WATCHING, %lx is currently %lx\n", - watchaddr, watchok); + (long)watchaddr, (long)watchok); } + +static void +debprof(op) +OP* op; +{ + if (!profiledata) + New(000, profiledata, MAXO, U32); + ++profiledata[op->op_type]; +} + +void +debprofdump() +{ + U32 i; + if (!profiledata) + return; + for (i = 0; i < MAXO; i++) { + if (profiledata[i]) + fprintf(stderr, "%d\t%lu\n", i, profiledata[i]); + } +} + +#endif + |