/* scope.h
*
* Copyright (C) 1993, 1994, 1996, 1997, 1998, 1999,
- * 2000, 2001, 2002, 2004, 2005 by Larry Wall and others
+ * 2000, 2001, 2002, 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.
#define SAVEt_I8 32
#define SAVEt_COMPPAD 33
#define SAVEt_GENERIC_PVREF 34
-#define SAVEt_PADSV 35
+#define SAVEt_PADSV_AND_MORTALIZE 35
#define SAVEt_MORTALIZESV 36
#define SAVEt_SHARED_PVREF 37
#define SAVEt_BOOL 38
#define SAVEt_SAVESWITCHSTACK 40
#define SAVEt_COP_ARYBASE 41
#define SAVEt_RE_STATE 42
-#define SAVEt_FREESHAREDPV 43
-#define SAVEt_COP_WARNINGS 44
+#define SAVEt_COMPILE_WARNINGS 43
+#define SAVEt_STACK_CXPOS 44
+#define SAVEt_PARSER 45
#ifndef SCOPE_SAVES_SIGNAL_MASK
#define SCOPE_SAVES_SIGNAL_MASK 0
#endif
-#define SSCHECK(need) if (PL_savestack_ix + (need) > PL_savestack_max) savestack_grow()
-#define SSGROW(need) if (PL_savestack_ix + (need) > PL_savestack_max) savestack_grow_cnt(need)
+#define SSCHECK(need) if (PL_savestack_ix + (I32)(need) > PL_savestack_max) savestack_grow()
+#define SSGROW(need) if (PL_savestack_ix + (I32)(need) > PL_savestack_max) savestack_grow_cnt(need)
#define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i))
#define SSPUSHLONG(i) (PL_savestack[PL_savestack_ix++].any_long = (long)(i))
#define SSPUSHBOOL(p) (PL_savestack[PL_savestack_ix++].any_bool = (p))
#define SAVESPTR(s) save_sptr((SV**)&(s))
#define SAVEPPTR(s) save_pptr((char**)&(s))
#define SAVEVPTR(s) save_vptr((void*)&(s))
-#define SAVEPADSV(s) save_padsv(s)
+#define SAVEPADSVANDMORTALIZE(s) save_padsv_and_mortalize(s)
#define SAVEFREESV(s) save_freesv((SV*)(s))
#define SAVEMORTALIZESV(s) save_mortalizesv((SV*)(s))
#define SAVEFREEOP(o) save_freeop((OP*)(o))
SSPUSHPTR(GvHV(PL_hintgv)); \
GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)); \
} \
- if (PL_compiling.cop_hints) { \
+ if (PL_compiling.cop_hints_hash) { \
HINTS_REFCNT_LOCK; \
- PL_compiling.cop_hints->refcounted_he_refcnt++; \
+ PL_compiling.cop_hints_hash->refcounted_he_refcnt++; \
HINTS_REFCNT_UNLOCK; \
} \
- SSPUSHPTR(PL_compiling.cop_hints); \
+ SSPUSHPTR(PL_compiling.cop_hints_hash); \
SSPUSHINT(PL_hints); \
SSPUSHINT(SAVEt_HINTS); \
} STMT_END
SSPUSHINT(SAVEt_COP_ARYBASE); \
} STMT_END
-#define SAVEFREESHAREDPV(pv) \
- STMT_START { \
- SSCHECK(2); \
- SSPUSHPTR(pv); \
- SSPUSHINT(SAVEt_FREESHAREDPV); \
- } STMT_END
-
-/* Need to do the cop warnings like this, rather than SAVEFREESHAREDPV,
+/* Need to do the cop warnings like this, rather than a "SAVEFREESHAREDPV",
because realloc() means that the value can actually change. Possibly
could have done savefreesharedpvREF, but this way actually seems cleaner,
as it simplifies the code that does the saves, and reduces the load on the
save stack. */
-#define SAVECOPWARNINGS(c) \
+#define SAVECOMPILEWARNINGS() \
STMT_START { \
- SSCHECK(3); \
- SSPUSHPTR((c)->cop_warnings); \
- SSPUSHPTR(c); \
- SSPUSHINT(SAVEt_COP_WARNINGS); \
+ SSCHECK(2); \
+ SSPUSHPTR(PL_compiling.cop_warnings); \
+ SSPUSHINT(SAVEt_COMPILE_WARNINGS); \
+ } STMT_END
+
+#define SAVESTACK_CXPOS() \
+ STMT_START { \
+ SSCHECK(3); \
+ SSPUSHINT(cxstack[cxstack_ix].blk_oldsp); \
+ SSPUSHINT(cxstack_ix); \
+ SSPUSHINT(SAVEt_STACK_CXPOS); \
+ } STMT_END
+
+#define SAVEPARSER(p) \
+ STMT_START { \
+ SSCHECK(2); \
+ SSPUSHPTR(p); \
+ SSPUSHINT(SAVEt_PARSER); \
} STMT_END
#ifdef USE_ITHREADS
#define SSPTR(off,type) ((type) ((char*)PL_savestack + off))
#define SSPTRt(off,type) ((type*) ((char*)PL_savestack + off))
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 noet:
+ */