This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
todos for perl 5.12
[perl5.git] / cop.h
diff --git a/cop.h b/cop.h
index e80f865..725aab4 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -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
@@ -160,8 +162,10 @@ struct cop {
                                 
 #  ifdef NETWARE
 #    define CopFILE_set(c,pv)  ((c)->cop_file = savepv(pv))
+#    define CopFILE_setn(c,pv,l)  ((c)->cop_file = savepv((pv),(l)))
 #  else
 #    define CopFILE_set(c,pv)  ((c)->cop_file = savesharedpv(pv))
+#    define CopFILE_setn(c,pv,l)  ((c)->cop_file = savesharedpvn((pv),(l)))
 #  endif
 
 #  define CopFILESV(c)         (CopFILE(c) \
@@ -203,6 +207,7 @@ struct cop {
 #  define CopFILEGV(c)         ((c)->cop_filegv)
 #  define CopFILEGV_set(c,gv)  ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
 #  define CopFILE_set(c,pv)    CopFILEGV_set((c), gv_fetchfile(pv))
+#  define CopFILE_setn(c,pv,l) CopFILEGV_set((c), gv_fetchfile_flags((pv),(l),0))
 #  define CopFILESV(c)         (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : NULL)
 #  define CopFILEAV(c)         (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : NULL)
 #  ifdef DEBUGGING
@@ -210,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))
@@ -384,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;                          \
@@ -716,7 +722,7 @@ L<perlcall>.
 #define G_KEEPERR      16      /* Append errors to $@, don't overwrite it */
 #define G_NODEBUG      32      /* Disable debugging at toplevel.  */
 #define G_METHOD       64       /* Calling method. */
-#define G_FAKINGEVAL  256      /* Faking en eval context for call_sv or
+#define G_FAKINGEVAL  256      /* Faking an eval context for call_sv or
                                   fold_constants. */
 
 /* flag bits for PL_in_eval */
@@ -745,11 +751,11 @@ L<perlcall>.
 struct stackinfo {
     AV *               si_stack;       /* stack for current runlevel */
     PERL_CONTEXT *     si_cxstack;     /* context stack for runlevel */
+    struct stackinfo * si_prev;
+    struct stackinfo * si_next;
     I32                        si_cxix;        /* current context index */
     I32                        si_cxmax;       /* maximum allocated index */
     I32                        si_type;        /* type of runlevel */
-    struct stackinfo * si_prev;
-    struct stackinfo * si_next;
     I32                        si_markoff;     /* offset where markstack begins for us.
                                         * currently used only with DEBUGGING,
                                         * but not #ifdef-ed for bincompat */