X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=cop.h;h=238c677bb4d8393513c50ba4e9cf8fa523fcf81a;hb=cc49e20bd7575d1d37e92731860d63daa4d52ecc;hp=88749fbf98acd542f27a14d9e721c994afb4603a;hpb=a8bba7fac320f0a7f553e9a133cddd65ef2a66c7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/cop.h b/cop.h index 88749fb..238c677 100644 --- a/cop.h +++ b/cop.h @@ -20,6 +20,14 @@ struct cop { #define Nullcop Null(COP*) +#define CopFILEGV(c) (c)->cop_filegv +#define CopFILEGV_set(c,gv) ((c)->cop_filegv = gv) +#define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) +#define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) +#define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) +#define CopLINE(c) ((c)->cop_line) +#define CopLINE_set(c,l) ((c)->cop_line = (l)) + /* * Here we have some enormously heavy (or at least ponderous) wizardry. */ @@ -62,7 +70,8 @@ struct block_sub { } STMT_END #endif /* USE_THREADS */ -#define POPSUB(cx) \ +#define POPSUB(cx,sv) \ + STMT_START { \ if (cx->blk_sub.hasargs) { \ POPSAVEARRAY(); \ /* abandon @_ if it got reified */ \ @@ -75,10 +84,16 @@ struct block_sub { PL_curpad[0] = (SV*)cx->blk_sub.argarray; \ } \ } \ - if (cx->blk_sub.cv) { \ - if (!(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth)) \ - SvREFCNT_dec(cx->blk_sub.cv); \ - } + sv = (SV*)cx->blk_sub.cv; \ + if (sv && (CvDEPTH((CV*)sv) = cx->blk_sub.olddepth)) \ + sv = Nullsv; \ + } STMT_END + +#define LEAVESUB(sv) \ + STMT_START { \ + if (sv) \ + SvREFCNT_dec(sv); \ + } STMT_END #define POPFORMAT(cx) \ setdefout(cx->blk_sub.dfoutgv); \ @@ -289,7 +304,6 @@ struct context { #define G_NOARGS 8 /* Don't construct a @_ array. */ #define G_KEEPERR 16 /* Append errors to $@, don't overwrite it */ #define G_NODEBUG 32 /* Disable debugging at toplevel. */ -#define G_NOCATCH 64 /* Don't do CATCH_SET() */ /* flag bits for PL_in_eval */ #define EVAL_NULL 0 /* not in an eval */