1 /* perl.h 2 * 3 * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 4 * 2000, 2001, 2002, 2003, 2004, 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 #ifndef H_PERL 12 #define H_PERL 1 13 14 #ifdef PERL_FOR_X2P 15 /* 16 * This file is being used for x2p stuff. 17 * Above symbol is defined via -D in 'x2p/Makefile.SH' 18 * Decouple x2p stuff from some of perls more extreme eccentricities. 19 */ 20 #undef MULTIPLICITY 21 #undef USE_STDIO 22 #define USE_STDIO 23 #endif /* PERL_FOR_X2P */ 24 25 #if defined(DGUX) 26 #include <sys/fcntl.h> 27 #endif 28 29 #ifdef VOIDUSED 30 # undef VOIDUSED 31 #endif 32 #define VOIDUSED 1 33 34 #ifdef PERL_MICRO 35 # include "uconfig.h" 36 #else 37 # include "config.h" 38 #endif 39 40 #if defined(USE_ITHREADS) && defined(USE_5005THREADS) 41 # include "error: USE_ITHREADS and USE_5005THREADS are incompatible" 42 #endif 43 44 /* See L<perlguts/"The Perl API"> for detailed notes on 45 * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */ 46 47 /* Note that from here --> to <-- the same logic is 48 * repeated in makedef.pl, so be certain to update 49 * both places when editing. */ 50 51 #ifdef PERL_IMPLICIT_SYS 52 /* PERL_IMPLICIT_SYS implies PerlMemShared != PerlMem 53 so use slab allocator to avoid lots of MUTEX overhead 54 */ 55 # ifndef PL_OP_SLAB_ALLOC 56 # define PL_OP_SLAB_ALLOC 57 # endif 58 #endif 59 60 #ifdef USE_ITHREADS 61 # if !defined(MULTIPLICITY) 62 # define MULTIPLICITY 63 # endif 64 #endif 65 66 #ifdef USE_5005THREADS 67 # ifndef PERL_IMPLICIT_CONTEXT 68 # define PERL_IMPLICIT_CONTEXT 69 # endif 70 #endif 71 72 #if defined(MULTIPLICITY) 73 # ifndef PERL_IMPLICIT_CONTEXT 74 # define PERL_IMPLICIT_CONTEXT 75 # endif 76 #endif 77 78 /* undef WIN32 when building on Cygwin (for libwin32) - gph */ 79 #ifdef __CYGWIN__ 80 # undef WIN32 81 # undef _WIN32 82 #endif 83 84 /* Use the reentrant APIs like localtime_r and getpwent_r */ 85 /* Win32 has naturally threadsafe libraries, no need to use any _r variants. */ 86 #if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(NETWARE) && !defined(WIN32) && !defined(PERL_DARWIN) 87 # define USE_REENTRANT_API 88 #endif 89 90 /* <--- here ends the logic shared by perl.h and makedef.pl */ 91 92 /* 93 * PERL_DARWIN for MacOSX (__APPLE__ exists but is not officially sanctioned) 94 * (The -DPERL_DARWIN comes from the hints/darwin.sh.) 95 * __bsdi__ for BSD/OS 96 */ 97 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(PERL_DARWIN) || defined(__bsdi__) || defined(BSD41) || defined(BSD42) || defined(BSD43) || defined(BSD44) 98 # ifndef BSDish 99 # define BSDish 100 # endif 101 #endif 102 103 #ifdef PERL_IMPLICIT_CONTEXT 104 # ifdef USE_5005THREADS 105 struct perl_thread; 106 # define pTHX register struct perl_thread *thr PERL_UNUSED_DECL 107 # define aTHX thr 108 # define dTHR dNOOP /* only backward compatibility */ 109 # define dTHXa(a) pTHX = (struct perl_thread*)a 110 # else 111 # ifndef MULTIPLICITY 112 # define MULTIPLICITY 113 # endif 114 # define pTHX register PerlInterpreter *my_perl PERL_UNUSED_DECL 115 # define aTHX my_perl 116 # define dTHXa(a) pTHX = (PerlInterpreter*)a 117 # endif 118 # define dTHX pTHX = PERL_GET_THX 119 # define pTHX_ pTHX, 120 # define aTHX_ aTHX, 121 # define pTHX_1 2 122 # define pTHX_2 3 123 # define pTHX_3 4 124 # define pTHX_4 5 125 #endif 126 127 #define STATIC static 128 #define CPERLscope(x) x 129 #define CPERLarg void 130 #define CPERLarg_ 131 #define _CPERLarg 132 #define PERL_OBJECT_THIS 133 #define _PERL_OBJECT_THIS 134 #define PERL_OBJECT_THIS_ 135 #define CALL_FPTR(fptr) (*fptr) 136 137 #define CALLRUNOPS CALL_FPTR(PL_runops) 138 #define CALLREGCOMP CALL_FPTR(PL_regcompp) 139 #define CALLREGEXEC CALL_FPTR(PL_regexecp) 140 #define CALLREG_INTUIT_START CALL_FPTR(PL_regint_start) 141 #define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string) 142 #define CALLREGFREE CALL_FPTR(PL_regfree) 143 144 #ifdef PERL_FLEXIBLE_EXCEPTIONS 145 # define CALLPROTECT CALL_FPTR(PL_protect) 146 #endif 147 148 #ifdef HASATTRIBUTE 149 # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) 150 # define PERL_UNUSED_DECL 151 # else 152 # define PERL_UNUSED_DECL __attribute__((unused)) 153 # endif 154 #else 155 # define PERL_UNUSED_DECL 156 #endif 157 158 /* gcc -Wall: 159 * for silencing unused variables that are actually used most of the time, 160 * but we cannot quite get rid of, such `ax' in PPCODE+noargs xsubs 161 */ 162 #define PERL_UNUSED_VAR(var) if (0) var = var 163 164 #define NOOP (void)0 165 #define dNOOP extern int Perl___notused PERL_UNUSED_DECL 166 167 #ifndef pTHX 168 # define pTHX void 169 # define pTHX_ 170 # define aTHX 171 # define aTHX_ 172 # define dTHXa(a) dNOOP 173 # define dTHX dNOOP 174 # define pTHX_1 1 175 # define pTHX_2 2 176 # define pTHX_3 3 177 # define pTHX_4 4 178 #endif 179 180 /* these are only defined for compatibility; should not be used internally */ 181 #if !defined(pTHXo) && !defined(PERL_CORE) 182 # define pTHXo pTHX 183 # define pTHXo_ pTHX_ 184 # define aTHXo aTHX 185 # define aTHXo_ aTHX_ 186 # define dTHXo dTHX 187 # define dTHXoa(x) dTHXa(x) 188 #endif 189 190 #ifndef pTHXx 191 # define pTHXx register PerlInterpreter *my_perl 192 # define pTHXx_ pTHXx, 193 # define aTHXx my_perl 194 # define aTHXx_ aTHXx, 195 # define dTHXx dTHX 196 #endif 197 198 /* Under PERL_IMPLICIT_SYS (used in Windows for fork emulation) 199 * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...). 200 * dTHXs is therefore needed for all functions using PerlIO_foo(). */ 201 #ifdef PERL_IMPLICIT_SYS 202 # define dTHXs dTHX 203 #else 204 # define dTHXs dNOOP 205 #endif 206 207 #undef START_EXTERN_C 208 #undef END_EXTERN_C 209 #undef EXTERN_C 210 #ifdef __cplusplus 211 # define START_EXTERN_C extern "C" { 212 # define END_EXTERN_C } 213 # define EXTERN_C extern "C" 214 #else 215 # define START_EXTERN_C 216 # define END_EXTERN_C 217 # define EXTERN_C extern 218 #endif 219 220 #ifdef OP_IN_REGISTER 221 # ifdef __GNUC__ 222 # define stringify_immed(s) #s 223 # define stringify(s) stringify_immed(s) 224 register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); 225 # endif 226 #endif 227 228 #if defined(__STRICT_ANSI__) && defined(PERL_GCC_PEDANTIC) 229 # define PERL_GCC_BRACE_GROUPS_FORBIDDEN 230 #endif 231 232 /* 233 * STMT_START { statements; } STMT_END; 234 * can be used as a single statement, as in 235 * if (x) STMT_START { ... } STMT_END; else ... 236 * 237 * Trying to select a version that gives no warnings... 238 */ 239 #if !(defined(STMT_START) && defined(STMT_END)) 240 # if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) 241 # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ 242 # define STMT_END ) 243 # else 244 /* Now which other defined()s do we need here ??? */ 245 # if (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) 246 # define STMT_START if (1) 247 # define STMT_END else (void)0 248 # else 249 # define STMT_START do 250 # define STMT_END while (0) 251 # endif 252 # endif 253 #endif 254 255 #define WITH_THX(s) STMT_START { dTHX; s; } STMT_END 256 #define WITH_THR(s) WITH_THX(s) 257 258 /* 259 * SOFT_CAST can be used for args to prototyped functions to retain some 260 * type checking; it only casts if the compiler does not know prototypes. 261 */ 262 #if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE) 263 #define SOFT_CAST(type) 264 #else 265 #define SOFT_CAST(type) (type) 266 #endif 267 268 #ifndef BYTEORDER /* Should never happen -- byteorder is in config.h */ 269 # define BYTEORDER 0x1234 270 #endif 271 272 /* Overall memory policy? */ 273 #ifndef CONSERVATIVE 274 # define LIBERAL 1 275 #endif 276 277 #if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90 278 #define ASCIIish 279 #else 280 #undef ASCIIish 281 #endif 282 283 /* 284 * The following contortions are brought to you on behalf of all the 285 * standards, semi-standards, de facto standards, not-so-de-facto standards 286 * of the world, as well as all the other botches anyone ever thought of. 287 * The basic theory is that if we work hard enough here, the rest of the 288 * code can be a lot prettier. Well, so much for theory. Sorry, Henry... 289 */ 290 291 /* define this once if either system, instead of cluttering up the src */ 292 #if defined(MSDOS) || defined(atarist) || defined(WIN32) || defined(NETWARE) 293 #define DOSISH 1 294 #endif 295 296 #if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC) || defined(NETWARE) 297 # define STANDARD_C 1 298 #endif 299 300 #if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(__EMX__) || defined(__DGUX) || defined( EPOC) || defined(__QNX__) || defined(NETWARE) || defined(PERL_MICRO) 301 # define DONT_DECLARE_STD 1 302 #endif 303 304 #if defined(HASVOLATILE) || defined(STANDARD_C) 305 # ifdef __cplusplus 306 # define VOL /* to temporarily suppress warnings */ 307 # else 308 # define VOL volatile 309 # endif 310 #else 311 # define VOL 312 #endif 313 314 #define TAINT (PL_tainted = TRUE) 315 #define TAINT_NOT (PL_tainted = FALSE) 316 #define TAINT_IF(c) if (c) { PL_tainted = TRUE; } 317 #define TAINT_ENV() if (PL_tainting) { taint_env(); } 318 #define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); } 319 320 /* XXX All process group stuff is handled in pp_sys.c. Should these 321 defines move there? If so, I could simplify this a lot. --AD 9/96. 322 */ 323 /* Process group stuff changed from traditional BSD to POSIX. 324 perlfunc.pod documents the traditional BSD-style syntax, so we'll 325 try to preserve that, if possible. 326 */ 327 #ifdef HAS_SETPGID 328 # define BSD_SETPGRP(pid, pgrp) setpgid((pid), (pgrp)) 329 #else 330 # if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP) 331 # define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp)) 332 # else 333 # ifdef HAS_SETPGRP2 /* DG/UX */ 334 # define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp)) 335 # endif 336 # endif 337 #endif 338 #if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP) 339 # define HAS_SETPGRP /* Well, effectively it does . . . */ 340 #endif 341 342 /* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes 343 our life easier :-) so we'll try it. 344 */ 345 #ifdef HAS_GETPGID 346 # define BSD_GETPGRP(pid) getpgid((pid)) 347 #else 348 # if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP) 349 # define BSD_GETPGRP(pid) getpgrp((pid)) 350 # else 351 # ifdef HAS_GETPGRP2 /* DG/UX */ 352 # define BSD_GETPGRP(pid) getpgrp2((pid)) 353 # endif 354 # endif 355 #endif 356 #if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP) 357 # define HAS_GETPGRP /* Well, effectively it does . . . */ 358 #endif 359 360 /* These are not exact synonyms, since setpgrp() and getpgrp() may 361 have different behaviors, but perl.h used to define USE_BSDPGRP 362 (prior to 5.003_05) so some extension might depend on it. 363 */ 364 #if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP) 365 # ifndef USE_BSDPGRP 366 # define USE_BSDPGRP 367 # endif 368 #endif 369 370 /* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that 371 pthread.h must be included before all other header files. 372 */ 373 #if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) \ 374 && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD) 375 # include <pthread.h> 376 #endif 377 378 #ifndef _TYPES_ /* If types.h defines this it's easy. */ 379 # ifndef major /* Does everyone's types.h define this? */ 380 # include <sys/types.h> 381 # endif 382 #endif 383 384 #ifdef __cplusplus 385 # ifndef I_STDARG 386 # define I_STDARG 1 387 # endif 388 #endif 389 390 #ifdef I_STDARG 391 # include <stdarg.h> 392 #else 393 # ifdef I_VARARGS 394 # include <varargs.h> 395 # endif 396 #endif 397 398 #ifdef USE_NEXT_CTYPE 399 400 #if NX_CURRENT_COMPILER_RELEASE >= 500 401 # include <bsd/ctypes.h> 402 #else 403 # if NX_CURRENT_COMPILER_RELEASE >= 400 404 # include <objc/NXCType.h> 405 # else /* NX_CURRENT_COMPILER_RELEASE < 400 */ 406 # include <appkit/NXCType.h> 407 # endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */ 408 #endif /* NX_CURRENT_COMPILER_RELEASE >= 500 */ 409 410 #else /* !USE_NEXT_CTYPE */ 411 #include <ctype.h> 412 #endif /* USE_NEXT_CTYPE */ 413 414 #ifdef METHOD /* Defined by OSF/1 v3.0 by ctype.h */ 415 #undef METHOD 416 #endif 417 418 #ifdef PERL_MICRO 419 # define NO_LOCALE 420 #endif 421 422 #ifdef I_LOCALE 423 # include <locale.h> 424 #endif 425 426 #if !defined(NO_LOCALE) && defined(HAS_SETLOCALE) 427 # define USE_LOCALE 428 # if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \ 429 && defined(HAS_STRXFRM) 430 # define USE_LOCALE_COLLATE 431 # endif 432 # if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE) 433 # define USE_LOCALE_CTYPE 434 # endif 435 # if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC) 436 # define USE_LOCALE_NUMERIC 437 # endif 438 #endif /* !NO_LOCALE && HAS_SETLOCALE */ 439 440 #include <setjmp.h> 441 442 #ifdef I_SYS_PARAM 443 # ifdef PARAM_NEEDS_TYPES 444 # include <sys/types.h> 445 # endif 446 # include <sys/param.h> 447 #endif 448 449 /* Use all the "standard" definitions? */ 450 #if defined(STANDARD_C) && defined(I_STDLIB) 451 # include <stdlib.h> 452 #endif 453 454 /* If this causes problems, set i_unistd=undef in the hint file. */ 455 #ifdef I_UNISTD 456 # include <unistd.h> 457 #endif 458 459 #if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO) && !defined(PERL_MICRO) 460 int syscall(int, ...); 461 #endif 462 463 #if defined(HAS_USLEEP) && !defined(HAS_USLEEP_PROTO) && !defined(PERL_MICRO) 464 int usleep(unsigned int); 465 #endif 466 467 #ifdef PERL_MICRO /* Last chance to export Perl_my_swap */ 468 # define MYSWAP 469 #endif 470 471 /* Cannot include embed.h here on Win32 as win32.h has not 472 yet been included and defines some config variables e.g. HAVE_INTERP_INTERN 473 */ 474 #if !defined(PERL_FOR_X2P) && !(defined(WIN32)||defined(VMS)) 475 # include "embed.h" 476 #endif 477 478 #define MEM_SIZE Size_t 479 480 #if defined(STANDARD_C) && defined(I_STDDEF) 481 # include <stddef.h> 482 # define STRUCT_OFFSET(s,m) offsetof(s,m) 483 #else 484 # define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m)) 485 #endif 486 487 #if defined(I_STRING) || defined(__cplusplus) 488 # include <string.h> 489 #else 490 # include <strings.h> 491 #endif 492 493 /* This comes after <stdlib.h> so we don't try to change the standard 494 * library prototypes; we'll use our own in proto.h instead. */ 495 496 #ifdef MYMALLOC 497 # ifdef PERL_POLLUTE_MALLOC 498 # ifndef PERL_EXTMALLOC_DEF 499 # define Perl_malloc malloc 500 # define Perl_calloc calloc 501 # define Perl_realloc realloc 502 # define Perl_mfree free 503 # endif 504 # else 505 # define EMBEDMYMALLOC /* for compatibility */ 506 # endif 507 508 # define safemalloc Perl_malloc 509 # define safecalloc Perl_calloc 510 # define saferealloc Perl_realloc 511 # define safefree Perl_mfree 512 # define CHECK_MALLOC_TOO_LATE_FOR_(code) STMT_START { \ 513 if (!PL_tainting && MallocCfg_ptr[MallocCfg_cfg_env_read]) \ 514 code; \ 515 } STMT_END 516 # define CHECK_MALLOC_TOO_LATE_FOR(ch) \ 517 CHECK_MALLOC_TOO_LATE_FOR_(MALLOC_TOO_LATE_FOR(ch)) 518 # define panic_write2(s) write(2, s, strlen(s)) 519 # define CHECK_MALLOC_TAINT(newval) \ 520 CHECK_MALLOC_TOO_LATE_FOR_( \ 521 if (newval) { \ 522 panic_write2("panic: tainting with $ENV{PERL_MALLOC_OPT}\n");\ 523 exit(1); }) 524 # define MALLOC_CHECK_TAINT(argc,argv,env) STMT_START { \ 525 if (doing_taint(argc,argv,env)) { \ 526 MallocCfg_ptr[MallocCfg_skip_cfg_env] = 1; \ 527 }} STMT_END; 528 #else /* MYMALLOC */ 529 # define safemalloc safesysmalloc 530 # define safecalloc safesyscalloc 531 # define saferealloc safesysrealloc 532 # define safefree safesysfree 533 # define CHECK_MALLOC_TOO_LATE_FOR(ch) ((void)0) 534 # define CHECK_MALLOC_TAINT(newval) ((void)0) 535 # define MALLOC_CHECK_TAINT(argc,argv,env) 536 #endif /* MYMALLOC */ 537 538 #define TOO_LATE_FOR_(ch,s) Perl_croak(aTHX_ "Too late for \"-%c\" option%s", (char)(ch), s) 539 #define TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, "") 540 #define MALLOC_TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}") 541 #define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,NULL) 542 543 #if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr) 544 #define strchr index 545 #define strrchr rindex 546 #endif 547 548 #ifdef I_MEMORY 549 # include <memory.h> 550 #endif 551 552 #ifdef HAS_MEMCPY 553 # if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY) 554 # ifndef memcpy 555 extern char * memcpy (char*, char*, int); 556 # endif 557 # endif 558 #else 559 # ifndef memcpy 560 # ifdef HAS_BCOPY 561 # define memcpy(d,s,l) bcopy(s,d,l) 562 # else 563 # define memcpy(d,s,l) my_bcopy(s,d,l) 564 # endif 565 # endif 566 #endif /* HAS_MEMCPY */ 567 568 #ifdef HAS_MEMSET 569 # if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY) 570 # ifndef memset 571 extern char *memset (char*, int, int); 572 # endif 573 # endif 574 #else 575 # undef memset 576 # define memset(d,c,l) my_memset(d,c,l) 577 #endif /* HAS_MEMSET */ 578 579 #if !defined(HAS_MEMMOVE) && !defined(memmove) 580 # if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY) 581 # define memmove(d,s,l) bcopy(s,d,l) 582 # else 583 # if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY) 584 # define memmove(d,s,l) memcpy(d,s,l) 585 # else 586 # define memmove(d,s,l) my_bcopy(s,d,l) 587 # endif 588 # endif 589 #endif 590 591 #if defined(mips) && defined(ultrix) && !defined(__STDC__) 592 # undef HAS_MEMCMP 593 #endif 594 595 #if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP) 596 # if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY) 597 # ifndef memcmp 598 extern int memcmp (char*, char*, int); 599 # endif 600 # endif 601 # ifdef BUGGY_MSC 602 # pragma function(memcmp) 603 # endif 604 #else 605 # ifndef memcmp 606 # define memcmp my_memcmp 607 # endif 608 #endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */ 609 610 #ifndef memzero 611 # ifdef HAS_MEMSET 612 # define memzero(d,l) memset(d,0,l) 613 # else 614 # ifdef HAS_BZERO 615 # define memzero(d,l) bzero(d,l) 616 # else 617 # define memzero(d,l) my_bzero(d,l) 618 # endif 619 # endif 620 #endif 621 622 #ifndef PERL_MICRO 623 #ifndef memchr 624 # ifndef HAS_MEMCHR 625 # define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1) 626 # endif 627 #endif 628 #endif 629 630 #ifndef HAS_BCMP 631 # ifndef bcmp 632 # define bcmp(s1,s2,l) memcmp(s1,s2,l) 633 # endif 634 #endif /* !HAS_BCMP */ 635 636 #ifdef I_NETINET_IN 637 # include <netinet/in.h> 638 #endif 639 640 #ifdef I_ARPA_INET 641 # include <arpa/inet.h> 642 #endif 643 644 #if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO) 645 /* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND 646 * (the neo-BSD seem to do this). */ 647 # undef SF_APPEND 648 #endif 649 650 #ifdef I_SYS_STAT 651 # include <sys/stat.h> 652 #endif 653 654 /* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives 655 like UTekV) are broken, sometimes giving false positives. Undefine 656 them here and let the code below set them to proper values. 657 658 The ghs macro stands for GreenHills Software C-1.8.5 which 659 is the C compiler for sysV88 and the various derivatives. 660 This header file bug is corrected in gcc-2.5.8 and later versions. 661 --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94. */ 662 663 #if defined(uts) || (defined(m88k) && defined(ghs)) 664 # undef S_ISDIR 665 # undef S_ISCHR 666 # undef S_ISBLK 667 # undef S_ISREG 668 # undef S_ISFIFO 669 # undef S_ISLNK 670 #endif 671 672 #ifdef I_TIME 673 # include <time.h> 674 #endif 675 676 #ifdef I_SYS_TIME 677 # ifdef I_SYS_TIME_KERNEL 678 # define KERNEL 679 # endif 680 # include <sys/time.h> 681 # ifdef I_SYS_TIME_KERNEL 682 # undef KERNEL 683 # endif 684 #endif 685 686 #if defined(HAS_TIMES) && defined(I_SYS_TIMES) 687 # include <sys/times.h> 688 #endif 689 690 #if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR)) 691 # undef HAS_STRERROR 692 #endif 693 694 #include <errno.h> 695 696 #if defined(WIN32) && defined(PERL_IMPLICIT_SYS) 697 # define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */ 698 #endif 699 700 /* In Tru64 use the 4.4BSD struct msghdr, not the 4.3 one. 701 * This is important for using IPv6. 702 * For OSF/1 3.2, however, defining _SOCKADDR_LEN would be 703 * a bad idea since it breaks send() and recv(). */ 704 #if defined(__osf__) && defined(__alpha) && !defined(_SOCKADDR_LEN) && !defined(DEC_OSF1_3_X) 705 # define _SOCKADDR_LEN 706 #endif 707 708 #if defined(HAS_SOCKET) && !defined(VMS) && !defined(WIN32) /* VMS/WIN32 handle sockets via vmsish.h/win32.h */ 709 # include <sys/socket.h> 710 # if defined(USE_SOCKS) && defined(I_SOCKS) 711 # if !defined(INCLUDE_PROTOTYPES) 712 # define INCLUDE_PROTOTYPES /* for <socks.h> */ 713 # define PERL_SOCKS_NEED_PROTOTYPES 714 # endif 715 # ifdef USE_5005THREADS 716 # define PERL_USE_THREADS /* store our value */ 717 # undef USE_5005THREADS 718 # endif 719 # include <socks.h> 720 # ifdef USE_5005THREADS 721 # undef USE_5005THREADS /* socks.h does this on its own */ 722 # endif 723 # ifdef PERL_USE_THREADS 724 # define USE_5005THREADS /* restore our value */ 725 # undef PERL_USE_THREADS 726 # endif 727 # ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */ 728 # undef INCLUDE_PROTOTYPES 729 # undef PERL_SOCKS_NEED_PROTOTYPES 730 # endif 731 # endif 732 # ifdef I_NETDB 733 # ifdef NETWARE 734 # include<stdio.h> 735 # endif 736 # include <netdb.h> 737 # endif 738 # ifndef ENOTSOCK 739 # ifdef I_NET_ERRNO 740 # include <net/errno.h> 741 # endif 742 # endif 743 #endif 744 745 /* sockatmark() is so new (2001) that many places might have it hidden 746 * behind some -D_BLAH_BLAH_SOURCE guard. The __THROW magic is required 747 * e.g. in Gentoo, see http://bugs.gentoo.org/show_bug.cgi?id=12605 */ 748 #if defined(HAS_SOCKATMARK) && !defined(HAS_SOCKATMARK_PROTO) 749 # if defined(__THROW) && defined(__GLIBC__) 750 int sockatmark(int) __THROW; 751 # else 752 int sockatmark(int); 753 # endif 754 #endif 755 756 #ifdef SETERRNO 757 # undef SETERRNO /* SOCKS might have defined this */ 758 #endif 759 760 #ifdef VMS 761 # define SETERRNO(errcode,vmserrcode) \ 762 STMT_START { \ 763 set_errno(errcode); \ 764 set_vaxc_errno(vmserrcode); \ 765 } STMT_END 766 # define LIB_INVARG LIB$_INVARG 767 # define RMS_DIR RMS$_DIR 768 # define RMS_FAC RMS$_FAC 769 # define RMS_FEX RMS$_FEX 770 # define RMS_FNF RMS$_FNF 771 # define RMS_IFI RMS$_IFI 772 # define RMS_ISI RMS$_ISI 773 # define RMS_PRV RMS$_PRV 774 # define SS_ACCVIO SS$_ACCVIO 775 # define SS_DEVOFFLINE SS$_DEVOFFLINE 776 # define SS_IVCHAN SS$_IVCHAN 777 # define SS_NORMAL SS$_NORMAL 778 #else 779 # define SETERRNO(errcode,vmserrcode) (errno = (errcode)) 780 # define LIB_INVARG 0 781 # define RMS_DIR 0 782 # define RMS_FAC 0 783 # define RMS_FEX 0 784 # define RMS_FNF 0 785 # define RMS_IFI 0 786 # define RMS_ISI 0 787 # define RMS_PRV 0 788 # define SS_ACCVIO 0 789 # define SS_DEVOFFLINE 0 790 # define SS_IVCHAN 0 791 # define SS_NORMAL 0 792 #endif 793 794 #ifdef USE_5005THREADS 795 # define ERRSV (thr->errsv) 796 # define DEFSV THREADSV(0) 797 # define SAVE_DEFSV save_threadsv(0) 798 #else 799 # define ERRSV GvSV(PL_errgv) 800 # define DEFSV GvSV(PL_defgv) 801 # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) 802 #endif /* USE_5005THREADS */ 803 804 #define ERRHV GvHV(PL_errgv) /* XXX unused, here for compatibility */ 805 806 #ifndef errno 807 extern int errno; /* ANSI allows errno to be an lvalue expr. 808 * For example in multithreaded environments 809 * something like this might happen: 810 * extern int *_errno(void); 811 * #define errno (*_errno()) */ 812 #endif 813 814 #ifdef HAS_STRERROR 815 # ifdef VMS 816 char *strerror (int,...); 817 # else 818 #ifndef DONT_DECLARE_STD 819 char *strerror (int); 820 #endif 821 # endif 822 # ifndef Strerror 823 # define Strerror strerror 824 # endif 825 #else 826 # ifdef HAS_SYS_ERRLIST 827 extern int sys_nerr; 828 extern char *sys_errlist[]; 829 # ifndef Strerror 830 # define Strerror(e) \ 831 ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e]) 832 # endif 833 # endif 834 #endif 835 836 #ifdef I_SYS_IOCTL 837 # ifndef _IOCTL_ 838 # include <sys/ioctl.h> 839 # endif 840 #endif 841 842 #if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000) 843 # ifdef HAS_SOCKETPAIR 844 # undef HAS_SOCKETPAIR 845 # endif 846 # ifdef I_NDBM 847 # undef I_NDBM 848 # endif 849 #endif 850 851 #ifndef HAS_SOCKETPAIR 852 # ifdef HAS_SOCKET 853 # define socketpair Perl_my_socketpair 854 # endif 855 #endif 856 857 #if INTSIZE == 2 858 # define htoni htons 859 # define ntohi ntohs 860 #else 861 # define htoni htonl 862 # define ntohi ntohl 863 #endif 864 865 /* Configure already sets Direntry_t */ 866 #if defined(I_DIRENT) 867 # include <dirent.h> 868 /* NeXT needs dirent + sys/dir.h */ 869 # if defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__)) 870 # include <sys/dir.h> 871 # endif 872 #else 873 # ifdef I_SYS_NDIR 874 # include <sys/ndir.h> 875 # else 876 # ifdef I_SYS_DIR 877 # ifdef hp9000s500 878 # include <ndir.h> /* may be wrong in the future */ 879 # else 880 # include <sys/dir.h> 881 # endif 882 # endif 883 # endif 884 #endif 885 886 #ifdef PERL_MICRO 887 # ifndef DIR 888 # define DIR void 889 # endif 890 #endif 891 892 #ifdef FPUTS_BOTCH 893 /* work around botch in SunOS 4.0.1 and 4.0.2 */ 894 # ifndef fputs 895 # define fputs(sv,fp) fprintf(fp,"%s",sv) 896 # endif 897 #endif 898 899 /* 900 * The following gobbledygook brought to you on behalf of __STDC__. 901 * (I could just use #ifndef __STDC__, but this is more bulletproof 902 * in the face of half-implementations.) 903 */ 904 905 #if defined(I_SYSMODE) && !defined(PERL_MICRO) 906 #include <sys/mode.h> 907 #endif 908 909 #ifndef S_IFMT 910 # ifdef _S_IFMT 911 # define S_IFMT _S_IFMT 912 # else 913 # define S_IFMT 0170000 914 # endif 915 #endif 916 917 #ifndef S_ISDIR 918 # define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR) 919 #endif 920 921 #ifndef S_ISCHR 922 # define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR) 923 #endif 924 925 #ifndef S_ISBLK 926 # ifdef S_IFBLK 927 # define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK) 928 # else 929 # define S_ISBLK(m) (0) 930 # endif 931 #endif 932 933 #ifndef S_ISREG 934 # define S_ISREG(m) ((m & S_IFMT) == S_IFREG) 935 #endif 936 937 #ifndef S_ISFIFO 938 # ifdef S_IFIFO 939 # define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO) 940 # else 941 # define S_ISFIFO(m) (0) 942 # endif 943 #endif 944 945 #ifndef S_ISLNK 946 # ifdef _S_ISLNK 947 # define S_ISLNK(m) _S_ISLNK(m) 948 # else 949 # ifdef _S_IFLNK 950 # define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK) 951 # else 952 # ifdef S_IFLNK 953 # define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK) 954 # else 955 # define S_ISLNK(m) (0) 956 # endif 957 # endif 958 # endif 959 #endif 960 961 #ifndef S_ISSOCK 962 # ifdef _S_ISSOCK 963 # define S_ISSOCK(m) _S_ISSOCK(m) 964 # else 965 # ifdef _S_IFSOCK 966 # define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK) 967 # else 968 # ifdef S_IFSOCK 969 # define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK) 970 # else 971 # define S_ISSOCK(m) (0) 972 # endif 973 # endif 974 # endif 975 #endif 976 977 #ifndef S_IRUSR 978 # ifdef S_IREAD 979 # define S_IRUSR S_IREAD 980 # define S_IWUSR S_IWRITE 981 # define S_IXUSR S_IEXEC 982 # else 983 # define S_IRUSR 0400 984 # define S_IWUSR 0200 985 # define S_IXUSR 0100 986 # endif 987 #endif 988 989 #ifndef S_IRGRP 990 # ifdef S_IRUSR 991 # define S_IRGRP (S_IRUSR>>3) 992 # define S_IWGRP (S_IWUSR>>3) 993 # define S_IXGRP (S_IXUSR>>3) 994 # else 995 # define S_IRGRP 0040 996 # define S_IWGRP 0020 997 # define S_IXGRP 0010 998 # endif 999 #endif 1000 1001 #ifndef S_IROTH 1002 # ifdef S_IRUSR 1003 # define S_IROTH (S_IRUSR>>6) 1004 # define S_IWOTH (S_IWUSR>>6) 1005 # define S_IXOTH (S_IXUSR>>6) 1006 # else 1007 # define S_IROTH 0040 1008 # define S_IWOTH 0020 1009 # define S_IXOTH 0010 1010 # endif 1011 #endif 1012 1013 #ifndef S_ISUID 1014 # define S_ISUID 04000 1015 #endif 1016 1017 #ifndef S_ISGID 1018 # define S_ISGID 02000 1019 #endif 1020 1021 #ifndef S_IRWXU 1022 # define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR) 1023 #endif 1024 1025 #ifndef S_IRWXG 1026 # define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP) 1027 #endif 1028 1029 #ifndef S_IRWXO 1030 # define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH) 1031 #endif 1032 1033 /* BeOS 5.0 seems to define S_IREAD and S_IWRITE in <posix/fcntl.h> 1034 * which would get included through <sys/file.h >, but that is 3000 1035 * lines in the future. --jhi */ 1036 1037 #if !defined(S_IREAD) && !defined(__BEOS__) 1038 # define S_IREAD S_IRUSR 1039 #endif 1040 1041 #if !defined(S_IWRITE) && !defined(__BEOS__) 1042 # define S_IWRITE S_IWUSR 1043 #endif 1044 1045 #ifndef S_IEXEC 1046 # define S_IEXEC S_IXUSR 1047 #endif 1048 1049 #ifdef ff_next 1050 # undef ff_next 1051 #endif 1052 1053 #if defined(cray) || defined(gould) || defined(i860) || defined(pyr) 1054 # define SLOPPYDIVIDE 1055 #endif 1056 1057 #ifdef UV 1058 #undef UV 1059 #endif 1060 1061 #ifdef SPRINTF_E_BUG 1062 # define sprintf UTS_sprintf_wrap 1063 #endif 1064 1065 /* Configure gets this right but the UTS compiler gets it wrong. 1066 -- Hal Morris <hom00@utsglobal.com> */ 1067 #ifdef UTS 1068 # undef UVTYPE 1069 # define UVTYPE unsigned 1070 #endif 1071 1072 /* 1073 The IV type is supposed to be long enough to hold any integral 1074 value or a pointer. 1075 --Andy Dougherty August 1996 1076 */ 1077 1078 typedef IVTYPE IV; 1079 typedef UVTYPE UV; 1080 1081 #if defined(USE_64_BIT_INT) && defined(HAS_QUAD) 1082 # if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX) 1083 # define IV_MAX INT64_MAX 1084 # define IV_MIN INT64_MIN 1085 # define UV_MAX UINT64_MAX 1086 # ifndef UINT64_MIN 1087 # define UINT64_MIN 0 1088 # endif 1089 # define UV_MIN UINT64_MIN 1090 # else 1091 # define IV_MAX PERL_QUAD_MAX 1092 # define IV_MIN PERL_QUAD_MIN 1093 # define UV_MAX PERL_UQUAD_MAX 1094 # define UV_MIN PERL_UQUAD_MIN 1095 # endif 1096 # define IV_IS_QUAD 1097 # define UV_IS_QUAD 1098 #else 1099 # if defined(INT32_MAX) && IVSIZE == 4 1100 # define IV_MAX INT32_MAX 1101 # define IV_MIN INT32_MIN 1102 # ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */ 1103 # define UV_MAX UINT32_MAX 1104 # else 1105 # define UV_MAX 4294967295U 1106 # endif 1107 # ifndef UINT32_MIN 1108 # define UINT32_MIN 0 1109 # endif 1110 # define UV_MIN UINT32_MIN 1111 # else 1112 # define IV_MAX PERL_LONG_MAX 1113 # define IV_MIN PERL_LONG_MIN 1114 # define UV_MAX PERL_ULONG_MAX 1115 # define UV_MIN PERL_ULONG_MIN 1116 # endif 1117 # if IVSIZE == 8 1118 # define IV_IS_QUAD 1119 # define UV_IS_QUAD 1120 # ifndef HAS_QUAD 1121 # define HAS_QUAD 1122 # endif 1123 # else 1124 # undef IV_IS_QUAD 1125 # undef UV_IS_QUAD 1126 # undef HAS_QUAD 1127 # endif 1128 #endif 1129 1130 #if defined(uts) || defined(UTS) 1131 # undef UV_MAX 1132 # define UV_MAX (4294967295u) 1133 #endif 1134 1135 #define IV_DIG (BIT_DIGITS(IVSIZE * 8)) 1136 #define UV_DIG (BIT_DIGITS(UVSIZE * 8)) 1137 1138 #ifndef NO_PERL_PRESERVE_IVUV 1139 #define PERL_PRESERVE_IVUV /* We like our integers to stay integers. */ 1140 #endif 1141 1142 /* 1143 * The macros INT2PTR and NUM2PTR are (despite their names) 1144 * bi-directional: they will convert int/float to or from pointers. 1145 * However the conversion to int/float are named explicitly: 1146 * PTR2IV, PTR2UV, PTR2NV. 1147 * 1148 * For int conversions we do not need two casts if pointers are 1149 * the same size as IV and UV. Otherwise we need an explicit 1150 * cast (PTRV) to avoid compiler warnings. 1151 */ 1152 #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) 1153 # define PTRV UV 1154 # define INT2PTR(any,d) (any)(d) 1155 #else 1156 # if PTRSIZE == LONGSIZE 1157 # define PTRV unsigned long 1158 # else 1159 # define PTRV unsigned 1160 # endif 1161 # define INT2PTR(any,d) (any)(PTRV)(d) 1162 #endif 1163 #define NUM2PTR(any,d) (any)(PTRV)(d) 1164 #define PTR2IV(p) INT2PTR(IV,p) 1165 #define PTR2UV(p) INT2PTR(UV,p) 1166 #define PTR2NV(p) NUM2PTR(NV,p) 1167 #if PTRSIZE == LONGSIZE 1168 # define PTR2ul(p) (unsigned long)(p) 1169 #else 1170 # define PTR2ul(p) INT2PTR(unsigned long,p) 1171 #endif 1172 1173 #ifdef USE_LONG_DOUBLE 1174 # if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE 1175 # define LONG_DOUBLE_EQUALS_DOUBLE 1176 # endif 1177 # if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE)) 1178 # undef USE_LONG_DOUBLE /* Ouch! */ 1179 # endif 1180 #endif 1181 1182 #ifdef OVR_DBL_DIG 1183 /* Use an overridden DBL_DIG */ 1184 # ifdef DBL_DIG 1185 # undef DBL_DIG 1186 # endif 1187 # define DBL_DIG OVR_DBL_DIG 1188 #else 1189 /* The following is all to get DBL_DIG, in order to pick a nice 1190 default value for printing floating point numbers in Gconvert 1191 (see config.h). (It also has other uses, such as figuring out if 1192 a given precision of printing can be done with a double instead of 1193 a long double - Allen). 1194 */ 1195 #ifdef I_LIMITS 1196 #include <limits.h> 1197 #endif 1198 #ifdef I_FLOAT 1199 #include <float.h> 1200 #endif 1201 #ifndef HAS_DBL_DIG 1202 #define DBL_DIG 15 /* A guess that works lots of places */ 1203 #endif 1204 #endif 1205 #ifdef I_FLOAT 1206 #include <float.h> 1207 #endif 1208 #ifndef HAS_DBL_DIG 1209 #define DBL_DIG 15 /* A guess that works lots of places */ 1210 #endif 1211 1212 #ifdef OVR_LDBL_DIG 1213 /* Use an overridden LDBL_DIG */ 1214 # ifdef LDBL_DIG 1215 # undef LDBL_DIG 1216 # endif 1217 # define LDBL_DIG OVR_LDBL_DIG 1218 #else 1219 /* The following is all to get LDBL_DIG, in order to pick a nice 1220 default value for printing floating point numbers in Gconvert. 1221 (see config.h) 1222 */ 1223 # ifdef I_LIMITS 1224 # include <limits.h> 1225 # endif 1226 # ifdef I_FLOAT 1227 # include <float.h> 1228 # endif 1229 # ifndef HAS_LDBL_DIG 1230 # if LONG_DOUBLESIZE == 10 1231 # define LDBL_DIG 18 /* assume IEEE */ 1232 # else 1233 # if LONG_DOUBLESIZE == 12 1234 # define LDBL_DIG 18 /* gcc? */ 1235 # else 1236 # if LONG_DOUBLESIZE == 16 1237 # define LDBL_DIG 33 /* assume IEEE */ 1238 # else 1239 # if LONG_DOUBLESIZE == DOUBLESIZE 1240 # define LDBL_DIG DBL_DIG /* bummer */ 1241 # endif 1242 # endif 1243 # endif 1244 # endif 1245 # endif 1246 #endif 1247 1248 /* 1249 * This is for making sure we have a good DBL_MAX value, if possible, 1250 * either for usage as NV_MAX or for usage in figuring out if we can 1251 * fit a given long double into a double, if bug-fixing makes it 1252 * necessary to do so. - Allen <allens@cpan.org> 1253 */ 1254 1255 #ifdef I_LIMITS 1256 # include <limits.h> 1257 #endif 1258 1259 #ifdef I_VALUES 1260 # if !(defined(DBL_MIN) && defined(DBL_MAX) && defined(I_LIMITS)) 1261 # include <values.h> 1262 # if defined(MAXDOUBLE) && !defined(DBL_MAX) 1263 # define DBL_MAX MAXDOUBLE 1264 # endif 1265 # if defined(MINDOUBLE) && !defined(DBL_MIN) 1266 # define DBL_MIN MINDOUBLE 1267 # endif 1268 # endif 1269 #endif /* defined(I_VALUES) */ 1270 1271 typedef NVTYPE NV; 1272 1273 #ifdef I_IEEEFP 1274 # include <ieeefp.h> 1275 #endif 1276 1277 #ifdef USE_LONG_DOUBLE 1278 # ifdef I_SUNMATH 1279 # include <sunmath.h> 1280 # endif 1281 # define NV_DIG LDBL_DIG 1282 # ifdef LDBL_MANT_DIG 1283 # define NV_MANT_DIG LDBL_MANT_DIG 1284 # endif 1285 # ifdef LDBL_MIN 1286 # define NV_MIN LDBL_MIN 1287 # endif 1288 # ifdef LDBL_MAX 1289 # define NV_MAX LDBL_MAX 1290 # endif 1291 # ifdef LDBL_MIN_10_EXP 1292 # define NV_MIN_10_EXP LDBL_MIN_10_EXP 1293 # endif 1294 # ifdef LDBL_MAX_10_EXP 1295 # define NV_MAX_10_EXP LDBL_MAX_10_EXP 1296 # endif 1297 # ifdef LDBL_EPSILON 1298 # define NV_EPSILON LDBL_EPSILON 1299 # endif 1300 # ifdef LDBL_MAX 1301 # define NV_MAX LDBL_MAX 1302 /* Having LDBL_MAX doesn't necessarily mean that we have LDBL_MIN... -Allen */ 1303 # else 1304 # ifdef HUGE_VALL 1305 # define NV_MAX HUGE_VALL 1306 # else 1307 # ifdef HUGE_VAL 1308 # define NV_MAX ((NV)HUGE_VAL) 1309 # endif 1310 # endif 1311 # endif 1312 # ifdef HAS_SQRTL 1313 # define Perl_cos cosl 1314 # define Perl_sin sinl 1315 # define Perl_sqrt sqrtl 1316 # define Perl_exp expl 1317 # define Perl_log logl 1318 # define Perl_atan2 atan2l 1319 # define Perl_pow powl 1320 # define Perl_floor floorl 1321 # define Perl_ceil ceill 1322 # define Perl_fmod fmodl 1323 # endif 1324 /* e.g. libsunmath doesn't have modfl and frexpl as of mid-March 2000 */ 1325 # ifdef HAS_MODFL 1326 # define Perl_modf(x,y) modfl(x,y) 1327 /* eg glibc 2.2 series seems to provide modfl on ppc and arm, but has no 1328 prototype in <math.h> */ 1329 # ifndef HAS_MODFL_PROTO 1330 long double modfl(long double, long double *); 1331 # endif 1332 # else 1333 # if defined(HAS_AINTL) && defined(HAS_COPYSIGNL) 1334 extern long double Perl_my_modfl(long double x, long double *ip); 1335 # define Perl_modf(x,y) Perl_my_modfl(x,y) 1336 # endif 1337 # endif 1338 # ifdef HAS_FREXPL 1339 # define Perl_frexp(x,y) frexpl(x,y) 1340 # else 1341 # if defined(HAS_ILOGBL) && defined(HAS_SCALBNL) 1342 extern long double Perl_my_frexpl(long double x, int *e); 1343 # define Perl_frexp(x,y) Perl_my_frexpl(x,y) 1344 # endif 1345 # endif 1346 # ifndef Perl_isnan 1347 # ifdef HAS_ISNANL 1348 # define Perl_isnan(x) isnanl(x) 1349 # endif 1350 # endif 1351 # ifndef Perl_isinf 1352 # ifdef HAS_FINITEL 1353 # define Perl_isinf(x) !(finitel(x)||Perl_isnan(x)) 1354 # endif 1355 # endif 1356 #else 1357 # define NV_DIG DBL_DIG 1358 # ifdef DBL_MANT_DIG 1359 # define NV_MANT_DIG DBL_MANT_DIG 1360 # endif 1361 # ifdef DBL_MIN 1362 # define NV_MIN DBL_MIN 1363 # endif 1364 # ifdef DBL_MAX 1365 # define NV_MAX DBL_MAX 1366 # endif 1367 # ifdef DBL_MIN_10_EXP 1368 # define NV_MIN_10_EXP DBL_MIN_10_EXP 1369 # endif 1370 # ifdef DBL_MAX_10_EXP 1371 # define NV_MAX_10_EXP DBL_MAX_10_EXP 1372 # endif 1373 # ifdef DBL_EPSILON 1374 # define NV_EPSILON DBL_EPSILON 1375 # endif 1376 # ifdef DBL_MAX /* XXX Does DBL_MAX imply having DBL_MIN? */ 1377 # define NV_MAX DBL_MAX 1378 # define NV_MIN DBL_MIN 1379 # else 1380 # ifdef HUGE_VAL 1381 # define NV_MAX HUGE_VAL 1382 # endif 1383 # endif 1384 # define Perl_cos cos 1385 # define Perl_sin sin 1386 # define Perl_sqrt sqrt 1387 # define Perl_exp exp 1388 # define Perl_log log 1389 # define Perl_atan2 atan2 1390 # define Perl_pow pow 1391 # define Perl_floor floor 1392 # define Perl_ceil ceil 1393 # define Perl_fmod fmod 1394 # define Perl_modf(x,y) modf(x,y) 1395 # define Perl_frexp(x,y) frexp(x,y) 1396 #endif 1397 1398 /* rumor has it that Win32 has _fpclass() */ 1399 1400 /* SGI has fpclassl... but not with the same result values, 1401 * and it's via a typedef (not via #define), so will need to redo Configure 1402 * to use. Not worth the trouble, IMO, at least until the below is used 1403 * more places. Also has fp_class_l, BTW, via fp_class.h. Feel free to check 1404 * with me for the SGI manpages, SGI testing, etcetera, if you want to 1405 * try getting this to work with IRIX. - Allen <allens@cpan.org> */ 1406 1407 #if !defined(Perl_fp_class) && (defined(HAS_FPCLASS)||defined(HAS_FPCLASSL)) 1408 # ifdef I_IEEFP 1409 # include <ieeefp.h> 1410 # endif 1411 # ifdef I_FP 1412 # include <fp.h> 1413 # endif 1414 # if defined(USE_LONG_DOUBLE) && defined(HAS_FPCLASSL) 1415 # define Perl_fp_class() fpclassl(x) 1416 # else 1417 # define Perl_fp_class() fpclass(x) 1418 # endif 1419 # define Perl_fp_class_snan(x) (Perl_fp_class(x)==FP_CLASS_SNAN) 1420 # define Perl_fp_class_qnan(x) (Perl_fp_class(x)==FP_CLASS_QNAN) 1421 # define Perl_fp_class_nan(x) (Perl_fp_class(x)==FP_CLASS_SNAN||Perl_fp_class(x)==FP_CLASS_QNAN) 1422 # define Perl_fp_class_ninf(x) (Perl_fp_class(x)==FP_CLASS_NINF) 1423 # define Perl_fp_class_pinf(x) (Perl_fp_class(x)==FP_CLASS_PINF) 1424 # define Perl_fp_class_inf(x) (Perl_fp_class(x)==FP_CLASS_NINF||Perl_fp_class(x)==FP_CLASS_PINF) 1425 # define Perl_fp_class_nnorm(x) (Perl_fp_class(x)==FP_CLASS_NNORM) 1426 # define Perl_fp_class_pnorm(x) (Perl_fp_class(x)==FP_CLASS_PNORM) 1427 # define Perl_fp_class_norm(x) (Perl_fp_class(x)==FP_CLASS_NNORM||Perl_fp_class(x)==FP_CLASS_PNORM) 1428 # define Perl_fp_class_ndenorm(x) (Perl_fp_class(x)==FP_CLASS_NDENORM) 1429 # define Perl_fp_class_pdenorm(x) (Perl_fp_class(x)==FP_CLASS_PDENORM) 1430 # define Perl_fp_class_denorm(x) (Perl_fp_class(x)==FP_CLASS_NDENORM||Perl_fp_class(x)==FP_CLASS_PDENORM) 1431 # define Perl_fp_class_nzero(x) (Perl_fp_class(x)==FP_CLASS_NZERO) 1432 # define Perl_fp_class_pzero(x) (Perl_fp_class(x)==FP_CLASS_PZERO) 1433 # define Perl_fp_class_zero(x) (Perl_fp_class(x)==FP_CLASS_NZERO||Perl_fp_class(x)==FP_CLASS_PZERO) 1434 #endif 1435 1436 #if !defined(Perl_fp_class) && defined(HAS_FP_CLASS) && !defined(PERL_MICRO) 1437 # include <math.h> 1438 # if !defined(FP_SNAN) && defined(I_FP_CLASS) 1439 # include <fp_class.h> 1440 # endif 1441 # define Perl_fp_class(x) fp_class(x) 1442 # define Perl_fp_class_snan(x) (fp_class(x)==FP_SNAN) 1443 # define Perl_fp_class_qnan(x) (fp_class(x)==FP_QNAN) 1444 # define Perl_fp_class_nan(x) (fp_class(x)==FP_SNAN||fp_class(x)==FP_QNAN) 1445 # define Perl_fp_class_ninf(x) (fp_class(x)==FP_NEG_INF) 1446 # define Perl_fp_class_pinf(x) (fp_class(x)==FP_POS_INF) 1447 # define Perl_fp_class_inf(x) (fp_class(x)==FP_NEG_INF||fp_class(x)==FP_POS_INF) 1448 # define Perl_fp_class_nnorm(x) (fp_class(x)==FP_NEG_NORM) 1449 # define Perl_fp_class_pnorm(x) (fp_class(x)==FP_POS_NORM) 1450 # define Perl_fp_class_norm(x) (fp_class(x)==FP_NEG_NORM||fp_class(x)==FP_POS_NORM) 1451 # define Perl_fp_class_ndenorm(x) (fp_class(x)==FP_NEG_DENORM) 1452 # define Perl_fp_class_pdenorm(x) (fp_class(x)==FP_POS_DENORM) 1453 # define Perl_fp_class_denorm(x) (fp_class(x)==FP_NEG_DENORM||fp_class(x)==FP_POS_DENORM) 1454 # define Perl_fp_class_nzero(x) (fp_class(x)==FP_NEG_ZERO) 1455 # define Perl_fp_class_pzero(x) (fp_class(x)==FP_POS_ZERO) 1456 # define Perl_fp_class_zero(x) (fp_class(x)==FP_NEG_ZERO||fp_class(x)==FP_POS_ZERO) 1457 #endif 1458 1459 #if !defined(Perl_fp_class) && defined(HAS_FPCLASSIFY) 1460 # include <math.h> 1461 # define Perl_fp_class(x) fpclassify(x) 1462 # define Perl_fp_class_nan(x) (fp_classify(x)==FP_SNAN||fp_classify(x)==FP_QNAN) 1463 # define Perl_fp_class_inf(x) (fp_classify(x)==FP_INFINITE) 1464 # define Perl_fp_class_norm(x) (fp_classify(x)==FP_NORMAL) 1465 # define Perl_fp_class_denorm(x) (fp_classify(x)==FP_SUBNORMAL) 1466 # define Perl_fp_class_zero(x) (fp_classify(x)==FP_ZERO) 1467 #endif 1468 1469 #if !defined(Perl_fp_class) && defined(HAS_CLASS) 1470 # include <math.h> 1471 # ifndef _cplusplus 1472 # define Perl_fp_class(x) class(x) 1473 # else 1474 # define Perl_fp_class(x) _class(x) 1475 # endif 1476 # define Perl_fp_class_snan(x) (Perl_fp_class(x)==FP_NANS) 1477 # define Perl_fp_class_qnan(x) (Perl_fp_class(x)==FP_NANQ) 1478 # define Perl_fp_class_nan(x) (Perl_fp_class(x)==FP_SNAN||Perl_fp_class(x)==FP_QNAN) 1479 # define Perl_fp_class_ninf(x) (Perl_fp_class(x)==FP_MINUS_INF) 1480 # define Perl_fp_class_pinf(x) (Perl_fp_class(x)==FP_PLUS_INF) 1481 # define Perl_fp_class_inf(x) (Perl_fp_class(x)==FP_MINUS_INF||Perl_fp_class(x)==FP_PLUS_INF) 1482 # define Perl_fp_class_nnorm(x) (Perl_fp_class(x)==FP_MINUS_NORM) 1483 # define Perl_fp_class_pnorm(x) (Perl_fp_class(x)==FP_PLUS_NORM) 1484 # define Perl_fp_class_norm(x) (Perl_fp_class(x)==FP_MINUS_NORM||Perl_fp_class(x)==FP_PLUS_NORM) 1485 # define Perl_fp_class_ndenorm(x) (Perl_fp_class(x)==FP_MINUS_DENORM) 1486 # define Perl_fp_class_pdenorm(x) (Perl_fp_class(x)==FP_PLUS_DENORM) 1487 # define Perl_fp_class_denorm(x) (Perl_fp_class(x)==FP_MINUS_DENORM||Perl_fp_class(x)==FP_PLUS_DENORM) 1488 # define Perl_fp_class_nzero(x) (Perl_fp_class(x)==FP_MINUS_ZERO) 1489 # define Perl_fp_class_pzero(x) (Perl_fp_class(x)==FP_PLUS_ZERO) 1490 # define Perl_fp_class_zero(x) (Perl_fp_class(x)==FP_MINUS_ZERO||Perl_fp_class(x)==FP_PLUS_ZERO) 1491 #endif 1492 1493 /* rumor has it that Win32 has _isnan() */ 1494 1495 #ifndef Perl_isnan 1496 # ifdef HAS_ISNAN 1497 # define Perl_isnan(x) isnan((NV)x) 1498 # else 1499 # ifdef Perl_fp_class_nan 1500 # define Perl_isnan(x) Perl_fp_class_nan(x) 1501 # else 1502 # ifdef HAS_UNORDERED 1503 # define Perl_isnan(x) unordered((x), 0.0) 1504 # else 1505 # define Perl_isnan(x) ((x)!=(x)) 1506 # endif 1507 # endif 1508 # endif 1509 #endif 1510 1511 #ifdef UNDER_CE 1512 int isnan(double d); 1513 #endif 1514 1515 #ifndef Perl_isinf 1516 # ifdef HAS_ISINF 1517 # define Perl_isinf(x) isinf((NV)x) 1518 # else 1519 # ifdef Perl_fp_class_inf 1520 # define Perl_isinf(x) Perl_fp_class_inf(x) 1521 # else 1522 # define Perl_isinf(x) ((x)==NV_INF) 1523 # endif 1524 # endif 1525 #endif 1526 1527 #ifndef Perl_isfinite 1528 # ifdef HAS_FINITE 1529 # define Perl_isfinite(x) finite((NV)x) 1530 # else 1531 # ifdef HAS_ISFINITE 1532 # define Perl_isfinite(x) isfinite(x) 1533 # else 1534 # ifdef Perl_fp_class_finite 1535 # define Perl_isfinite(x) Perl_fp_class_finite(x) 1536 # else 1537 # define Perl_isfinite(x) !(Perl_is_inf(x)||Perl_is_nan(x)) 1538 # endif 1539 # endif 1540 # endif 1541 #endif 1542 1543 /* The default is to use Perl's own atof() implementation (in numeric.c). 1544 * Usually that is the one to use but for some platforms (e.g. UNICOS) 1545 * it is however best to use the native implementation of atof. 1546 * You can experiment with using your native one by -DUSE_PERL_ATOF=0. 1547 * Some good tests to try out with either setting are t/base/num.t, 1548 * t/op/numconvert.t, and t/op/pack.t. Note that if using long doubles 1549 * you may need to be using a different function than atof! */ 1550 1551 #ifndef USE_PERL_ATOF 1552 # ifndef _UNICOS 1553 # define USE_PERL_ATOF 1554 # endif 1555 #else 1556 # if USE_PERL_ATOF == 0 1557 # undef USE_PERL_ATOF 1558 # endif 1559 #endif 1560 1561 #ifdef USE_PERL_ATOF 1562 # define Perl_atof(s) Perl_my_atof(s) 1563 # define Perl_atof2(s, n) Perl_my_atof2(aTHX_ (s), &(n)) 1564 #else 1565 # define Perl_atof(s) (NV)atof(s) 1566 # define Perl_atof2(s, n) ((n) = atof(s)) 1567 #endif 1568 1569 /* Previously these definitions used hardcoded figures. 1570 * It is hoped these formula are more portable, although 1571 * no data one way or another is presently known to me. 1572 * The "PERL_" names are used because these calculated constants 1573 * do not meet the ANSI requirements for LONG_MAX, etc., which 1574 * need to be constants acceptable to #if - kja 1575 * define PERL_LONG_MAX 2147483647L 1576 * define PERL_LONG_MIN (-LONG_MAX - 1) 1577 * define PERL ULONG_MAX 4294967295L 1578 */ 1579 1580 #ifdef I_LIMITS /* Needed for cast_xxx() functions below. */ 1581 # include <limits.h> 1582 #endif 1583 /* Included values.h above if necessary; still including limits.h down here, 1584 * despite doing above, because math.h might have overriden... XXX - Allen */ 1585 1586 /* 1587 * Try to figure out max and min values for the integral types. THE CORRECT 1588 * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE. The 1589 * following hacks are used if neither limits.h or values.h provide them: 1590 * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0 1591 * for types < int: (unsigned TYPE)~(unsigned)0 1592 * The argument to ~ must be unsigned so that later signed->unsigned 1593 * conversion can't modify the value's bit pattern (e.g. -0 -> +0), 1594 * and it must not be smaller than int because ~ does integral promotion. 1595 * <type>_MAX: (<type>) (U<type>_MAX >> 1) 1596 * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>. 1597 * The latter is a hack which happens to work on some machines but 1598 * does *not* catch any random system, or things like integer types 1599 * with NaN if that is possible. 1600 * 1601 * All of the types are explicitly cast to prevent accidental loss of 1602 * numeric range, and in the hope that they will be less likely to confuse 1603 * over-eager optimizers. 1604 * 1605 */ 1606 1607 #define PERL_UCHAR_MIN ((unsigned char)0) 1608 1609 #ifdef UCHAR_MAX 1610 # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) 1611 #else 1612 # ifdef MAXUCHAR 1613 # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) 1614 # else 1615 # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) 1616 # endif 1617 #endif 1618 1619 /* 1620 * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be 1621 * ambiguous. It may be equivalent to (signed char) or (unsigned char) 1622 * depending on local options. Until Configure detects this (or at least 1623 * detects whether the "signed" keyword is available) the CHAR ranges 1624 * will not be included. UCHAR functions normally. 1625 * - kja 1626 */ 1627 1628 #define PERL_USHORT_MIN ((unsigned short)0) 1629 1630 #ifdef USHORT_MAX 1631 # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) 1632 #else 1633 # ifdef MAXUSHORT 1634 # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) 1635 # else 1636 # ifdef USHRT_MAX 1637 # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) 1638 # else 1639 # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) 1640 # endif 1641 # endif 1642 #endif 1643 1644 #ifdef SHORT_MAX 1645 # define PERL_SHORT_MAX ((short)SHORT_MAX) 1646 #else 1647 # ifdef MAXSHORT /* Often used in <values.h> */ 1648 # define PERL_SHORT_MAX ((short)MAXSHORT) 1649 # else 1650 # ifdef SHRT_MAX 1651 # define PERL_SHORT_MAX ((short)SHRT_MAX) 1652 # else 1653 # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) 1654 # endif 1655 # endif 1656 #endif 1657 1658 #ifdef SHORT_MIN 1659 # define PERL_SHORT_MIN ((short)SHORT_MIN) 1660 #else 1661 # ifdef MINSHORT 1662 # define PERL_SHORT_MIN ((short)MINSHORT) 1663 # else 1664 # ifdef SHRT_MIN 1665 # define PERL_SHORT_MIN ((short)SHRT_MIN) 1666 # else 1667 # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) 1668 # endif 1669 # endif 1670 #endif 1671 1672 #ifdef UINT_MAX 1673 # define PERL_UINT_MAX ((unsigned int)UINT_MAX) 1674 #else 1675 # ifdef MAXUINT 1676 # define PERL_UINT_MAX ((unsigned int)MAXUINT) 1677 # else 1678 # define PERL_UINT_MAX (~(unsigned int)0) 1679 # endif 1680 #endif 1681 1682 #define PERL_UINT_MIN ((unsigned int)0) 1683 1684 #ifdef INT_MAX 1685 # define PERL_INT_MAX ((int)INT_MAX) 1686 #else 1687 # ifdef MAXINT /* Often used in <values.h> */ 1688 # define PERL_INT_MAX ((int)MAXINT) 1689 # else 1690 # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) 1691 # endif 1692 #endif 1693 1694 #ifdef INT_MIN 1695 # define PERL_INT_MIN ((int)INT_MIN) 1696 #else 1697 # ifdef MININT 1698 # define PERL_INT_MIN ((int)MININT) 1699 # else 1700 # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) 1701 # endif 1702 #endif 1703 1704 #ifdef ULONG_MAX 1705 # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) 1706 #else 1707 # ifdef MAXULONG 1708 # define PERL_ULONG_MAX ((unsigned long)MAXULONG) 1709 # else 1710 # define PERL_ULONG_MAX (~(unsigned long)0) 1711 # endif 1712 #endif 1713 1714 #define PERL_ULONG_MIN ((unsigned long)0L) 1715 1716 #ifdef LONG_MAX 1717 # define PERL_LONG_MAX ((long)LONG_MAX) 1718 #else 1719 # ifdef MAXLONG /* Often used in <values.h> */ 1720 # define PERL_LONG_MAX ((long)MAXLONG) 1721 # else 1722 # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) 1723 # endif 1724 #endif 1725 1726 #ifdef LONG_MIN 1727 # define PERL_LONG_MIN ((long)LONG_MIN) 1728 #else 1729 # ifdef MINLONG 1730 # define PERL_LONG_MIN ((long)MINLONG) 1731 # else 1732 # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) 1733 # endif 1734 #endif 1735 1736 #ifdef UV_IS_QUAD 1737 1738 # define PERL_UQUAD_MAX (~(UV)0) 1739 # define PERL_UQUAD_MIN ((UV)0) 1740 # define PERL_QUAD_MAX ((IV) (PERL_UQUAD_MAX >> 1)) 1741 # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) 1742 1743 #endif 1744 1745 #ifdef MYMALLOC 1746 # include "malloc_ctl.h" 1747 #endif 1748 1749 struct RExC_state_t; 1750 1751 typedef MEM_SIZE STRLEN; 1752 1753 typedef struct op OP; 1754 typedef struct cop COP; 1755 typedef struct unop UNOP; 1756 typedef struct binop BINOP; 1757 typedef struct listop LISTOP; 1758 typedef struct logop LOGOP; 1759 typedef struct pmop PMOP; 1760 typedef struct svop SVOP; 1761 typedef struct padop PADOP; 1762 typedef struct pvop PVOP; 1763 typedef struct loop LOOP; 1764 1765 typedef struct interpreter PerlInterpreter; 1766 1767 /* Amdahl's <ksync.h> has struct sv */ 1768 /* SGI's <sys/sema.h> has struct sv */ 1769 #if defined(UTS) || defined(__sgi) 1770 # define STRUCT_SV perl_sv 1771 #else 1772 # define STRUCT_SV sv 1773 #endif 1774 typedef struct STRUCT_SV SV; 1775 typedef struct av AV; 1776 typedef struct hv HV; 1777 typedef struct cv CV; 1778 typedef struct regexp REGEXP; 1779 typedef struct gp GP; 1780 typedef struct gv GV; 1781 typedef struct io IO; 1782 typedef struct context PERL_CONTEXT; 1783 typedef struct block BLOCK; 1784 1785 typedef struct magic MAGIC; 1786 typedef struct xrv XRV; 1787 typedef struct xpv XPV; 1788 typedef struct xpviv XPVIV; 1789 typedef struct xpvuv XPVUV; 1790 typedef struct xpvnv XPVNV; 1791 typedef struct xpvmg XPVMG; 1792 typedef struct xpvlv XPVLV; 1793 typedef struct xpvav XPVAV; 1794 typedef struct xpvhv XPVHV; 1795 typedef struct xpvgv XPVGV; 1796 typedef struct xpvcv XPVCV; 1797 typedef struct xpvbm XPVBM; 1798 typedef struct xpvfm XPVFM; 1799 typedef struct xpvio XPVIO; 1800 typedef struct mgvtbl MGVTBL; 1801 typedef union any ANY; 1802 typedef struct ptr_tbl_ent PTR_TBL_ENT_t; 1803 typedef struct ptr_tbl PTR_TBL_t; 1804 typedef struct clone_params CLONE_PARAMS; 1805 1806 #include "handy.h" 1807 1808 #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO) 1809 # if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO) 1810 # define USE_64_BIT_RAWIO /* implicit */ 1811 # endif 1812 #endif 1813 1814 /* Notice the use of HAS_FSEEKO: now we are obligated to always use 1815 * fseeko/ftello if possible. Don't go #defining ftell to ftello yourself, 1816 * however, because operating systems like to do that themself. */ 1817 #ifndef FSEEKSIZE 1818 # ifdef HAS_FSEEKO 1819 # define FSEEKSIZE LSEEKSIZE 1820 # else 1821 # define FSEEKSIZE LONGSIZE 1822 # endif 1823 #endif 1824 1825 #if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO) 1826 # if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO) 1827 # define USE_64_BIT_STDIO /* implicit */ 1828 # endif 1829 #endif 1830 1831 #ifdef USE_64_BIT_RAWIO 1832 # ifdef HAS_OFF64_T 1833 # undef Off_t 1834 # define Off_t off64_t 1835 # undef LSEEKSIZE 1836 # define LSEEKSIZE 8 1837 # endif 1838 /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that 1839 * will trigger defines like the ones below. Some 64-bit environments, 1840 * however, do not. Therefore we have to explicitly mix and match. */ 1841 # if defined(USE_OPEN64) 1842 # define open open64 1843 # endif 1844 # if defined(USE_LSEEK64) 1845 # define lseek lseek64 1846 # else 1847 # if defined(USE_LLSEEK) 1848 # define lseek llseek 1849 # endif 1850 # endif 1851 # if defined(USE_STAT64) 1852 # define stat stat64 1853 # endif 1854 # if defined(USE_FSTAT64) 1855 # define fstat fstat64 1856 # endif 1857 # if defined(USE_LSTAT64) 1858 # define lstat lstat64 1859 # endif 1860 # if defined(USE_FLOCK64) 1861 # define flock flock64 1862 # endif 1863 # if defined(USE_LOCKF64) 1864 # define lockf lockf64 1865 # endif 1866 # if defined(USE_FCNTL64) 1867 # define fcntl fcntl64 1868 # endif 1869 # if defined(USE_TRUNCATE64) 1870 # define truncate truncate64 1871 # endif 1872 # if defined(USE_FTRUNCATE64) 1873 # define ftruncate ftruncate64 1874 # endif 1875 #endif 1876 1877 #ifdef USE_64_BIT_STDIO 1878 # ifdef HAS_FPOS64_T 1879 # undef Fpos_t 1880 # define Fpos_t fpos64_t 1881 # endif 1882 /* Most 64-bit environments have defines like _LARGEFILE_SOURCE that 1883 * will trigger defines like the ones below. Some 64-bit environments, 1884 * however, do not. */ 1885 # if defined(USE_FOPEN64) 1886 # define fopen fopen64 1887 # endif 1888 # if defined(USE_FSEEK64) 1889 # define fseek fseek64 /* don't do fseeko here, see perlio.c */ 1890 # endif 1891 # if defined(USE_FTELL64) 1892 # define ftell ftell64 /* don't do ftello here, see perlio.c */ 1893 # endif 1894 # if defined(USE_FSETPOS64) 1895 # define fsetpos fsetpos64 1896 # endif 1897 # if defined(USE_FGETPOS64) 1898 # define fgetpos fgetpos64 1899 # endif 1900 # if defined(USE_TMPFILE64) 1901 # define tmpfile tmpfile64 1902 # endif 1903 # if defined(USE_FREOPEN64) 1904 # define freopen freopen64 1905 # endif 1906 #endif 1907 1908 #if defined(OS2) || defined(MACOS_TRADITIONAL) 1909 # include "iperlsys.h" 1910 #endif 1911 1912 #if defined(__OPEN_VM) 1913 # include "vmesa/vmesaish.h" 1914 # define ISHISH "vmesa" 1915 #endif 1916 1917 #ifdef DOSISH 1918 # if defined(OS2) 1919 # include "os2ish.h" 1920 # else 1921 # include "dosish.h" 1922 # endif 1923 # define ISHISH "dos" 1924 #endif 1925 1926 #if defined(VMS) 1927 # include "vmsish.h" 1928 # include "embed.h" 1929 # define ISHISH "vms" 1930 #endif 1931 1932 #if defined(PLAN9) 1933 # include "./plan9/plan9ish.h" 1934 # define ISHISH "plan9" 1935 #endif 1936 1937 #if defined(MPE) 1938 # include "mpeix/mpeixish.h" 1939 # define ISHISH "mpeix" 1940 #endif 1941 1942 #if defined(__VOS__) 1943 # ifdef __GNUC__ 1944 # include "./vos/vosish.h" 1945 # else 1946 # include "vos/vosish.h" 1947 # endif 1948 # define ISHISH "vos" 1949 #endif 1950 1951 #if defined(EPOC) 1952 # include "epocish.h" 1953 # define ISHISH "epoc" 1954 #endif 1955 1956 #if defined(MACOS_TRADITIONAL) 1957 # include "macos/macish.h" 1958 # ifndef NO_ENVIRON_ARRAY 1959 # define NO_ENVIRON_ARRAY 1960 # endif 1961 # define ISHISH "macos classic" 1962 #endif 1963 1964 #if defined(__BEOS__) 1965 # include "beos/beosish.h" 1966 # define ISHISH "beos" 1967 #endif 1968 1969 #ifndef ISHISH 1970 # include "unixish.h" 1971 # define ISHISH "unix" 1972 #endif 1973 1974 #ifndef NO_ENVIRON_ARRAY 1975 # define USE_ENVIRON_ARRAY 1976 #endif 1977 1978 /* 1979 * initialise to avoid floating-point exceptions from overflow, etc 1980 */ 1981 #ifndef PERL_FPU_INIT 1982 # ifdef HAS_FPSETMASK 1983 # if HAS_FLOATINGPOINT_H 1984 # include <floatingpoint.h> 1985 # endif 1986 # define PERL_FPU_INIT fpsetmask(0); 1987 # else 1988 # if defined(SIGFPE) && defined(SIG_IGN) && !defined(PERL_MICRO) 1989 # define PERL_FPU_INIT PL_sigfpe_saved = signal(SIGFPE, SIG_IGN); 1990 # define PERL_FPU_PRE_EXEC { Sigsave_t xfpe; rsignal_save(SIGFPE, PL_sigfpe_saved, &xfpe); 1991 # define PERL_FPU_POST_EXEC rsignal_restore(SIGFPE, &xfpe); } 1992 # else 1993 # define PERL_FPU_INIT 1994 1995 # endif 1996 # endif 1997 #endif 1998 #ifndef PERL_FPU_PRE_EXEC 1999 # define PERL_FPU_PRE_EXEC { 2000 # define PERL_FPU_POST_EXEC } 2001 #endif 2002 2003 #ifndef PERL_SYS_INIT3 2004 # define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp) 2005 #endif 2006 2007 #ifndef PERL_WRITE_MSG_TO_CONSOLE 2008 # define PERL_WRITE_MSG_TO_CONSOLE(io, msg, len) PerlIO_write(io, msg, len) 2009 #endif 2010 2011 #ifndef MAXPATHLEN 2012 # ifdef PATH_MAX 2013 # ifdef _POSIX_PATH_MAX 2014 # if PATH_MAX > _POSIX_PATH_MAX 2015 /* POSIX 1990 (and pre) was ambiguous about whether PATH_MAX 2016 * included the null byte or not. Later amendments of POSIX, 2017 * XPG4, the Austin Group, and the Single UNIX Specification 2018 * all explicitly include the null byte in the PATH_MAX. 2019 * Ditto for _POSIX_PATH_MAX. */ 2020 # define MAXPATHLEN PATH_MAX 2021 # else 2022 # define MAXPATHLEN _POSIX_PATH_MAX 2023 # endif 2024 # else 2025 # define MAXPATHLEN (PATH_MAX+1) 2026 # endif 2027 # else 2028 # ifdef _POSIX_PATH_MAX 2029 # define MAXPATHLEN _POSIX_PATH_MAX 2030 # else 2031 # define MAXPATHLEN 1024 /* Err on the large side. */ 2032 # endif 2033 # endif 2034 #endif 2035 2036 /* 2037 * USE_5005THREADS needs to be after unixish.h as <pthread.h> includes 2038 * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h> 2039 * this results in many functions being undeclared which bothers C++ 2040 * May make sense to have threads after "*ish.h" anyway 2041 */ 2042 2043 #if defined(USE_5005THREADS) || defined(USE_ITHREADS) 2044 # if defined(USE_5005THREADS) 2045 /* pending resolution of licensing issues, we avoid the erstwhile 2046 * atomic.h everywhere */ 2047 # define EMULATE_ATOMIC_REFCOUNTS 2048 # endif 2049 # ifdef NETWARE 2050 # include <nw5thread.h> 2051 # else 2052 # ifdef FAKE_THREADS 2053 # include "fakethr.h" 2054 # else 2055 # ifdef WIN32 2056 # include <win32thread.h> 2057 # else 2058 # ifdef OS2 2059 # include "os2thread.h" 2060 # else 2061 # ifdef I_MACH_CTHREADS 2062 # include <mach/cthreads.h> 2063 # if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC) 2064 # define MUTEX_INIT_CALLS_MALLOC 2065 # endif 2066 typedef cthread_t perl_os_thread; 2067 typedef mutex_t perl_mutex; 2068 typedef condition_t perl_cond; 2069 typedef void * perl_key; 2070 # else /* Posix threads */ 2071 # ifdef I_PTHREAD 2072 # include <pthread.h> 2073 # endif 2074 typedef pthread_t perl_os_thread; 2075 typedef pthread_mutex_t perl_mutex; 2076 typedef pthread_cond_t perl_cond; 2077 typedef pthread_key_t perl_key; 2078 # endif /* I_MACH_CTHREADS */ 2079 # endif /* OS2 */ 2080 # endif /* WIN32 */ 2081 # endif /* FAKE_THREADS */ 2082 #endif /* NETWARE */ 2083 #endif /* USE_5005THREADS || USE_ITHREADS */ 2084 2085 #if defined(WIN32) 2086 # include "win32.h" 2087 #endif 2088 2089 #ifdef NETWARE 2090 # include "netware.h" 2091 #endif 2092 2093 #ifdef VMS 2094 # define STATUS_NATIVE PL_statusvalue_vms 2095 # define STATUS_NATIVE_EXPORT \ 2096 (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 0x10000000 : 0)) 2097 # define STATUS_NATIVE_SET(n) \ 2098 STMT_START { \ 2099 PL_statusvalue_vms = (n); \ 2100 if ((I32)PL_statusvalue_vms == -1) \ 2101 PL_statusvalue = -1; \ 2102 else if (PL_statusvalue_vms & STS$M_SUCCESS) \ 2103 PL_statusvalue = 0; \ 2104 else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0) \ 2105 PL_statusvalue = 1 << 8; \ 2106 else \ 2107 PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8; \ 2108 } STMT_END 2109 # define STATUS_POSIX PL_statusvalue 2110 # ifdef VMSISH_STATUS 2111 # define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX) 2112 # else 2113 # define STATUS_CURRENT STATUS_POSIX 2114 # endif 2115 # define STATUS_POSIX_SET(n) \ 2116 STMT_START { \ 2117 PL_statusvalue = (n); \ 2118 if (PL_statusvalue != -1) { \ 2119 PL_statusvalue &= 0xFFFF; \ 2120 PL_statusvalue_vms = PL_statusvalue ? 44 : 1; \ 2121 } \ 2122 else PL_statusvalue_vms = -1; \ 2123 } STMT_END 2124 # define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_vms = 1) 2125 # define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_vms = 44) 2126 #else 2127 # define STATUS_NATIVE STATUS_POSIX 2128 # define STATUS_NATIVE_EXPORT STATUS_POSIX 2129 # define STATUS_NATIVE_SET STATUS_POSIX_SET 2130 # define STATUS_POSIX PL_statusvalue 2131 # define STATUS_POSIX_SET(n) \ 2132 STMT_START { \ 2133 PL_statusvalue = (n); \ 2134 if (PL_statusvalue != -1) \ 2135 PL_statusvalue &= 0xFFFF; \ 2136 } STMT_END 2137 # define STATUS_CURRENT STATUS_POSIX 2138 # define STATUS_ALL_SUCCESS (PL_statusvalue = 0) 2139 # define STATUS_ALL_FAILURE (PL_statusvalue = 1) 2140 #endif 2141 2142 /* flags in PL_exit_flags for nature of exit() */ 2143 #define PERL_EXIT_EXPECTED 0x01 2144 #define PERL_EXIT_DESTRUCT_END 0x02 /* Run END in perl_destruct */ 2145 2146 #ifndef MEMBER_TO_FPTR 2147 # define MEMBER_TO_FPTR(name) name 2148 #endif 2149 2150 /* format to use for version numbers in file/directory names */ 2151 /* XXX move to Configure? */ 2152 #ifndef PERL_FS_VER_FMT 2153 # define PERL_FS_VER_FMT "%d.%d.%d" 2154 #endif 2155 2156 /* This defines a way to flush all output buffers. This may be a 2157 * performance issue, so we allow people to disable it. Also, if 2158 * we are using stdio, there are broken implementations of fflush(NULL) 2159 * out there, Solaris being the most prominent. 2160 */ 2161 #ifndef PERL_FLUSHALL_FOR_CHILD 2162 # if defined(USE_PERLIO) || defined(FFLUSH_NULL) || defined(USE_SFIO) 2163 # define PERL_FLUSHALL_FOR_CHILD PerlIO_flush((PerlIO*)NULL) 2164 # else 2165 # ifdef FFLUSH_ALL 2166 # define PERL_FLUSHALL_FOR_CHILD my_fflush_all() 2167 # else 2168 # define PERL_FLUSHALL_FOR_CHILD NOOP 2169 # endif 2170 # endif 2171 #endif 2172 2173 #ifndef PERL_WAIT_FOR_CHILDREN 2174 # define PERL_WAIT_FOR_CHILDREN NOOP 2175 #endif 2176 2177 /* the traditional thread-unsafe notion of "current interpreter". */ 2178 #ifndef PERL_SET_INTERP 2179 # define PERL_SET_INTERP(i) (PL_curinterp = (PerlInterpreter*)(i)) 2180 #endif 2181 2182 #ifndef PERL_GET_INTERP 2183 # define PERL_GET_INTERP (PL_curinterp) 2184 #endif 2185 2186 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX) 2187 # ifdef USE_5005THREADS 2188 # define PERL_GET_THX ((struct perl_thread *)PERL_GET_CONTEXT) 2189 # else 2190 # ifdef MULTIPLICITY 2191 # define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT) 2192 # endif 2193 # endif 2194 # define PERL_SET_THX(t) PERL_SET_CONTEXT(t) 2195 #endif 2196 2197 #ifndef SVf 2198 # ifdef CHECK_FORMAT 2199 # define SVf "p" 2200 # ifndef SVf256 2201 # define SVf256 SVf 2202 # endif 2203 # else 2204 # define SVf "_" 2205 # endif 2206 #endif 2207 2208 #ifndef SVf256 2209 # define SVf256 ".256"SVf 2210 #endif 2211 2212 #ifndef UVf 2213 # ifdef CHECK_FORMAT 2214 # define UVf UVuf 2215 # else 2216 # define UVf "Vu" 2217 # endif 2218 #endif 2219 2220 #ifndef VDf 2221 # ifdef CHECK_FORMAT 2222 # define VDf "p" 2223 # else 2224 # define VDf "vd" 2225 # endif 2226 #endif 2227 2228 #ifndef Nullformat 2229 # ifdef CHECK_FORMAT 2230 # define Nullformat "%s","" 2231 # else 2232 # define Nullformat Nullch 2233 # endif 2234 #endif 2235 2236 #ifndef __attribute__format__ 2237 # ifdef CHECK_FORMAT 2238 # define __attribute__format__(x,y,z) __attribute__((__format__(x,y,z))) 2239 # else 2240 # define __attribute__format__(x,y,z) 2241 # endif 2242 #endif 2243 2244 /* Some unistd.h's give a prototype for pause() even though 2245 HAS_PAUSE ends up undefined. This causes the #define 2246 below to be rejected by the compiler. Sigh. 2247 */ 2248 #ifdef HAS_PAUSE 2249 #define Pause pause 2250 #else 2251 #define Pause() sleep((32767<<16)+32767) 2252 #endif 2253 2254 #ifndef IOCPARM_LEN 2255 # ifdef IOCPARM_MASK 2256 /* on BSDish systes we're safe */ 2257 # define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) 2258 # else 2259 /* otherwise guess at what's safe */ 2260 # define IOCPARM_LEN(x) 256 2261 # endif 2262 #endif 2263 2264 #if defined(__CYGWIN__) 2265 /* USEMYBINMODE 2266 * This symbol, if defined, indicates that the program should 2267 * use the routine my_binmode(FILE *fp, char iotype, int mode) to insure 2268 * that a file is in "binary" mode -- that is, that no translation 2269 * of bytes occurs on read or write operations. 2270 */ 2271 # define USEMYBINMODE /**/ 2272 # include <io.h> /* for setmode() prototype */ 2273 # define my_binmode(fp, iotype, mode) \ 2274 (PerlLIO_setmode(fileno(fp), mode) != -1 ? TRUE : FALSE) 2275 #endif 2276 2277 #ifdef __CYGWIN__ 2278 void init_os_extras(void); 2279 #endif 2280 2281 #ifdef UNION_ANY_DEFINITION 2282 UNION_ANY_DEFINITION; 2283 #else 2284 union any { 2285 void* any_ptr; 2286 I32 any_i32; 2287 IV any_iv; 2288 long any_long; 2289 bool any_bool; 2290 void (*any_dptr) (void*); 2291 void (*any_dxptr) (pTHX_ void*); 2292 }; 2293 #endif 2294 2295 #ifdef USE_5005THREADS 2296 #define ARGSproto struct perl_thread *thr 2297 #else 2298 #define ARGSproto 2299 #endif /* USE_5005THREADS */ 2300 2301 typedef I32 (*filter_t) (pTHX_ int, SV *, int); 2302 2303 #define FILTER_READ(idx, sv, len) filter_read(idx, sv, len) 2304 #define FILTER_DATA(idx) (AvARRAY(PL_rsfp_filters)[idx]) 2305 #define FILTER_ISREADER(idx) (idx >= AvFILLp(PL_rsfp_filters)) 2306 2307 #if defined(_AIX) && !defined(_AIX43) 2308 #if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE) 2309 /* We cannot include <crypt.h> to get the struct crypt_data 2310 * because of setkey prototype problems when threading */ 2311 typedef struct crypt_data { /* straight from /usr/include/crypt.h */ 2312 /* From OSF, Not needed in AIX 2313 char C[28], D[28]; 2314 */ 2315 char E[48]; 2316 char KS[16][48]; 2317 char block[66]; 2318 char iobuf[16]; 2319 } CRYPTD; 2320 #endif /* threading */ 2321 #endif /* AIX */ 2322 2323 #if !defined(OS2) && !defined(MACOS_TRADITIONAL) 2324 # include "iperlsys.h" 2325 #endif 2326 2327 /* [perl #22371] Algorimic Complexity Attack on Perl 5.6.1, 5.8.0. 2328 * Note that the USE_HASH_SEED and USE_HASH_SEED_EXPLICIT are *NOT* 2329 * defined by Configure, despite their names being similar to the 2330 * other defines like USE_ITHREADS. Configure in fact knows nothing 2331 * about the randomised hashes. Therefore to enable/disable the hash 2332 * randomisation defines use the Configure -Accflags=... instead. */ 2333 #if !defined(NO_HASH_SEED) && !defined(USE_HASH_SEED) && !defined(USE_HASH_SEED_EXPLICIT) 2334 # define USE_HASH_SEED 2335 #endif 2336 2337 #include "regexp.h" 2338 #include "sv.h" 2339 #include "util.h" 2340 #include "form.h" 2341 #include "gv.h" 2342 #include "pad.h" 2343 #include "cv.h" 2344 #include "opnames.h" 2345 #include "op.h" 2346 #include "cop.h" 2347 #include "av.h" 2348 #include "hv.h" 2349 #include "mg.h" 2350 #include "scope.h" 2351 #include "warnings.h" 2352 #include "utf8.h" 2353 2354 /* Current curly descriptor */ 2355 typedef struct curcur CURCUR; 2356 struct curcur { 2357 int parenfloor; /* how far back to strip paren data */ 2358 int cur; /* how many instances of scan we've matched */ 2359 int min; /* the minimal number of scans to match */ 2360 int max; /* the maximal number of scans to match */ 2361 int minmod; /* whether to work our way up or down */ 2362 regnode * scan; /* the thing to match */ 2363 regnode * next; /* what has to match after it */ 2364 char * lastloc; /* where we started matching this scan */ 2365 CURCUR * oldcc; /* current curly before we started this one */ 2366 }; 2367 2368 typedef struct _sublex_info SUBLEXINFO; 2369 struct _sublex_info { 2370 I32 super_state; /* lexer state to save */ 2371 I32 sub_inwhat; /* "lex_inwhat" to use */ 2372 OP *sub_op; /* "lex_op" to use */ 2373 char *super_bufptr; /* PL_bufptr that was */ 2374 char *super_bufend; /* PL_bufend that was */ 2375 }; 2376 2377 typedef struct magic_state MGS; /* struct magic_state defined in mg.c */ 2378 2379 struct scan_data_t; /* Used in S_* functions in regcomp.c */ 2380 struct regnode_charclass_class; /* Used in S_* functions in regcomp.c */ 2381 2382 typedef I32 CHECKPOINT; 2383 2384 struct ptr_tbl_ent { 2385 struct ptr_tbl_ent* next; 2386 void* oldval; 2387 void* newval; 2388 }; 2389 2390 struct ptr_tbl { 2391 struct ptr_tbl_ent** tbl_ary; 2392 UV tbl_max; 2393 UV tbl_items; 2394 }; 2395 2396 #if defined(iAPX286) || defined(M_I286) || defined(I80286) 2397 # define I286 2398 #endif 2399 2400 #if defined(htonl) && !defined(HAS_HTONL) 2401 #define HAS_HTONL 2402 #endif 2403 #if defined(htons) && !defined(HAS_HTONS) 2404 #define HAS_HTONS 2405 #endif 2406 #if defined(ntohl) && !defined(HAS_NTOHL) 2407 #define HAS_NTOHL 2408 #endif 2409 #if defined(ntohs) && !defined(HAS_NTOHS) 2410 #define HAS_NTOHS 2411 #endif 2412 #ifndef HAS_HTONL 2413 #if (BYTEORDER & 0xffff) != 0x4321 2414 #define HAS_HTONS 2415 #define HAS_HTONL 2416 #define HAS_NTOHS 2417 #define HAS_NTOHL 2418 #define MYSWAP 2419 #define htons my_swap 2420 #define htonl my_htonl 2421 #define ntohs my_swap 2422 #define ntohl my_ntohl 2423 #endif 2424 #else 2425 #if (BYTEORDER & 0xffff) == 0x4321 2426 #undef HAS_HTONS 2427 #undef HAS_HTONL 2428 #undef HAS_NTOHS 2429 #undef HAS_NTOHL 2430 #endif 2431 #endif 2432 2433 /* 2434 * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'. 2435 * -DWS 2436 */ 2437 #if BYTEORDER != 0x1234 2438 # define HAS_VTOHL 2439 # define HAS_VTOHS 2440 # define HAS_HTOVL 2441 # define HAS_HTOVS 2442 # if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 2443 # define vtohl(x) ((((x)&0xFF)<<24) \ 2444 +(((x)>>24)&0xFF) \ 2445 +(((x)&0x0000FF00)<<8) \ 2446 +(((x)&0x00FF0000)>>8) ) 2447 # define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF)) 2448 # define htovl(x) vtohl(x) 2449 # define htovs(x) vtohs(x) 2450 # endif 2451 /* otherwise default to functions in util.c */ 2452 #ifndef htovs 2453 short htovs(short n); 2454 short vtohs(short n); 2455 long htovl(long n); 2456 long vtohl(long n); 2457 #endif 2458 #endif 2459 2460 /* *MAX Plus 1. A floating point value. 2461 Hopefully expressed in a way that dodgy floating point can't mess up. 2462 >> 2 rather than 1, so that value is safely less than I32_MAX after 1 2463 is added to it 2464 May find that some broken compiler will want the value cast to I32. 2465 [after the shift, as signed >> may not be as secure as unsigned >>] 2466 */ 2467 #define I32_MAX_P1 (2.0 * (1 + (((U32)I32_MAX) >> 1))) 2468 #define U32_MAX_P1 (4.0 * (1 + ((U32_MAX) >> 2))) 2469 /* For compilers that can't correctly cast NVs over 0x7FFFFFFF (or 2470 0x7FFFFFFFFFFFFFFF) to an unsigned integer. In the future, sizeof(UV) 2471 may be greater than sizeof(IV), so don't assume that half max UV is max IV. 2472 */ 2473 #define U32_MAX_P1_HALF (2.0 * (1 + ((U32_MAX) >> 2))) 2474 2475 #define UV_MAX_P1 (4.0 * (1 + ((UV_MAX) >> 2))) 2476 #define IV_MAX_P1 (2.0 * (1 + (((UV)IV_MAX) >> 1))) 2477 #define UV_MAX_P1_HALF (2.0 * (1 + ((UV_MAX) >> 2))) 2478 2479 /* This may look like unnecessary jumping through hoops, but converting 2480 out of range floating point values to integers *is* undefined behaviour, 2481 and it is starting to bite. 2482 */ 2483 #ifndef CAST_INLINE 2484 #define I_32(what) (cast_i32((NV)(what))) 2485 #define U_32(what) (cast_ulong((NV)(what))) 2486 #define I_V(what) (cast_iv((NV)(what))) 2487 #define U_V(what) (cast_uv((NV)(what))) 2488 #else 2489 #define I_32(n) ((n) < I32_MAX_P1 ? ((n) < I32_MIN ? I32_MIN : (I32) (n)) \ 2490 : ((n) < U32_MAX_P1 ? (I32)(U32) (n) \ 2491 : ((n) > 0 ? (I32) U32_MAX : 0 /* NaN */))) 2492 #define U_32(n) ((n) < 0.0 ? ((n) < I32_MIN ? (UV) I32_MIN : (U32)(I32) (n)) \ 2493 : ((n) < U32_MAX_P1 ? (U32) (n) \ 2494 : ((n) > 0 ? U32_MAX : 0 /* NaN */))) 2495 #define I_V(n) ((n) < IV_MAX_P1 ? ((n) < IV_MIN ? IV_MIN : (IV) (n)) \ 2496 : ((n) < UV_MAX_P1 ? (IV)(UV) (n) \ 2497 : ((n) > 0 ? (IV)UV_MAX : 0 /* NaN */))) 2498 #define U_V(n) ((n) < 0.0 ? ((n) < IV_MIN ? (UV) IV_MIN : (UV)(IV) (n)) \ 2499 : ((n) < UV_MAX_P1 ? (UV) (n) \ 2500 : ((n) > 0 ? UV_MAX : 0 /* NaN */))) 2501 #endif 2502 2503 #define U_S(what) ((U16)U_32(what)) 2504 #define U_I(what) ((unsigned int)U_32(what)) 2505 #define U_L(what) U_32(what) 2506 2507 /* These do not care about the fractional part, only about the range. */ 2508 #define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX) 2509 #define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX) 2510 2511 /* Used with UV/IV arguments: */ 2512 /* XXXX: need to speed it up */ 2513 #define CLUMP_2UV(iv) ((iv) < 0 ? 0 : (UV)(iv)) 2514 #define CLUMP_2IV(uv) ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv)) 2515 2516 #ifndef MAXSYSFD 2517 # define MAXSYSFD 2 2518 #endif 2519 2520 #ifndef __cplusplus 2521 #ifndef UNDER_CE 2522 Uid_t getuid (void); 2523 Uid_t geteuid (void); 2524 Gid_t getgid (void); 2525 Gid_t getegid (void); 2526 #endif 2527 #endif 2528 2529 #ifndef Perl_debug_log 2530 # define Perl_debug_log PerlIO_stderr() 2531 #endif 2532 2533 #ifndef Perl_error_log 2534 # define Perl_error_log (PL_stderrgv \ 2535 && isGV(PL_stderrgv) \ 2536 && GvIOp(PL_stderrgv) \ 2537 && IoOFP(GvIOp(PL_stderrgv)) \ 2538 ? IoOFP(GvIOp(PL_stderrgv)) \ 2539 : PerlIO_stderr()) 2540 #endif 2541 2542 2543 #define DEBUG_p_FLAG 0x00000001 /* 1 */ 2544 #define DEBUG_s_FLAG 0x00000002 /* 2 */ 2545 #define DEBUG_l_FLAG 0x00000004 /* 4 */ 2546 #define DEBUG_t_FLAG 0x00000008 /* 8 */ 2547 #define DEBUG_o_FLAG 0x00000010 /* 16 */ 2548 #define DEBUG_c_FLAG 0x00000020 /* 32 */ 2549 #define DEBUG_P_FLAG 0x00000040 /* 64 */ 2550 #define DEBUG_m_FLAG 0x00000080 /* 128 */ 2551 #define DEBUG_f_FLAG 0x00000100 /* 256 */ 2552 #define DEBUG_r_FLAG 0x00000200 /* 512 */ 2553 #define DEBUG_x_FLAG 0x00000400 /* 1024 */ 2554 #define DEBUG_u_FLAG 0x00000800 /* 2048 */ 2555 #define DEBUG_H_FLAG 0x00002000 /* 8192 */ 2556 #define DEBUG_X_FLAG 0x00004000 /* 16384 */ 2557 #define DEBUG_D_FLAG 0x00008000 /* 32768 */ 2558 #define DEBUG_S_FLAG 0x00010000 /* 65536 */ 2559 #define DEBUG_T_FLAG 0x00020000 /* 131072 */ 2560 #define DEBUG_R_FLAG 0x00040000 /* 262144 */ 2561 #define DEBUG_J_FLAG 0x00080000 /* 524288 */ 2562 #define DEBUG_v_FLAG 0x00100000 /*1048576 */ 2563 #define DEBUG_MASK 0x001FEFFF /* mask of all the standard flags */ 2564 2565 #define DEBUG_DB_RECURSE_FLAG 0x40000000 2566 #define DEBUG_TOP_FLAG 0x80000000 /* XXX what's this for ??? Signal 2567 that something was done? */ 2568 2569 # define DEBUG_p_TEST_ (PL_debug & DEBUG_p_FLAG) 2570 # define DEBUG_s_TEST_ (PL_debug & DEBUG_s_FLAG) 2571 # define DEBUG_l_TEST_ (PL_debug & DEBUG_l_FLAG) 2572 # define DEBUG_t_TEST_ (PL_debug & DEBUG_t_FLAG) 2573 # define DEBUG_o_TEST_ (PL_debug & DEBUG_o_FLAG) 2574 # define DEBUG_c_TEST_ (PL_debug & DEBUG_c_FLAG) 2575 # define DEBUG_P_TEST_ (PL_debug & DEBUG_P_FLAG) 2576 # define DEBUG_m_TEST_ (PL_debug & DEBUG_m_FLAG) 2577 # define DEBUG_f_TEST_ (PL_debug & DEBUG_f_FLAG) 2578 # define DEBUG_r_TEST_ (PL_debug & DEBUG_r_FLAG) 2579 # define DEBUG_x_TEST_ (PL_debug & DEBUG_x_FLAG) 2580 # define DEBUG_u_TEST_ (PL_debug & DEBUG_u_FLAG) 2581 # define DEBUG_H_TEST_ (PL_debug & DEBUG_H_FLAG) 2582 # define DEBUG_X_TEST_ (PL_debug & DEBUG_X_FLAG) 2583 # define DEBUG_D_TEST_ (PL_debug & DEBUG_D_FLAG) 2584 # define DEBUG_S_TEST_ (PL_debug & DEBUG_S_FLAG) 2585 # define DEBUG_T_TEST_ (PL_debug & DEBUG_T_FLAG) 2586 # define DEBUG_R_TEST_ (PL_debug & DEBUG_R_FLAG) 2587 # define DEBUG_J_TEST_ (PL_debug & DEBUG_J_FLAG) 2588 # define DEBUG_v_TEST_ (PL_debug & DEBUG_v_FLAG) 2589 # define DEBUG_Xv_TEST_ (DEBUG_X_TEST_ && DEBUG_v_TEST_) 2590 2591 2592 #ifdef DEBUGGING 2593 2594 # undef YYDEBUG 2595 # define YYDEBUG 1 2596 2597 # define DEBUG_p_TEST DEBUG_p_TEST_ 2598 # define DEBUG_s_TEST DEBUG_s_TEST_ 2599 # define DEBUG_l_TEST DEBUG_l_TEST_ 2600 # define DEBUG_t_TEST DEBUG_t_TEST_ 2601 # define DEBUG_o_TEST DEBUG_o_TEST_ 2602 # define DEBUG_c_TEST DEBUG_c_TEST_ 2603 # define DEBUG_P_TEST DEBUG_P_TEST_ 2604 # define DEBUG_m_TEST DEBUG_m_TEST_ 2605 # define DEBUG_f_TEST DEBUG_f_TEST_ 2606 # define DEBUG_r_TEST DEBUG_r_TEST_ 2607 # define DEBUG_x_TEST DEBUG_x_TEST_ 2608 # define DEBUG_u_TEST DEBUG_u_TEST_ 2609 # define DEBUG_H_TEST DEBUG_H_TEST_ 2610 # define DEBUG_X_TEST DEBUG_X_TEST_ 2611 # define DEBUG_Xv_TEST DEBUG_Xv_TEST_ 2612 # define DEBUG_D_TEST DEBUG_D_TEST_ 2613 # define DEBUG_S_TEST DEBUG_S_TEST_ 2614 # define DEBUG_T_TEST DEBUG_T_TEST_ 2615 # define DEBUG_R_TEST DEBUG_R_TEST_ 2616 # define DEBUG_J_TEST DEBUG_J_TEST_ 2617 # define DEBUG_v_TEST DEBUG_v_TEST_ 2618 2619 # define PERL_DEB(a) a 2620 # define PERL_DEBUG(a) if (PL_debug) a 2621 # define DEBUG_p(a) if (DEBUG_p_TEST) a 2622 # define DEBUG_s(a) if (DEBUG_s_TEST) a 2623 # define DEBUG_l(a) if (DEBUG_l_TEST) a 2624 # define DEBUG_t(a) if (DEBUG_t_TEST) a 2625 # define DEBUG_o(a) if (DEBUG_o_TEST) a 2626 # define DEBUG_c(a) if (DEBUG_c_TEST) a 2627 # define DEBUG_P(a) if (DEBUG_P_TEST) a 2628 2629 /* Temporarily turn off memory debugging in case the a 2630 * does memory allocation, either directly or indirectly. */ 2631 # define DEBUG_m(a) \ 2632 STMT_START { \ 2633 if (PERL_GET_INTERP) { dTHX; if (DEBUG_m_TEST) {PL_debug&=~DEBUG_m_FLAG; a; PL_debug|=DEBUG_m_FLAG;} } \ 2634 } STMT_END 2635 2636 # define DEBUG__(t, a) \ 2637 STMT_START { \ 2638 if (t) STMT_START {a;} STMT_END; \ 2639 } STMT_END 2640 2641 # define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a) 2642 # define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a) 2643 # define DEBUG_x(a) DEBUG__(DEBUG_x_TEST, a) 2644 # define DEBUG_u(a) DEBUG__(DEBUG_u_TEST, a) 2645 # define DEBUG_H(a) DEBUG__(DEBUG_H_TEST, a) 2646 # define DEBUG_X(a) DEBUG__(DEBUG_X_TEST, a) 2647 # define DEBUG_Xv(a) DEBUG__(DEBUG_Xv_TEST, a) 2648 # define DEBUG_D(a) DEBUG__(DEBUG_D_TEST, a) 2649 2650 # ifdef USE_5005THREADS 2651 # define DEBUG_S(a) DEBUG__(DEBUG_S_TEST, a) 2652 # else 2653 # define DEBUG_S(a) 2654 # endif 2655 2656 # define DEBUG_T(a) DEBUG__(DEBUG_T_TEST, a) 2657 # define DEBUG_R(a) DEBUG__(DEBUG_R_TEST, a) 2658 # define DEBUG_v(a) DEBUG__(DEBUG_v_TEST, a) 2659 2660 #else /* DEBUGGING */ 2661 2662 # define DEBUG_p_TEST (0) 2663 # define DEBUG_s_TEST (0) 2664 # define DEBUG_l_TEST (0) 2665 # define DEBUG_t_TEST (0) 2666 # define DEBUG_o_TEST (0) 2667 # define DEBUG_c_TEST (0) 2668 # define DEBUG_P_TEST (0) 2669 # define DEBUG_m_TEST (0) 2670 # define DEBUG_f_TEST (0) 2671 # define DEBUG_r_TEST (0) 2672 # define DEBUG_x_TEST (0) 2673 # define DEBUG_u_TEST (0) 2674 # define DEBUG_H_TEST (0) 2675 # define DEBUG_X_TEST (0) 2676 # define DEBUG_Xv_TEST (0) 2677 # define DEBUG_D_TEST (0) 2678 # define DEBUG_S_TEST (0) 2679 # define DEBUG_T_TEST (0) 2680 # define DEBUG_R_TEST (0) 2681 # define DEBUG_J_TEST (0) 2682 # define DEBUG_v_TEST (0) 2683 2684 # define PERL_DEB(a) 2685 # define PERL_DEBUG(a) 2686 # define DEBUG_p(a) 2687 # define DEBUG_s(a) 2688 # define DEBUG_l(a) 2689 # define DEBUG_t(a) 2690 # define DEBUG_o(a) 2691 # define DEBUG_c(a) 2692 # define DEBUG_P(a) 2693 # define DEBUG_m(a) 2694 # define DEBUG_f(a) 2695 # define DEBUG_r(a) 2696 # define DEBUG_x(a) 2697 # define DEBUG_u(a) 2698 # define DEBUG_H(a) 2699 # define DEBUG_X(a) 2700 # define DEBUG_Xv(a) 2701 # define DEBUG_D(a) 2702 # define DEBUG_S(a) 2703 # define DEBUG_T(a) 2704 # define DEBUG_R(a) 2705 # define DEBUG_v(a) 2706 #endif /* DEBUGGING */ 2707 2708 2709 #define DEBUG_SCOPE(where) \ 2710 DEBUG_l(WITH_THR(Perl_deb(aTHX_ "%s scope %ld at %s:%d\n", \ 2711 where, PL_scopestack_ix, __FILE__, __LINE__))); 2712 2713 2714 2715 2716 /* These constants should be used in preference to raw characters 2717 * when using magic. Note that some perl guts still assume 2718 * certain character properties of these constants, namely that 2719 * isUPPER() and toLOWER() may do useful mappings. 2720 * 2721 * Update the magic_names table in dump.c when adding/amending these 2722 */ 2723 2724 #define PERL_MAGIC_sv '\0' /* Special scalar variable */ 2725 #define PERL_MAGIC_overload 'A' /* %OVERLOAD hash */ 2726 #define PERL_MAGIC_overload_elem 'a' /* %OVERLOAD hash element */ 2727 #define PERL_MAGIC_overload_table 'c' /* Holds overload table (AMT) on stash */ 2728 #define PERL_MAGIC_bm 'B' /* Boyer-Moore (fast string search) */ 2729 #define PERL_MAGIC_regdata 'D' /* Regex match position data 2730 (@+ and @- vars) */ 2731 #define PERL_MAGIC_regdatum 'd' /* Regex match position data element */ 2732 #define PERL_MAGIC_env 'E' /* %ENV hash */ 2733 #define PERL_MAGIC_envelem 'e' /* %ENV hash element */ 2734 #define PERL_MAGIC_fm 'f' /* Formline ('compiled' format) */ 2735 #define PERL_MAGIC_regex_global 'g' /* m//g target / study()ed string */ 2736 #define PERL_MAGIC_isa 'I' /* @ISA array */ 2737 #define PERL_MAGIC_isaelem 'i' /* @ISA array element */ 2738 #define PERL_MAGIC_nkeys 'k' /* scalar(keys()) lvalue */ 2739 #define PERL_MAGIC_dbfile 'L' /* Debugger %_<filename */ 2740 #define PERL_MAGIC_dbline 'l' /* Debugger %_<filename element */ 2741 #define PERL_MAGIC_mutex 'm' /* for lock op */ 2742 #define PERL_MAGIC_shared 'N' /* Shared between threads */ 2743 #define PERL_MAGIC_shared_scalar 'n' /* Shared between threads */ 2744 #define PERL_MAGIC_collxfrm 'o' /* Locale transformation */ 2745 #define PERL_MAGIC_tied 'P' /* Tied array or hash */ 2746 #define PERL_MAGIC_tiedelem 'p' /* Tied array or hash element */ 2747 #define PERL_MAGIC_tiedscalar 'q' /* Tied scalar or handle */ 2748 #define PERL_MAGIC_qr 'r' /* precompiled qr// regex */ 2749 #define PERL_MAGIC_sig 'S' /* %SIG hash */ 2750 #define PERL_MAGIC_sigelem 's' /* %SIG hash element */ 2751 #define PERL_MAGIC_taint 't' /* Taintedness */ 2752 #define PERL_MAGIC_uvar 'U' /* Available for use by extensions */ 2753 #define PERL_MAGIC_uvar_elem 'u' /* Reserved for use by extensions */ 2754 #define PERL_MAGIC_vstring 'V' /* SV was vstring literal */ 2755 #define PERL_MAGIC_vec 'v' /* vec() lvalue */ 2756 #define PERL_MAGIC_utf8 'w' /* Cached UTF-8 information */ 2757 #define PERL_MAGIC_substr 'x' /* substr() lvalue */ 2758 #define PERL_MAGIC_defelem 'y' /* Shadow "foreach" iterator variable / 2759 smart parameter vivification */ 2760 #define PERL_MAGIC_glob '*' /* GV (typeglob) */ 2761 #define PERL_MAGIC_arylen '#' /* Array length ($#ary) */ 2762 #define PERL_MAGIC_pos '.' /* pos() lvalue */ 2763 #define PERL_MAGIC_backref '<' /* for weak ref data */ 2764 #define PERL_MAGIC_ext '~' /* Available for use by extensions */ 2765 2766 2767 #define YYMAXDEPTH 300 2768 2769 #ifndef assert /* <assert.h> might have been included somehow */ 2770 #ifdef DEBUGGING 2771 #define assert(what) PERL_DEB( { \ 2772 if (!(what)) { \ 2773 Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\", line %d", \ 2774 __FILE__, __LINE__); \ 2775 PerlProc_exit(1); \ 2776 }}) 2777 #else 2778 #define assert(what) PERL_DEB( { \ 2779 if (!(what)) { \ 2780 Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d", \ 2781 __FILE__, __LINE__); \ 2782 PerlProc_exit(1); \ 2783 }}) 2784 #endif 2785 #endif 2786 2787 struct ufuncs { 2788 I32 (*uf_val)(pTHX_ IV, SV*); 2789 I32 (*uf_set)(pTHX_ IV, SV*); 2790 IV uf_index; 2791 }; 2792 2793 /* In pre-5.7-Perls the PERL_MAGIC_uvar magic didn't get the thread context. 2794 * XS code wanting to be backward compatible can do something 2795 * like the following: 2796 2797 #ifndef PERL_MG_UFUNC 2798 #define PERL_MG_UFUNC(name,ix,sv) I32 name(IV ix, SV *sv) 2799 #endif 2800 2801 static PERL_MG_UFUNC(foo_get, index, val) 2802 { 2803 sv_setsv(val, ...); 2804 return TRUE; 2805 } 2806 2807 -- Doug MacEachern 2808 2809 */ 2810 2811 #ifndef PERL_MG_UFUNC 2812 #define PERL_MG_UFUNC(name,ix,sv) I32 name(pTHX_ IV ix, SV *sv) 2813 #endif 2814 2815 /* Fix these up for __STDC__ */ 2816 #ifndef DONT_DECLARE_STD 2817 char *mktemp (char*); 2818 #ifndef atof 2819 double atof (const char*); 2820 #endif 2821 #endif 2822 2823 #ifndef STANDARD_C 2824 /* All of these are in stdlib.h or time.h for ANSI C */ 2825 Time_t time(); 2826 struct tm *gmtime(), *localtime(); 2827 #if defined(OEMVS) || defined(__OPEN_VM) 2828 char *(strchr)(), *(strrchr)(); 2829 char *(strcpy)(), *(strcat)(); 2830 #else 2831 char *strchr(), *strrchr(); 2832 char *strcpy(), *strcat(); 2833 #endif 2834 #endif /* ! STANDARD_C */ 2835 2836 2837 #ifdef I_MATH 2838 # include <math.h> 2839 #else 2840 START_EXTERN_C 2841 double exp (double); 2842 double log (double); 2843 double log10 (double); 2844 double sqrt (double); 2845 double frexp (double,int*); 2846 double ldexp (double,int); 2847 double modf (double,double*); 2848 double sin (double); 2849 double cos (double); 2850 double atan2 (double,double); 2851 double pow (double,double); 2852 END_EXTERN_C 2853 #endif 2854 2855 #if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(LDBL_INFINITY) 2856 # define NV_INF LDBL_INFINITY 2857 #endif 2858 #if !defined(NV_INF) && defined(DBL_INFINITY) 2859 # define NV_INF (NV)DBL_INFINITY 2860 #endif 2861 #if !defined(NV_INF) && defined(INFINITY) 2862 # define NV_INF (NV)INFINITY 2863 #endif 2864 #if !defined(NV_INF) && defined(INF) 2865 # define NV_INF (NV)INF 2866 #endif 2867 #if !defined(NV_INF) && defined(USE_LONG_DOUBLE) && defined(HUGE_VALL) 2868 # define NV_INF (NV)HUGE_VALL 2869 #endif 2870 #if !defined(NV_INF) && defined(HUGE_VAL) 2871 # define NV_INF (NV)HUGE_VAL 2872 #endif 2873 2874 #if !defined(NV_NAN) && defined(USE_LONG_DOUBLE) 2875 # if !defined(NV_NAN) && defined(LDBL_NAN) 2876 # define NV_NAN LDBL_NAN 2877 # endif 2878 # if !defined(NV_NAN) && defined(LDBL_QNAN) 2879 # define NV_NAN LDBL_QNAN 2880 # endif 2881 # if !defined(NV_NAN) && defined(LDBL_SNAN) 2882 # define NV_NAN LDBL_SNAN 2883 # endif 2884 #endif 2885 #if !defined(NV_NAN) && defined(DBL_NAN) 2886 # define NV_NAN (NV)DBL_NAN 2887 #endif 2888 #if !defined(NV_NAN) && defined(DBL_QNAN) 2889 # define NV_NAN (NV)DBL_QNAN 2890 #endif 2891 #if !defined(NV_NAN) && defined(DBL_SNAN) 2892 # define NV_NAN (NV)DBL_SNAN 2893 #endif 2894 #if !defined(NV_NAN) && defined(QNAN) 2895 # define NV_NAN (NV)QNAN 2896 #endif 2897 #if !defined(NV_NAN) && defined(SNAN) 2898 # define NV_NAN (NV)SNAN 2899 #endif 2900 #if !defined(NV_NAN) && defined(NAN) 2901 # define NV_NAN (NV)NAN 2902 #endif 2903 2904 #ifndef __cplusplus 2905 # if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */ 2906 char *crypt (); /* Maybe more hosts will need the unprototyped version */ 2907 # else 2908 # if !defined(WIN32) && !defined(VMS) 2909 #ifndef crypt 2910 char *crypt (const char*, const char*); 2911 #endif 2912 # endif /* !WIN32 */ 2913 # endif /* !NeXT && !__NeXT__ */ 2914 # ifndef DONT_DECLARE_STD 2915 # ifndef getenv 2916 char *getenv (const char*); 2917 # endif /* !getenv */ 2918 # if !defined(HAS_LSEEK_PROTO) && !defined(EPOC) && !defined(__hpux) 2919 # ifdef _FILE_OFFSET_BITS 2920 # if _FILE_OFFSET_BITS == 64 2921 Off_t lseek (int,Off_t,int); 2922 # endif 2923 # endif 2924 # endif 2925 # endif /* !DONT_DECLARE_STD */ 2926 #ifndef getlogin 2927 char *getlogin (void); 2928 #endif 2929 #endif /* !__cplusplus */ 2930 2931 #ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */ 2932 #define UNLINK unlnk 2933 I32 unlnk (char*); 2934 #else 2935 #define UNLINK PerlLIO_unlink 2936 #endif 2937 2938 /* some versions of glibc are missing the setresuid() proto */ 2939 #if defined(HAS_SETRESUID) && !defined(HAS_SETRESUID_PROTO) 2940 int setresuid(uid_t ruid, uid_t euid, uid_t suid); 2941 #endif 2942 /* some versions of glibc are missing the setresgid() proto */ 2943 #if defined(HAS_SETRESGID) && !defined(HAS_SETRESGID_PROTO) 2944 int setresgid(gid_t rgid, gid_t egid, gid_t sgid); 2945 #endif 2946 2947 #ifndef HAS_SETREUID 2948 # ifdef HAS_SETRESUID 2949 # define setreuid(r,e) setresuid(r,e,(Uid_t)-1) 2950 # define HAS_SETREUID 2951 # endif 2952 #endif 2953 #ifndef HAS_SETREGID 2954 # ifdef HAS_SETRESGID 2955 # define setregid(r,e) setresgid(r,e,(Gid_t)-1) 2956 # define HAS_SETREGID 2957 # endif 2958 #endif 2959 2960 /* Sighandler_t defined in iperlsys.h */ 2961 2962 #ifdef HAS_SIGACTION 2963 typedef struct sigaction Sigsave_t; 2964 #else 2965 typedef Sighandler_t Sigsave_t; 2966 #endif 2967 2968 #define SCAN_DEF 0 2969 #define SCAN_TR 1 2970 #define SCAN_REPL 2 2971 2972 #ifdef DEBUGGING 2973 # ifndef register 2974 # define register 2975 # endif 2976 # define RUNOPS_DEFAULT Perl_runops_debug 2977 #else 2978 # define RUNOPS_DEFAULT Perl_runops_standard 2979 #endif 2980 2981 #ifdef MYMALLOC 2982 # ifdef MUTEX_INIT_CALLS_MALLOC 2983 # define MALLOC_INIT \ 2984 STMT_START { \ 2985 PL_malloc_mutex = NULL; \ 2986 MUTEX_INIT(&PL_malloc_mutex); \ 2987 } STMT_END 2988 # define MALLOC_TERM \ 2989 STMT_START { \ 2990 perl_mutex tmp = PL_malloc_mutex; \ 2991 PL_malloc_mutex = NULL; \ 2992 MUTEX_DESTROY(&tmp); \ 2993 } STMT_END 2994 # else 2995 # define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex) 2996 # define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex) 2997 # endif 2998 #else 2999 # define MALLOC_INIT 3000 # define MALLOC_TERM 3001 #endif 3002 3003 3004 typedef int (CPERLscope(*runops_proc_t)) (pTHX); 3005 typedef void (CPERLscope(*share_proc_t)) (pTHX_ SV *sv); 3006 typedef int (CPERLscope(*thrhook_proc_t)) (pTHX); 3007 typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX); 3008 3009 /* _ (for $_) must be first in the following list (DEFSV requires it) */ 3010 #define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@" 3011 3012 /* NeXT has problems with crt0.o globals */ 3013 #if defined(__DYNAMIC__) && \ 3014 (defined(NeXT) || defined(__NeXT__) || defined(PERL_DARWIN)) 3015 # if defined(NeXT) || defined(__NeXT) 3016 # include <mach-o/dyld.h> 3017 # define environ (*environ_pointer) 3018 EXT char *** environ_pointer; 3019 # else 3020 # if defined(PERL_DARWIN) && defined(PERL_CORE) 3021 # include <crt_externs.h> /* for the env array */ 3022 # define environ (*_NSGetEnviron()) 3023 # endif 3024 # endif 3025 #else 3026 /* VMS and some other platforms don't use the environ array */ 3027 # ifdef USE_ENVIRON_ARRAY 3028 # if !defined(DONT_DECLARE_STD) || \ 3029 (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \ 3030 defined(__sgi) || \ 3031 defined(__DGUX) 3032 extern char ** environ; /* environment variables supplied via exec */ 3033 # endif 3034 # endif 3035 #endif 3036 3037 START_EXTERN_C 3038 3039 /* handy constants */ 3040 EXTCONST char PL_warn_uninit[] 3041 INIT("Use of uninitialized value%s%s"); 3042 EXTCONST char PL_warn_nosemi[] 3043 INIT("Semicolon seems to be missing"); 3044 EXTCONST char PL_warn_reserved[] 3045 INIT("Unquoted string \"%s\" may clash with future reserved word"); 3046 EXTCONST char PL_warn_nl[] 3047 INIT("Unsuccessful %s on filename containing newline"); 3048 EXTCONST char PL_no_wrongref[] 3049 INIT("Can't use %s ref as %s ref"); 3050 EXTCONST char PL_no_symref[] 3051 INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use"); 3052 EXTCONST char PL_no_usym[] 3053 INIT("Can't use an undefined value as %s reference"); 3054 EXTCONST char PL_no_aelem[] 3055 INIT("Modification of non-creatable array value attempted, subscript %d"); 3056 EXTCONST char PL_no_helem[] 3057 INIT("Modification of non-creatable hash value attempted, subscript \"%s\""); 3058 EXTCONST char PL_no_modify[] 3059 INIT("Modification of a read-only value attempted"); 3060 EXTCONST char PL_no_mem[] 3061 INIT("Out of memory!\n"); 3062 EXTCONST char PL_no_security[] 3063 INIT("Insecure dependency in %s%s"); 3064 EXTCONST char PL_no_sock_func[] 3065 INIT("Unsupported socket function \"%s\" called"); 3066 EXTCONST char PL_no_dir_func[] 3067 INIT("Unsupported directory function \"%s\" called"); 3068 EXTCONST char PL_no_func[] 3069 INIT("The %s function is unimplemented"); 3070 EXTCONST char PL_no_myglob[] 3071 INIT("\"my\" variable %s can't be in a package"); 3072 EXTCONST char PL_no_localize_ref[] 3073 INIT("Can't localize through a reference"); 3074 EXTCONST char PL_memory_wrap[] 3075 INIT("panic: memory wrap"); 3076 3077 EXTCONST char PL_uuemap[65] 3078 INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"); 3079 3080 3081 #ifdef DOINIT 3082 EXT char *PL_sig_name[] = { SIG_NAME }; 3083 EXT int PL_sig_num[] = { SIG_NUM }; 3084 #else 3085 EXT char *PL_sig_name[]; 3086 EXT int PL_sig_num[]; 3087 #endif 3088 3089 /* fast conversion and case folding tables */ 3090 3091 #ifdef DOINIT 3092 #ifdef EBCDIC 3093 EXT unsigned char PL_fold[] = { /* fast EBCDIC case folding table */ 3094 0, 1, 2, 3, 4, 5, 6, 7, 3095 8, 9, 10, 11, 12, 13, 14, 15, 3096 16, 17, 18, 19, 20, 21, 22, 23, 3097 24, 25, 26, 27, 28, 29, 30, 31, 3098 32, 33, 34, 35, 36, 37, 38, 39, 3099 40, 41, 42, 43, 44, 45, 46, 47, 3100 48, 49, 50, 51, 52, 53, 54, 55, 3101 56, 57, 58, 59, 60, 61, 62, 63, 3102 64, 65, 66, 67, 68, 69, 70, 71, 3103 72, 73, 74, 75, 76, 77, 78, 79, 3104 80, 81, 82, 83, 84, 85, 86, 87, 3105 88, 89, 90, 91, 92, 93, 94, 95, 3106 96, 97, 98, 99, 100, 101, 102, 103, 3107 104, 105, 106, 107, 108, 109, 110, 111, 3108 112, 113, 114, 115, 116, 117, 118, 119, 3109 120, 121, 122, 123, 124, 125, 126, 127, 3110 128, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 3111 'H', 'I', 138, 139, 140, 141, 142, 143, 3112 144, 'J', 'K', 'L', 'M', 'N', 'O', 'P', 3113 'Q', 'R', 154, 155, 156, 157, 158, 159, 3114 160, 161, 'S', 'T', 'U', 'V', 'W', 'X', 3115 'Y', 'Z', 170, 171, 172, 173, 174, 175, 3116 176, 177, 178, 179, 180, 181, 182, 183, 3117 184, 185, 186, 187, 188, 189, 190, 191, 3118 192, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 3119 'h', 'i', 202, 203, 204, 205, 206, 207, 3120 208, 'j', 'k', 'l', 'm', 'n', 'o', 'p', 3121 'q', 'r', 218, 219, 220, 221, 222, 223, 3122 224, 225, 's', 't', 'u', 'v', 'w', 'x', 3123 'y', 'z', 234, 235, 236, 237, 238, 239, 3124 240, 241, 242, 243, 244, 245, 246, 247, 3125 248, 249, 250, 251, 252, 253, 254, 255 3126 }; 3127 #else /* ascii rather than ebcdic */ 3128 EXTCONST unsigned char PL_fold[] = { 3129 0, 1, 2, 3, 4, 5, 6, 7, 3130 8, 9, 10, 11, 12, 13, 14, 15, 3131 16, 17, 18, 19, 20, 21, 22, 23, 3132 24, 25, 26, 27, 28, 29, 30, 31, 3133 32, 33, 34, 35, 36, 37, 38, 39, 3134 40, 41, 42, 43, 44, 45, 46, 47, 3135 48, 49, 50, 51, 52, 53, 54, 55, 3136 56, 57, 58, 59, 60, 61, 62, 63, 3137 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 3138 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 3139 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 3140 'x', 'y', 'z', 91, 92, 93, 94, 95, 3141 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 3142 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 3143 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 3144 'X', 'Y', 'Z', 123, 124, 125, 126, 127, 3145 128, 129, 130, 131, 132, 133, 134, 135, 3146 136, 137, 138, 139, 140, 141, 142, 143, 3147 144, 145, 146, 147, 148, 149, 150, 151, 3148 152, 153, 154, 155, 156, 157, 158, 159, 3149 160, 161, 162, 163, 164, 165, 166, 167, 3150 168, 169, 170, 171, 172, 173, 174, 175, 3151 176, 177, 178, 179, 180, 181, 182, 183, 3152 184, 185, 186, 187, 188, 189, 190, 191, 3153 192, 193, 194, 195, 196, 197, 198, 199, 3154 200, 201, 202, 203, 204, 205, 206, 207, 3155 208, 209, 210, 211, 212, 213, 214, 215, 3156 216, 217, 218, 219, 220, 221, 222, 223, 3157 224, 225, 226, 227, 228, 229, 230, 231, 3158 232, 233, 234, 235, 236, 237, 238, 239, 3159 240, 241, 242, 243, 244, 245, 246, 247, 3160 248, 249, 250, 251, 252, 253, 254, 255 3161 }; 3162 #endif /* !EBCDIC */ 3163 #else 3164 EXTCONST unsigned char PL_fold[]; 3165 #endif 3166 3167 #ifdef DOINIT 3168 EXT unsigned char PL_fold_locale[] = { 3169 0, 1, 2, 3, 4, 5, 6, 7, 3170 8, 9, 10, 11, 12, 13, 14, 15, 3171 16, 17, 18, 19, 20, 21, 22, 23, 3172 24, 25, 26, 27, 28, 29, 30, 31, 3173 32, 33, 34, 35, 36, 37, 38, 39, 3174 40, 41, 42, 43, 44, 45, 46, 47, 3175 48, 49, 50, 51, 52, 53, 54, 55, 3176 56, 57, 58, 59, 60, 61, 62, 63, 3177 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 3178 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 3179 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 3180 'x', 'y', 'z', 91, 92, 93, 94, 95, 3181 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 3182 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 3183 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 3184 'X', 'Y', 'Z', 123, 124, 125, 126, 127, 3185 128, 129, 130, 131, 132, 133, 134, 135, 3186 136, 137, 138, 139, 140, 141, 142, 143, 3187 144, 145, 146, 147, 148, 149, 150, 151, 3188 152, 153, 154, 155, 156, 157, 158, 159, 3189 160, 161, 162, 163, 164, 165, 166, 167, 3190 168, 169, 170, 171, 172, 173, 174, 175, 3191 176, 177, 178, 179, 180, 181, 182, 183, 3192 184, 185, 186, 187, 188, 189, 190, 191, 3193 192, 193, 194, 195, 196, 197, 198, 199, 3194 200, 201, 202, 203, 204, 205, 206, 207, 3195 208, 209, 210, 211, 212, 213, 214, 215, 3196 216, 217, 218, 219, 220, 221, 222, 223, 3197 224, 225, 226, 227, 228, 229, 230, 231, 3198 232, 233, 234, 235, 236, 237, 238, 239, 3199 240, 241, 242, 243, 244, 245, 246, 247, 3200 248, 249, 250, 251, 252, 253, 254, 255 3201 }; 3202 #else 3203 EXT unsigned char PL_fold_locale[]; 3204 #endif 3205 3206 #ifdef DOINIT 3207 #ifdef EBCDIC 3208 EXT unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */ 3209 1, 2, 84, 151, 154, 155, 156, 157, 3210 165, 246, 250, 3, 158, 7, 18, 29, 3211 40, 51, 62, 73, 85, 96, 107, 118, 3212 129, 140, 147, 148, 149, 150, 152, 153, 3213 255, 6, 8, 9, 10, 11, 12, 13, 3214 14, 15, 24, 25, 26, 27, 28, 226, 3215 29, 30, 31, 32, 33, 43, 44, 45, 3216 46, 47, 48, 49, 50, 76, 77, 78, 3217 79, 80, 81, 82, 83, 84, 85, 86, 3218 87, 94, 95, 234, 181, 233, 187, 190, 3219 180, 96, 97, 98, 99, 100, 101, 102, 3220 104, 112, 182, 174, 236, 232, 229, 103, 3221 228, 226, 114, 115, 116, 117, 118, 119, 3222 120, 121, 122, 235, 176, 230, 194, 162, 3223 130, 131, 132, 133, 134, 135, 136, 137, 3224 138, 139, 201, 205, 163, 217, 220, 224, 3225 5, 248, 227, 244, 242, 255, 241, 231, 3226 240, 253, 16, 197, 19, 20, 21, 187, 3227 23, 169, 210, 245, 237, 249, 247, 239, 3228 168, 252, 34, 196, 36, 37, 38, 39, 3229 41, 42, 251, 254, 238, 223, 221, 213, 3230 225, 177, 52, 53, 54, 55, 56, 57, 3231 58, 59, 60, 61, 63, 64, 65, 66, 3232 67, 68, 69, 70, 71, 72, 74, 75, 3233 205, 208, 186, 202, 200, 218, 198, 179, 3234 178, 214, 88, 89, 90, 91, 92, 93, 3235 217, 166, 170, 207, 199, 209, 206, 204, 3236 160, 212, 105, 106, 108, 109, 110, 111, 3237 203, 113, 216, 215, 192, 175, 193, 243, 3238 172, 161, 123, 124, 125, 126, 127, 128, 3239 222, 219, 211, 195, 188, 193, 185, 184, 3240 191, 183, 141, 142, 143, 144, 145, 146 3241 }; 3242 #else /* ascii rather than ebcdic */ 3243 EXTCONST unsigned char PL_freq[] = { /* letter frequencies for mixed English/C */ 3244 1, 2, 84, 151, 154, 155, 156, 157, 3245 165, 246, 250, 3, 158, 7, 18, 29, 3246 40, 51, 62, 73, 85, 96, 107, 118, 3247 129, 140, 147, 148, 149, 150, 152, 153, 3248 255, 182, 224, 205, 174, 176, 180, 217, 3249 233, 232, 236, 187, 235, 228, 234, 226, 3250 222, 219, 211, 195, 188, 193, 185, 184, 3251 191, 183, 201, 229, 181, 220, 194, 162, 3252 163, 208, 186, 202, 200, 218, 198, 179, 3253 178, 214, 166, 170, 207, 199, 209, 206, 3254 204, 160, 212, 216, 215, 192, 175, 173, 3255 243, 172, 161, 190, 203, 189, 164, 230, 3256 167, 248, 227, 244, 242, 255, 241, 231, 3257 240, 253, 169, 210, 245, 237, 249, 247, 3258 239, 168, 252, 251, 254, 238, 223, 221, 3259 213, 225, 177, 197, 171, 196, 159, 4, 3260 5, 6, 8, 9, 10, 11, 12, 13, 3261 14, 15, 16, 17, 19, 20, 21, 22, 3262 23, 24, 25, 26, 27, 28, 30, 31, 3263 32, 33, 34, 35, 36, 37, 38, 39, 3264 41, 42, 43, 44, 45, 46, 47, 48, 3265 49, 50, 52, 53, 54, 55, 56, 57, 3266 58, 59, 60, 61, 63, 64, 65, 66, 3267 67, 68, 69, 70, 71, 72, 74, 75, 3268 76, 77, 78, 79, 80, 81, 82, 83, 3269 86, 87, 88, 89, 90, 91, 92, 93, 3270 94, 95, 97, 98, 99, 100, 101, 102, 3271 103, 104, 105, 106, 108, 109, 110, 111, 3272 112, 113, 114, 115, 116, 117, 119, 120, 3273 121, 122, 123, 124, 125, 126, 127, 128, 3274 130, 131, 132, 133, 134, 135, 136, 137, 3275 138, 139, 141, 142, 143, 144, 145, 146 3276 }; 3277 #endif 3278 #else 3279 EXTCONST unsigned char PL_freq[]; 3280 #endif 3281 3282 #ifdef DEBUGGING 3283 #ifdef DOINIT 3284 EXTCONST char* PL_block_type[] = { 3285 "NULL", 3286 "SUB", 3287 "EVAL", 3288 "LOOP", 3289 "SUBST", 3290 "BLOCK", 3291 }; 3292 #else 3293 EXTCONST char* PL_block_type[]; 3294 #endif 3295 #endif 3296 3297 END_EXTERN_C 3298 3299 /*****************************************************************************/ 3300 /* This lexer/parser stuff is currently global since yacc is hard to reenter */ 3301 /*****************************************************************************/ 3302 /* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */ 3303 3304 #ifdef __Lynx__ 3305 /* LynxOS defines these in scsi.h which is included via ioctl.h */ 3306 #ifdef FORMAT 3307 #undef FORMAT 3308 #endif 3309 #ifdef SPACE 3310 #undef SPACE 3311 #endif 3312 #endif 3313 3314 #include "perly.h" 3315 3316 #define LEX_NOTPARSING 11 /* borrowed from toke.c */ 3317 3318 typedef enum { 3319 XOPERATOR, 3320 XTERM, 3321 XREF, 3322 XSTATE, 3323 XBLOCK, 3324 XATTRBLOCK, 3325 XATTRTERM, 3326 XTERMBLOCK 3327 } expectation; 3328 3329 enum { /* pass one of these to get_vtbl */ 3330 want_vtbl_sv, 3331 want_vtbl_env, 3332 want_vtbl_envelem, 3333 want_vtbl_sig, 3334 want_vtbl_sigelem, 3335 want_vtbl_pack, 3336 want_vtbl_packelem, 3337 want_vtbl_dbline, 3338 want_vtbl_isa, 3339 want_vtbl_isaelem, 3340 want_vtbl_arylen, 3341 want_vtbl_glob, 3342 want_vtbl_mglob, 3343 want_vtbl_nkeys, 3344 want_vtbl_taint, 3345 want_vtbl_substr, 3346 want_vtbl_vec, 3347 want_vtbl_pos, 3348 want_vtbl_bm, 3349 want_vtbl_fm, 3350 want_vtbl_uvar, 3351 want_vtbl_defelem, 3352 want_vtbl_regexp, 3353 want_vtbl_collxfrm, 3354 want_vtbl_amagic, 3355 want_vtbl_amagicelem, 3356 #ifdef USE_5005THREADS 3357 want_vtbl_mutex, 3358 #endif 3359 want_vtbl_regdata, 3360 want_vtbl_regdatum, 3361 want_vtbl_backref, 3362 want_vtbl_utf8 3363 }; 3364 3365 /* Note: the lowest 8 bits are reserved for 3366 stuffing into op->op_private */ 3367 #define HINT_PRIVATE_MASK 0x000000ff 3368 #define HINT_INTEGER 0x00000001 /* integer pragma */ 3369 #define HINT_STRICT_REFS 0x00000002 /* strict pragma */ 3370 #define HINT_LOCALE 0x00000004 /* locale pragma */ 3371 #define HINT_BYTES 0x00000008 /* bytes pragma */ 3372 /* #define HINT_notused10 0x00000010 */ 3373 /* Note: 20,40,80 used for NATIVE_HINTS */ 3374 /* currently defined by vms/vmsish.h */ 3375 3376 #define HINT_BLOCK_SCOPE 0x00000100 3377 #define HINT_STRICT_SUBS 0x00000200 /* strict pragma */ 3378 #define HINT_STRICT_VARS 0x00000400 /* strict pragma */ 3379 3380 /* The HINT_NEW_* constants are used by the overload pragma */ 3381 #define HINT_NEW_INTEGER 0x00001000 3382 #define HINT_NEW_FLOAT 0x00002000 3383 #define HINT_NEW_BINARY 0x00004000 3384 #define HINT_NEW_STRING 0x00008000 3385 #define HINT_NEW_RE 0x00010000 3386 #define HINT_LOCALIZE_HH 0x00020000 /* %^H needs to be copied */ 3387 3388 #define HINT_RE_TAINT 0x00100000 /* re pragma */ 3389 #define HINT_RE_EVAL 0x00200000 /* re pragma */ 3390 3391 #define HINT_FILETEST_ACCESS 0x00400000 /* filetest pragma */ 3392 #define HINT_UTF8 0x00800000 /* utf8 pragma */ 3393 3394 /* The following are stored in $sort::hints, not in PL_hints */ 3395 #define HINT_SORT_SORT_BITS 0x000000FF /* allow 256 different ones */ 3396 #define HINT_SORT_QUICKSORT 0x00000001 3397 #define HINT_SORT_MERGESORT 0x00000002 3398 #define HINT_SORT_STABLE 0x00000100 /* sort styles (currently one) */ 3399 3400 /* Various states of the input record separator SV (rs) */ 3401 #define RsSNARF(sv) (! SvOK(sv)) 3402 #define RsSIMPLE(sv) (SvOK(sv) && (! SvPOK(sv) || SvCUR(sv))) 3403 #define RsPARA(sv) (SvPOK(sv) && ! SvCUR(sv)) 3404 #define RsRECORD(sv) (SvROK(sv) && (SvIV(SvRV(sv)) > 0)) 3405 3406 /* A struct for keeping various DEBUGGING related stuff, 3407 * neatly packed. Currently only scratch variables for 3408 * constructing debug output are included. Needed always, 3409 * not just when DEBUGGING, though, because of the re extension. c*/ 3410 struct perl_debug_pad { 3411 SV pad[3]; 3412 }; 3413 3414 #define PERL_DEBUG_PAD(i) &(PL_debug_pad.pad[i]) 3415 #define PERL_DEBUG_PAD_ZERO(i) (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, SvCUR(PERL_DEBUG_PAD(i)) = 0, PERL_DEBUG_PAD(i)) 3416 3417 /* Enable variables which are pointers to functions */ 3418 typedef void (CPERLscope(*peep_t))(pTHX_ OP* o); 3419 typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm); 3420 typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg, 3421 char* strend, char* strbeg, I32 minend, 3422 SV* screamer, void* data, U32 flags); 3423 typedef char* (CPERLscope(*re_intuit_start_t)) (pTHX_ regexp *prog, SV *sv, 3424 char *strpos, char *strend, 3425 U32 flags, 3426 struct re_scream_pos_data_s *d); 3427 typedef SV* (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog); 3428 typedef void (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r); 3429 3430 typedef void (*DESTRUCTORFUNC_NOCONTEXT_t) (void*); 3431 typedef void (*DESTRUCTORFUNC_t) (pTHX_ void*); 3432 typedef void (*SVFUNC_t) (pTHX_ SV*); 3433 typedef I32 (*SVCOMPARE_t) (pTHX_ SV*, SV*); 3434 typedef void (*XSINIT_t) (pTHX); 3435 typedef void (*ATEXIT_t) (pTHX_ void*); 3436 typedef void (*XSUBADDR_t) (pTHX_ CV *); 3437 3438 /* Set up PERLVAR macros for populating structs */ 3439 #define PERLVAR(var,type) type var; 3440 #define PERLVARA(var,n,type) type var[n]; 3441 #define PERLVARI(var,type,init) type var; 3442 #define PERLVARIC(var,type,init) type var; 3443 3444 /* Interpreter exitlist entry */ 3445 typedef struct exitlistentry { 3446 void (*fn) (pTHX_ void*); 3447 void *ptr; 3448 } PerlExitListEntry; 3449 3450 #ifdef PERL_GLOBAL_STRUCT 3451 struct perl_vars { 3452 # include "perlvars.h" 3453 }; 3454 3455 # ifdef PERL_CORE 3456 EXT struct perl_vars PL_Vars; 3457 EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars); 3458 # else /* PERL_CORE */ 3459 # if !defined(__GNUC__) || !defined(WIN32) 3460 EXT 3461 # endif /* WIN32 */ 3462 struct perl_vars *PL_VarsPtr; 3463 # define PL_Vars (*((PL_VarsPtr) \ 3464 ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX)))) 3465 # endif /* PERL_CORE */ 3466 #endif /* PERL_GLOBAL_STRUCT */ 3467 3468 #if defined(MULTIPLICITY) 3469 /* If we have multiple interpreters define a struct 3470 holding variables which must be per-interpreter 3471 If we don't have threads anything that would have 3472 be per-thread is per-interpreter. 3473 */ 3474 3475 struct interpreter { 3476 # ifndef USE_5005THREADS 3477 # include "thrdvar.h" 3478 # endif 3479 # include "intrpvar.h" 3480 /* 3481 * The following is a buffer where new variables must 3482 * be defined to maintain binary compatibility with previous versions 3483 */ 3484 PERLVARA(object_compatibility,30, char) 3485 }; 3486 3487 #else 3488 struct interpreter { 3489 char broiled; 3490 }; 3491 #endif /* MULTIPLICITY */ 3492 3493 #ifdef USE_5005THREADS 3494 /* If we have threads define a struct with all the variables 3495 * that have to be per-thread 3496 */ 3497 3498 3499 struct perl_thread { 3500 #include "thrdvar.h" 3501 }; 3502 3503 typedef struct perl_thread *Thread; 3504 3505 #else 3506 typedef void *Thread; 3507 #endif 3508 3509 /* Done with PERLVAR macros for now ... */ 3510 #undef PERLVAR 3511 #undef PERLVARA 3512 #undef PERLVARI 3513 #undef PERLVARIC 3514 3515 /* Types used by pack/unpack */ 3516 typedef enum { 3517 e_no_len, /* no length */ 3518 e_number, /* number, [] */ 3519 e_star /* asterisk */ 3520 } howlen_t; 3521 3522 typedef struct { 3523 char* patptr; /* current template char */ 3524 char* patend; /* one after last char */ 3525 char* grpbeg; /* 1st char of ()-group */ 3526 char* grpend; /* end of ()-group */ 3527 I32 code; /* template code (!) */ 3528 I32 length; /* length/repeat count */ 3529 howlen_t howlen; /* how length is given */ 3530 int level; /* () nesting level */ 3531 U32 flags; /* /=4, comma=2, pack=1 */ 3532 } tempsym_t; 3533 3534 #include "thread.h" 3535 #include "pp.h" 3536 3537 #ifndef PERL_CALLCONV 3538 # define PERL_CALLCONV 3539 #endif 3540 3541 #ifndef NEXT30_NO_ATTRIBUTE 3542 # ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */ 3543 # ifdef __attribute__ /* Avoid possible redefinition errors */ 3544 # undef __attribute__ 3545 # endif 3546 # define __attribute__(attr) 3547 # endif 3548 #endif 3549 3550 #undef PERL_CKDEF 3551 #undef PERL_PPDEF 3552 #define PERL_CKDEF(s) OP *s (pTHX_ OP *o); 3553 #define PERL_PPDEF(s) OP *s (pTHX); 3554 3555 #include "proto.h" 3556 3557 /* this has structure inits, so it cannot be included before here */ 3558 #include "opcode.h" 3559 3560 /* The following must follow proto.h as #defines mess up syntax */ 3561 3562 #if !defined(PERL_FOR_X2P) 3563 # include "embedvar.h" 3564 #endif 3565 3566 /* Now include all the 'global' variables 3567 * If we don't have threads or multiple interpreters 3568 * these include variables that would have been their struct-s 3569 */ 3570 3571 #define PERLVAR(var,type) EXT type PL_##var; 3572 #define PERLVARA(var,n,type) EXT type PL_##var[n]; 3573 #define PERLVARI(var,type,init) EXT type PL_##var INIT(init); 3574 #define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init); 3575 3576 #if !defined(MULTIPLICITY) 3577 START_EXTERN_C 3578 # include "intrpvar.h" 3579 # ifndef USE_5005THREADS 3580 # include "thrdvar.h" 3581 # endif 3582 END_EXTERN_C 3583 #endif 3584 3585 #if defined(WIN32) 3586 /* Now all the config stuff is setup we can include embed.h */ 3587 # include "embed.h" 3588 #endif 3589 3590 #ifndef PERL_GLOBAL_STRUCT 3591 START_EXTERN_C 3592 3593 # include "perlvars.h" 3594 3595 END_EXTERN_C 3596 #endif 3597 3598 #include "reentr.inc" 3599 3600 #undef PERLVAR 3601 #undef PERLVARA 3602 #undef PERLVARI 3603 #undef PERLVARIC 3604 3605 START_EXTERN_C 3606 3607 #ifdef DOINIT 3608 3609 EXT MGVTBL PL_vtbl_sv = {MEMBER_TO_FPTR(Perl_magic_get), 3610 MEMBER_TO_FPTR(Perl_magic_set), 3611 MEMBER_TO_FPTR(Perl_magic_len), 3612 0, 0}; 3613 EXT MGVTBL PL_vtbl_env = {0, MEMBER_TO_FPTR(Perl_magic_set_all_env), 3614 0, MEMBER_TO_FPTR(Perl_magic_clear_all_env), 3615 0}; 3616 EXT MGVTBL PL_vtbl_envelem = {0, MEMBER_TO_FPTR(Perl_magic_setenv), 3617 0, MEMBER_TO_FPTR(Perl_magic_clearenv), 3618 0}; 3619 EXT MGVTBL PL_vtbl_sig = {0, 0, 0, 0, 0}; 3620 #ifdef PERL_MICRO 3621 EXT MGVTBL PL_vtbl_sigelem = {0, 0, 0, 0, 0}; 3622 #else 3623 EXT MGVTBL PL_vtbl_sigelem = {MEMBER_TO_FPTR(Perl_magic_getsig), 3624 MEMBER_TO_FPTR(Perl_magic_setsig), 3625 0, MEMBER_TO_FPTR(Perl_magic_clearsig), 3626 0}; 3627 #endif 3628 EXT MGVTBL PL_vtbl_pack = {0, 0, 3629 MEMBER_TO_FPTR(Perl_magic_sizepack), 3630 MEMBER_TO_FPTR(Perl_magic_wipepack), 3631 0}; 3632 EXT MGVTBL PL_vtbl_packelem = {MEMBER_TO_FPTR(Perl_magic_getpack), 3633 MEMBER_TO_FPTR(Perl_magic_setpack), 3634 0, MEMBER_TO_FPTR(Perl_magic_clearpack), 3635 0}; 3636 EXT MGVTBL PL_vtbl_dbline = {0, MEMBER_TO_FPTR(Perl_magic_setdbline), 3637 0, 0, 0}; 3638 EXT MGVTBL PL_vtbl_isa = {0, MEMBER_TO_FPTR(Perl_magic_setisa), 3639 0, MEMBER_TO_FPTR(Perl_magic_setisa), 3640 0}; 3641 EXT MGVTBL PL_vtbl_isaelem = {0, MEMBER_TO_FPTR(Perl_magic_setisa), 3642 0, 0, 0}; 3643 EXT MGVTBL PL_vtbl_arylen = {MEMBER_TO_FPTR(Perl_magic_getarylen), 3644 MEMBER_TO_FPTR(Perl_magic_setarylen), 3645 0, 0, 0}; 3646 EXT MGVTBL PL_vtbl_glob = {MEMBER_TO_FPTR(Perl_magic_getglob), 3647 MEMBER_TO_FPTR(Perl_magic_setglob), 3648 0, 0, 0}; 3649 EXT MGVTBL PL_vtbl_mglob = {0, MEMBER_TO_FPTR(Perl_magic_setmglob), 3650 0, 0, 0}; 3651 EXT MGVTBL PL_vtbl_nkeys = {MEMBER_TO_FPTR(Perl_magic_getnkeys), 3652 MEMBER_TO_FPTR(Perl_magic_setnkeys), 3653 0, 0, 0}; 3654 EXT MGVTBL PL_vtbl_taint = {MEMBER_TO_FPTR(Perl_magic_gettaint), 3655 MEMBER_TO_FPTR(Perl_magic_settaint), 3656 0, 0, 0}; 3657 EXT MGVTBL PL_vtbl_substr = {MEMBER_TO_FPTR(Perl_magic_getsubstr), 3658 MEMBER_TO_FPTR(Perl_magic_setsubstr), 3659 0, 0, 0}; 3660 EXT MGVTBL PL_vtbl_vec = {MEMBER_TO_FPTR(Perl_magic_getvec), 3661 MEMBER_TO_FPTR(Perl_magic_setvec), 3662 0, 0, 0}; 3663 EXT MGVTBL PL_vtbl_pos = {MEMBER_TO_FPTR(Perl_magic_getpos), 3664 MEMBER_TO_FPTR(Perl_magic_setpos), 3665 0, 0, 0}; 3666 EXT MGVTBL PL_vtbl_bm = {0, MEMBER_TO_FPTR(Perl_magic_setbm), 3667 0, 0, 0}; 3668 EXT MGVTBL PL_vtbl_fm = {0, MEMBER_TO_FPTR(Perl_magic_setfm), 3669 0, 0, 0}; 3670 EXT MGVTBL PL_vtbl_uvar = {MEMBER_TO_FPTR(Perl_magic_getuvar), 3671 MEMBER_TO_FPTR(Perl_magic_setuvar), 3672 0, 0, 0}; 3673 #ifdef USE_5005THREADS 3674 EXT MGVTBL PL_vtbl_mutex = {0, 0, 0, 0, 3675 MEMBER_TO_FPTR(Perl_magic_mutexfree)}; 3676 #endif /* USE_5005THREADS */ 3677 EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem), 3678 MEMBER_TO_FPTR(Perl_magic_setdefelem), 3679 0, 0, 0}; 3680 3681 EXT MGVTBL PL_vtbl_regexp = {0, MEMBER_TO_FPTR(Perl_magic_setregexp),0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)}; 3682 EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0}; 3683 EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get), 3684 MEMBER_TO_FPTR(Perl_magic_regdatum_set), 0, 0, 0}; 3685 3686 #ifdef USE_LOCALE_COLLATE 3687 EXT MGVTBL PL_vtbl_collxfrm = {0, 3688 MEMBER_TO_FPTR(Perl_magic_setcollxfrm), 3689 0, 0, 0}; 3690 #endif 3691 3692 EXT MGVTBL PL_vtbl_amagic = {0, MEMBER_TO_FPTR(Perl_magic_setamagic), 3693 0, 0, MEMBER_TO_FPTR(Perl_magic_setamagic)}; 3694 EXT MGVTBL PL_vtbl_amagicelem = {0, MEMBER_TO_FPTR(Perl_magic_setamagic), 3695 0, 0, MEMBER_TO_FPTR(Perl_magic_setamagic)}; 3696 3697 EXT MGVTBL PL_vtbl_backref = {0, 0, 3698 0, 0, MEMBER_TO_FPTR(Perl_magic_killbackrefs)}; 3699 3700 EXT MGVTBL PL_vtbl_ovrld = {0, 0, 3701 0, 0, MEMBER_TO_FPTR(Perl_magic_freeovrld)}; 3702 3703 EXT MGVTBL PL_vtbl_utf8 = {0, 3704 MEMBER_TO_FPTR(Perl_magic_setutf8), 3705 0, 0, 0}; 3706 3707 #else /* !DOINIT */ 3708 3709 EXT MGVTBL PL_vtbl_sv; 3710 EXT MGVTBL PL_vtbl_env; 3711 EXT MGVTBL PL_vtbl_envelem; 3712 EXT MGVTBL PL_vtbl_sig; 3713 EXT MGVTBL PL_vtbl_sigelem; 3714 EXT MGVTBL PL_vtbl_pack; 3715 EXT MGVTBL PL_vtbl_packelem; 3716 EXT MGVTBL PL_vtbl_dbline; 3717 EXT MGVTBL PL_vtbl_isa; 3718 EXT MGVTBL PL_vtbl_isaelem; 3719 EXT MGVTBL PL_vtbl_arylen; 3720 EXT MGVTBL PL_vtbl_glob; 3721 EXT MGVTBL PL_vtbl_mglob; 3722 EXT MGVTBL PL_vtbl_nkeys; 3723 EXT MGVTBL PL_vtbl_taint; 3724 EXT MGVTBL PL_vtbl_substr; 3725 EXT MGVTBL PL_vtbl_vec; 3726 EXT MGVTBL PL_vtbl_pos; 3727 EXT MGVTBL PL_vtbl_bm; 3728 EXT MGVTBL PL_vtbl_fm; 3729 EXT MGVTBL PL_vtbl_uvar; 3730 EXT MGVTBL PL_vtbl_ovrld; 3731 3732 #ifdef USE_5005THREADS 3733 EXT MGVTBL PL_vtbl_mutex; 3734 #endif /* USE_5005THREADS */ 3735 3736 EXT MGVTBL PL_vtbl_defelem; 3737 EXT MGVTBL PL_vtbl_regexp; 3738 EXT MGVTBL PL_vtbl_regdata; 3739 EXT MGVTBL PL_vtbl_regdatum; 3740 3741 #ifdef USE_LOCALE_COLLATE 3742 EXT MGVTBL PL_vtbl_collxfrm; 3743 #endif 3744 3745 EXT MGVTBL PL_vtbl_amagic; 3746 EXT MGVTBL PL_vtbl_amagicelem; 3747 3748 EXT MGVTBL PL_vtbl_backref; 3749 EXT MGVTBL PL_vtbl_utf8; 3750 3751 #endif /* !DOINIT */ 3752 3753 enum { 3754 fallback_amg, abs_amg, 3755 bool__amg, nomethod_amg, 3756 string_amg, numer_amg, 3757 add_amg, add_ass_amg, 3758 subtr_amg, subtr_ass_amg, 3759 mult_amg, mult_ass_amg, 3760 div_amg, div_ass_amg, 3761 modulo_amg, modulo_ass_amg, 3762 pow_amg, pow_ass_amg, 3763 lshift_amg, lshift_ass_amg, 3764 rshift_amg, rshift_ass_amg, 3765 band_amg, band_ass_amg, 3766 bor_amg, bor_ass_amg, 3767 bxor_amg, bxor_ass_amg, 3768 lt_amg, le_amg, 3769 gt_amg, ge_amg, 3770 eq_amg, ne_amg, 3771 ncmp_amg, scmp_amg, 3772 slt_amg, sle_amg, 3773 sgt_amg, sge_amg, 3774 seq_amg, sne_amg, 3775 not_amg, compl_amg, 3776 inc_amg, dec_amg, 3777 atan2_amg, cos_amg, 3778 sin_amg, exp_amg, 3779 log_amg, sqrt_amg, 3780 repeat_amg, repeat_ass_amg, 3781 concat_amg, concat_ass_amg, 3782 copy_amg, neg_amg, 3783 to_sv_amg, to_av_amg, 3784 to_hv_amg, to_gv_amg, 3785 to_cv_amg, iter_amg, 3786 int_amg, DESTROY_amg, 3787 max_amg_code 3788 /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */ 3789 }; 3790 3791 #define NofAMmeth max_amg_code 3792 #define AMG_id2name(id) ((char*)PL_AMG_names[id]+1) 3793 3794 #ifdef DOINIT 3795 EXTCONST char * PL_AMG_names[NofAMmeth] = { 3796 /* Names kept in the symbol table. fallback => "()", the rest has 3797 "(" prepended. The only other place in perl which knows about 3798 this convention is AMG_id2name (used for debugging output and 3799 'nomethod' only), the only other place which has it hardwired is 3800 overload.pm. */ 3801 "()", "(abs", /* "fallback" should be the first. */ 3802 "(bool", "(nomethod", 3803 "(\"\"", "(0+", 3804 "(+", "(+=", 3805 "(-", "(-=", 3806 "(*", "(*=", 3807 "(/", "(/=", 3808 "(%", "(%=", 3809 "(**", "(**=", 3810 "(<<", "(<<=", 3811 "(>>", "(>>=", 3812 "(&", "(&=", 3813 "(|", "(|=", 3814 "(^", "(^=", 3815 "(<", "(<=", 3816 "(>", "(>=", 3817 "(==", "(!=", 3818 "(<=>", "(cmp", 3819 "(lt", "(le", 3820 "(gt", "(ge", 3821 "(eq", "(ne", 3822 "(!", "(~", 3823 "(++", "(--", 3824 "(atan2", "(cos", 3825 "(sin", "(exp", 3826 "(log", "(sqrt", 3827 "(x", "(x=", 3828 "(.", "(.=", 3829 "(=", "(neg", 3830 "(${}", "(@{}", 3831 "(%{}", "(*{}", 3832 "(&{}", "(<>", 3833 "(int", "DESTROY", 3834 }; 3835 #else 3836 EXTCONST char * PL_AMG_names[NofAMmeth]; 3837 #endif /* def INITAMAGIC */ 3838 3839 END_EXTERN_C 3840 3841 struct am_table { 3842 U32 was_ok_sub; 3843 long was_ok_am; 3844 U32 flags; 3845 CV* table[NofAMmeth]; 3846 long fallback; 3847 }; 3848 struct am_table_short { 3849 U32 was_ok_sub; 3850 long was_ok_am; 3851 U32 flags; 3852 }; 3853 typedef struct am_table AMT; 3854 typedef struct am_table_short AMTS; 3855 3856 #define AMGfallNEVER 1 3857 #define AMGfallNO 2 3858 #define AMGfallYES 3 3859 3860 #define AMTf_AMAGIC 1 3861 #define AMTf_OVERLOADED 2 3862 #define AMT_AMAGIC(amt) ((amt)->flags & AMTf_AMAGIC) 3863 #define AMT_AMAGIC_on(amt) ((amt)->flags |= AMTf_AMAGIC) 3864 #define AMT_AMAGIC_off(amt) ((amt)->flags &= ~AMTf_AMAGIC) 3865 #define AMT_OVERLOADED(amt) ((amt)->flags & AMTf_OVERLOADED) 3866 #define AMT_OVERLOADED_on(amt) ((amt)->flags |= AMTf_OVERLOADED) 3867 #define AMT_OVERLOADED_off(amt) ((amt)->flags &= ~AMTf_OVERLOADED) 3868 3869 #define StashHANDLER(stash,meth) gv_handler((stash),CAT2(meth,_amg)) 3870 3871 /* 3872 * some compilers like to redefine cos et alia as faster 3873 * (and less accurate?) versions called F_cos et cetera (Quidquid 3874 * latine dictum sit, altum viditur.) This trick collides with 3875 * the Perl overloading (amg). The following #defines fool both. 3876 */ 3877 3878 #ifdef _FASTMATH 3879 # ifdef atan2 3880 # define F_atan2_amg atan2_amg 3881 # endif 3882 # ifdef cos 3883 # define F_cos_amg cos_amg 3884 # endif 3885 # ifdef exp 3886 # define F_exp_amg exp_amg 3887 # endif 3888 # ifdef log 3889 # define F_log_amg log_amg 3890 # endif 3891 # ifdef pow 3892 # define F_pow_amg pow_amg 3893 # endif 3894 # ifdef sin 3895 # define F_sin_amg sin_amg 3896 # endif 3897 # ifdef sqrt 3898 # define F_sqrt_amg sqrt_amg 3899 # endif 3900 #endif /* _FASTMATH */ 3901 3902 #define PERLDB_ALL (PERLDBf_SUB | PERLDBf_LINE | \ 3903 PERLDBf_NOOPT | PERLDBf_INTER | \ 3904 PERLDBf_SUBLINE| PERLDBf_SINGLE| \ 3905 PERLDBf_NAMEEVAL| PERLDBf_NAMEANON) 3906 /* No _NONAME, _GOTO */ 3907 #define PERLDBf_SUB 0x01 /* Debug sub enter/exit */ 3908 #define PERLDBf_LINE 0x02 /* Keep line # */ 3909 #define PERLDBf_NOOPT 0x04 /* Switch off optimizations */ 3910 #define PERLDBf_INTER 0x08 /* Preserve more data for 3911 later inspections */ 3912 #define PERLDBf_SUBLINE 0x10 /* Keep subr source lines */ 3913 #define PERLDBf_SINGLE 0x20 /* Start with single-step on */ 3914 #define PERLDBf_NONAME 0x40 /* For _SUB: no name of the subr */ 3915 #define PERLDBf_GOTO 0x80 /* Report goto: call DB::goto */ 3916 #define PERLDBf_NAMEEVAL 0x100 /* Informative names for evals */ 3917 #define PERLDBf_NAMEANON 0x200 /* Informative names for anon subs */ 3918 3919 #define PERLDB_SUB (PL_perldb && (PL_perldb & PERLDBf_SUB)) 3920 #define PERLDB_LINE (PL_perldb && (PL_perldb & PERLDBf_LINE)) 3921 #define PERLDB_NOOPT (PL_perldb && (PL_perldb & PERLDBf_NOOPT)) 3922 #define PERLDB_INTER (PL_perldb && (PL_perldb & PERLDBf_INTER)) 3923 #define PERLDB_SUBLINE (PL_perldb && (PL_perldb & PERLDBf_SUBLINE)) 3924 #define PERLDB_SINGLE (PL_perldb && (PL_perldb & PERLDBf_SINGLE)) 3925 #define PERLDB_SUB_NN (PL_perldb && (PL_perldb & (PERLDBf_NONAME))) 3926 #define PERLDB_GOTO (PL_perldb && (PL_perldb & PERLDBf_GOTO)) 3927 #define PERLDB_NAMEEVAL (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL)) 3928 #define PERLDB_NAMEANON (PL_perldb && (PL_perldb & PERLDBf_NAMEANON)) 3929 3930 3931 #ifdef USE_LOCALE_NUMERIC 3932 3933 #define SET_NUMERIC_STANDARD() \ 3934 set_numeric_standard(); 3935 3936 #define SET_NUMERIC_LOCAL() \ 3937 set_numeric_local(); 3938 3939 #define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) 3940 #define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) 3941 3942 #define IN_LOCALE \ 3943 (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) 3944 3945 #define STORE_NUMERIC_LOCAL_SET_STANDARD() \ 3946 bool was_local = PL_numeric_local && IN_LOCALE; \ 3947 if (was_local) SET_NUMERIC_STANDARD(); 3948 3949 #define STORE_NUMERIC_STANDARD_SET_LOCAL() \ 3950 bool was_standard = PL_numeric_standard && IN_LOCALE; \ 3951 if (was_standard) SET_NUMERIC_LOCAL(); 3952 3953 #define RESTORE_NUMERIC_LOCAL() \ 3954 if (was_local) SET_NUMERIC_LOCAL(); 3955 3956 #define RESTORE_NUMERIC_STANDARD() \ 3957 if (was_standard) SET_NUMERIC_STANDARD(); 3958 3959 #define Atof my_atof 3960 3961 #else /* !USE_LOCALE_NUMERIC */ 3962 3963 #define SET_NUMERIC_STANDARD() /**/ 3964 #define SET_NUMERIC_LOCAL() /**/ 3965 #define IS_NUMERIC_RADIX(a, b) (0) 3966 #define STORE_NUMERIC_LOCAL_SET_STANDARD() /**/ 3967 #define STORE_NUMERIC_STANDARD_SET_LOCAL() /**/ 3968 #define RESTORE_NUMERIC_LOCAL() /**/ 3969 #define RESTORE_NUMERIC_STANDARD() /**/ 3970 #define Atof my_atof 3971 #define IN_LOCALE_RUNTIME 0 3972 3973 #endif /* !USE_LOCALE_NUMERIC */ 3974 3975 #if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG 3976 # ifdef __hpux 3977 # define strtoll __strtoll /* secret handshake */ 3978 # endif 3979 # ifdef WIN64 3980 # define strtoll _strtoi64 /* secret handshake */ 3981 # endif 3982 # if !defined(Strtol) && defined(HAS_STRTOLL) 3983 # define Strtol strtoll 3984 # endif 3985 # if !defined(Strtol) && defined(HAS_STRTOQ) 3986 # define Strtol strtoq 3987 # endif 3988 /* is there atoq() anywhere? */ 3989 #endif 3990 #if !defined(Strtol) && defined(HAS_STRTOL) 3991 # define Strtol strtol 3992 #endif 3993 #ifndef Atol 3994 /* It would be more fashionable to use Strtol() to define atol() 3995 * (as is done for Atoul(), see below) but for backward compatibility 3996 * we just assume atol(). */ 3997 # if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL) 3998 # ifdef WIN64 3999 # define atoll _atoi64 /* secret handshake */ 4000 # endif 4001 # define Atol atoll 4002 # else 4003 # define Atol atol 4004 # endif 4005 #endif 4006 4007 #if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG 4008 # ifdef __hpux 4009 # define strtoull __strtoull /* secret handshake */ 4010 # endif 4011 # ifdef WIN64 4012 # define strtoull _strtoui64 /* secret handshake */ 4013 # endif 4014 # if !defined(Strtoul) && defined(HAS_STRTOULL) 4015 # define Strtoul strtoull 4016 # endif 4017 # if !defined(Strtoul) && defined(HAS_STRTOUQ) 4018 # define Strtoul strtouq 4019 # endif 4020 /* is there atouq() anywhere? */ 4021 #endif 4022 #if !defined(Strtoul) && defined(HAS_STRTOUL) 4023 # define Strtoul strtoul 4024 #endif 4025 #if !defined(Strtoul) && defined(HAS_STRTOL) /* Last resort. */ 4026 # define Strtoul(s, e, b) strchr((s), '-') ? ULONG_MAX : (unsigned long)strtol((s), (e), (b)) 4027 #endif 4028 #ifndef Atoul 4029 # define Atoul(s) Strtoul(s, (char **)NULL, 10) 4030 #endif 4031 4032 4033 /* if these never got defined, they need defaults */ 4034 #ifndef PERL_SET_CONTEXT 4035 # define PERL_SET_CONTEXT(i) PERL_SET_INTERP(i) 4036 #endif 4037 4038 #ifndef PERL_GET_CONTEXT 4039 # define PERL_GET_CONTEXT PERL_GET_INTERP 4040 #endif 4041 4042 #ifndef PERL_GET_THX 4043 # define PERL_GET_THX ((void*)NULL) 4044 #endif 4045 4046 #ifndef PERL_SET_THX 4047 # define PERL_SET_THX(t) NOOP 4048 #endif 4049 4050 #ifndef PERL_SCRIPT_MODE 4051 #define PERL_SCRIPT_MODE "r" 4052 #endif 4053 4054 /* 4055 * Some operating systems are stingy with stack allocation, 4056 * so perl may have to guard against stack overflow. 4057 */ 4058 #ifndef PERL_STACK_OVERFLOW_CHECK 4059 #define PERL_STACK_OVERFLOW_CHECK() NOOP 4060 #endif 4061 4062 /* 4063 * Some nonpreemptive operating systems find it convenient to 4064 * check for asynchronous conditions after each op execution. 4065 * Keep this check simple, or it may slow down execution 4066 * massively. 4067 */ 4068 4069 #ifndef PERL_MICRO 4070 # ifndef PERL_ASYNC_CHECK 4071 # define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals() 4072 # endif 4073 #endif 4074 4075 #ifndef PERL_ASYNC_CHECK 4076 # define PERL_ASYNC_CHECK() NOOP 4077 #endif 4078 4079 /* 4080 * On some operating systems, a memory allocation may succeed, 4081 * but put the process too close to the system's comfort limit. 4082 * In this case, PERL_ALLOC_CHECK frees the pointer and sets 4083 * it to NULL. 4084 */ 4085 #ifndef PERL_ALLOC_CHECK 4086 #define PERL_ALLOC_CHECK(p) NOOP 4087 #endif 4088 4089 /* 4090 * nice_chunk and nice_chunk size need to be set 4091 * and queried under the protection of sv_mutex 4092 */ 4093 #define offer_nice_chunk(chunk, chunk_size) STMT_START { \ 4094 void *new_chunk; \ 4095 U32 new_chunk_size; \ 4096 LOCK_SV_MUTEX; \ 4097 new_chunk = (void *)(chunk); \ 4098 new_chunk_size = (chunk_size); \ 4099 if (new_chunk_size > PL_nice_chunk_size) { \ 4100 if (PL_nice_chunk) Safefree(PL_nice_chunk); \ 4101 PL_nice_chunk = new_chunk; \ 4102 PL_nice_chunk_size = new_chunk_size; \ 4103 } else { \ 4104 Safefree(chunk); \ 4105 } \ 4106 UNLOCK_SV_MUTEX; \ 4107 } STMT_END 4108 4109 #ifdef HAS_SEM 4110 # include <sys/ipc.h> 4111 # include <sys/sem.h> 4112 # ifndef HAS_UNION_SEMUN /* Provide the union semun. */ 4113 union semun { 4114 int val; 4115 struct semid_ds *buf; 4116 unsigned short *array; 4117 }; 4118 # endif 4119 # ifdef USE_SEMCTL_SEMUN 4120 # ifdef IRIX32_SEMUN_BROKEN_BY_GCC 4121 union gccbug_semun { 4122 int val; 4123 struct semid_ds *buf; 4124 unsigned short *array; 4125 char __dummy[5]; 4126 }; 4127 # define semun gccbug_semun 4128 # endif 4129 # define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun) 4130 # else 4131 # ifdef USE_SEMCTL_SEMID_DS 4132 # ifdef EXTRA_F_IN_SEMUN_BUF 4133 # define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff) 4134 # else 4135 # define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf) 4136 # endif 4137 # endif 4138 # endif 4139 #endif 4140 4141 /* 4142 * Boilerplate macros for initializing and accessing interpreter-local 4143 * data from C. All statics in extensions should be reworked to use 4144 * this, if you want to make the extension thread-safe. See ext/re/re.xs 4145 * for an example of the use of these macros, and perlxs.pod for more. 4146 * 4147 * Code that uses these macros is responsible for the following: 4148 * 1. #define MY_CXT_KEY to a unique string, e.g. 4149 * "DynaLoader::_guts" XS_VERSION 4150 * 2. Declare a typedef named my_cxt_t that is a structure that contains 4151 * all the data that needs to be interpreter-local. 4152 * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. 4153 * 4. Use the MY_CXT_INIT macro such that it is called exactly once 4154 * (typically put in the BOOT: section). 4155 * 5. Use the members of the my_cxt_t structure everywhere as 4156 * MY_CXT.member. 4157 * 6. Use the dMY_CXT macro (a declaration) in all the functions that 4158 * access MY_CXT. 4159 */ 4160 4161 #if defined(PERL_IMPLICIT_CONTEXT) 4162 4163 /* This must appear in all extensions that define a my_cxt_t structure, 4164 * right after the definition (i.e. at file scope). The non-threads 4165 * case below uses it to declare the data as static. */ 4166 #define START_MY_CXT 4167 4168 /* Fetches the SV that keeps the per-interpreter data. */ 4169 #define dMY_CXT_SV \ 4170 SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ 4171 sizeof(MY_CXT_KEY)-1, TRUE) 4172 4173 /* This declaration should be used within all functions that use the 4174 * interpreter-local data. */ 4175 #define dMY_CXT \ 4176 dMY_CXT_SV; \ 4177 my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)) 4178 4179 /* Creates and zeroes the per-interpreter data. 4180 * (We allocate my_cxtp in a Perl SV so that it will be released when 4181 * the interpreter goes away.) */ 4182 #define MY_CXT_INIT \ 4183 dMY_CXT_SV; \ 4184 /* newSV() allocates one more than needed */ \ 4185 my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ 4186 Zero(my_cxtp, 1, my_cxt_t); \ 4187 sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) 4188 4189 /* This macro must be used to access members of the my_cxt_t structure. 4190 * e.g. MYCXT.some_data */ 4191 #define MY_CXT (*my_cxtp) 4192 4193 /* Judicious use of these macros can reduce the number of times dMY_CXT 4194 * is used. Use is similar to pTHX, aTHX etc. */ 4195 #define pMY_CXT my_cxt_t *my_cxtp 4196 #define pMY_CXT_ pMY_CXT, 4197 #define _pMY_CXT ,pMY_CXT 4198 #define aMY_CXT my_cxtp 4199 #define aMY_CXT_ aMY_CXT, 4200 #define _aMY_CXT ,aMY_CXT 4201 4202 #else /* USE_ITHREADS */ 4203 4204 #define START_MY_CXT static my_cxt_t my_cxt; 4205 #define dMY_CXT_SV dNOOP 4206 #define dMY_CXT dNOOP 4207 #define MY_CXT_INIT NOOP 4208 #define MY_CXT my_cxt 4209 4210 #define pMY_CXT void 4211 #define pMY_CXT_ 4212 #define _pMY_CXT 4213 #define aMY_CXT 4214 #define aMY_CXT_ 4215 #define _aMY_CXT 4216 4217 #endif /* !defined(USE_ITHREADS) */ 4218 4219 #ifdef I_FCNTL 4220 # include <fcntl.h> 4221 #endif 4222 4223 #ifdef __Lynx__ 4224 # include <fcntl.h> 4225 #endif 4226 4227 #ifdef I_SYS_FILE 4228 # include <sys/file.h> 4229 #endif 4230 4231 #if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO) 4232 int flock(int fd, int op); 4233 #endif 4234 4235 #ifndef O_RDONLY 4236 /* Assume UNIX defaults */ 4237 # define O_RDONLY 0000 4238 # define O_WRONLY 0001 4239 # define O_RDWR 0002 4240 # define O_CREAT 0100 4241 #endif 4242 4243 #ifndef O_BINARY 4244 # define O_BINARY 0 4245 #endif 4246 4247 #ifndef O_TEXT 4248 # define O_TEXT 0 4249 #endif 4250 4251 #if O_TEXT != O_BINARY 4252 /* If you have different O_TEXT and O_BINARY and you are a CLRF shop, 4253 * that is, you are somehow DOSish. */ 4254 # if defined(__BEOS__) || defined(__VOS__) || defined(__CYGWIN__) 4255 /* BeOS has O_TEXT != O_BINARY but O_TEXT and O_BINARY have no effect; 4256 * BeOS is always UNIXoid (LF), not DOSish (CRLF). */ 4257 /* VOS has O_TEXT != O_BINARY, and they have effect, 4258 * but VOS always uses LF, never CRLF. */ 4259 /* If you have O_TEXT different from your O_BINARY but you still are 4260 * not a CRLF shop. */ 4261 # undef PERLIO_USING_CRLF 4262 # else 4263 /* If you really are DOSish. */ 4264 # define PERLIO_USING_CRLF 1 4265 # endif 4266 #endif 4267 4268 #ifdef IAMSUID 4269 4270 #ifdef I_SYS_STATVFS 4271 # if defined(PERL_SCO) && !defined(_SVID3) 4272 # define _SVID3 4273 # endif 4274 # include <sys/statvfs.h> /* for f?statvfs() */ 4275 #endif 4276 #ifdef I_SYS_MOUNT 4277 # include <sys/mount.h> /* for *BSD f?statfs() */ 4278 #endif 4279 #ifdef I_MNTENT 4280 # include <mntent.h> /* for getmntent() */ 4281 #endif 4282 #ifdef I_SYS_STATFS 4283 # include <sys/statfs.h> /* for some statfs() */ 4284 #endif 4285 #ifdef I_SYS_VFS 4286 # ifdef __sgi 4287 # define sv IRIX_sv /* kludge: IRIX has an sv of its own */ 4288 # endif 4289 # include <sys/vfs.h> /* for some statfs() */ 4290 # ifdef __sgi 4291 # undef IRIX_sv 4292 # endif 4293 #endif 4294 #ifdef I_USTAT 4295 # include <ustat.h> /* for ustat() */ 4296 #endif 4297 4298 #if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID) 4299 # define PERL_MOUNT_NOSUID MOUNT_NOSUID 4300 #endif 4301 #if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID) 4302 # define PERL_MOUNT_NOSUID MNT_NOSUID 4303 #endif 4304 #if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID) 4305 # define PERL_MOUNT_NOSUID MS_NOSUID 4306 #endif 4307 #if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID) 4308 # define PERL_MOUNT_NOSUID M_NOSUID 4309 #endif 4310 4311 #if !defined(PERL_MOUNT_NOEXEC) && defined(MOUNT_NOEXEC) 4312 # define PERL_MOUNT_NOEXEC MOUNT_NOEXEC 4313 #endif 4314 #if !defined(PERL_MOUNT_NOEXEC) && defined(MNT_NOEXEC) 4315 # define PERL_MOUNT_NOEXEC MNT_NOEXEC 4316 #endif 4317 #if !defined(PERL_MOUNT_NOEXEC) && defined(MS_NOEXEC) 4318 # define PERL_MOUNT_NOEXEC MS_NOEXEC 4319 #endif 4320 #if !defined(PERL_MOUNT_NOEXEC) && defined(M_NOEXEC) 4321 # define PERL_MOUNT_NOEXEC M_NOEXEC 4322 #endif 4323 4324 #endif /* IAMSUID */ 4325 4326 #ifdef I_LIBUTIL 4327 # include <libutil.h> /* setproctitle() in some FreeBSDs */ 4328 #endif 4329 4330 #ifndef EXEC_ARGV_CAST 4331 #define EXEC_ARGV_CAST(x) x 4332 #endif 4333 4334 #define IS_NUMBER_IN_UV 0x01 /* number within UV range (maybe not 4335 int). value returned in pointed- 4336 to UV */ 4337 #define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */ 4338 #define IS_NUMBER_NOT_INT 0x04 /* saw . or E notation */ 4339 #define IS_NUMBER_NEG 0x08 /* leading minus sign */ 4340 #define IS_NUMBER_INFINITY 0x10 /* this is big */ 4341 #define IS_NUMBER_NAN 0x20 /* this is not */ 4342 4343 #define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) 4344 4345 /* Input flags: */ 4346 #define PERL_SCAN_ALLOW_UNDERSCORES 0x01 /* grok_??? accept _ in numbers */ 4347 #define PERL_SCAN_DISALLOW_PREFIX 0x02 /* grok_??? reject 0x in hex etc */ 4348 #define PERL_SCAN_SILENT_ILLDIGIT 0x04 /* grok_??? not warn about illegal digits */ 4349 /* Output flags: */ 4350 #define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 /* should this merge with above? */ 4351 4352 /* to let user control profiling */ 4353 #ifdef PERL_GPROF_CONTROL 4354 extern void moncontrol(int); 4355 #define PERL_GPROF_MONCONTROL(x) moncontrol(x) 4356 #else 4357 #define PERL_GPROF_MONCONTROL(x) 4358 #endif 4359 4360 #ifdef UNDER_CE 4361 #include "wince.h" 4362 #endif 4363 4364 /* ISO 6429 NEL - C1 control NExt Line */ 4365 /* See http://www.unicode.org/unicode/reports/tr13/ */ 4366 #ifdef EBCDIC /* In EBCDIC NEL is just an alias for LF */ 4367 # if '^' == 95 /* CP 1047: MVS OpenEdition - OS/390 - z/OS */ 4368 # define NEXT_LINE_CHAR 0x15 4369 # else /* CDRA */ 4370 # define NEXT_LINE_CHAR 0x25 4371 # endif 4372 #else 4373 # define NEXT_LINE_CHAR 0x85 4374 #endif 4375 4376 /* The UTF-8 bytes of the Unicode LS and PS, U+2028 and U+2029 */ 4377 #define UNICODE_LINE_SEPA_0 0xE2 4378 #define UNICODE_LINE_SEPA_1 0x80 4379 #define UNICODE_LINE_SEPA_2 0xA8 4380 #define UNICODE_PARA_SEPA_0 0xE2 4381 #define UNICODE_PARA_SEPA_1 0x80 4382 #define UNICODE_PARA_SEPA_2 0xA9 4383 4384 #ifndef PIPESOCK_MODE 4385 # define PIPESOCK_MODE 4386 #endif 4387 4388 #ifndef SOCKET_OPEN_MODE 4389 # define SOCKET_OPEN_MODE PIPESOCK_MODE 4390 #endif 4391 4392 #ifndef PIPE_OPEN_MODE 4393 # define PIPE_OPEN_MODE PIPESOCK_MODE 4394 #endif 4395 4396 #define PERL_MAGIC_UTF8_CACHESIZE 2 4397 4398 #define PERL_UNICODE_STDIN_FLAG 0x0001 4399 #define PERL_UNICODE_STDOUT_FLAG 0x0002 4400 #define PERL_UNICODE_STDERR_FLAG 0x0004 4401 #define PERL_UNICODE_IN_FLAG 0x0008 4402 #define PERL_UNICODE_OUT_FLAG 0x0010 4403 #define PERL_UNICODE_ARGV_FLAG 0x0020 4404 #define PERL_UNICODE_LOCALE_FLAG 0x0040 4405 #define PERL_UNICODE_WIDESYSCALLS_FLAG 0x0080 /* for Sarathy */ 4406 4407 #define PERL_UNICODE_STD_FLAG \ 4408 (PERL_UNICODE_STDIN_FLAG | \ 4409 PERL_UNICODE_STDOUT_FLAG | \ 4410 PERL_UNICODE_STDERR_FLAG) 4411 4412 #define PERL_UNICODE_INOUT_FLAG \ 4413 (PERL_UNICODE_IN_FLAG | \ 4414 PERL_UNICODE_OUT_FLAG) 4415 4416 #define PERL_UNICODE_DEFAULT_FLAGS \ 4417 (PERL_UNICODE_STD_FLAG | \ 4418 PERL_UNICODE_INOUT_FLAG | \ 4419 PERL_UNICODE_LOCALE_FLAG) 4420 4421 #define PERL_UNICODE_ALL_FLAGS 0x00ff 4422 4423 #define PERL_UNICODE_STDIN 'I' 4424 #define PERL_UNICODE_STDOUT 'O' 4425 #define PERL_UNICODE_STDERR 'E' 4426 #define PERL_UNICODE_STD 'S' 4427 #define PERL_UNICODE_IN 'i' 4428 #define PERL_UNICODE_OUT 'o' 4429 #define PERL_UNICODE_INOUT 'D' 4430 #define PERL_UNICODE_ARGV 'A' 4431 #define PERL_UNICODE_LOCALE 'L' 4432 #define PERL_UNICODE_WIDESYSCALLS 'W' 4433 4434 #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 4435 4436 /* From sigaction(2) (FreeBSD man page): 4437 * | Signal routines normally execute with the signal that 4438 * | caused their invocation blocked, but other signals may 4439 * | yet occur. 4440 * Emulation of this behavior (from within Perl) is enabled 4441 * by defining PERL_BLOCK_SIGNALS. 4442 */ 4443 #define PERL_BLOCK_SIGNALS 4444 4445 #if defined(HAS_SIGPROCMASK) && defined(PERL_BLOCK_SIGNALS) 4446 # define PERL_BLOCKSIG_ADD(set,sig) \ 4447 sigset_t set; sigemptyset(&(set)); sigaddset(&(set), sig) 4448 # define PERL_BLOCKSIG_BLOCK(set) \ 4449 sigprocmask(SIG_BLOCK, &(set), NULL) 4450 # define PERL_BLOCKSIG_UNBLOCK(set) \ 4451 sigprocmask(SIG_UNBLOCK, &(set), NULL) 4452 #endif /* HAS_SIGPROCMASK && PERL_BLOCK_SIGNALS */ 4453 4454 /* How about the old style of sigblock()? */ 4455 4456 #ifndef PERL_BLOCKSIG_ADD 4457 # define PERL_BLOCKSIG_ADD(set, sig) NOOP 4458 #endif 4459 #ifndef PERL_BLOCKSIG_BLOCK 4460 # define PERL_BLOCKSIG_BLOCK(set) NOOP 4461 #endif 4462 #ifndef PERL_BLOCKSIG_UNBLOCK 4463 # define PERL_BLOCKSIG_UNBLOCK(set) NOOP 4464 #endif 4465 4466 /* Use instead of abs() since abs() forces its argument to be an int, 4467 * but also beware since this evaluates its argument twice, so no x++. */ 4468 #define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) 4469 4470 /* and finally... */ 4471 #define PERL_PATCHLEVEL_H_IMPLICIT 4472 #include "patchlevel.h" 4473 #undef PERL_PATCHLEVEL_H_IMPLICIT 4474 4475 /* Mention 4476 4477 NV_PRESERVES_UV 4478 4479 HAS_MKSTEMP 4480 HAS_MKSTEMPS 4481 HAS_MKDTEMP 4482 4483 HAS_GETCWD 4484 4485 HAS_MMAP 4486 HAS_MPROTECT 4487 HAS_MSYNC 4488 HAS_MADVISE 4489 HAS_MUNMAP 4490 I_SYSMMAN 4491 Mmap_t 4492 4493 NVef 4494 NVff 4495 NVgf 4496 4497 HAS_UALARM 4498 HAS_USLEEP 4499 4500 HAS_SETITIMER 4501 HAS_GETITIMER 4502 4503 HAS_SENDMSG 4504 HAS_RECVMSG 4505 HAS_READV 4506 HAS_WRITEV 4507 I_SYSUIO 4508 HAS_STRUCT_MSGHDR 4509 HAS_STRUCT_CMSGHDR 4510 4511 HAS_NL_LANGINFO 4512 4513 HAS_DIRFD 4514 4515 so that Configure picks them up. */ 4516 4517 /* Source code compatibility cruft: 4518 PERL_XS_APIVERSION is not used, and has been superseded by inc_version_list 4519 It and PERL_PM_APIVERSION are retained for source compatibility in the 4520 5.8.x maintenance branch. 4521 */ 4522 4523 #define PERL_XS_APIVERSION "5.8.3" 4524 #define PERL_PM_APIVERSION "5.005" 4525 4526 #endif /* Include guard */ 4527 4528