This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make pack-as-int/sprintf-%c-ing/chr-ring inf/nan fatal.
[perl5.git] / mathoms.c
... / ...
CommitLineData
1/* mathoms.c
2 *
3 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010,
4 * 2011, 2012 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/*
12 * Anything that Hobbits had no immediate use for, but were unwilling to
13 * throw away, they called a mathom. Their dwellings were apt to become
14 * rather crowded with mathoms, and many of the presents that passed from
15 * hand to hand were of that sort.
16 *
17 * [p.5 of _The Lord of the Rings_: "Prologue"]
18 */
19
20
21
22/*
23 * This file contains mathoms, various binary artifacts from previous
24 * versions of Perl. For binary or source compatibility reasons, though,
25 * we cannot completely remove them from the core code.
26 *
27 * SMP - Oct. 24, 2005
28 *
29 * The compilation of this file can be suppressed; see INSTALL
30 *
31=head1 Obsolete backwards compatibility functions
32Some of these are also deprecated. You can exclude these from
33your compiled Perl by adding this option to Configure:
34C<-Accflags='-DNO_MATHOMS'>
35
36=cut
37
38 */
39
40
41#include "EXTERN.h"
42#define PERL_IN_MATHOMS_C
43#include "perl.h"
44
45#ifdef NO_MATHOMS
46/* ..." warning: ISO C forbids an empty source file"
47 So make sure we have something in here by processing the headers anyway.
48 */
49#else
50
51/* Not all of these have prototypes elsewhere, so do this to get
52 * non-mangled names.
53 */
54START_EXTERN_C
55
56PERL_CALLCONV OP * Perl_ref(pTHX_ OP *o, I32 type);
57PERL_CALLCONV void Perl_sv_unref(pTHX_ SV *sv);
58PERL_CALLCONV void Perl_sv_taint(pTHX_ SV *sv);
59PERL_CALLCONV IV Perl_sv_2iv(pTHX_ SV *sv);
60PERL_CALLCONV UV Perl_sv_2uv(pTHX_ SV *sv);
61PERL_CALLCONV NV Perl_sv_2nv(pTHX_ SV *sv);
62PERL_CALLCONV char * Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp);
63PERL_CALLCONV char * Perl_sv_2pv_nolen(pTHX_ SV *sv);
64PERL_CALLCONV char * Perl_sv_2pvbyte_nolen(pTHX_ SV *sv);
65PERL_CALLCONV char * Perl_sv_2pvutf8_nolen(pTHX_ SV *sv);
66PERL_CALLCONV void Perl_sv_force_normal(pTHX_ SV *sv);
67PERL_CALLCONV void Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr);
68PERL_CALLCONV void Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen);
69PERL_CALLCONV void Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
70PERL_CALLCONV void Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr);
71PERL_CALLCONV void Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv);
72PERL_CALLCONV char * Perl_sv_pv(pTHX_ SV *sv);
73PERL_CALLCONV char * Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp);
74PERL_CALLCONV char * Perl_sv_pvbyte(pTHX_ SV *sv);
75PERL_CALLCONV char * Perl_sv_pvutf8(pTHX_ SV *sv);
76PERL_CALLCONV STRLEN Perl_sv_utf8_upgrade(pTHX_ SV *sv);
77PERL_CALLCONV NV Perl_huge(void);
78PERL_CALLCONV void Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix);
79PERL_CALLCONV void Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix);
80PERL_CALLCONV GV * Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name);
81PERL_CALLCONV HE * Perl_hv_iternext(pTHX_ HV *hv);
82PERL_CALLCONV void Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how);
83PERL_CALLCONV bool Perl_do_open(pTHX_ GV *gv, const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp);
84PERL_CALLCONV bool Perl_do_aexec(pTHX_ SV *really, SV **mark, SV **sp);
85PERL_CALLCONV U8 * Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv);
86PERL_CALLCONV bool Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **ep);
87PERL_CALLCONV void Perl_sv_nolocking(pTHX_ SV *sv);
88PERL_CALLCONV void Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len);
89PERL_CALLCONV void Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len);
90PERL_CALLCONV int Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...);
91PERL_CALLCONV int Perl_printf_nocontext(const char *format, ...);
92PERL_CALLCONV int Perl_magic_setglob(pTHX_ SV* sv, MAGIC* mg);
93PERL_CALLCONV AV * Perl_newAV(pTHX);
94PERL_CALLCONV HV * Perl_newHV(pTHX);
95PERL_CALLCONV IO * Perl_newIO(pTHX);
96PERL_CALLCONV I32 Perl_my_stat(pTHX);
97PERL_CALLCONV I32 Perl_my_lstat(pTHX);
98PERL_CALLCONV I32 Perl_sv_eq(pTHX_ SV *sv1, SV *sv2);
99PERL_CALLCONV char * Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp);
100PERL_CALLCONV bool Perl_sv_2bool(pTHX_ SV *const sv);
101PERL_CALLCONV CV * Perl_newSUB(pTHX_ I32 floor, OP* o, OP* proto, OP* block);
102PERL_CALLCONV UV Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
103PERL_CALLCONV UV Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
104PERL_CALLCONV UV Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
105PERL_CALLCONV UV Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
106PERL_CALLCONV SV *Perl_sv_mortalcopy(pTHX_ SV *const oldstr);
107
108/* ref() is now a macro using Perl_doref;
109 * this version provided for binary compatibility only.
110 */
111OP *
112Perl_ref(pTHX_ OP *o, I32 type)
113{
114 return doref(o, type, TRUE);
115}
116
117/*
118=for apidoc sv_unref
119
120Unsets the RV status of the SV, and decrements the reference count of
121whatever was being referenced by the RV. This can almost be thought of
122as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
123being zero. See C<SvROK_off>.
124
125=cut
126*/
127
128void
129Perl_sv_unref(pTHX_ SV *sv)
130{
131 PERL_ARGS_ASSERT_SV_UNREF;
132
133 sv_unref_flags(sv, 0);
134}
135
136/*
137=for apidoc sv_taint
138
139Taint an SV. Use C<SvTAINTED_on> instead.
140
141=cut
142*/
143
144void
145Perl_sv_taint(pTHX_ SV *sv)
146{
147 PERL_ARGS_ASSERT_SV_TAINT;
148
149 sv_magic((sv), NULL, PERL_MAGIC_taint, NULL, 0);
150}
151
152/* sv_2iv() is now a macro using Perl_sv_2iv_flags();
153 * this function provided for binary compatibility only
154 */
155
156IV
157Perl_sv_2iv(pTHX_ SV *sv)
158{
159 PERL_ARGS_ASSERT_SV_2IV;
160
161 return sv_2iv_flags(sv, SV_GMAGIC);
162}
163
164/* sv_2uv() is now a macro using Perl_sv_2uv_flags();
165 * this function provided for binary compatibility only
166 */
167
168UV
169Perl_sv_2uv(pTHX_ SV *sv)
170{
171 PERL_ARGS_ASSERT_SV_2UV;
172
173 return sv_2uv_flags(sv, SV_GMAGIC);
174}
175
176/* sv_2nv() is now a macro using Perl_sv_2nv_flags();
177 * this function provided for binary compatibility only
178 */
179
180NV
181Perl_sv_2nv(pTHX_ SV *sv)
182{
183 return sv_2nv_flags(sv, SV_GMAGIC);
184}
185
186
187/* sv_2pv() is now a macro using Perl_sv_2pv_flags();
188 * this function provided for binary compatibility only
189 */
190
191char *
192Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp)
193{
194 PERL_ARGS_ASSERT_SV_2PV;
195
196 return sv_2pv_flags(sv, lp, SV_GMAGIC);
197}
198
199/*
200=for apidoc sv_2pv_nolen
201
202Like C<sv_2pv()>, but doesn't return the length too. You should usually
203use the macro wrapper C<SvPV_nolen(sv)> instead.
204
205=cut
206*/
207
208char *
209Perl_sv_2pv_nolen(pTHX_ SV *sv)
210{
211 PERL_ARGS_ASSERT_SV_2PV_NOLEN;
212 return sv_2pv(sv, NULL);
213}
214
215/*
216=for apidoc sv_2pvbyte_nolen
217
218Return a pointer to the byte-encoded representation of the SV.
219May cause the SV to be downgraded from UTF-8 as a side-effect.
220
221Usually accessed via the C<SvPVbyte_nolen> macro.
222
223=cut
224*/
225
226char *
227Perl_sv_2pvbyte_nolen(pTHX_ SV *sv)
228{
229 PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN;
230
231 return sv_2pvbyte(sv, NULL);
232}
233
234/*
235=for apidoc sv_2pvutf8_nolen
236
237Return a pointer to the UTF-8-encoded representation of the SV.
238May cause the SV to be upgraded to UTF-8 as a side-effect.
239
240Usually accessed via the C<SvPVutf8_nolen> macro.
241
242=cut
243*/
244
245char *
246Perl_sv_2pvutf8_nolen(pTHX_ SV *sv)
247{
248 PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN;
249
250 return sv_2pvutf8(sv, NULL);
251}
252
253/*
254=for apidoc sv_force_normal
255
256Undo various types of fakery on an SV: if the PV is a shared string, make
257a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
258an xpvmg. See also C<sv_force_normal_flags>.
259
260=cut
261*/
262
263void
264Perl_sv_force_normal(pTHX_ SV *sv)
265{
266 PERL_ARGS_ASSERT_SV_FORCE_NORMAL;
267
268 sv_force_normal_flags(sv, 0);
269}
270
271/* sv_setsv() is now a macro using Perl_sv_setsv_flags();
272 * this function provided for binary compatibility only
273 */
274
275void
276Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr)
277{
278 PERL_ARGS_ASSERT_SV_SETSV;
279
280 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
281}
282
283/* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
284 * this function provided for binary compatibility only
285 */
286
287void
288Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
289{
290 PERL_ARGS_ASSERT_SV_CATPVN;
291
292 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
293}
294
295/*
296=for apidoc sv_catpvn_mg
297
298Like C<sv_catpvn>, but also handles 'set' magic.
299
300=cut
301*/
302
303void
304Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len)
305{
306 PERL_ARGS_ASSERT_SV_CATPVN_MG;
307
308 sv_catpvn_flags(sv,ptr,len,SV_GMAGIC|SV_SMAGIC);
309}
310
311/* sv_catsv() is now a macro using Perl_sv_catsv_flags();
312 * this function provided for binary compatibility only
313 */
314
315void
316Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr)
317{
318 PERL_ARGS_ASSERT_SV_CATSV;
319
320 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
321}
322
323/*
324=for apidoc sv_catsv_mg
325
326Like C<sv_catsv>, but also handles 'set' magic.
327
328=cut
329*/
330
331void
332Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv)
333{
334 PERL_ARGS_ASSERT_SV_CATSV_MG;
335
336 sv_catsv_flags(dsv,ssv,SV_GMAGIC|SV_SMAGIC);
337}
338
339/*
340=for apidoc sv_iv
341
342A private implementation of the C<SvIVx> macro for compilers which can't
343cope with complex macro expressions. Always use the macro instead.
344
345=cut
346*/
347
348IV
349Perl_sv_iv(pTHX_ SV *sv)
350{
351 PERL_ARGS_ASSERT_SV_IV;
352
353 if (SvIOK(sv)) {
354 if (SvIsUV(sv))
355 return (IV)SvUVX(sv);
356 return SvIVX(sv);
357 }
358 return sv_2iv(sv);
359}
360
361/*
362=for apidoc sv_uv
363
364A private implementation of the C<SvUVx> macro for compilers which can't
365cope with complex macro expressions. Always use the macro instead.
366
367=cut
368*/
369
370UV
371Perl_sv_uv(pTHX_ SV *sv)
372{
373 PERL_ARGS_ASSERT_SV_UV;
374
375 if (SvIOK(sv)) {
376 if (SvIsUV(sv))
377 return SvUVX(sv);
378 return (UV)SvIVX(sv);
379 }
380 return sv_2uv(sv);
381}
382
383/*
384=for apidoc sv_nv
385
386A private implementation of the C<SvNVx> macro for compilers which can't
387cope with complex macro expressions. Always use the macro instead.
388
389=cut
390*/
391
392NV
393Perl_sv_nv(pTHX_ SV *sv)
394{
395 PERL_ARGS_ASSERT_SV_NV;
396
397 if (SvNOK(sv))
398 return SvNVX(sv);
399 return sv_2nv(sv);
400}
401
402/*
403=for apidoc sv_pv
404
405Use the C<SvPV_nolen> macro instead
406
407=for apidoc sv_pvn
408
409A private implementation of the C<SvPV> macro for compilers which can't
410cope with complex macro expressions. Always use the macro instead.
411
412=cut
413*/
414
415char *
416Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
417{
418 PERL_ARGS_ASSERT_SV_PVN;
419
420 if (SvPOK(sv)) {
421 *lp = SvCUR(sv);
422 return SvPVX(sv);
423 }
424 return sv_2pv(sv, lp);
425}
426
427
428char *
429Perl_sv_pvn_nomg(pTHX_ SV *sv, STRLEN *lp)
430{
431 PERL_ARGS_ASSERT_SV_PVN_NOMG;
432
433 if (SvPOK(sv)) {
434 *lp = SvCUR(sv);
435 return SvPVX(sv);
436 }
437 return sv_2pv_flags(sv, lp, 0);
438}
439
440/* sv_pv() is now a macro using SvPV_nolen();
441 * this function provided for binary compatibility only
442 */
443
444char *
445Perl_sv_pv(pTHX_ SV *sv)
446{
447 PERL_ARGS_ASSERT_SV_PV;
448
449 if (SvPOK(sv))
450 return SvPVX(sv);
451
452 return sv_2pv(sv, NULL);
453}
454
455/* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
456 * this function provided for binary compatibility only
457 */
458
459char *
460Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
461{
462 PERL_ARGS_ASSERT_SV_PVN_FORCE;
463
464 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
465}
466
467/* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
468 * this function provided for binary compatibility only
469 */
470
471char *
472Perl_sv_pvbyte(pTHX_ SV *sv)
473{
474 PERL_ARGS_ASSERT_SV_PVBYTE;
475
476 sv_utf8_downgrade(sv, FALSE);
477 return sv_pv(sv);
478}
479
480/*
481=for apidoc sv_pvbyte
482
483Use C<SvPVbyte_nolen> instead.
484
485=for apidoc sv_pvbyten
486
487A private implementation of the C<SvPVbyte> macro for compilers
488which can't cope with complex macro expressions. Always use the macro
489instead.
490
491=cut
492*/
493
494char *
495Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
496{
497 PERL_ARGS_ASSERT_SV_PVBYTEN;
498
499 sv_utf8_downgrade(sv, FALSE);
500 return sv_pvn(sv,lp);
501}
502
503/* sv_pvutf8 () is now a macro using Perl_sv_2pv_flags();
504 * this function provided for binary compatibility only
505 */
506
507char *
508Perl_sv_pvutf8(pTHX_ SV *sv)
509{
510 PERL_ARGS_ASSERT_SV_PVUTF8;
511
512 sv_utf8_upgrade(sv);
513 return sv_pv(sv);
514}
515
516/*
517=for apidoc sv_pvutf8
518
519Use the C<SvPVutf8_nolen> macro instead
520
521=for apidoc sv_pvutf8n
522
523A private implementation of the C<SvPVutf8> macro for compilers
524which can't cope with complex macro expressions. Always use the macro
525instead.
526
527=cut
528*/
529
530char *
531Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
532{
533 PERL_ARGS_ASSERT_SV_PVUTF8N;
534
535 sv_utf8_upgrade(sv);
536 return sv_pvn(sv,lp);
537}
538
539/* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
540 * this function provided for binary compatibility only
541 */
542
543STRLEN
544Perl_sv_utf8_upgrade(pTHX_ SV *sv)
545{
546 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE;
547
548 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
549}
550
551int
552Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
553{
554 int ret = 0;
555 va_list(arglist);
556
557 /* Easier to special case this here than in embed.pl. (Look at what it
558 generates for proto.h) */
559#ifdef PERL_IMPLICIT_CONTEXT
560 PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT;
561#endif
562
563 va_start(arglist, format);
564 ret = PerlIO_vprintf(stream, format, arglist);
565 va_end(arglist);
566 return ret;
567}
568
569int
570Perl_printf_nocontext(const char *format, ...)
571{
572 dTHX;
573 va_list(arglist);
574 int ret = 0;
575
576#ifdef PERL_IMPLICIT_CONTEXT
577 PERL_ARGS_ASSERT_PRINTF_NOCONTEXT;
578#endif
579
580 va_start(arglist, format);
581 ret = PerlIO_vprintf(PerlIO_stdout(), format, arglist);
582 va_end(arglist);
583 return ret;
584}
585
586#if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))
587/*
588 * This hack is to force load of "huge" support from libm.a
589 * So it is in perl for (say) POSIX to use.
590 * Needed for SunOS with Sun's 'acc' for example.
591 */
592NV
593Perl_huge(void)
594{
595# if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
596 return HUGE_VALL;
597# else
598 return HUGE_VAL;
599# endif
600}
601#endif
602
603/* compatibility with versions <= 5.003. */
604void
605Perl_gv_fullname(pTHX_ SV *sv, const GV *gv)
606{
607 PERL_ARGS_ASSERT_GV_FULLNAME;
608
609 gv_fullname3(sv, gv, sv == (const SV*)gv ? "*" : "");
610}
611
612/* compatibility with versions <= 5.003. */
613void
614Perl_gv_efullname(pTHX_ SV *sv, const GV *gv)
615{
616 PERL_ARGS_ASSERT_GV_EFULLNAME;
617
618 gv_efullname3(sv, gv, sv == (const SV*)gv ? "*" : "");
619}
620
621void
622Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
623{
624 PERL_ARGS_ASSERT_GV_FULLNAME3;
625
626 gv_fullname4(sv, gv, prefix, TRUE);
627}
628
629void
630Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
631{
632 PERL_ARGS_ASSERT_GV_EFULLNAME3;
633
634 gv_efullname4(sv, gv, prefix, TRUE);
635}
636
637/*
638=for apidoc gv_fetchmethod
639
640See L</gv_fetchmethod_autoload>.
641
642=cut
643*/
644
645GV *
646Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name)
647{
648 PERL_ARGS_ASSERT_GV_FETCHMETHOD;
649
650 return gv_fetchmethod_autoload(stash, name, TRUE);
651}
652
653HE *
654Perl_hv_iternext(pTHX_ HV *hv)
655{
656 PERL_ARGS_ASSERT_HV_ITERNEXT;
657
658 return hv_iternext_flags(hv, 0);
659}
660
661void
662Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how)
663{
664 PERL_ARGS_ASSERT_HV_MAGIC;
665
666 sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0);
667}
668
669bool
670Perl_do_open(pTHX_ GV *gv, const char *name, I32 len, int as_raw,
671 int rawmode, int rawperm, PerlIO *supplied_fp)
672{
673 PERL_ARGS_ASSERT_DO_OPEN;
674
675 return do_openn(gv, name, len, as_raw, rawmode, rawperm,
676 supplied_fp, (SV **) NULL, 0);
677}
678
679bool
680Perl_do_open9(pTHX_ GV *gv, const char *name, I32 len, int
681as_raw,
682 int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs,
683 I32 num_svs)
684{
685 PERL_ARGS_ASSERT_DO_OPEN9;
686
687 PERL_UNUSED_ARG(num_svs);
688 return do_openn(gv, name, len, as_raw, rawmode, rawperm,
689 supplied_fp, &svs, 1);
690}
691
692int
693Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode)
694{
695 /* The old body of this is now in non-LAYER part of perlio.c
696 * This is a stub for any XS code which might have been calling it.
697 */
698 const char *name = ":raw";
699
700 PERL_ARGS_ASSERT_DO_BINMODE;
701
702#ifdef PERLIO_USING_CRLF
703 if (!(mode & O_BINARY))
704 name = ":crlf";
705#endif
706 return PerlIO_binmode(aTHX_ fp, iotype, mode, name);
707}
708
709#ifndef OS2
710bool
711Perl_do_aexec(pTHX_ SV *really, SV **mark, SV **sp)
712{
713 PERL_ARGS_ASSERT_DO_AEXEC;
714
715 return do_aexec5(really, mark, sp, 0, 0);
716}
717#endif
718
719/* Backwards compatibility. */
720int
721Perl_init_i18nl14n(pTHX_ int printwarn)
722{
723 return init_i18nl10n(printwarn);
724}
725
726bool
727Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **ep)
728{
729 PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC;
730 PERL_UNUSED_CONTEXT;
731
732 return is_utf8_string_loclen(s, len, ep, 0);
733}
734
735/*
736=for apidoc sv_nolocking
737
738Dummy routine which "locks" an SV when there is no locking module present.
739Exists to avoid test for a NULL function pointer and because it could
740potentially warn under some level of strict-ness.
741
742"Superseded" by sv_nosharing().
743
744=cut
745*/
746
747void
748Perl_sv_nolocking(pTHX_ SV *sv)
749{
750 PERL_UNUSED_CONTEXT;
751 PERL_UNUSED_ARG(sv);
752}
753
754
755/*
756=for apidoc sv_nounlocking
757
758Dummy routine which "unlocks" an SV when there is no locking module present.
759Exists to avoid test for a NULL function pointer and because it could
760potentially warn under some level of strict-ness.
761
762"Superseded" by sv_nosharing().
763
764=cut
765*/
766
767void
768Perl_sv_nounlocking(pTHX_ SV *sv)
769{
770 PERL_UNUSED_CONTEXT;
771 PERL_UNUSED_ARG(sv);
772}
773
774void
775Perl_save_long(pTHX_ long int *longp)
776{
777 PERL_ARGS_ASSERT_SAVE_LONG;
778
779 SSCHECK(3);
780 SSPUSHLONG(*longp);
781 SSPUSHPTR(longp);
782 SSPUSHUV(SAVEt_LONG);
783}
784
785void
786Perl_save_iv(pTHX_ IV *ivp)
787{
788 PERL_ARGS_ASSERT_SAVE_IV;
789
790 SSCHECK(3);
791 SSPUSHIV(*ivp);
792 SSPUSHPTR(ivp);
793 SSPUSHUV(SAVEt_IV);
794}
795
796void
797Perl_save_nogv(pTHX_ GV *gv)
798{
799 PERL_ARGS_ASSERT_SAVE_NOGV;
800
801 SSCHECK(2);
802 SSPUSHPTR(gv);
803 SSPUSHUV(SAVEt_NSTAB);
804}
805
806void
807Perl_save_list(pTHX_ SV **sarg, I32 maxsarg)
808{
809 I32 i;
810
811 PERL_ARGS_ASSERT_SAVE_LIST;
812
813 for (i = 1; i <= maxsarg; i++) {
814 SV *sv;
815 SvGETMAGIC(sarg[i]);
816 sv = newSV(0);
817 sv_setsv_nomg(sv,sarg[i]);
818 SSCHECK(3);
819 SSPUSHPTR(sarg[i]); /* remember the pointer */
820 SSPUSHPTR(sv); /* remember the value */
821 SSPUSHUV(SAVEt_ITEM);
822 }
823}
824
825/*
826=for apidoc sv_usepvn_mg
827
828Like C<sv_usepvn>, but also handles 'set' magic.
829
830=cut
831*/
832
833void
834Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len)
835{
836 PERL_ARGS_ASSERT_SV_USEPVN_MG;
837
838 sv_usepvn_flags(sv,ptr,len, SV_SMAGIC);
839}
840
841/*
842=for apidoc sv_usepvn
843
844Tells an SV to use C<ptr> to find its string value. Implemented by
845calling C<sv_usepvn_flags> with C<flags> of 0, hence does not handle 'set'
846magic. See C<sv_usepvn_flags>.
847
848=cut
849*/
850
851void
852Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len)
853{
854 PERL_ARGS_ASSERT_SV_USEPVN;
855
856 sv_usepvn_flags(sv,ptr,len, 0);
857}
858
859/*
860=for apidoc unpack_str
861
862The engine implementing unpack() Perl function. Note: parameters strbeg,
863new_s and ocnt are not used. This call should not be used, use
864unpackstring instead.
865
866=cut */
867
868I32
869Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s,
870 const char *strbeg, const char *strend, char **new_s, I32 ocnt,
871 U32 flags)
872{
873 PERL_ARGS_ASSERT_UNPACK_STR;
874
875 PERL_UNUSED_ARG(strbeg);
876 PERL_UNUSED_ARG(new_s);
877 PERL_UNUSED_ARG(ocnt);
878
879 return unpackstring(pat, patend, s, strend, flags);
880}
881
882/*
883=for apidoc pack_cat
884
885The engine implementing pack() Perl function. Note: parameters
886next_in_list and flags are not used. This call should not be used; use
887packlist instead.
888
889=cut
890*/
891
892void
893Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags)
894{
895 PERL_ARGS_ASSERT_PACK_CAT;
896
897 PERL_UNUSED_ARG(next_in_list);
898 PERL_UNUSED_ARG(flags);
899
900 packlist(cat, pat, patend, beglist, endlist);
901}
902
903HE *
904Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, U32 hash)
905{
906 return (HE *)hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash);
907}
908
909bool
910Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash)
911{
912 PERL_ARGS_ASSERT_HV_EXISTS_ENT;
913
914 return hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash)
915 ? TRUE : FALSE;
916}
917
918HE *
919Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash)
920{
921 PERL_ARGS_ASSERT_HV_FETCH_ENT;
922
923 return (HE *)hv_common(hv, keysv, NULL, 0, 0,
924 (lval ? HV_FETCH_LVALUE : 0), NULL, hash);
925}
926
927SV *
928Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
929{
930 PERL_ARGS_ASSERT_HV_DELETE_ENT;
931
932 return MUTABLE_SV(hv_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, NULL,
933 hash));
934}
935
936SV**
937Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash,
938 int flags)
939{
940 return (SV**) hv_common(hv, NULL, key, klen, flags,
941 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
942}
943
944SV**
945Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash)
946{
947 STRLEN klen;
948 int flags;
949
950 if (klen_i32 < 0) {
951 klen = -klen_i32;
952 flags = HVhek_UTF8;
953 } else {
954 klen = klen_i32;
955 flags = 0;
956 }
957 return (SV **) hv_common(hv, NULL, key, klen, flags,
958 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
959}
960
961bool
962Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32)
963{
964 STRLEN klen;
965 int flags;
966
967 PERL_ARGS_ASSERT_HV_EXISTS;
968
969 if (klen_i32 < 0) {
970 klen = -klen_i32;
971 flags = HVhek_UTF8;
972 } else {
973 klen = klen_i32;
974 flags = 0;
975 }
976 return hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0)
977 ? TRUE : FALSE;
978}
979
980SV**
981Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval)
982{
983 STRLEN klen;
984 int flags;
985
986 PERL_ARGS_ASSERT_HV_FETCH;
987
988 if (klen_i32 < 0) {
989 klen = -klen_i32;
990 flags = HVhek_UTF8;
991 } else {
992 klen = klen_i32;
993 flags = 0;
994 }
995 return (SV **) hv_common(hv, NULL, key, klen, flags,
996 lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE)
997 : HV_FETCH_JUST_SV, NULL, 0);
998}
999
1000SV *
1001Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags)
1002{
1003 STRLEN klen;
1004 int k_flags;
1005
1006 PERL_ARGS_ASSERT_HV_DELETE;
1007
1008 if (klen_i32 < 0) {
1009 klen = -klen_i32;
1010 k_flags = HVhek_UTF8;
1011 } else {
1012 klen = klen_i32;
1013 k_flags = 0;
1014 }
1015 return MUTABLE_SV(hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE,
1016 NULL, 0));
1017}
1018
1019/* Functions after here were made mathoms post 5.10.0 but pre 5.8.9 */
1020
1021AV *
1022Perl_newAV(pTHX)
1023{
1024 return MUTABLE_AV(newSV_type(SVt_PVAV));
1025 /* sv_upgrade does AvREAL_only():
1026 AvALLOC(av) = 0;
1027 AvARRAY(av) = NULL;
1028 AvMAX(av) = AvFILLp(av) = -1; */
1029}
1030
1031HV *
1032Perl_newHV(pTHX)
1033{
1034 HV * const hv = MUTABLE_HV(newSV_type(SVt_PVHV));
1035 assert(!SvOK(hv));
1036
1037 return hv;
1038}
1039
1040void
1041Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len,
1042 const char *const little, const STRLEN littlelen)
1043{
1044 PERL_ARGS_ASSERT_SV_INSERT;
1045 sv_insert_flags(bigstr, offset, len, little, littlelen, SV_GMAGIC);
1046}
1047
1048void
1049Perl_save_freesv(pTHX_ SV *sv)
1050{
1051 save_freesv(sv);
1052}
1053
1054void
1055Perl_save_mortalizesv(pTHX_ SV *sv)
1056{
1057 PERL_ARGS_ASSERT_SAVE_MORTALIZESV;
1058
1059 save_mortalizesv(sv);
1060}
1061
1062void
1063Perl_save_freeop(pTHX_ OP *o)
1064{
1065 save_freeop(o);
1066}
1067
1068void
1069Perl_save_freepv(pTHX_ char *pv)
1070{
1071 save_freepv(pv);
1072}
1073
1074void
1075Perl_save_op(pTHX)
1076{
1077 save_op();
1078}
1079
1080#ifdef PERL_DONT_CREATE_GVSV
1081GV *
1082Perl_gv_SVadd(pTHX_ GV *gv)
1083{
1084 return gv_SVadd(gv);
1085}
1086#endif
1087
1088GV *
1089Perl_gv_AVadd(pTHX_ GV *gv)
1090{
1091 return gv_AVadd(gv);
1092}
1093
1094GV *
1095Perl_gv_HVadd(pTHX_ GV *gv)
1096{
1097 return gv_HVadd(gv);
1098}
1099
1100GV *
1101Perl_gv_IOadd(pTHX_ GV *gv)
1102{
1103 return gv_IOadd(gv);
1104}
1105
1106IO *
1107Perl_newIO(pTHX)
1108{
1109 return MUTABLE_IO(newSV_type(SVt_PVIO));
1110}
1111
1112I32
1113Perl_my_stat(pTHX)
1114{
1115 return my_stat_flags(SV_GMAGIC);
1116}
1117
1118I32
1119Perl_my_lstat(pTHX)
1120{
1121 return my_lstat_flags(SV_GMAGIC);
1122}
1123
1124I32
1125Perl_sv_eq(pTHX_ SV *sv1, SV *sv2)
1126{
1127 return sv_eq_flags(sv1, sv2, SV_GMAGIC);
1128}
1129
1130#ifdef USE_LOCALE_COLLATE
1131char *
1132Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
1133{
1134 return sv_collxfrm_flags(sv, nxp, SV_GMAGIC);
1135}
1136#endif
1137
1138bool
1139Perl_sv_2bool(pTHX_ SV *const sv)
1140{
1141 return sv_2bool_flags(sv, SV_GMAGIC);
1142}
1143
1144
1145/*
1146=for apidoc custom_op_name
1147Return the name for a given custom op. This was once used by the OP_NAME
1148macro, but is no longer: it has only been kept for compatibility, and
1149should not be used.
1150
1151=for apidoc custom_op_desc
1152Return the description of a given custom op. This was once used by the
1153OP_DESC macro, but is no longer: it has only been kept for
1154compatibility, and should not be used.
1155
1156=cut
1157*/
1158
1159const char*
1160Perl_custom_op_name(pTHX_ const OP* o)
1161{
1162 PERL_ARGS_ASSERT_CUSTOM_OP_NAME;
1163 return XopENTRYCUSTOM(o, xop_name);
1164}
1165
1166const char*
1167Perl_custom_op_desc(pTHX_ const OP* o)
1168{
1169 PERL_ARGS_ASSERT_CUSTOM_OP_DESC;
1170 return XopENTRYCUSTOM(o, xop_desc);
1171}
1172
1173CV *
1174Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
1175{
1176 return newATTRSUB(floor, o, proto, NULL, block);
1177}
1178
1179UV
1180Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
1181{
1182 PERL_ARGS_ASSERT_TO_UTF8_FOLD;
1183
1184 return _to_utf8_fold_flags(p, ustrp, lenp, FOLD_FLAGS_FULL);
1185}
1186
1187UV
1188Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
1189{
1190 PERL_ARGS_ASSERT_TO_UTF8_LOWER;
1191
1192 return _to_utf8_lower_flags(p, ustrp, lenp, FALSE);
1193}
1194
1195UV
1196Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
1197{
1198 PERL_ARGS_ASSERT_TO_UTF8_TITLE;
1199
1200 return _to_utf8_title_flags(p, ustrp, lenp, FALSE);
1201}
1202
1203UV
1204Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
1205{
1206 PERL_ARGS_ASSERT_TO_UTF8_UPPER;
1207
1208 return _to_utf8_upper_flags(p, ustrp, lenp, FALSE);
1209}
1210
1211SV *
1212Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
1213{
1214 return Perl_sv_mortalcopy_flags(aTHX_ oldstr, SV_GMAGIC);
1215}
1216
1217UV /* Made into a function, so can be deprecated */
1218NATIVE_TO_NEED(const UV enc, const UV ch)
1219{
1220 PERL_UNUSED_ARG(enc);
1221 return ch;
1222}
1223
1224UV /* Made into a function, so can be deprecated */
1225ASCII_TO_NEED(const UV enc, const UV ch)
1226{
1227 PERL_UNUSED_ARG(enc);
1228 return ch;
1229}
1230
1231bool /* Made into a function, so can be deprecated */
1232Perl_isIDFIRST_lazy(pTHX_ const char* p)
1233{
1234 PERL_ARGS_ASSERT_ISIDFIRST_LAZY;
1235
1236 return isIDFIRST_lazy_if(p,1);
1237}
1238
1239bool /* Made into a function, so can be deprecated */
1240Perl_isALNUM_lazy(pTHX_ const char* p)
1241{
1242 PERL_ARGS_ASSERT_ISALNUM_LAZY;
1243
1244 return isALNUM_lazy_if(p,1);
1245}
1246
1247bool
1248Perl_is_uni_alnum(pTHX_ UV c)
1249{
1250 return isWORDCHAR_uni(c);
1251}
1252
1253bool
1254Perl_is_uni_alnumc(pTHX_ UV c)
1255{
1256 return isALNUM_uni(c);
1257}
1258
1259bool
1260Perl_is_uni_alpha(pTHX_ UV c)
1261{
1262 return isALPHA_uni(c);
1263}
1264
1265bool
1266Perl_is_uni_ascii(pTHX_ UV c)
1267{
1268 PERL_UNUSED_CONTEXT;
1269 return isASCII_uni(c);
1270}
1271
1272bool
1273Perl_is_uni_blank(pTHX_ UV c)
1274{
1275 PERL_UNUSED_CONTEXT;
1276 return isBLANK_uni(c);
1277}
1278
1279bool
1280Perl_is_uni_space(pTHX_ UV c)
1281{
1282 PERL_UNUSED_CONTEXT;
1283 return isSPACE_uni(c);
1284}
1285
1286bool
1287Perl_is_uni_digit(pTHX_ UV c)
1288{
1289 PERL_UNUSED_CONTEXT;
1290 return isDIGIT_uni(c);
1291}
1292
1293bool
1294Perl_is_uni_upper(pTHX_ UV c)
1295{
1296 PERL_UNUSED_CONTEXT;
1297 return isUPPER_uni(c);
1298}
1299
1300bool
1301Perl_is_uni_lower(pTHX_ UV c)
1302{
1303 PERL_UNUSED_CONTEXT;
1304 return isLOWER_uni(c);
1305}
1306
1307bool
1308Perl_is_uni_cntrl(pTHX_ UV c)
1309{
1310 PERL_UNUSED_CONTEXT;
1311 return isCNTRL_L1(c);
1312}
1313
1314bool
1315Perl_is_uni_graph(pTHX_ UV c)
1316{
1317 PERL_UNUSED_CONTEXT;
1318 return isGRAPH_uni(c);
1319}
1320
1321bool
1322Perl_is_uni_print(pTHX_ UV c)
1323{
1324 PERL_UNUSED_CONTEXT;
1325 return isPRINT_uni(c);
1326}
1327
1328bool
1329Perl_is_uni_punct(pTHX_ UV c)
1330{
1331 PERL_UNUSED_CONTEXT;
1332 return isPUNCT_uni(c);
1333}
1334
1335bool
1336Perl_is_uni_xdigit(pTHX_ UV c)
1337{
1338 PERL_UNUSED_CONTEXT;
1339 return isXDIGIT_uni(c);
1340}
1341
1342bool
1343Perl_is_uni_alnum_lc(pTHX_ UV c)
1344{
1345 PERL_UNUSED_CONTEXT;
1346 return isWORDCHAR_LC_uvchr(c);
1347}
1348
1349bool
1350Perl_is_uni_alnumc_lc(pTHX_ UV c)
1351{
1352 PERL_UNUSED_CONTEXT;
1353 return isALPHANUMERIC_LC_uvchr(c);
1354}
1355
1356bool
1357Perl_is_uni_idfirst_lc(pTHX_ UV c)
1358{
1359 PERL_UNUSED_CONTEXT;
1360 /* XXX Should probably be something that resolves to the old IDFIRST, but
1361 * this function is deprecated, so not bothering */
1362 return isIDFIRST_LC_uvchr(c);
1363}
1364
1365bool
1366Perl_is_uni_alpha_lc(pTHX_ UV c)
1367{
1368 PERL_UNUSED_CONTEXT;
1369 return isALPHA_LC_uvchr(c);
1370}
1371
1372bool
1373Perl_is_uni_ascii_lc(pTHX_ UV c)
1374{
1375 PERL_UNUSED_CONTEXT;
1376 return isASCII_LC_uvchr(c);
1377}
1378
1379bool
1380Perl_is_uni_blank_lc(pTHX_ UV c)
1381{
1382 PERL_UNUSED_CONTEXT;
1383 return isBLANK_LC_uvchr(c);
1384}
1385
1386bool
1387Perl_is_uni_space_lc(pTHX_ UV c)
1388{
1389 PERL_UNUSED_CONTEXT;
1390 return isSPACE_LC_uvchr(c);
1391}
1392
1393bool
1394Perl_is_uni_digit_lc(pTHX_ UV c)
1395{
1396 return isDIGIT_LC_uvchr(c);
1397}
1398
1399bool
1400Perl_is_uni_idfirst(pTHX_ UV c)
1401{
1402 U8 tmpbuf[UTF8_MAXBYTES+1];
1403 uvchr_to_utf8(tmpbuf, c);
1404 return _is_utf8_idstart(tmpbuf);
1405}
1406
1407bool
1408Perl_is_utf8_idfirst(pTHX_ const U8 *p) /* The naming is historical. */
1409{
1410 PERL_ARGS_ASSERT_IS_UTF8_IDFIRST;
1411
1412 return _is_utf8_idstart(p);
1413}
1414
1415bool
1416Perl_is_utf8_xidfirst(pTHX_ const U8 *p) /* The naming is historical. */
1417{
1418 PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST;
1419
1420 return _is_utf8_xidstart(p);
1421}
1422
1423bool
1424Perl_is_utf8_idcont(pTHX_ const U8 *p)
1425{
1426 PERL_ARGS_ASSERT_IS_UTF8_IDCONT;
1427
1428 return _is_utf8_idcont(p);
1429}
1430
1431bool
1432Perl_is_utf8_xidcont(pTHX_ const U8 *p)
1433{
1434 PERL_ARGS_ASSERT_IS_UTF8_XIDCONT;
1435
1436 return _is_utf8_xidcont(p);
1437}
1438
1439bool
1440Perl_is_uni_upper_lc(pTHX_ UV c)
1441{
1442 return isUPPER_LC_uvchr(c);
1443}
1444
1445bool
1446Perl_is_uni_lower_lc(pTHX_ UV c)
1447{
1448 return isLOWER_LC_uvchr(c);
1449}
1450
1451bool
1452Perl_is_uni_cntrl_lc(pTHX_ UV c)
1453{
1454 return isCNTRL_LC_uvchr(c);
1455}
1456
1457bool
1458Perl_is_uni_graph_lc(pTHX_ UV c)
1459{
1460 return isGRAPH_LC_uvchr(c);
1461}
1462
1463bool
1464Perl_is_uni_print_lc(pTHX_ UV c)
1465{
1466 return isPRINT_LC_uvchr(c);
1467}
1468
1469bool
1470Perl_is_uni_punct_lc(pTHX_ UV c)
1471{
1472 return isPUNCT_LC_uvchr(c);
1473}
1474
1475bool
1476Perl_is_uni_xdigit_lc(pTHX_ UV c)
1477{
1478 return isXDIGIT_LC_uvchr(c);
1479}
1480
1481U32
1482Perl_to_uni_upper_lc(pTHX_ U32 c)
1483{
1484 /* XXX returns only the first character -- do not use XXX */
1485 /* XXX no locale support yet */
1486 STRLEN len;
1487 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
1488 return (U32)to_uni_upper(c, tmpbuf, &len);
1489}
1490
1491U32
1492Perl_to_uni_title_lc(pTHX_ U32 c)
1493{
1494 /* XXX returns only the first character XXX -- do not use XXX */
1495 /* XXX no locale support yet */
1496 STRLEN len;
1497 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
1498 return (U32)to_uni_title(c, tmpbuf, &len);
1499}
1500
1501U32
1502Perl_to_uni_lower_lc(pTHX_ U32 c)
1503{
1504 /* XXX returns only the first character -- do not use XXX */
1505 /* XXX no locale support yet */
1506 STRLEN len;
1507 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
1508 return (U32)to_uni_lower(c, tmpbuf, &len);
1509}
1510
1511bool
1512Perl_is_utf8_alnum(pTHX_ const U8 *p)
1513{
1514 PERL_ARGS_ASSERT_IS_UTF8_ALNUM;
1515
1516 /* NOTE: "IsWord", not "IsAlnum", since Alnum is a true
1517 * descendant of isalnum(3), in other words, it doesn't
1518 * contain the '_'. --jhi */
1519 return isWORDCHAR_utf8(p);
1520}
1521
1522bool
1523Perl_is_utf8_alnumc(pTHX_ const U8 *p)
1524{
1525 PERL_ARGS_ASSERT_IS_UTF8_ALNUMC;
1526
1527 return isALPHANUMERIC_utf8(p);
1528}
1529
1530bool
1531Perl_is_utf8_alpha(pTHX_ const U8 *p)
1532{
1533 PERL_ARGS_ASSERT_IS_UTF8_ALPHA;
1534
1535 return isALPHA_utf8(p);
1536}
1537
1538bool
1539Perl_is_utf8_ascii(pTHX_ const U8 *p)
1540{
1541 PERL_ARGS_ASSERT_IS_UTF8_ASCII;
1542 PERL_UNUSED_CONTEXT;
1543
1544 return isASCII_utf8(p);
1545}
1546
1547bool
1548Perl_is_utf8_blank(pTHX_ const U8 *p)
1549{
1550 PERL_ARGS_ASSERT_IS_UTF8_BLANK;
1551 PERL_UNUSED_CONTEXT;
1552
1553 return isBLANK_utf8(p);
1554}
1555
1556bool
1557Perl_is_utf8_space(pTHX_ const U8 *p)
1558{
1559 PERL_ARGS_ASSERT_IS_UTF8_SPACE;
1560 PERL_UNUSED_CONTEXT;
1561
1562 return isSPACE_utf8(p);
1563}
1564
1565bool
1566Perl_is_utf8_perl_space(pTHX_ const U8 *p)
1567{
1568 PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE;
1569 PERL_UNUSED_CONTEXT;
1570
1571 /* Only true if is an ASCII space-like character, and ASCII is invariant
1572 * under utf8, so can just use the macro */
1573 return isSPACE_A(*p);
1574}
1575
1576bool
1577Perl_is_utf8_perl_word(pTHX_ const U8 *p)
1578{
1579 PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD;
1580 PERL_UNUSED_CONTEXT;
1581
1582 /* Only true if is an ASCII word character, and ASCII is invariant
1583 * under utf8, so can just use the macro */
1584 return isWORDCHAR_A(*p);
1585}
1586
1587bool
1588Perl_is_utf8_digit(pTHX_ const U8 *p)
1589{
1590 PERL_ARGS_ASSERT_IS_UTF8_DIGIT;
1591
1592 return isDIGIT_utf8(p);
1593}
1594
1595bool
1596Perl_is_utf8_posix_digit(pTHX_ const U8 *p)
1597{
1598 PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT;
1599 PERL_UNUSED_CONTEXT;
1600
1601 /* Only true if is an ASCII digit character, and ASCII is invariant
1602 * under utf8, so can just use the macro */
1603 return isDIGIT_A(*p);
1604}
1605
1606bool
1607Perl_is_utf8_upper(pTHX_ const U8 *p)
1608{
1609 PERL_ARGS_ASSERT_IS_UTF8_UPPER;
1610
1611 return isUPPER_utf8(p);
1612}
1613
1614bool
1615Perl_is_utf8_lower(pTHX_ const U8 *p)
1616{
1617 PERL_ARGS_ASSERT_IS_UTF8_LOWER;
1618
1619 return isLOWER_utf8(p);
1620}
1621
1622bool
1623Perl_is_utf8_cntrl(pTHX_ const U8 *p)
1624{
1625 PERL_ARGS_ASSERT_IS_UTF8_CNTRL;
1626 PERL_UNUSED_CONTEXT;
1627
1628 return isCNTRL_utf8(p);
1629}
1630
1631bool
1632Perl_is_utf8_graph(pTHX_ const U8 *p)
1633{
1634 PERL_ARGS_ASSERT_IS_UTF8_GRAPH;
1635
1636 return isGRAPH_utf8(p);
1637}
1638
1639bool
1640Perl_is_utf8_print(pTHX_ const U8 *p)
1641{
1642 PERL_ARGS_ASSERT_IS_UTF8_PRINT;
1643
1644 return isPRINT_utf8(p);
1645}
1646
1647bool
1648Perl_is_utf8_punct(pTHX_ const U8 *p)
1649{
1650 PERL_ARGS_ASSERT_IS_UTF8_PUNCT;
1651
1652 return isPUNCT_utf8(p);
1653}
1654
1655bool
1656Perl_is_utf8_xdigit(pTHX_ const U8 *p)
1657{
1658 PERL_ARGS_ASSERT_IS_UTF8_XDIGIT;
1659 PERL_UNUSED_CONTEXT;
1660
1661 return isXDIGIT_utf8(p);
1662}
1663
1664bool
1665Perl_is_utf8_mark(pTHX_ const U8 *p)
1666{
1667 PERL_ARGS_ASSERT_IS_UTF8_MARK;
1668
1669 return _is_utf8_mark(p);
1670}
1671
1672/*
1673=for apidoc is_utf8_char
1674
1675Tests if some arbitrary number of bytes begins in a valid UTF-8
1676character. Note that an INVARIANT (i.e. ASCII on non-EBCDIC machines)
1677character is a valid UTF-8 character. The actual number of bytes in the UTF-8
1678character will be returned if it is valid, otherwise 0.
1679
1680This function is deprecated due to the possibility that malformed input could
1681cause reading beyond the end of the input buffer. Use L</isUTF8_CHAR>
1682instead.
1683
1684=cut */
1685
1686STRLEN
1687Perl_is_utf8_char(const U8 *s)
1688{
1689 PERL_ARGS_ASSERT_IS_UTF8_CHAR;
1690
1691 /* Assumes we have enough space, which is why this is deprecated */
1692 return isUTF8_CHAR(s, s + UTF8SKIP(s));
1693}
1694
1695/* DEPRECATED!
1696 * Like L</utf8_to_uvuni_buf>(), but should only be called when it is known that
1697 * there are no malformations in the input UTF-8 string C<s>. Surrogates,
1698 * non-character code points, and non-Unicode code points are allowed */
1699
1700UV
1701Perl_valid_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
1702{
1703 PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI;
1704
1705 return NATIVE_TO_UNI(valid_utf8_to_uvchr(s, retlen));
1706}
1707
1708/*
1709=for apidoc utf8_to_uvchr
1710
1711Returns the native code point of the first character in the string C<s>
1712which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
1713length, in bytes, of that character.
1714
1715Some, but not all, UTF-8 malformations are detected, and in fact, some
1716malformed input could cause reading beyond the end of the input buffer, which
1717is why this function is deprecated. Use L</utf8_to_uvchr_buf> instead.
1718
1719If C<s> points to one of the detected malformations, and UTF8 warnings are
1720enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
1721NULL) to -1. If those warnings are off, the computed value if well-defined (or
1722the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
1723is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
1724next possible position in C<s> that could begin a non-malformed character.
1725See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
1726
1727=cut
1728*/
1729
1730UV
1731Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
1732{
1733 PERL_ARGS_ASSERT_UTF8_TO_UVCHR;
1734
1735 return utf8_to_uvchr_buf(s, s + UTF8_MAXBYTES, retlen);
1736}
1737
1738/*
1739=for apidoc utf8_to_uvuni
1740
1741Returns the Unicode code point of the first character in the string C<s>
1742which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
1743length, in bytes, of that character.
1744
1745Some, but not all, UTF-8 malformations are detected, and in fact, some
1746malformed input could cause reading beyond the end of the input buffer, which
1747is one reason why this function is deprecated. The other is that only in
1748extremely limited circumstances should the Unicode versus native code point be
1749of any interest to you. See L</utf8_to_uvuni_buf> for alternatives.
1750
1751If C<s> points to one of the detected malformations, and UTF8 warnings are
1752enabled, zero is returned and C<*retlen> is set (if C<retlen> doesn't point to
1753NULL) to -1. If those warnings are off, the computed value if well-defined (or
1754the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
1755is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
1756next possible position in C<s> that could begin a non-malformed character.
1757See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
1758
1759=cut
1760*/
1761
1762UV
1763Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
1764{
1765 PERL_ARGS_ASSERT_UTF8_TO_UVUNI;
1766
1767 return NATIVE_TO_UNI(valid_utf8_to_uvchr(s, retlen));
1768}
1769
1770void
1771Perl_save_re_context(pTHX)
1772{
1773 PERL_UNUSED_CONTEXT;
1774}
1775
1776
1777END_EXTERN_C
1778
1779#endif /* NO_MATHOMS */
1780
1781/*
1782 * Local variables:
1783 * c-indentation-style: bsd
1784 * c-basic-offset: 4
1785 * indent-tabs-mode: nil
1786 * End:
1787 *
1788 * ex: set ts=8 sts=4 sw=4 et:
1789 */