diff options
author | Larry Wall <lwall@scalpel.netlabs.com> | 1995-11-21 10:01:00 +1200 |
---|---|---|
committer | Larry <lwall@scalpel.netlabs.com> | 1995-11-21 10:01:00 +1200 |
commit | 4633a7c4bad06b471d9310620b7fe8ddd158cccd (patch) | |
tree | 37ebeb26a64f123784fd8fac6243b124767243b0 /cop.h | |
parent | 8e07c86ebc651fe92eb7e3b25f801f57cfb8dd6f (diff) | |
download | perl-4633a7c4bad06b471d9310620b7fe8ddd158cccd.tar.gz |
5.002 beta 1
If you're adventurous, have a look at
ftp://ftp.sems.com/pub/outgoing/perl5.0/perl5.002beta1.tar.gz
Many thanks to Andy for doing the integration.
Obviously, if you consult the bugs database, you'll note there are
still plenty of buglets that need fixing, and several enhancements that
I've intended to put in still haven't made it in (Hi, Tim and Ilya).
But I think it'll be pretty stable. And you can start to fiddle around
with prototypes (which are, of course, still totally undocumented).
Packrats, don't worry too much about readvertising this widely.
Nowadays we're on a T1 here, so our bandwidth is okay.
Have the appropriate amount of jollity.
Larry
Diffstat (limited to 'cop.h')
-rw-r--r-- | cop.h | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -42,8 +42,9 @@ struct block_sub { #define PUSHFORMAT(cx) \ cx->blk_sub.cv = cv; \ cx->blk_sub.gv = gv; \ + cx->blk_sub.hasargs = 0; \ cx->blk_sub.dfoutgv = defoutgv; \ - cx->blk_sub.hasargs = 0; + (void)SvREFCNT_inc(cx->blk_sub.dfoutgv) #define POPSUB(cx) \ if (cx->blk_sub.hasargs) { /* put back old @_ */ \ @@ -56,7 +57,8 @@ struct block_sub { } #define POPFORMAT(cx) \ - defoutgv = cx->blk_sub.dfoutgv; + setdefout(cx->blk_sub.dfoutgv); \ + SvREFCNT_dec(cx->blk_sub.dfoutgv); /* eval context */ struct block_eval { @@ -103,9 +105,7 @@ struct block_loop { cx->blk_loop.itersave = *cx->blk_loop.itervar; #define POPLOOP(cx) \ - newsp = stack_base + cx->blk_loop.resetsp; \ - if (cx->blk_loop.itervar) \ - *cx->blk_loop.itervar = cx->blk_loop.itersave; + newsp = stack_base + cx->blk_loop.resetsp; /* context common to subroutines, evals and loops */ struct block { @@ -172,6 +172,7 @@ struct subst { I32 sbu_maxiters; I32 sbu_safebase; I32 sbu_once; + I32 sbu_oldsave; char * sbu_orig; SV * sbu_dstr; SV * sbu_targ; @@ -184,6 +185,7 @@ struct subst { #define sb_maxiters cx_u.cx_subst.sbu_maxiters #define sb_safebase cx_u.cx_subst.sbu_safebase #define sb_once cx_u.cx_subst.sbu_once +#define sb_oldsave cx_u.cx_subst.sbu_oldsave #define sb_orig cx_u.cx_subst.sbu_orig #define sb_dstr cx_u.cx_subst.sbu_dstr #define sb_targ cx_u.cx_subst.sbu_targ @@ -197,6 +199,7 @@ struct subst { cx->sb_maxiters = maxiters, \ cx->sb_safebase = safebase, \ cx->sb_once = once, \ + cx->sb_oldsave = oldsave, \ cx->sb_orig = orig, \ cx->sb_dstr = dstr, \ cx->sb_targ = targ, \ @@ -231,3 +234,4 @@ struct context { #define G_DISCARD 2 /* Call FREETMPS. */ #define G_EVAL 4 /* Assume eval {} around subroutine call. */ #define G_NOARGS 8 /* Don't construct a @_ array. */ +#define G_KEEPERR 16 /* Append errors to $@ rather than overwriting it */ |