[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/i586-linux-thread-multi/CORE/ -> scope.h (source)

   1  /*    scope.h
   2   *
   3   *    Copyright (C) 1993, 1994, 1996, 1997, 1998, 1999,
   4   *    2000, 2001, 2002, 2004, 2005, 2006, 2007 by Larry Wall and others
   5   *
   6   *    You may distribute under the terms of either the GNU General Public
   7   *    License or the Artistic License, as specified in the README file.
   8   *
   9   */
  10  
  11  #define SAVEt_ITEM        0
  12  #define SAVEt_SV        1
  13  #define SAVEt_AV        2
  14  #define SAVEt_HV        3
  15  #define SAVEt_INT        4
  16  #define SAVEt_LONG        5
  17  #define SAVEt_I32        6
  18  #define SAVEt_IV        7
  19  #define SAVEt_SPTR        8
  20  #define SAVEt_APTR        9
  21  #define SAVEt_HPTR        10
  22  #define SAVEt_PPTR        11
  23  #define SAVEt_NSTAB        12
  24  #define SAVEt_SVREF        13
  25  #define SAVEt_GP        14
  26  #define SAVEt_FREESV        15
  27  #define SAVEt_FREEOP        16
  28  #define SAVEt_FREEPV        17
  29  #define SAVEt_CLEARSV        18
  30  #define SAVEt_DELETE        19
  31  #define SAVEt_DESTRUCTOR    20
  32  #define SAVEt_REGCONTEXT    21
  33  #define SAVEt_STACK_POS        22
  34  #define SAVEt_I16        23
  35  #define SAVEt_AELEM        24
  36  #define SAVEt_HELEM        25
  37  #define SAVEt_OP        26
  38  #define SAVEt_HINTS        27
  39  #define SAVEt_ALLOC        28
  40  #define SAVEt_GENERIC_SVREF    29
  41  #define SAVEt_DESTRUCTOR_X    30
  42  #define SAVEt_VPTR        31
  43  #define SAVEt_I8        32
  44  #define SAVEt_COMPPAD        33
  45  #define SAVEt_GENERIC_PVREF    34
  46  #define SAVEt_PADSV        35
  47  #define SAVEt_MORTALIZESV    36
  48  #define SAVEt_SHARED_PVREF    37
  49  #define SAVEt_BOOL        38
  50  #define SAVEt_SET_SVFLAGS    39
  51  #define SAVEt_SAVESWITCHSTACK    40
  52  #define SAVEt_COP_ARYBASE    41
  53  #define SAVEt_RE_STATE        42
  54  #define SAVEt_COMPILE_WARNINGS    43
  55  #define SAVEt_STACK_CXPOS    44
  56  #define SAVEt_PARSER        45
  57  
  58  #ifndef SCOPE_SAVES_SIGNAL_MASK
  59  #define SCOPE_SAVES_SIGNAL_MASK 0
  60  #endif
  61  
  62  #define SSCHECK(need) if (PL_savestack_ix + (I32)(need) > PL_savestack_max) savestack_grow()
  63  #define SSGROW(need) if (PL_savestack_ix + (I32)(need) > PL_savestack_max) savestack_grow_cnt(need)
  64  #define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i))
  65  #define SSPUSHLONG(i) (PL_savestack[PL_savestack_ix++].any_long = (long)(i))
  66  #define SSPUSHBOOL(p) (PL_savestack[PL_savestack_ix++].any_bool = (p))
  67  #define SSPUSHIV(i) (PL_savestack[PL_savestack_ix++].any_iv = (IV)(i))
  68  #define SSPUSHPTR(p) (PL_savestack[PL_savestack_ix++].any_ptr = (void*)(p))
  69  #define SSPUSHDPTR(p) (PL_savestack[PL_savestack_ix++].any_dptr = (p))
  70  #define SSPUSHDXPTR(p) (PL_savestack[PL_savestack_ix++].any_dxptr = (p))
  71  #define SSPOPINT (PL_savestack[--PL_savestack_ix].any_i32)
  72  #define SSPOPLONG (PL_savestack[--PL_savestack_ix].any_long)
  73  #define SSPOPBOOL (PL_savestack[--PL_savestack_ix].any_bool)
  74  #define SSPOPIV (PL_savestack[--PL_savestack_ix].any_iv)
  75  #define SSPOPPTR (PL_savestack[--PL_savestack_ix].any_ptr)
  76  #define SSPOPDPTR (PL_savestack[--PL_savestack_ix].any_dptr)
  77  #define SSPOPDXPTR (PL_savestack[--PL_savestack_ix].any_dxptr)
  78  
  79  /*
  80  =head1 Callback Functions
  81  
  82  =for apidoc Ams||SAVETMPS
  83  Opening bracket for temporaries on a callback.  See C<FREETMPS> and
  84  L<perlcall>.
  85  
  86  =for apidoc Ams||FREETMPS
  87  Closing bracket for temporaries on a callback.  See C<SAVETMPS> and
  88  L<perlcall>.
  89  
  90  =for apidoc Ams||ENTER
  91  Opening bracket on a callback.  See C<LEAVE> and L<perlcall>.
  92  
  93  =for apidoc Ams||LEAVE
  94  Closing bracket on a callback.  See C<ENTER> and L<perlcall>.
  95  
  96  =cut
  97  */
  98  
  99  #define SAVETMPS save_int((int*)&PL_tmps_floor), PL_tmps_floor = PL_tmps_ix
 100  #define FREETMPS if (PL_tmps_ix > PL_tmps_floor) free_tmps()
 101  
 102  #ifdef DEBUGGING
 103  #define ENTER                            \
 104      STMT_START {                        \
 105      push_scope();                        \
 106      DEBUG_SCOPE("ENTER")                    \
 107      } STMT_END
 108  #define LEAVE                            \
 109      STMT_START {                        \
 110      DEBUG_SCOPE("LEAVE")                    \
 111      pop_scope();                        \
 112      } STMT_END
 113  #else
 114  #define ENTER push_scope()
 115  #define LEAVE pop_scope()
 116  #endif
 117  #define LEAVE_SCOPE(old) if (PL_savestack_ix > old) leave_scope(old)
 118  
 119  #define SAVEI8(i)    save_I8((I8*)&(i))
 120  #define SAVEI16(i)    save_I16((I16*)&(i))
 121  #define SAVEI32(i)    save_I32((I32*)&(i))
 122  #define SAVEINT(i)    save_int((int*)&(i))
 123  #define SAVEIV(i)    save_iv((IV*)&(i))
 124  #define SAVELONG(l)    save_long((long*)&(l))
 125  #define SAVEBOOL(b)    save_bool((bool*)&(b))
 126  #define SAVESPTR(s)    save_sptr((SV**)&(s))
 127  #define SAVEPPTR(s)    save_pptr((char**)&(s))
 128  #define SAVEVPTR(s)    save_vptr((void*)&(s))
 129  #define SAVEPADSV(s)    save_padsv(s)
 130  #define SAVEFREESV(s)    save_freesv((SV*)(s))
 131  #define SAVEMORTALIZESV(s)    save_mortalizesv((SV*)(s))
 132  #define SAVEFREEOP(o)    save_freeop((OP*)(o))
 133  #define SAVEFREEPV(p)    save_freepv((char*)(p))
 134  #define SAVECLEARSV(sv)    save_clearsv((SV**)&(sv))
 135  #define SAVEGENERICSV(s)    save_generic_svref((SV**)&(s))
 136  #define SAVEGENERICPV(s)    save_generic_pvref((char**)&(s))
 137  #define SAVESHAREDPV(s)        save_shared_pvref((char**)&(s))
 138  #define SAVESETSVFLAGS(sv,mask,val)    save_set_svflags(sv,mask,val)
 139  #define SAVEDELETE(h,k,l) \
 140        save_delete((HV*)(h), (char*)(k), (I32)(l))
 141  #define SAVEDESTRUCTOR(f,p) \
 142        save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p))
 143  
 144  #define SAVEDESTRUCTOR_X(f,p) \
 145        save_destructor_x((DESTRUCTORFUNC_t)(f), (void*)(p))
 146  
 147  #define SAVESTACK_POS() \
 148      STMT_START {                \
 149      SSCHECK(2);                \
 150      SSPUSHINT(PL_stack_sp - PL_stack_base);    \
 151      SSPUSHINT(SAVEt_STACK_POS);        \
 152      } STMT_END
 153  
 154  #define SAVEOP()    save_op()
 155  
 156  #define SAVEHINTS() \
 157      STMT_START {                    \
 158      SSCHECK(4);                    \
 159      if (PL_hints & HINT_LOCALIZE_HH) {        \
 160          SSPUSHPTR(GvHV(PL_hintgv));            \
 161          GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)); \
 162      }                        \
 163      if (PL_compiling.cop_hints_hash) {        \
 164          HINTS_REFCNT_LOCK;                \
 165          PL_compiling.cop_hints_hash->refcounted_he_refcnt++;    \
 166          HINTS_REFCNT_UNLOCK;            \
 167      }                        \
 168      SSPUSHPTR(PL_compiling.cop_hints_hash);        \
 169      SSPUSHINT(PL_hints);                \
 170      SSPUSHINT(SAVEt_HINTS);                \
 171      } STMT_END
 172  
 173  #define SAVECOMPPAD() \
 174      STMT_START {                        \
 175      SSCHECK(2);                        \
 176      SSPUSHPTR((SV*)PL_comppad);                \
 177      SSPUSHINT(SAVEt_COMPPAD);                \
 178      } STMT_END
 179  
 180  #define SAVESWITCHSTACK(f,t) \
 181      STMT_START {                    \
 182      SSCHECK(3);                    \
 183      SSPUSHPTR((SV*)(f));                \
 184      SSPUSHPTR((SV*)(t));                \
 185      SSPUSHINT(SAVEt_SAVESWITCHSTACK);        \
 186      SWITCHSTACK((f),(t));                \
 187      PL_curstackinfo->si_stack = (t);        \
 188      } STMT_END
 189  
 190  #define SAVECOPARYBASE(c) \
 191      STMT_START {                    \
 192      SSCHECK(3);                    \
 193      SSPUSHINT(CopARYBASE_get(c));            \
 194      SSPUSHPTR(c);                    \
 195      SSPUSHINT(SAVEt_COP_ARYBASE);            \
 196      } STMT_END
 197  
 198  /* Need to do the cop warnings like this, rather than a "SAVEFREESHAREDPV",
 199     because realloc() means that the value can actually change. Possibly
 200     could have done savefreesharedpvREF, but this way actually seems cleaner,
 201     as it simplifies the code that does the saves, and reduces the load on the
 202     save stack.  */
 203  #define SAVECOMPILEWARNINGS() \
 204      STMT_START {                    \
 205      SSCHECK(2);                    \
 206      SSPUSHPTR(PL_compiling.cop_warnings);        \
 207      SSPUSHINT(SAVEt_COMPILE_WARNINGS);        \
 208      } STMT_END
 209  
 210  #define SAVESTACK_CXPOS() \
 211      STMT_START {                                  \
 212          SSCHECK(3);                               \
 213          SSPUSHINT(cxstack[cxstack_ix].blk_oldsp); \
 214          SSPUSHINT(cxstack_ix);                    \
 215          SSPUSHINT(SAVEt_STACK_CXPOS);             \
 216      } STMT_END
 217  
 218  #define SAVEPARSER(p) \
 219      STMT_START {                                  \
 220          SSCHECK(2);                               \
 221          SSPUSHPTR(p);                          \
 222          SSPUSHINT(SAVEt_PARSER);               \
 223      } STMT_END
 224  
 225  #ifdef USE_ITHREADS
 226  #  define SAVECOPSTASH(c)    SAVEPPTR(CopSTASHPV(c))
 227  #  define SAVECOPSTASH_FREE(c)    SAVESHAREDPV(CopSTASHPV(c))
 228  #  define SAVECOPFILE(c)    SAVEPPTR(CopFILE(c))
 229  #  define SAVECOPFILE_FREE(c)    SAVESHAREDPV(CopFILE(c))
 230  #  define SAVECOPLABEL(c)    SAVEPPTR(CopLABEL(c))
 231  #  define SAVECOPLABEL_FREE(c)    SAVESHAREDPV(CopLABEL(c))
 232  #else
 233  #  define SAVECOPSTASH(c)    SAVESPTR(CopSTASH(c))
 234  #  define SAVECOPSTASH_FREE(c)    SAVECOPSTASH(c)    /* XXX not refcounted */
 235  #  define SAVECOPFILE(c)    SAVESPTR(CopFILEGV(c))
 236  #  define SAVECOPFILE_FREE(c)    SAVEGENERICSV(CopFILEGV(c))
 237  #  define SAVECOPLABEL(c)    SAVEPPTR(CopLABEL(c))
 238  #  define SAVECOPLABEL_FREE(c)    SAVEPPTR(CopLABEL(c))
 239  #endif
 240  
 241  #define SAVECOPLINE(c)        SAVEI32(CopLINE(c))
 242  
 243  /* SSNEW() temporarily allocates a specified number of bytes of data on the
 244   * savestack.  It returns an integer index into the savestack, because a
 245   * pointer would get broken if the savestack is moved on reallocation.
 246   * SSNEWa() works like SSNEW(), but also aligns the data to the specified
 247   * number of bytes.  MEM_ALIGNBYTES is perhaps the most useful.  The
 248   * alignment will be preserved therough savestack reallocation *only* if
 249   * realloc returns data aligned to a size divisible by "align"!
 250   *
 251   * SSPTR() converts the index returned by SSNEW/SSNEWa() into a pointer.
 252   */
 253  
 254  #define SSNEW(size)             Perl_save_alloc(aTHX_ (size), 0)
 255  #define SSNEWt(n,t)             SSNEW((n)*sizeof(t))
 256  #define SSNEWa(size,align)    Perl_save_alloc(aTHX_ (size), \
 257      (align - ((int)((caddr_t)&PL_savestack[PL_savestack_ix]) % align)) % align)
 258  #define SSNEWat(n,t,align)    SSNEWa((n)*sizeof(t), align)
 259  
 260  #define SSPTR(off,type)         ((type)  ((char*)PL_savestack + off))
 261  #define SSPTRt(off,type)        ((type*) ((char*)PL_savestack + off))
 262  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1