1 /* mathoms.c 2 * 3 * Copyright (C) 2005, 2006, 2007, 2008 by Larry Wall and others 4 * 5 * You may distribute under the terms of either the GNU General Public 6 * License or the Artistic License, as specified in the README file. 7 * 8 */ 9 10 /* 11 * Anything that Hobbits had no immediate use for, but were unwilling to 12 * throw away, they called a mathom. Their dwellings were apt to become 13 * rather crowded with mathoms, and many of the presents that passed from 14 * hand to hand were of that sort. 15 * 16 * [p.5 of _The Lord of the Rings_: "Prologue"] 17 */ 18 19 20 21 /* 22 * This file contains mathoms, various binary artifacts from previous 23 * versions of Perl. For binary or source compatibility reasons, though, 24 * we cannot completely remove them from the core code. 25 * 26 * SMP - Oct. 24, 2005 27 * 28 */ 29 30 #include "EXTERN.h" 31 #define PERL_IN_MATHOMS_C 32 #include "perl.h" 33 34 #ifdef NO_MATHOMS 35 /* ..." warning: ISO C forbids an empty source file" 36 So make sure we have something in here by processing the headers anyway. 37 */ 38 #else 39 40 PERL_CALLCONV OP * Perl_ref(pTHX_ OP *o, I32 type); 41 PERL_CALLCONV void Perl_sv_unref(pTHX_ SV *sv); 42 PERL_CALLCONV void Perl_sv_taint(pTHX_ SV *sv); 43 PERL_CALLCONV IV Perl_sv_2iv(pTHX_ register SV *sv); 44 PERL_CALLCONV UV Perl_sv_2uv(pTHX_ register SV *sv); 45 PERL_CALLCONV char * Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp); 46 PERL_CALLCONV char * Perl_sv_2pv_nolen(pTHX_ register SV *sv); 47 PERL_CALLCONV char * Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv); 48 PERL_CALLCONV char * Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv); 49 PERL_CALLCONV void Perl_sv_force_normal(pTHX_ register SV *sv); 50 PERL_CALLCONV void Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr); 51 PERL_CALLCONV void Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen); 52 PERL_CALLCONV void Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len); 53 PERL_CALLCONV void Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr); 54 PERL_CALLCONV void Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv); 55 PERL_CALLCONV char * Perl_sv_pv(pTHX_ SV *sv); 56 PERL_CALLCONV char * Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp); 57 PERL_CALLCONV char * Perl_sv_pvbyte(pTHX_ SV *sv); 58 PERL_CALLCONV char * Perl_sv_pvutf8(pTHX_ SV *sv); 59 PERL_CALLCONV STRLEN Perl_sv_utf8_upgrade(pTHX_ register SV *sv); 60 PERL_CALLCONV NV Perl_huge(void); 61 PERL_CALLCONV void Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix); 62 PERL_CALLCONV void Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix); 63 PERL_CALLCONV GV * Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name); 64 PERL_CALLCONV HE * Perl_hv_iternext(pTHX_ HV *hv); 65 PERL_CALLCONV void Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how); 66 PERL_CALLCONV bool Perl_do_open(pTHX_ GV *gv, register const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp); 67 PERL_CALLCONV bool Perl_do_aexec(pTHX_ SV *really, register SV **mark, register SV **sp); 68 PERL_CALLCONV bool Perl_do_exec(pTHX_ const char *cmd); 69 PERL_CALLCONV U8 * Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv); 70 PERL_CALLCONV bool Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **ep); 71 PERL_CALLCONV void Perl_sv_nolocking(pTHX_ SV *sv); 72 PERL_CALLCONV void Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len); 73 PERL_CALLCONV void Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len); 74 PERL_CALLCONV int Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...); 75 PERL_CALLCONV int Perl_printf_nocontext(const char *format, ...); 76 PERL_CALLCONV int Perl_magic_setglob(pTHX_ SV* sv, MAGIC* mg); 77 PERL_CALLCONV AV * Perl_newAV(pTHX); 78 PERL_CALLCONV HV * Perl_newHV(pTHX); 79 PERL_CALLCONV IO * Perl_newIO(pTHX); 80 81 /* ref() is now a macro using Perl_doref; 82 * this version provided for binary compatibility only. 83 */ 84 OP * 85 Perl_ref(pTHX_ OP *o, I32 type) 86 { 87 return doref(o, type, TRUE); 88 } 89 90 /* 91 =for apidoc sv_unref 92 93 Unsets the RV status of the SV, and decrements the reference count of 94 whatever was being referenced by the RV. This can almost be thought of 95 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag> 96 being zero. See C<SvROK_off>. 97 98 =cut 99 */ 100 101 void 102 Perl_sv_unref(pTHX_ SV *sv) 103 { 104 PERL_ARGS_ASSERT_SV_UNREF; 105 106 sv_unref_flags(sv, 0); 107 } 108 109 /* 110 =for apidoc sv_taint 111 112 Taint an SV. Use C<SvTAINTED_on> instead. 113 =cut 114 */ 115 116 void 117 Perl_sv_taint(pTHX_ SV *sv) 118 { 119 PERL_ARGS_ASSERT_SV_TAINT; 120 121 sv_magic((sv), NULL, PERL_MAGIC_taint, NULL, 0); 122 } 123 124 /* sv_2iv() is now a macro using Perl_sv_2iv_flags(); 125 * this function provided for binary compatibility only 126 */ 127 128 IV 129 Perl_sv_2iv(pTHX_ register SV *sv) 130 { 131 return sv_2iv_flags(sv, SV_GMAGIC); 132 } 133 134 /* sv_2uv() is now a macro using Perl_sv_2uv_flags(); 135 * this function provided for binary compatibility only 136 */ 137 138 UV 139 Perl_sv_2uv(pTHX_ register SV *sv) 140 { 141 return sv_2uv_flags(sv, SV_GMAGIC); 142 } 143 144 /* sv_2pv() is now a macro using Perl_sv_2pv_flags(); 145 * this function provided for binary compatibility only 146 */ 147 148 char * 149 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp) 150 { 151 return sv_2pv_flags(sv, lp, SV_GMAGIC); 152 } 153 154 /* 155 =for apidoc sv_2pv_nolen 156 157 Like C<sv_2pv()>, but doesn't return the length too. You should usually 158 use the macro wrapper C<SvPV_nolen(sv)> instead. 159 =cut 160 */ 161 162 char * 163 Perl_sv_2pv_nolen(pTHX_ register SV *sv) 164 { 165 return sv_2pv(sv, NULL); 166 } 167 168 /* 169 =for apidoc sv_2pvbyte_nolen 170 171 Return a pointer to the byte-encoded representation of the SV. 172 May cause the SV to be downgraded from UTF-8 as a side-effect. 173 174 Usually accessed via the C<SvPVbyte_nolen> macro. 175 176 =cut 177 */ 178 179 char * 180 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv) 181 { 182 PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN; 183 184 return sv_2pvbyte(sv, NULL); 185 } 186 187 /* 188 =for apidoc sv_2pvutf8_nolen 189 190 Return a pointer to the UTF-8-encoded representation of the SV. 191 May cause the SV to be upgraded to UTF-8 as a side-effect. 192 193 Usually accessed via the C<SvPVutf8_nolen> macro. 194 195 =cut 196 */ 197 198 char * 199 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv) 200 { 201 PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN; 202 203 return sv_2pvutf8(sv, NULL); 204 } 205 206 /* 207 =for apidoc sv_force_normal 208 209 Undo various types of fakery on an SV: if the PV is a shared string, make 210 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to 211 an xpvmg. See also C<sv_force_normal_flags>. 212 213 =cut 214 */ 215 216 void 217 Perl_sv_force_normal(pTHX_ register SV *sv) 218 { 219 PERL_ARGS_ASSERT_SV_FORCE_NORMAL; 220 221 sv_force_normal_flags(sv, 0); 222 } 223 224 /* sv_setsv() is now a macro using Perl_sv_setsv_flags(); 225 * this function provided for binary compatibility only 226 */ 227 228 void 229 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr) 230 { 231 PERL_ARGS_ASSERT_SV_SETSV; 232 233 sv_setsv_flags(dstr, sstr, SV_GMAGIC); 234 } 235 236 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags(); 237 * this function provided for binary compatibility only 238 */ 239 240 void 241 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen) 242 { 243 PERL_ARGS_ASSERT_SV_CATPVN; 244 245 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC); 246 } 247 248 /* 249 =for apidoc sv_catpvn_mg 250 251 Like C<sv_catpvn>, but also handles 'set' magic. 252 253 =cut 254 */ 255 256 void 257 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len) 258 { 259 PERL_ARGS_ASSERT_SV_CATPVN_MG; 260 261 sv_catpvn_flags(sv,ptr,len,SV_GMAGIC|SV_SMAGIC); 262 } 263 264 /* sv_catsv() is now a macro using Perl_sv_catsv_flags(); 265 * this function provided for binary compatibility only 266 */ 267 268 void 269 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr) 270 { 271 PERL_ARGS_ASSERT_SV_CATSV; 272 273 sv_catsv_flags(dstr, sstr, SV_GMAGIC); 274 } 275 276 /* 277 =for apidoc sv_catsv_mg 278 279 Like C<sv_catsv>, but also handles 'set' magic. 280 281 =cut 282 */ 283 284 void 285 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv) 286 { 287 PERL_ARGS_ASSERT_SV_CATSV_MG; 288 289 sv_catsv_flags(dsv,ssv,SV_GMAGIC|SV_SMAGIC); 290 } 291 292 /* 293 =for apidoc sv_iv 294 295 A private implementation of the C<SvIVx> macro for compilers which can't 296 cope with complex macro expressions. Always use the macro instead. 297 298 =cut 299 */ 300 301 IV 302 Perl_sv_iv(pTHX_ register SV *sv) 303 { 304 PERL_ARGS_ASSERT_SV_IV; 305 306 if (SvIOK(sv)) { 307 if (SvIsUV(sv)) 308 return (IV)SvUVX(sv); 309 return SvIVX(sv); 310 } 311 return sv_2iv(sv); 312 } 313 314 /* 315 =for apidoc sv_uv 316 317 A private implementation of the C<SvUVx> macro for compilers which can't 318 cope with complex macro expressions. Always use the macro instead. 319 320 =cut 321 */ 322 323 UV 324 Perl_sv_uv(pTHX_ register SV *sv) 325 { 326 PERL_ARGS_ASSERT_SV_UV; 327 328 if (SvIOK(sv)) { 329 if (SvIsUV(sv)) 330 return SvUVX(sv); 331 return (UV)SvIVX(sv); 332 } 333 return sv_2uv(sv); 334 } 335 336 /* 337 =for apidoc sv_nv 338 339 A private implementation of the C<SvNVx> macro for compilers which can't 340 cope with complex macro expressions. Always use the macro instead. 341 342 =cut 343 */ 344 345 NV 346 Perl_sv_nv(pTHX_ register SV *sv) 347 { 348 PERL_ARGS_ASSERT_SV_NV; 349 350 if (SvNOK(sv)) 351 return SvNVX(sv); 352 return sv_2nv(sv); 353 } 354 355 /* 356 =for apidoc sv_pv 357 358 Use the C<SvPV_nolen> macro instead 359 360 =for apidoc sv_pvn 361 362 A private implementation of the C<SvPV> macro for compilers which can't 363 cope with complex macro expressions. Always use the macro instead. 364 365 =cut 366 */ 367 368 char * 369 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp) 370 { 371 PERL_ARGS_ASSERT_SV_PVN; 372 373 if (SvPOK(sv)) { 374 *lp = SvCUR(sv); 375 return SvPVX(sv); 376 } 377 return sv_2pv(sv, lp); 378 } 379 380 381 char * 382 Perl_sv_pvn_nomg(pTHX_ register SV *sv, STRLEN *lp) 383 { 384 PERL_ARGS_ASSERT_SV_PVN_NOMG; 385 386 if (SvPOK(sv)) { 387 *lp = SvCUR(sv); 388 return SvPVX(sv); 389 } 390 return sv_2pv_flags(sv, lp, 0); 391 } 392 393 /* sv_pv() is now a macro using SvPV_nolen(); 394 * this function provided for binary compatibility only 395 */ 396 397 char * 398 Perl_sv_pv(pTHX_ SV *sv) 399 { 400 PERL_ARGS_ASSERT_SV_PV; 401 402 if (SvPOK(sv)) 403 return SvPVX(sv); 404 405 return sv_2pv(sv, NULL); 406 } 407 408 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags(); 409 * this function provided for binary compatibility only 410 */ 411 412 char * 413 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp) 414 { 415 PERL_ARGS_ASSERT_SV_PVN_FORCE; 416 417 return sv_pvn_force_flags(sv, lp, SV_GMAGIC); 418 } 419 420 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags(); 421 * this function provided for binary compatibility only 422 */ 423 424 char * 425 Perl_sv_pvbyte(pTHX_ SV *sv) 426 { 427 PERL_ARGS_ASSERT_SV_PVBYTE; 428 429 sv_utf8_downgrade(sv, FALSE); 430 return sv_pv(sv); 431 } 432 433 /* 434 =for apidoc sv_pvbyte 435 436 Use C<SvPVbyte_nolen> instead. 437 438 =for apidoc sv_pvbyten 439 440 A private implementation of the C<SvPVbyte> macro for compilers 441 which can't cope with complex macro expressions. Always use the macro 442 instead. 443 444 =cut 445 */ 446 447 char * 448 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp) 449 { 450 PERL_ARGS_ASSERT_SV_PVBYTEN; 451 452 sv_utf8_downgrade(sv, FALSE); 453 return sv_pvn(sv,lp); 454 } 455 456 /* sv_pvutf8 () is now a macro using Perl_sv_2pv_flags(); 457 * this function provided for binary compatibility only 458 */ 459 460 char * 461 Perl_sv_pvutf8(pTHX_ SV *sv) 462 { 463 PERL_ARGS_ASSERT_SV_PVUTF8; 464 465 sv_utf8_upgrade(sv); 466 return sv_pv(sv); 467 } 468 469 /* 470 =for apidoc sv_pvutf8 471 472 Use the C<SvPVutf8_nolen> macro instead 473 474 =for apidoc sv_pvutf8n 475 476 A private implementation of the C<SvPVutf8> macro for compilers 477 which can't cope with complex macro expressions. Always use the macro 478 instead. 479 480 =cut 481 */ 482 483 char * 484 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp) 485 { 486 PERL_ARGS_ASSERT_SV_PVUTF8N; 487 488 sv_utf8_upgrade(sv); 489 return sv_pvn(sv,lp); 490 } 491 492 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags(); 493 * this function provided for binary compatibility only 494 */ 495 496 STRLEN 497 Perl_sv_utf8_upgrade(pTHX_ register SV *sv) 498 { 499 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE; 500 501 return sv_utf8_upgrade_flags(sv, SV_GMAGIC); 502 } 503 504 int 505 Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...) 506 { 507 dTHXs; 508 va_list(arglist); 509 510 /* Easier to special case this here than in embed.pl. (Look at what it 511 generates for proto.h) */ 512 #ifdef PERL_IMPLICIT_CONTEXT 513 PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT; 514 #endif 515 516 va_start(arglist, format); 517 return PerlIO_vprintf(stream, format, arglist); 518 } 519 520 int 521 Perl_printf_nocontext(const char *format, ...) 522 { 523 dTHX; 524 va_list(arglist); 525 526 #ifdef PERL_IMPLICIT_CONTEXT 527 PERL_ARGS_ASSERT_PRINTF_NOCONTEXT; 528 #endif 529 530 va_start(arglist, format); 531 return PerlIO_vprintf(PerlIO_stdout(), format, arglist); 532 } 533 534 #if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)) 535 /* 536 * This hack is to force load of "huge" support from libm.a 537 * So it is in perl for (say) POSIX to use. 538 * Needed for SunOS with Sun's 'acc' for example. 539 */ 540 NV 541 Perl_huge(void) 542 { 543 # if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL) 544 return HUGE_VALL; 545 # else 546 return HUGE_VAL; 547 # endif 548 } 549 #endif 550 551 /* compatibility with versions <= 5.003. */ 552 void 553 Perl_gv_fullname(pTHX_ SV *sv, const GV *gv) 554 { 555 PERL_ARGS_ASSERT_GV_FULLNAME; 556 557 gv_fullname3(sv, gv, sv == (const SV*)gv ? "*" : ""); 558 } 559 560 /* compatibility with versions <= 5.003. */ 561 void 562 Perl_gv_efullname(pTHX_ SV *sv, const GV *gv) 563 { 564 PERL_ARGS_ASSERT_GV_EFULLNAME; 565 566 gv_efullname3(sv, gv, sv == (const SV*)gv ? "*" : ""); 567 } 568 569 void 570 Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix) 571 { 572 PERL_ARGS_ASSERT_GV_FULLNAME3; 573 574 gv_fullname4(sv, gv, prefix, TRUE); 575 } 576 577 void 578 Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix) 579 { 580 PERL_ARGS_ASSERT_GV_EFULLNAME3; 581 582 gv_efullname4(sv, gv, prefix, TRUE); 583 } 584 585 /* 586 =for apidoc gv_fetchmethod 587 588 See L<gv_fetchmethod_autoload>. 589 590 =cut 591 */ 592 593 GV * 594 Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name) 595 { 596 PERL_ARGS_ASSERT_GV_FETCHMETHOD; 597 598 return gv_fetchmethod_autoload(stash, name, TRUE); 599 } 600 601 HE * 602 Perl_hv_iternext(pTHX_ HV *hv) 603 { 604 PERL_ARGS_ASSERT_HV_ITERNEXT; 605 606 return hv_iternext_flags(hv, 0); 607 } 608 609 void 610 Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how) 611 { 612 PERL_ARGS_ASSERT_HV_MAGIC; 613 614 sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0); 615 } 616 617 bool 618 Perl_do_open(pTHX_ GV *gv, register const char *name, I32 len, int as_raw, 619 int rawmode, int rawperm, PerlIO *supplied_fp) 620 { 621 PERL_ARGS_ASSERT_DO_OPEN; 622 623 return do_openn(gv, name, len, as_raw, rawmode, rawperm, 624 supplied_fp, (SV **) NULL, 0); 625 } 626 627 bool 628 Perl_do_open9(pTHX_ GV *gv, register const char *name, I32 len, int 629 as_raw, 630 int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, 631 I32 num_svs) 632 { 633 PERL_ARGS_ASSERT_DO_OPEN9; 634 635 PERL_UNUSED_ARG(num_svs); 636 return do_openn(gv, name, len, as_raw, rawmode, rawperm, 637 supplied_fp, &svs, 1); 638 } 639 640 int 641 Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode) 642 { 643 /* The old body of this is now in non-LAYER part of perlio.c 644 * This is a stub for any XS code which might have been calling it. 645 */ 646 const char *name = ":raw"; 647 648 PERL_ARGS_ASSERT_DO_BINMODE; 649 650 #ifdef PERLIO_USING_CRLF 651 if (!(mode & O_BINARY)) 652 name = ":crlf"; 653 #endif 654 return PerlIO_binmode(aTHX_ fp, iotype, mode, name); 655 } 656 657 #ifndef OS2 658 bool 659 Perl_do_aexec(pTHX_ SV *really, register SV **mark, register SV **sp) 660 { 661 PERL_ARGS_ASSERT_DO_AEXEC; 662 663 return do_aexec5(really, mark, sp, 0, 0); 664 } 665 #endif 666 667 #ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION 668 bool 669 Perl_do_exec(pTHX_ const char *cmd) 670 { 671 PERL_ARGS_ASSERT_DO_EXEC; 672 673 return do_exec3(cmd,0,0); 674 } 675 #endif 676 677 /* Backwards compatibility. */ 678 int 679 Perl_init_i18nl14n(pTHX_ int printwarn) 680 { 681 return init_i18nl10n(printwarn); 682 } 683 684 PP(pp_padany) 685 { 686 DIE(aTHX_ "NOT IMPL LINE %d",__LINE__); 687 return NORMAL; 688 } 689 690 PP(pp_mapstart) 691 { 692 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */ 693 return NORMAL; 694 } 695 696 /* These ops all have the same body as pp_null. */ 697 PP(pp_scalar) 698 { 699 dVAR; 700 return NORMAL; 701 } 702 703 PP(pp_regcmaybe) 704 { 705 dVAR; 706 return NORMAL; 707 } 708 709 PP(pp_lineseq) 710 { 711 dVAR; 712 return NORMAL; 713 } 714 715 PP(pp_scope) 716 { 717 dVAR; 718 return NORMAL; 719 } 720 721 /* Ops that are calls to do_kv. */ 722 PP(pp_values) 723 { 724 return do_kv(); 725 } 726 727 PP(pp_keys) 728 { 729 return do_kv(); 730 } 731 732 /* Ops that are simply calls to other ops. */ 733 PP(pp_dump) 734 { 735 return pp_goto(); 736 /*NOTREACHED*/ 737 } 738 739 PP(pp_dofile) 740 { 741 return pp_require(); 742 } 743 744 PP(pp_dbmclose) 745 { 746 return pp_untie(); 747 } 748 749 PP(pp_read) 750 { 751 return pp_sysread(); 752 } 753 754 PP(pp_recv) 755 { 756 return pp_sysread(); 757 } 758 759 PP(pp_seek) 760 { 761 return pp_sysseek(); 762 } 763 764 PP(pp_fcntl) 765 { 766 return pp_ioctl(); 767 } 768 769 PP(pp_gsockopt) 770 { 771 return pp_ssockopt(); 772 } 773 774 PP(pp_getsockname) 775 { 776 return pp_getpeername(); 777 } 778 779 PP(pp_lstat) 780 { 781 return pp_stat(); 782 } 783 784 PP(pp_fteowned) 785 { 786 return pp_ftrowned(); 787 } 788 789 PP(pp_ftbinary) 790 { 791 return pp_fttext(); 792 } 793 794 PP(pp_localtime) 795 { 796 return pp_gmtime(); 797 } 798 799 PP(pp_shmget) 800 { 801 return pp_semget(); 802 } 803 804 PP(pp_shmctl) 805 { 806 return pp_semctl(); 807 } 808 809 PP(pp_shmread) 810 { 811 return pp_shmwrite(); 812 } 813 814 PP(pp_msgget) 815 { 816 return pp_semget(); 817 } 818 819 PP(pp_msgctl) 820 { 821 return pp_semctl(); 822 } 823 824 PP(pp_ghbyname) 825 { 826 return pp_ghostent(); 827 } 828 829 PP(pp_ghbyaddr) 830 { 831 return pp_ghostent(); 832 } 833 834 PP(pp_gnbyname) 835 { 836 return pp_gnetent(); 837 } 838 839 PP(pp_gnbyaddr) 840 { 841 return pp_gnetent(); 842 } 843 844 PP(pp_gpbyname) 845 { 846 return pp_gprotoent(); 847 } 848 849 PP(pp_gpbynumber) 850 { 851 return pp_gprotoent(); 852 } 853 854 PP(pp_gsbyname) 855 { 856 return pp_gservent(); 857 } 858 859 PP(pp_gsbyport) 860 { 861 return pp_gservent(); 862 } 863 864 PP(pp_gpwnam) 865 { 866 return pp_gpwent(); 867 } 868 869 PP(pp_gpwuid) 870 { 871 return pp_gpwent(); 872 } 873 874 PP(pp_ggrnam) 875 { 876 return pp_ggrent(); 877 } 878 879 PP(pp_ggrgid) 880 { 881 return pp_ggrent(); 882 } 883 884 PP(pp_ftsize) 885 { 886 return pp_ftis(); 887 } 888 889 PP(pp_ftmtime) 890 { 891 return pp_ftis(); 892 } 893 894 PP(pp_ftatime) 895 { 896 return pp_ftis(); 897 } 898 899 PP(pp_ftctime) 900 { 901 return pp_ftis(); 902 } 903 904 PP(pp_ftzero) 905 { 906 return pp_ftrowned(); 907 } 908 909 PP(pp_ftsock) 910 { 911 return pp_ftrowned(); 912 } 913 914 PP(pp_ftchr) 915 { 916 return pp_ftrowned(); 917 } 918 919 PP(pp_ftblk) 920 { 921 return pp_ftrowned(); 922 } 923 924 PP(pp_ftfile) 925 { 926 return pp_ftrowned(); 927 } 928 929 PP(pp_ftdir) 930 { 931 return pp_ftrowned(); 932 } 933 934 PP(pp_ftpipe) 935 { 936 return pp_ftrowned(); 937 } 938 939 PP(pp_ftsuid) 940 { 941 return pp_ftrowned(); 942 } 943 944 PP(pp_ftsgid) 945 { 946 return pp_ftrowned(); 947 } 948 949 PP(pp_ftsvtx) 950 { 951 return pp_ftrowned(); 952 } 953 954 PP(pp_unlink) 955 { 956 return pp_chown(); 957 } 958 959 PP(pp_chmod) 960 { 961 return pp_chown(); 962 } 963 964 PP(pp_utime) 965 { 966 return pp_chown(); 967 } 968 969 PP(pp_kill) 970 { 971 return pp_chown(); 972 } 973 974 PP(pp_symlink) 975 { 976 return pp_link(); 977 } 978 979 PP(pp_ftrwrite) 980 { 981 return pp_ftrread(); 982 } 983 984 PP(pp_ftrexec) 985 { 986 return pp_ftrread(); 987 } 988 989 PP(pp_fteread) 990 { 991 return pp_ftrread(); 992 } 993 994 PP(pp_ftewrite) 995 { 996 return pp_ftrread(); 997 } 998 999 PP(pp_fteexec) 1000 { 1001 return pp_ftrread(); 1002 } 1003 1004 PP(pp_msgsnd) 1005 { 1006 return pp_shmwrite(); 1007 } 1008 1009 PP(pp_msgrcv) 1010 { 1011 return pp_shmwrite(); 1012 } 1013 1014 PP(pp_syswrite) 1015 { 1016 return pp_send(); 1017 } 1018 1019 PP(pp_semop) 1020 { 1021 return pp_shmwrite(); 1022 } 1023 1024 PP(pp_dor) 1025 { 1026 return pp_defined(); 1027 } 1028 1029 PP(pp_andassign) 1030 { 1031 return pp_and(); 1032 } 1033 1034 PP(pp_orassign) 1035 { 1036 return pp_or(); 1037 } 1038 1039 PP(pp_dorassign) 1040 { 1041 return pp_defined(); 1042 } 1043 1044 PP(pp_lcfirst) 1045 { 1046 return pp_ucfirst(); 1047 } 1048 1049 PP(pp_slt) 1050 { 1051 return pp_sle(); 1052 } 1053 1054 PP(pp_sgt) 1055 { 1056 return pp_sle(); 1057 } 1058 1059 PP(pp_sge) 1060 { 1061 return pp_sle(); 1062 } 1063 1064 PP(pp_rindex) 1065 { 1066 return pp_index(); 1067 } 1068 1069 PP(pp_hex) 1070 { 1071 return pp_oct(); 1072 } 1073 1074 PP(pp_pop) 1075 { 1076 return pp_shift(); 1077 } 1078 1079 PP(pp_cos) 1080 { 1081 return pp_sin(); 1082 } 1083 1084 PP(pp_exp) 1085 { 1086 return pp_sin(); 1087 } 1088 1089 PP(pp_log) 1090 { 1091 return pp_sin(); 1092 } 1093 1094 PP(pp_sqrt) 1095 { 1096 return pp_sin(); 1097 } 1098 1099 PP(pp_bit_xor) 1100 { 1101 return pp_bit_or(); 1102 } 1103 1104 PP(pp_rv2hv) 1105 { 1106 return Perl_pp_rv2av(aTHX); 1107 } 1108 1109 U8 * 1110 Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv) 1111 { 1112 PERL_ARGS_ASSERT_UVUNI_TO_UTF8; 1113 1114 return Perl_uvuni_to_utf8_flags(aTHX_ d, uv, 0); 1115 } 1116 1117 bool 1118 Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **ep) 1119 { 1120 PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC; 1121 1122 return is_utf8_string_loclen(s, len, ep, 0); 1123 } 1124 1125 /* 1126 =for apidoc sv_nolocking 1127 1128 Dummy routine which "locks" an SV when there is no locking module present. 1129 Exists to avoid test for a NULL function pointer and because it could 1130 potentially warn under some level of strict-ness. 1131 1132 "Superseded" by sv_nosharing(). 1133 1134 =cut 1135 */ 1136 1137 void 1138 Perl_sv_nolocking(pTHX_ SV *sv) 1139 { 1140 PERL_UNUSED_CONTEXT; 1141 PERL_UNUSED_ARG(sv); 1142 } 1143 1144 1145 /* 1146 =for apidoc sv_nounlocking 1147 1148 Dummy routine which "unlocks" an SV when there is no locking module present. 1149 Exists to avoid test for a NULL function pointer and because it could 1150 potentially warn under some level of strict-ness. 1151 1152 "Superseded" by sv_nosharing(). 1153 1154 =cut 1155 */ 1156 1157 void 1158 Perl_sv_nounlocking(pTHX_ SV *sv) 1159 { 1160 PERL_UNUSED_CONTEXT; 1161 PERL_UNUSED_ARG(sv); 1162 } 1163 1164 void 1165 Perl_save_long(pTHX_ long int *longp) 1166 { 1167 dVAR; 1168 1169 PERL_ARGS_ASSERT_SAVE_LONG; 1170 1171 SSCHECK(3); 1172 SSPUSHLONG(*longp); 1173 SSPUSHPTR(longp); 1174 SSPUSHINT(SAVEt_LONG); 1175 } 1176 1177 void 1178 Perl_save_iv(pTHX_ IV *ivp) 1179 { 1180 dVAR; 1181 1182 PERL_ARGS_ASSERT_SAVE_IV; 1183 1184 SSCHECK(3); 1185 SSPUSHIV(*ivp); 1186 SSPUSHPTR(ivp); 1187 SSPUSHINT(SAVEt_IV); 1188 } 1189 1190 void 1191 Perl_save_nogv(pTHX_ GV *gv) 1192 { 1193 dVAR; 1194 1195 PERL_ARGS_ASSERT_SAVE_NOGV; 1196 1197 SSCHECK(2); 1198 SSPUSHPTR(gv); 1199 SSPUSHINT(SAVEt_NSTAB); 1200 } 1201 1202 void 1203 Perl_save_list(pTHX_ register SV **sarg, I32 maxsarg) 1204 { 1205 dVAR; 1206 register I32 i; 1207 1208 PERL_ARGS_ASSERT_SAVE_LIST; 1209 1210 for (i = 1; i <= maxsarg; i++) { 1211 register SV * const sv = newSV(0); 1212 sv_setsv(sv,sarg[i]); 1213 SSCHECK(3); 1214 SSPUSHPTR(sarg[i]); /* remember the pointer */ 1215 SSPUSHPTR(sv); /* remember the value */ 1216 SSPUSHINT(SAVEt_ITEM); 1217 } 1218 } 1219 1220 /* 1221 =for apidoc sv_usepvn_mg 1222 1223 Like C<sv_usepvn>, but also handles 'set' magic. 1224 1225 =cut 1226 */ 1227 1228 void 1229 Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len) 1230 { 1231 PERL_ARGS_ASSERT_SV_USEPVN_MG; 1232 1233 sv_usepvn_flags(sv,ptr,len, SV_SMAGIC); 1234 } 1235 1236 /* 1237 =for apidoc sv_usepvn 1238 1239 Tells an SV to use C<ptr> to find its string value. Implemented by 1240 calling C<sv_usepvn_flags> with C<flags> of 0, hence does not handle 'set' 1241 magic. See C<sv_usepvn_flags>. 1242 1243 =cut 1244 */ 1245 1246 void 1247 Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len) 1248 { 1249 PERL_ARGS_ASSERT_SV_USEPVN; 1250 1251 sv_usepvn_flags(sv,ptr,len, 0); 1252 } 1253 1254 /* 1255 =for apidoc unpack_str 1256 1257 The engine implementing unpack() Perl function. Note: parameters strbeg, new_s 1258 and ocnt are not used. This call should not be used, use unpackstring instead. 1259 1260 =cut */ 1261 1262 I32 1263 Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, 1264 const char *strbeg, const char *strend, char **new_s, I32 ocnt, 1265 U32 flags) 1266 { 1267 PERL_ARGS_ASSERT_UNPACK_STR; 1268 1269 PERL_UNUSED_ARG(strbeg); 1270 PERL_UNUSED_ARG(new_s); 1271 PERL_UNUSED_ARG(ocnt); 1272 1273 return unpackstring(pat, patend, s, strend, flags); 1274 } 1275 1276 /* 1277 =for apidoc pack_cat 1278 1279 The engine implementing pack() Perl function. Note: parameters next_in_list and 1280 flags are not used. This call should not be used; use packlist instead. 1281 1282 =cut 1283 */ 1284 1285 void 1286 Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, register SV **beglist, SV **endlist, SV ***next_in_list, U32 flags) 1287 { 1288 PERL_ARGS_ASSERT_PACK_CAT; 1289 1290 PERL_UNUSED_ARG(next_in_list); 1291 PERL_UNUSED_ARG(flags); 1292 1293 packlist(cat, pat, patend, beglist, endlist); 1294 } 1295 1296 HE * 1297 Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, U32 hash) 1298 { 1299 return (HE *)hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash); 1300 } 1301 1302 bool 1303 Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash) 1304 { 1305 PERL_ARGS_ASSERT_HV_EXISTS_ENT; 1306 1307 return hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash) 1308 ? TRUE : FALSE; 1309 } 1310 1311 HE * 1312 Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash) 1313 { 1314 PERL_ARGS_ASSERT_HV_FETCH_ENT; 1315 1316 return (HE *)hv_common(hv, keysv, NULL, 0, 0, 1317 (lval ? HV_FETCH_LVALUE : 0), NULL, hash); 1318 } 1319 1320 SV * 1321 Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash) 1322 { 1323 PERL_ARGS_ASSERT_HV_DELETE_ENT; 1324 1325 return MUTABLE_SV(hv_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, NULL, 1326 hash)); 1327 } 1328 1329 SV** 1330 Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash, 1331 int flags) 1332 { 1333 return (SV**) hv_common(hv, NULL, key, klen, flags, 1334 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); 1335 } 1336 1337 SV** 1338 Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash) 1339 { 1340 STRLEN klen; 1341 int flags; 1342 1343 if (klen_i32 < 0) { 1344 klen = -klen_i32; 1345 flags = HVhek_UTF8; 1346 } else { 1347 klen = klen_i32; 1348 flags = 0; 1349 } 1350 return (SV **) hv_common(hv, NULL, key, klen, flags, 1351 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); 1352 } 1353 1354 bool 1355 Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32) 1356 { 1357 STRLEN klen; 1358 int flags; 1359 1360 PERL_ARGS_ASSERT_HV_EXISTS; 1361 1362 if (klen_i32 < 0) { 1363 klen = -klen_i32; 1364 flags = HVhek_UTF8; 1365 } else { 1366 klen = klen_i32; 1367 flags = 0; 1368 } 1369 return hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0) 1370 ? TRUE : FALSE; 1371 } 1372 1373 SV** 1374 Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval) 1375 { 1376 STRLEN klen; 1377 int flags; 1378 1379 PERL_ARGS_ASSERT_HV_FETCH; 1380 1381 if (klen_i32 < 0) { 1382 klen = -klen_i32; 1383 flags = HVhek_UTF8; 1384 } else { 1385 klen = klen_i32; 1386 flags = 0; 1387 } 1388 return (SV **) hv_common(hv, NULL, key, klen, flags, 1389 lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) 1390 : HV_FETCH_JUST_SV, NULL, 0); 1391 } 1392 1393 SV * 1394 Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags) 1395 { 1396 STRLEN klen; 1397 int k_flags; 1398 1399 PERL_ARGS_ASSERT_HV_DELETE; 1400 1401 if (klen_i32 < 0) { 1402 klen = -klen_i32; 1403 k_flags = HVhek_UTF8; 1404 } else { 1405 klen = klen_i32; 1406 k_flags = 0; 1407 } 1408 return MUTABLE_SV(hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE, 1409 NULL, 0)); 1410 } 1411 1412 /* Functions after here were made mathoms post 5.10.0 but pre 5.8.9 */ 1413 1414 AV * 1415 Perl_newAV(pTHX) 1416 { 1417 return MUTABLE_AV(newSV_type(SVt_PVAV)); 1418 /* sv_upgrade does AvREAL_only(): 1419 AvALLOC(av) = 0; 1420 AvARRAY(av) = NULL; 1421 AvMAX(av) = AvFILLp(av) = -1; */ 1422 } 1423 1424 HV * 1425 Perl_newHV(pTHX) 1426 { 1427 HV * const hv = MUTABLE_HV(newSV_type(SVt_PVHV)); 1428 assert(!SvOK(hv)); 1429 1430 return hv; 1431 } 1432 1433 void 1434 Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, 1435 const char *const little, const STRLEN littlelen) 1436 { 1437 PERL_ARGS_ASSERT_SV_INSERT; 1438 sv_insert_flags(bigstr, offset, len, little, littlelen, SV_GMAGIC); 1439 } 1440 1441 void 1442 Perl_save_freesv(pTHX_ SV *sv) 1443 { 1444 dVAR; 1445 save_freesv(sv); 1446 } 1447 1448 void 1449 Perl_save_mortalizesv(pTHX_ SV *sv) 1450 { 1451 dVAR; 1452 1453 PERL_ARGS_ASSERT_SAVE_MORTALIZESV; 1454 1455 save_mortalizesv(sv); 1456 } 1457 1458 void 1459 Perl_save_freeop(pTHX_ OP *o) 1460 { 1461 dVAR; 1462 save_freeop(o); 1463 } 1464 1465 void 1466 Perl_save_freepv(pTHX_ char *pv) 1467 { 1468 dVAR; 1469 save_freepv(pv); 1470 } 1471 1472 void 1473 Perl_save_op(pTHX) 1474 { 1475 dVAR; 1476 save_op(); 1477 } 1478 1479 #ifdef PERL_DONT_CREATE_GVSV 1480 GV * 1481 Perl_gv_SVadd(pTHX_ GV *gv) 1482 { 1483 return gv_SVadd(gv); 1484 } 1485 #endif 1486 1487 GV * 1488 Perl_gv_AVadd(pTHX_ GV *gv) 1489 { 1490 return gv_AVadd(gv); 1491 } 1492 1493 GV * 1494 Perl_gv_HVadd(pTHX_ register GV *gv) 1495 { 1496 return gv_HVadd(gv); 1497 } 1498 1499 GV * 1500 Perl_gv_IOadd(pTHX_ register GV *gv) 1501 { 1502 return gv_IOadd(gv); 1503 } 1504 1505 IO * 1506 Perl_newIO(pTHX) 1507 { 1508 return MUTABLE_IO(newSV_type(SVt_PVIO)); 1509 } 1510 1511 #endif /* NO_MATHOMS */ 1512 1513 /* 1514 * Local variables: 1515 * c-indentation-style: bsd 1516 * c-basic-offset: 4 1517 * indent-tabs-mode: t 1518 * End: 1519 * 1520 * ex: set ts=8 sts=4 sw=4 noet: 1521 */ 1522