X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/f22be1b8bd009cf4b53bd4bad9a8883a7dc9f572..a3874608cd3bf4e33ccd66b8bb03b2aeda20af14:/perl.h diff --git a/perl.h b/perl.h index cb64a6e..3c17674 100644 --- a/perl.h +++ b/perl.h @@ -191,27 +191,21 @@ #define CALLREGFREE CALL_FPTR(PL_regfree) #if defined(SYMBIAN) && defined(__GNUC__) -# undef __attribute__ -# undef __attribute__(_arg_) -# define HASATTRIBUTE -#endif - -#ifdef HASATTRIBUTE -# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) +# ifdef __cplusplus # define PERL_UNUSED_DECL # else # define PERL_UNUSED_DECL __attribute__((unused)) # endif -#else -# define PERL_UNUSED_DECL -#endif - -#if defined(SYMBIAN) && defined(__GNUC__) -# undef __attribute__ -# undef __attribute__(_arg_) -# define HASATTRIBUTE #endif +#ifndef PERL_UNUSED_DECL +# ifdef HASATTRIBUTE_UNUSED +# define PERL_UNUSED_DECL __attribute__unused__ +# else +# define PERL_UNUSED_DECL +# endif +#endif + /* gcc -Wall: * for silencing unused variables that are actually used most of the time, * but we cannot quite get rid of, such `ax' in PPCODE+noargs xsubs @@ -2414,6 +2408,7 @@ typedef pthread_key_t perl_key; # include "netware.h" #endif +#define STATUS_UNIX PL_statusvalue #ifdef VMS # define STATUS_NATIVE PL_statusvalue_vms # define STATUS_NATIVE_EXPORT \ @@ -2430,13 +2425,12 @@ typedef pthread_key_t perl_key; else \ PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8; \ } STMT_END -# define STATUS_POSIX PL_statusvalue # ifdef VMSISH_STATUS -# define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX) +# define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_UNIX) # else -# define STATUS_CURRENT STATUS_POSIX +# define STATUS_CURRENT STATUS_UNIX # endif -# define STATUS_POSIX_SET(n) \ +# define STATUS_UNIX_SET(n) \ STMT_START { \ PL_statusvalue = (n); \ if (PL_statusvalue != -1) { \ @@ -2448,19 +2442,55 @@ typedef pthread_key_t perl_key; # define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_vms = 1) # define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_vms = 44) #else -# define STATUS_NATIVE STATUS_POSIX -# define STATUS_NATIVE_EXPORT STATUS_POSIX -# define STATUS_NATIVE_SET STATUS_POSIX_SET -# define STATUS_POSIX PL_statusvalue -# define STATUS_POSIX_SET(n) \ +# define STATUS_NATIVE PL_statusvalue_posix +# define STATUS_NATIVE_EXPORT STATUS_NATIVE +# if defined(WCOREDUMP) +# define STATUS_NATIVE_SET(n) \ + STMT_START { \ + PL_statusvalue_posix = (n); \ + if (PL_statusvalue_posix == -1) \ + PL_statusvalue = -1; \ + else { \ + PL_statusvalue = \ + (WIFEXITED(PL_statusvalue_posix) ? (WEXITSTATUS(PL_statusvalue_posix) << 8) : 0) | \ + (WIFSIGNALED(PL_statusvalue_posix) ? (WTERMSIG(PL_statusvalue_posix) & 0x7F) : 0) | \ + (WIFSIGNALED(PL_statusvalue_posix) && WCOREDUMP(PL_statusvalue_posix) ? 0x80 : 0); \ + } \ + } STMT_END +# elif defined(WIFEXITED) +# define STATUS_NATIVE_SET(n) \ + STMT_START { \ + PL_statusvalue_posix = (n); \ + if (PL_statusvalue_posix == -1) \ + PL_statusvalue = -1; \ + else { \ + PL_statusvalue = \ + (WIFEXITED(PL_statusvalue_posix) ? (WEXITSTATUS(PL_statusvalue_posix) << 8) : 0) | \ + (WIFSIGNALED(PL_statusvalue_posix) ? (WTERMSIG(PL_statusvalue_posix) & 0x7F) : 0); \ + } \ + } STMT_END +# else +# define STATUS_NATIVE_SET(n) \ + STMT_START { \ + PL_statusvalue_posix = (n); \ + if (PL_statusvalue_posix == -1) \ + PL_statusvalue = -1; \ + else { \ + PL_statusvalue = \ + PL_statusvalue_posix & 0xFFFF; \ + } \ + } STMT_END +# endif +# define STATUS_UNIX_SET(n) \ STMT_START { \ PL_statusvalue = (n); \ + PL_statusvalue_posix = PL_statusvalue; \ if (PL_statusvalue != -1) \ PL_statusvalue &= 0xFFFF; \ } STMT_END -# define STATUS_CURRENT STATUS_POSIX -# define STATUS_ALL_SUCCESS (PL_statusvalue = 0) -# define STATUS_ALL_FAILURE (PL_statusvalue = 1) +# define STATUS_CURRENT STATUS_UNIX +# define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_posix = 0) +# define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_posix = 1) #endif /* flags in PL_exit_flags for nature of exit() */ @@ -2514,20 +2544,17 @@ typedef pthread_key_t perl_key; # define PERL_SET_THX(t) PERL_SET_CONTEXT(t) #endif +/* This replaces the previous %_ "hack" by the "%-p" hack + All that is required is that the perl source does not + use "%-p" or "%-p" format. These format will + still work in perl code. RMB 2005/05/17 +*/ #ifndef SVf -# ifdef CHECK_FORMAT -# define SVf "-p" -# else -# define SVf "_" -# endif +# define SVf "-p" #endif #ifndef SVf_precision -# ifdef CHECK_FORMAT -# define SVf_precision(n) "-" n "p" -# else -# define SVf_precision(n) "." n "_" -# endif +# define SVf_precision(n) "-" n "p" #endif #ifndef SVf32 @@ -2543,41 +2570,66 @@ typedef pthread_key_t perl_key; #endif #ifndef DieNull -# ifdef CHECK_FORMAT -# define DieNull Perl_vdie(aTHX_ Nullch, Null(va_list *)) -# else -# define DieNull Perl_die(aTHX_ Nullch) +# define DieNull Perl_vdie(aTHX_ Nullch, Null(va_list *)) +#endif + +/* In case Configure was not used (we are using a "canned config" + * such as Win32, or a cross-compilation setup, for example) try going + * by the gcc major and minor versions. One useful URL is + * http://www.ohse.de/uwe/articles/gcc-attributes.html, + * but contrary to this information warn_unused_result seems + * not to be in gcc 3.3.5, at least. --jhi */ +#if defined __GNUC__ +# if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */ +# define HASATTRIBUTE_FORMAT # endif -#endif - -#ifndef __attribute__format__ -# ifdef CHECK_FORMAT -# define __attribute__format__(x,y,z) __attribute__((format(x,y,z))) -# else -# define __attribute__format__(x,y,z) +# if __GNUC__ >= 3 /* 3.0 -> */ +# define HASATTRIBUTE_MALLOC +# endif +# if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */ +# define HASATTRIBUTE_NONNULL +# endif +# if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */ +# define HASATTRIBUTE_NORETURN +# endif +# if __GNUC__ >= 3 /* gcc 3.0 -> */ +# define HASATTRIBUTE_PURE +# endif +# if __GNUC__ >= 3 /* gcc 3.0 -> */ /* XXX Verify this version */ +# define HASATTRIBUTE_UNUSED +# endif +# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */ +# define HASATTRIBUTE_WARN_UNUSED_RESULT # endif #endif -/* See http://www.ohse.de/uwe/articles/gcc-attributes.html, but - * contrary to the information warn_unused_result seems not to be in - * gcc 3.3.5, at least. --jhi */ -#if __GNUC__ >= 3 +#ifdef HASATTRIBUTE_FORMAT +# define __attribute__format__(x,y,z) __attribute__((format(x,y,z))) +#endif +#ifdef HASATTRIBUTE_MALLOC # define __attribute__malloc__ __attribute__((malloc)) #endif -#if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 +#ifdef HASATTRIBUTE_NONNULL # define __attribute__nonnull__(a) __attribute__((nonnull(a))) #endif -#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 +#ifdef HASATTRIBUTE_NORETURN # define __attribute__noreturn__ __attribute__((noreturn)) #endif -#if __GNUC__ >= 3 +#ifdef HASATTRIBUTE_PURE # define __attribute__pure__ __attribute__((pure)) #endif -#if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 +#ifdef HASATTRIBUTE_UNUSED +# define __attribute__unused__ __attribute__((unused)) +#endif +#ifdef HASATTRIBUTE_WARN_UNUSED_RESULT # define __attribute__warn_unused_result__ __attribute__((warn_unused_result)) #endif +/* If we haven't defined the attributes yet, define them to blank. */ +#ifndef __attribute__format__ +# define __attribute__format__(x,y,z) +#endif #ifndef __attribute__malloc__ # define __attribute__malloc__ #endif @@ -2590,12 +2642,20 @@ typedef pthread_key_t perl_key; #ifndef __attribute__pure__ # define __attribute__pure__ #endif +#ifndef __attribute__unused__ +# define __attribute__unused__ +#endif #ifndef __attribute__warn_unused_result__ # define __attribute__warn_unused_result__ #endif -#if defined(HASATTRIBUTE) && __GNUC__ >= 3 -# define HASATTRIBUTE_NORETURN +/* For functions that are marked as __attribute__noreturn__, it's not + appropriate to call return. In either case, include the lint directive. + */ +#ifdef HASATTRIBUTE_NORETURN +# define NORETURN_FUNCTION_END /* NOT REACHED */ +#else +# define NORETURN_FUNCTION_END /* NOT REACHED */ return 0 #endif /* Some unistd.h's give a prototype for pause() even though @@ -3123,14 +3183,17 @@ Gid_t getegid (void); #define PERL_MAGIC_arylen '#' /* Array length ($#ary) */ #define PERL_MAGIC_pos '.' /* pos() lvalue */ #define PERL_MAGIC_backref '<' /* for weak ref data */ +#define PERL_MAGIC_symtab ':' /* extra data for symbol tables */ +#define PERL_MAGIC_rhash '%' /* extra data for restricted hashes */ +#define PERL_MAGIC_arylen_p '@' /* to move arylen out of XPVAV */ #define PERL_MAGIC_ext '~' /* Available for use by extensions */ #ifndef assert /* might have been included somehow */ #define assert(what) PERL_DEB( \ ((what) ? ((void) 0) : \ - (Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\", line %d", \ - __FILE__, __LINE__), \ + (Perl_croak(aTHX_ "Assertion %s failed: file \"" __FILE__ \ + "\", line %d", STRINGIFY(what), __LINE__), \ PerlProc_exit(1), \ (void) 0))) #endif @@ -3722,7 +3785,8 @@ enum { /* pass one of these to get_vtbl */ want_vtbl_regdata, want_vtbl_regdatum, want_vtbl_backref, - want_vtbl_utf8 + want_vtbl_utf8, + want_vtbl_symtab }; /* Note: the lowest 8 bits are reserved for @@ -3892,20 +3956,10 @@ struct tempsym; /* defined in pp_pack.c */ #ifndef PERL_CALLCONV # define PERL_CALLCONV #endif - -#ifndef NEXT30_NO_ATTRIBUTE -# ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */ -# ifdef __attribute__ /* Avoid possible redefinition errors */ -# undef __attribute__ -# endif -# define __attribute__(attr) -# endif -#endif - #undef PERL_CKDEF #undef PERL_PPDEF -#define PERL_CKDEF(s) OP *s (pTHX_ OP *o); -#define PERL_PPDEF(s) OP *s (pTHX); +#define PERL_CKDEF(s) PERL_CALLCONV OP *s (pTHX_ OP *o); +#define PERL_PPDEF(s) PERL_CALLCONV OP *s (pTHX); #include "proto.h"