Split common stuff
[gitmo/Mouse.git] / perlxs.h
1 /*
2     perlxs.h - Standard XS header file
3     Copyright (c) Fuji, Goro (gfx)
4 */
5
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9
10 #define PERL_NO_GET_CONTEXT /* we want efficiency */
11 #include <EXTERN.h>
12
13 #include <perl.h>
14 #define NO_XSLOCKS /* for exceptions */
15 #include <XSUB.h>
16
17 #ifdef __cplusplus
18 } /* extern "C" */
19 #endif
20
21 #include "ppport.h"
22
23 /* portability stuff not supported by ppport.h yet */
24
25 #ifndef STATIC_INLINE /* from 5.13.4 */
26 #   if defined(__GNUC__) || defined(__cplusplus__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
27 #       define STATIC_INLINE static inline
28 #   else
29 #       define STATIC_INLINE static
30 #   endif
31 #endif /* STATIC_INLINE */
32
33 #ifndef __attribute__format__
34 #define __attribute__format__(a,b,c) /* nothing */
35 #endif
36
37 #ifndef LIKELY /* they are just a compiler's hint */
38 #define LIKELY(x)   (x)
39 #define UNLIKELY(x) (x)
40 #endif
41
42 #ifndef newSVpvs_share
43 #define newSVpvs_share(s) Perl_newSVpvn_share(aTHX_ STR_WITH_LEN(s), 0U)
44 #endif
45
46 #ifndef get_cvs
47 #define get_cvs(name, flags) get_cv(name, flags)
48 #endif
49
50 #ifndef GvNAME_get
51 #define GvNAME_get GvNAME
52 #endif
53 #ifndef GvNAMELEN_get
54 #define GvNAMELEN_get GvNAMELEN
55 #endif
56
57 #ifndef CvGV_set
58 #define CvGV_set(cv, gv) (CvGV(cv) = (gv))
59 #endif
60
61 /* general utility */
62
63 #if PERL_BCDVERSION < 0x5008005
64 #define LooksLikeNumber(x) (SvOK(x) && looks_like_number(x))
65 #else
66 #define LooksLikeNumber(x) looks_like_number(x)
67 #endif
68
69 #define newAV_mortal() (AV*)sv_2mortal((SV*)newAV())
70 #define newHV_mortal() (HV*)sv_2mortal((SV*)newHV())
71
72 #define DECL_BOOT(name) EXTERN_C XS(CAT2(boot_, name))
73 #define CALL_BOOT(name) STMT_START {            \
74         PUSHMARK(SP);                           \
75         CALL_FPTR(CAT2(boot_, name))(aTHX_ cv); \
76     } STMT_END
77