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