X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=cop.h;h=39dc9cb48dc5f695b382e09abe4a3a176d29d62c;hb=d1f3479f8c62266471eafb582091197ae2cf4cad;hp=c59a7d67a8952f1138ecfd14d3aa668f02e25bbd;hpb=9bd878171021311bd025e403714388c68ff5d9e2;p=p5sagit%2Fp5-mst-13.2.git diff --git a/cop.h b/cop.h index c59a7d6..39dc9cb 100644 --- a/cop.h +++ b/cop.h @@ -1,7 +1,7 @@ /* cop.h * * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - * 2000, 2001, 2002, 2003, 2004, 2005, 2006 by Larry Wall and others + * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -135,6 +135,9 @@ typedef struct jmpenv JMPENV; struct cop { BASEOP + /* On LP64 putting this here takes advantage of the fact that BASEOP isn't + an exact multiple of 8 bytes to save structure padding. */ + line_t cop_line; /* line # of this command */ char * cop_label; /* label for this construct */ #ifdef USE_ITHREADS char * cop_stashpv; /* package line was compiled in */ @@ -145,7 +148,6 @@ struct cop { #endif U32 cop_hints; /* hints bits from pragmata */ U32 cop_seq; /* parse sequence number */ - line_t cop_line; /* line # of this command */ /* Beware. mg.c and warnings.pl assume the type of this is STRLEN *: */ STRLEN * cop_warnings; /* lexical warnings bitmask */ /* compile time state of %^H. See the comment in op.c for how this is @@ -213,7 +215,8 @@ struct cop { # else # define CopFILEAVx(c) (GvAV(CopFILEGV(c))) # endif -# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : NULL) +# define CopFILE(c) (CopFILEGV(c) && GvSV(CopFILEGV(c)) \ + ? SvPVX(GvSV(CopFILEGV(c))) : NULL) # define CopSTASH(c) ((c)->cop_stash) # define CopLABEL(c) ((c)->cop_label) # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) @@ -258,7 +261,7 @@ struct cop { PL_hints |= HINT_LOCALIZE_HH | HINT_ARYBASE; \ (c)->cop_hints_hash \ = Perl_refcounted_he_new(aTHX_ (c)->cop_hints_hash, \ - sv_2mortal(newSVpvs("$[")), \ + newSVpvs_flags("$[", SVs_TEMP), \ sv_2mortal(newSViv(b))); \ } \ } STMT_END @@ -387,7 +390,7 @@ struct block_eval { cx->blk_eval.old_op_type = PL_op->op_type; \ cx->blk_eval.old_namesv = (n ? newSVpv(n,0) : NULL); \ cx->blk_eval.old_eval_root = PL_eval_root; \ - cx->blk_eval.cur_text = PL_linestr; \ + cx->blk_eval.cur_text = PL_parser ? PL_parser->linestr : NULL; \ cx->blk_eval.cv = NULL; /* set by doeval(), as applicable */ \ cx->blk_eval.retop = NULL; \ cx->blk_eval.cur_top_env = PL_top_env; \ @@ -713,7 +716,9 @@ L. #define G_VOID 128 /* skip this bit when adding flags below */ /* extra flags for Perl_call_* routines */ -#define G_DISCARD 2 /* Call FREETMPS. */ +#define G_DISCARD 2 /* Call FREETMPS. + Don't change this without consulting the + hash actions codes defined in hv.h */ #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 $@, don't overwrite it */