+/* scope.h
+ *
+ * Copyright (C) 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001,
+ * 2002, 2004, 2005, 2006, 2007, 2008 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.
+ *
+ */
+
+/* *** these are ordered by number of of auto-popped args */
+
+/* zero args */
+
+#define SAVEt_ALLOC 0
+#define SAVEt_CLEARPADRANGE 1
+#define SAVEt_CLEARSV 2
+#define SAVEt_REGCONTEXT 3
+#define SAVEt_RE_STATE 4
+
+#define SAVEt_ARG0_MAX 4
+
+/* one arg */
+
+#define SAVEt_BOOL 5
+#define SAVEt_COMPILE_WARNINGS 6
+#define SAVEt_COMPPAD 7
+#define SAVEt_FREECOPHH 8
+#define SAVEt_FREEOP 9
+#define SAVEt_FREEPV 10
+#define SAVEt_FREESV 11
+#define SAVEt_I16 12
+#define SAVEt_I32_SMALL 13
+#define SAVEt_I8 14
+#define SAVEt_INT_SMALL 15
+#define SAVEt_MORTALIZESV 16
+#define SAVEt_NSTAB 17
+#define SAVEt_OP 18
+#define SAVEt_PARSER 19
+#define SAVEt_STACK_POS 20
+
+#define SAVEt_ARG1_MAX 20
+
+/* two args */
+
+#define SAVEt_ADELETE 21
+#define SAVEt_APTR 22
+#define SAVEt_AV 23
+#define SAVEt_DESTRUCTOR 24
+#define SAVEt_DESTRUCTOR_X 25
+#define SAVEt_GENERIC_PVREF 26
+#define SAVEt_GENERIC_SVREF 27
+#define SAVEt_GP 28
+#define SAVEt_GVSV 29
+#define SAVEt_HINTS 30
+#define SAVEt_HPTR 31
+#define SAVEt_HV 32
+#define SAVEt_I32 33
+#define SAVEt_INT 34
+#define SAVEt_ITEM 35
+#define SAVEt_IV 36
+#define SAVEt_LONG 37
+#define SAVEt_PPTR 38
+#define SAVEt_SAVESWITCHSTACK 39
+#define SAVEt_SHARED_PVREF 40
+#define SAVEt_SPTR 41
+#define SAVEt_STACK_CXPOS 42
+#define SAVEt_SV 43
+#define SAVEt_SVREF 44
+#define SAVEt_VPTR 45
+
+#define SAVEt_ARG2_MAX 45
+
+/* three args */
+
+#define SAVEt_AELEM 46
+#define SAVEt_DELETE 47
+#define SAVEt_HELEM 48
+#define SAVEt_PADSV_AND_MORTALIZE 49
+#define SAVEt_SET_SVFLAGS 50
+#define SAVEt_GVSLOT 51
+
+#define SAVEf_SETMAGIC 1
+#define SAVEf_KEEPOLDELEM 2
+
+#define SAVE_TIGHT_SHIFT 6
+#define SAVE_MASK 0x3F
+
+#define save_aelem(av,idx,sptr) save_aelem_flags(av,idx,sptr,SAVEf_SETMAGIC)
+#define save_helem(hv,key,sptr) save_helem_flags(hv,key,sptr,SAVEf_SETMAGIC)
+
+#ifndef SCOPE_SAVES_SIGNAL_MASK
+#define SCOPE_SAVES_SIGNAL_MASK 0
+#endif
+
+/* the maximum number of entries that might be pushed using the SS_ADD*
+ * macros */
+#define SS_MAXPUSH 4
+
+#define SSCHECK(need) if (PL_savestack_ix + (I32)(need) + SS_MAXPUSH > PL_savestack_max) savestack_grow()
+#define SSGROW(need) if (PL_savestack_ix + (I32)(need) + SS_MAXPUSH > PL_savestack_max) savestack_grow_cnt(need + SS_MAXPUSH)