ppport.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:8k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* This file is Based on output from 
  2.  * Perl/Pollution/Portability Version 2.0000 */
  3. #ifndef _P_P_PORTABILITY_H_
  4. #define _P_P_PORTABILITY_H_
  5. #ifndef PERL_REVISION
  6. #   ifndef __PATCHLEVEL_H_INCLUDED__
  7. #       include "patchlevel.h"
  8. #   endif
  9. #   ifndef PERL_REVISION
  10. # define PERL_REVISION (5)
  11.         /* Replace: 1 */
  12. #       define PERL_VERSION PATCHLEVEL
  13. #       define PERL_SUBVERSION SUBVERSION
  14.         /* Replace PERL_PATCHLEVEL with PERL_VERSION */
  15.         /* Replace: 0 */
  16. #   endif
  17. #endif
  18. #define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION)
  19. #ifndef ERRSV
  20. # define ERRSV perl_get_sv("@",FALSE)
  21. #endif
  22. #if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))
  23. /* Replace: 1 */
  24. # define PL_Sv Sv
  25. # define PL_compiling compiling
  26. # define PL_copline copline
  27. # define PL_curcop curcop
  28. # define PL_curstash curstash
  29. # define PL_defgv defgv
  30. # define PL_dirty dirty
  31. # define PL_hints hints
  32. # define PL_na na
  33. # define PL_perldb perldb
  34. # define PL_rsfp_filters rsfp_filters
  35. # define PL_rsfp rsfp
  36. # define PL_stdingv stdingv
  37. # define PL_sv_no sv_no
  38. # define PL_sv_undef sv_undef
  39. # define PL_sv_yes sv_yes
  40. /* Replace: 0 */
  41. #endif
  42. #ifndef pTHX
  43. #    define pTHX
  44. #    define pTHX_
  45. #    define aTHX
  46. #    define aTHX_
  47. #endif         
  48. #ifndef PTR2IV
  49. #    define PTR2IV(d)   (IV)(d)
  50. #endif
  51.  
  52. #ifndef INT2PTR
  53. #    define INT2PTR(any,d)      (any)(d)
  54. #endif
  55. #ifndef dTHR
  56. #  ifdef WIN32
  57. # define dTHR extern int Perl___notused
  58. #  else
  59. # define dTHR extern int errno
  60. #  endif
  61. #endif
  62. #ifndef boolSV
  63. # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
  64. #endif
  65. #ifndef gv_stashpvn
  66. # define gv_stashpvn(str,len,flags) gv_stashpv(str,flags)
  67. #endif
  68. #ifndef newSVpvn
  69. # define newSVpvn(data,len) ((len) ? newSVpv ((data), (len)) : newSVpv ("", 0))
  70. #endif
  71. #ifndef newRV_inc
  72. /* Replace: 1 */
  73. # define newRV_inc(sv) newRV(sv)
  74. /* Replace: 0 */
  75. #endif
  76. /* DEFSV appears first in 5.004_56 */
  77. #ifndef DEFSV
  78. #  define DEFSV GvSV(PL_defgv)
  79. #endif
  80. #ifndef SAVE_DEFSV
  81. #    define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
  82. #endif
  83. #ifndef newRV_noinc
  84. #  ifdef __GNUC__
  85. #    define newRV_noinc(sv)               
  86.       ({                                  
  87.           SV *nsv = (SV*)newRV(sv);       
  88.           SvREFCNT_dec(sv);               
  89.           nsv;                            
  90.       })
  91. #  else
  92. #    if defined(CRIPPLED_CC) || defined(USE_THREADS)
  93. static SV * newRV_noinc (SV * sv)
  94. {
  95.           SV *nsv = (SV*)newRV(sv);       
  96.           SvREFCNT_dec(sv);               
  97.           return nsv;                     
  98. }
  99. #    else
  100. #      define newRV_noinc(sv)    
  101.         ((PL_Sv=(SV*)newRV(sv), SvREFCNT_dec(sv), (SV*)PL_Sv)
  102. #    endif
  103. #  endif
  104. #endif
  105. /* Provide: newCONSTSUB */
  106. /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
  107. #if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63))
  108. #if defined(NEED_newCONSTSUB)
  109. static
  110. #else
  111. extern void newCONSTSUB _((HV * stash, char * name, SV *sv));
  112. #endif
  113. #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
  114. void
  115. newCONSTSUB(stash,name,sv)
  116. HV *stash;
  117. char *name;
  118. SV *sv;
  119. {
  120. U32 oldhints = PL_hints;
  121. HV *old_cop_stash = PL_curcop->cop_stash;
  122. HV *old_curstash = PL_curstash;
  123. line_t oldline = PL_curcop->cop_line;
  124. PL_curcop->cop_line = PL_copline;
  125. PL_hints &= ~HINT_BLOCK_SCOPE;
  126. if (stash)
  127. PL_curstash = PL_curcop->cop_stash = stash;
  128. newSUB(
  129. #if (PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22))
  130.      /* before 5.003_22 */
  131. start_subparse(),
  132. #else
  133. #  if (PERL_VERSION == 3) && (PERL_SUBVERSION == 22)
  134.      /* 5.003_22 */
  135.       start_subparse(0),
  136. #  else
  137.      /* 5.003_23  onwards */
  138.       start_subparse(FALSE, 0),
  139. #  endif
  140. #endif
  141. newSVOP(OP_CONST, 0, newSVpv(name,0)),
  142. newSVOP(OP_CONST, 0, &PL_sv_no),   /* SvPV(&PL_sv_no) == "" -- GMB */
  143. newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
  144. );
  145. PL_hints = oldhints;
  146. PL_curcop->cop_stash = old_cop_stash;
  147. PL_curstash = old_curstash;
  148. PL_curcop->cop_line = oldline;
  149. }
  150. #endif
  151. #endif /* newCONSTSUB */
  152. #ifndef START_MY_CXT
  153. /*
  154.  * Boilerplate macros for initializing and accessing interpreter-local
  155.  * data from C.  All statics in extensions should be reworked to use
  156.  * this, if you want to make the extension thread-safe.  See ext/re/re.xs
  157.  * for an example of the use of these macros.
  158.  *
  159.  * Code that uses these macros is responsible for the following:
  160.  * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
  161.  * 2. Declare a typedef named my_cxt_t that is a structure that contains
  162.  *    all the data that needs to be interpreter-local.
  163.  * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
  164.  * 4. Use the MY_CXT_INIT macro such that it is called exactly once
  165.  *    (typically put in the BOOT: section).
  166.  * 5. Use the members of the my_cxt_t structure everywhere as
  167.  *    MY_CXT.member.
  168.  * 6. Use the dMY_CXT macro (a declaration) in all the functions that
  169.  *    access MY_CXT.
  170.  */
  171. #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || 
  172.     defined(PERL_CAPI)    || defined(PERL_IMPLICIT_CONTEXT)
  173. /* This must appear in all extensions that define a my_cxt_t structure,
  174.  * right after the definition (i.e. at file scope).  The non-threads
  175.  * case below uses it to declare the data as static. */
  176. #define START_MY_CXT
  177. #if PERL_REVISION == 5 && 
  178.     (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 ))
  179. /* Fetches the SV that keeps the per-interpreter data. */
  180. #define dMY_CXT_SV 
  181. SV *my_cxt_sv = perl_get_sv(MY_CXT_KEY, FALSE)
  182. #else /* >= perl5.004_68 */
  183. #define dMY_CXT_SV 
  184. SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY,
  185.   sizeof(MY_CXT_KEY)-1, TRUE)
  186. #endif /* < perl5.004_68 */
  187. /* This declaration should be used within all functions that use the
  188.  * interpreter-local data. */
  189. #define dMY_CXT
  190. dMY_CXT_SV;
  191. my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
  192. /* Creates and zeroes the per-interpreter data.
  193.  * (We allocate my_cxtp in a Perl SV so that it will be released when
  194.  * the interpreter goes away.) */
  195. #define MY_CXT_INIT 
  196. dMY_CXT_SV;
  197. /* newSV() allocates one more than needed */
  198. my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));
  199. Zero(my_cxtp, 1, my_cxt_t);
  200. sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
  201. /* This macro must be used to access members of the my_cxt_t structure.
  202.  * e.g. MYCXT.some_data */
  203. #define MY_CXT (*my_cxtp)
  204. /* Judicious use of these macros can reduce the number of times dMY_CXT
  205.  * is used.  Use is similar to pTHX, aTHX etc. */
  206. #define pMY_CXT my_cxt_t *my_cxtp
  207. #define pMY_CXT_ pMY_CXT,
  208. #define _pMY_CXT ,pMY_CXT
  209. #define aMY_CXT my_cxtp
  210. #define aMY_CXT_ aMY_CXT,
  211. #define _aMY_CXT ,aMY_CXT
  212. #else /* single interpreter */
  213. #ifndef NOOP
  214. #  define NOOP (void)0
  215. #endif
  216. #ifdef HASATTRIBUTE
  217. #  define PERL_UNUSED_DECL __attribute__((unused))
  218. #else
  219. #  define PERL_UNUSED_DECL
  220. #endif    
  221. #ifndef dNOOP
  222. #  define dNOOP extern int Perl___notused PERL_UNUSED_DECL
  223. #endif
  224. #define START_MY_CXT static my_cxt_t my_cxt;
  225. #define dMY_CXT_SV dNOOP
  226. #define dMY_CXT dNOOP
  227. #define MY_CXT_INIT NOOP
  228. #define MY_CXT my_cxt
  229. #define pMY_CXT void
  230. #define pMY_CXT_
  231. #define _pMY_CXT
  232. #define aMY_CXT
  233. #define aMY_CXT_
  234. #define _aMY_CXT
  235. #endif 
  236. #endif /* START_MY_CXT */
  237. #ifndef DBM_setFilter
  238. /* 
  239.    The DBM_setFilter & DBM_ckFilter macros are only used by 
  240.    the *DB*_File modules 
  241. */
  242. #define DBM_setFilter(db_type,code)
  243. {
  244.     if (db_type)
  245.         RETVAL = sv_mortalcopy(db_type) ;
  246.     ST(0) = RETVAL ;
  247.     if (db_type && (code == &PL_sv_undef)) {
  248.                 SvREFCNT_dec(db_type) ;
  249.         db_type = NULL ;
  250.     }
  251.     else if (code) {
  252.         if (db_type)
  253.             sv_setsv(db_type, code) ;
  254.         else
  255.             db_type = newSVsv(code) ;
  256.     }     
  257. }
  258. #define DBM_ckFilter(arg,type,name)
  259. if (db->type) {
  260.     if (db->filtering) {
  261.         croak("recursion detected in %s", name) ;
  262.     }                     
  263.     ENTER ;
  264.     SAVETMPS ;
  265.     SAVEINT(db->filtering) ;
  266.     db->filtering = TRUE ;
  267.     SAVESPTR(DEFSV) ;
  268.     DEFSV = arg ;
  269.     SvTEMP_off(arg) ;
  270.     PUSHMARK(SP) ;
  271.     PUTBACK ;
  272.     (void) perl_call_sv(db->type, G_DISCARD); 
  273.     SPAGAIN ;
  274.     PUTBACK ;
  275.     FREETMPS ;
  276.     LEAVE ;
  277. }
  278. #endif /* DBM_setFilter */
  279. #endif /* _P_P_PORTABILITY_H_ */