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