Bug Summary

File:obj/gnu/usr.bin/perl/ext/Devel-Peek/Peek.c
Warning:line 379, column 14
Access to field 'op_moresib' results in a dereference of a null pointer (loaded from variable 'first')

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name Peek.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/obj/gnu/usr.bin/perl/ext/Devel-Peek -resource-dir /usr/local/lib/clang/13.0.0 -D NO_LOCALE_NUMERIC -D NO_LOCALE_COLLATE -D VERSION="1.28" -D XS_VERSION="1.28" -D PIC -I ../.. -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -Wwrite-strings -fconst-strings -fdebug-compilation-dir=/usr/obj/gnu/usr.bin/perl/ext/Devel-Peek -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c Peek.c
1/*
2 * This file was generated automatically by ExtUtils::ParseXS version 3.40 from the
3 * contents of Peek.xs. Do not edit this file, edit Peek.xs instead.
4 *
5 * ANY CHANGES MADE HERE WILL BE LOST!
6 *
7 */
8
9#line 1 "Peek.xs"
10#define PERL_NO_GET_CONTEXT
11#include "EXTERN.h"
12#include "perl.h"
13#include "XSUB.h"
14
15static bool_Bool
16_runops_debug(int flag)
17{
18 dTHXstruct Perl___notused_struct;
19 const bool_Bool d = PL_runops == Perl_runops_debug;
20
21 if (flag >= 0)
22 PL_runops = flag ? Perl_runops_debug : Perl_runops_standard;
23 return d;
24}
25
26static SV *
27DeadCode(pTHXvoid)
28{
29#ifdef PURIFY
30 return Nullsv((SV*)((void*)0));
31#else
32 SV* sva;
33 SV* sv;
34 SV* ret = newRV_noinc((SV*)newAV())Perl_newRV_noinc( (SV*)((AV *)({ void *_p = (Perl_newSV_type(
SVt_PVAV)); _p; })))
;
35 SV* svend;
36 int tm = 0, tref = 0, ts = 0, ta = 0, tas = 0;
37
38 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)(sva)->sv_any) {
39 svend = &sva[SvREFCNT(sva)(sva)->sv_refcnt];
40 for (sv = sva + 1; sv < svend; ++sv) {
41 if (SvTYPE(sv)((svtype)((sv)->sv_flags & 0xff)) == SVt_PVCV) {
42 CV *cv = (CV*)sv;
43 PADLIST* padlist;
44 AV *argav;
45 SV** svp;
46 SV** pad;
47 int i = 0, j, levelm, totm = 0, levelref, totref = 0;
48 int levels, tots = 0, levela, tota = 0, levelas, totas = 0;
49 int dumpit = 0;
50
51 if (CvISXSUB(sv)(((XPVCV*)({ void *_p = ((sv)->sv_any); _p; }))->xcv_flags
& 0x0008)
) {
52 continue; /* XSUB */
53 }
54 if (!CvGV(sv)Perl_CvGV( (CV *)(sv))) {
55 continue; /* file-level scope. */
56 }
57 if (!CvROOT(cv)((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_root_u
.xcv_root
) {
58 /* PerlIO_printf(Perl_debug_log, " no root?!\n"); */
59 continue; /* autoloading stub. */
60 }
61 do_gvgv_dump(0, Perl_debug_log, "GVGV::GV", CvGV(sv))Perl_do_gvgv_dump( 0,Perl_PerlIO_stderr(),"GVGV::GV",Perl_CvGV
( (CV *)(sv)))
;
62 if (CvDEPTH(cv)(*Perl_CvDEPTH((const CV *)cv))) {
63 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), " busy\n");
64 continue;
65 }
66 padlist = CvPADLIST(cv)(*( &(((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->
xcv_padlist_u.xcv_padlist)))
;
67 svp = (SV**) PadlistARRAY(padlist)(padlist)->xpadl_arr.xpadlarr_alloc;
68 while (++i <= PadlistMAX(padlist)(padlist)->xpadl_max) { /* Depth. */
69 SV **args;
70
71 if (!svp[i]) continue;
72 pad = AvARRAY((AV*)svp[i])(((AV*)svp[i])->sv_u.svu_array);
73 argav = (AV*)pad[0];
74 if (!argav || (SV*)argav == &PL_sv_undef(PL_sv_immortals[1])) {
75 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), " closure-template\n");
76 continue;
77 }
78 args = AvARRAY(argav)((argav)->sv_u.svu_array);
79 levelm = levels = levelref = levelas = 0;
80 levela = sizeof(SV*) * (AvMAX(argav)((XPVAV*) (argav)->sv_any)->xav_max + 1);
81 if (AvREAL(argav)((argav)->sv_flags & 0x40000000)) {
82 for (j = 0; j < AvFILL(argav)(((((const SV *) (argav))->sv_flags & 0x00800000)) ? Perl_mg_size
( ((SV *)({ void *_p = (argav); _p; }))) : ((XPVAV*) (argav)->
sv_any)->xav_fill)
; j++) {
83 if (SvROK(args[j])((args[j])->sv_flags & 0x00000800)) {
84 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), " ref in args!\n");
85 levelref++;
86 }
87 /* else if (SvPOK(args[j]) && SvPVX(args[j])) { */
88 else if (SvTYPE(args[j])((svtype)((args[j])->sv_flags & 0xff)) >= SVt_PV && SvLEN(args[j])((XPV*) (args[j])->sv_any)->xpv_len_u.xpvlenu_len) {
89 levelas += SvLEN(args[j])((XPV*) (args[j])->sv_any)->xpv_len_u.xpvlenu_len/SvREFCNT(args[j])(args[j])->sv_refcnt;
90 }
91 }
92 }
93 for (j = 1; j < AvFILL((AV*)svp[1])(((((const SV *) ((AV*)svp[1]))->sv_flags & 0x00800000
)) ? Perl_mg_size( ((SV *)({ void *_p = ((AV*)svp[1]); _p; })
)) : ((XPVAV*) ((AV*)svp[1])->sv_any)->xav_fill)
; j++) { /* Vars. */
94 if (!pad[j]) continue;
95 if (SvROK(pad[j])((pad[j])->sv_flags & 0x00000800)) {
96 levelref++;
97 do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0)Perl_do_sv_dump( 0,Perl_PerlIO_stderr(),pad[j],0,4,0,0);
98 dumpit = 1;
99 }
100 /* else if (SvPOK(pad[j]) && SvPVX(pad[j])) { */
101 else if (SvTYPE(pad[j])((svtype)((pad[j])->sv_flags & 0xff)) >= SVt_PVAV) {
102 if (!SvPADMY(pad[j])!((pad[j])->sv_flags & 0x00020000)) {
103 levelref++;
104 do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0)Perl_do_sv_dump( 0,Perl_PerlIO_stderr(),pad[j],0,4,0,0);
105 dumpit = 1;
106 }
107 }
108 else if (SvTYPE(pad[j])((svtype)((pad[j])->sv_flags & 0xff)) >= SVt_PV && SvLEN(pad[j])((XPV*) (pad[j])->sv_any)->xpv_len_u.xpvlenu_len) {
109 levels++;
110 levelm += SvLEN(pad[j])((XPV*) (pad[j])->sv_any)->xpv_len_u.xpvlenu_len/SvREFCNT(pad[j])(pad[j])->sv_refcnt;
111 /* Dump(pad[j],4); */
112 }
113 }
114 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), " level %i: refs: %i, strings: %i in %i,\targsarray: %i, argsstrings: %i\n",
115 i, levelref, levelm, levels, levela, levelas);
116 totm += levelm;
117 tota += levela;
118 totas += levelas;
119 tots += levels;
120 totref += levelref;
121 if (dumpit)
122 do_sv_dump(0, Perl_debug_log, (SV*)cv, 0, 2, 0, 0)Perl_do_sv_dump( 0,Perl_PerlIO_stderr(),(SV*)cv,0,2,0,0);
123 }
124 if (PadlistMAX(padlist)(padlist)->xpadl_max > 1) {
125 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), " total: refs: %i, strings: %i in %i,\targsarrays: %i, argsstrings: %i\n",
126 totref, totm, tots, tota, totas);
127 }
128 tref += totref;
129 tm += totm;
130 ts += tots;
131 ta += tota;
132 tas += totas;
133 }
134 }
135 }
136 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), "total: refs: %i, strings: %i in %i\targsarray: %i, argsstrings: %i\n", tref, tm, ts, ta, tas);
137
138 return ret;
139#endif /* !PURIFY */
140}
141
142#if defined(MYMALLOC)
143# define mstat(str)PerlIO_printf(Perl_PerlIO_stderr(), "%s: perl not compiled with MYMALLOC\n"
,str);
dump_mstats(str)
144#else
145# define mstat(str)PerlIO_printf(Perl_PerlIO_stderr(), "%s: perl not compiled with MYMALLOC\n"
,str);
\
146 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), "%s: perl not compiled with MYMALLOC\n",str);
147#endif
148
149#if defined(MYMALLOC)
150
151/* Very coarse overestimate, 2-per-power-of-2, one more to determine NBUCKETS. */
152# define _NBUCKETS (2*8*IVSIZE8+1)
153
154struct mstats_buffer
155{
156 perl_mstats_t buffer;
157 UV buf[_NBUCKETS*4];
158};
159
160static void
161_fill_mstats(struct mstats_buffer *b, int level)
162{
163 dTHXstruct Perl___notused_struct;
164 b->buffer.nfree = b->buf;
165 b->buffer.ntotal = b->buf + _NBUCKETS;
166 b->buffer.bucket_mem_size = b->buf + 2*_NBUCKETS;
167 b->buffer.bucket_available_size = b->buf + 3*_NBUCKETS;
168 Zero(b->buf, (level ? 4*_NBUCKETS: 2*_NBUCKETS), unsigned long)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((level
? 4*_NBUCKETS: 2*_NBUCKETS)) || sizeof(unsigned long) > (
(size_t)1 << 8*(sizeof(size_t) - sizeof((level ? 4*_NBUCKETS
: 2*_NBUCKETS))))) ? (size_t)((level ? 4*_NBUCKETS: 2*_NBUCKETS
)) : ((size_t)-1)/sizeof(unsigned long)) > ((size_t)-1)/sizeof
(unsigned long))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((void)0), (void)memset((char*)(b->buf),0,((level ?
4*_NBUCKETS: 2*_NBUCKETS)) * sizeof(unsigned long)))
;
169 get_mstats(&(b->buffer), _NBUCKETS, level);
170}
171
172static void
173fill_mstats(SV *sv, int level)
174{
175 dTHXstruct Perl___notused_struct;
176
177 if (SvREADONLY(sv)((sv)->sv_flags & (0x08000000|0x00010000)))
178 croakPerl_croak("Cannot modify a readonly value");
179 sv_grow(sv, sizeof(struct mstats_buffer)+1)Perl_sv_grow( sv,sizeof(struct mstats_buffer)+1);
180 _fill_mstats((struct mstats_buffer*)SvPVX(sv)((sv)->sv_u.svu_pv),level);
181 SvCUR_set(sv, sizeof(struct mstats_buffer))do { ((void)0); ((void)0); ((void)0); (((XPV*) (sv)->sv_any
)->xpv_cur = (sizeof(struct mstats_buffer))); } while (0)
;
182 *SvEND(sv)((sv)->sv_u.svu_pv + ((XPV*)(sv)->sv_any)->xpv_cur) = '\0';
183 SvPOK_only(sv)( (sv)->sv_flags &= ~((0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000)| 0x80000000
|0x20000000), (sv)->sv_flags |= (0x00000400|0x00004000))
;
184}
185
186static void
187_mstats_to_hv(HV *hv, const struct mstats_buffer *b, int level)
188{
189 dTHXstruct Perl___notused_struct;
190 SV **svp;
191 int type;
192
193 svp = hv_fetchs(hv, "topbucket", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "topbucket" "")),
((sizeof("topbucket")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void
*)0),0))
;
194 sv_setiv(*svp, b->buffer.topbucket)Perl_sv_setiv( *svp,b->buffer.topbucket);
195
196 svp = hv_fetchs(hv, "topbucket_ev", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "topbucket_ev" ""
)),((sizeof("topbucket_ev")-1)),((1)) ? (0x20 | 0x10) : 0x20,
((void*)0),0))
;
197 sv_setiv(*svp, b->buffer.topbucket_ev)Perl_sv_setiv( *svp,b->buffer.topbucket_ev);
198
199 svp = hv_fetchs(hv, "topbucket_odd", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "topbucket_odd" ""
)),((sizeof("topbucket_odd")-1)),((1)) ? (0x20 | 0x10) : 0x20
,((void*)0),0))
;
200 sv_setiv(*svp, b->buffer.topbucket_odd)Perl_sv_setiv( *svp,b->buffer.topbucket_odd);
201
202 svp = hv_fetchs(hv, "totfree", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "totfree" "")),((
sizeof("totfree")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void*)0)
,0))
;
203 sv_setiv(*svp, b->buffer.totfree)Perl_sv_setiv( *svp,b->buffer.totfree);
204
205 svp = hv_fetchs(hv, "total", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "total" "")),((sizeof
("total")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void*)0),0))
;
206 sv_setiv(*svp, b->buffer.total)Perl_sv_setiv( *svp,b->buffer.total);
207
208 svp = hv_fetchs(hv, "total_chain", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "total_chain" "")
),((sizeof("total_chain")-1)),((1)) ? (0x20 | 0x10) : 0x20,((
void*)0),0))
;
209 sv_setiv(*svp, b->buffer.total_chain)Perl_sv_setiv( *svp,b->buffer.total_chain);
210
211 svp = hv_fetchs(hv, "total_sbrk", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "total_sbrk" ""))
,((sizeof("total_sbrk")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void
*)0),0))
;
212 sv_setiv(*svp, b->buffer.total_sbrk)Perl_sv_setiv( *svp,b->buffer.total_sbrk);
213
214 svp = hv_fetchs(hv, "sbrks", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "sbrks" "")),((sizeof
("sbrks")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void*)0),0))
;
215 sv_setiv(*svp, b->buffer.sbrks)Perl_sv_setiv( *svp,b->buffer.sbrks);
216
217 svp = hv_fetchs(hv, "sbrk_good", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "sbrk_good" "")),
((sizeof("sbrk_good")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void
*)0),0))
;
218 sv_setiv(*svp, b->buffer.sbrk_good)Perl_sv_setiv( *svp,b->buffer.sbrk_good);
219
220 svp = hv_fetchs(hv, "sbrk_slack", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "sbrk_slack" ""))
,((sizeof("sbrk_slack")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void
*)0),0))
;
221 sv_setiv(*svp, b->buffer.sbrk_slack)Perl_sv_setiv( *svp,b->buffer.sbrk_slack);
222
223 svp = hv_fetchs(hv, "start_slack", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "start_slack" "")
),((sizeof("start_slack")-1)),((1)) ? (0x20 | 0x10) : 0x20,((
void*)0),0))
;
224 sv_setiv(*svp, b->buffer.start_slack)Perl_sv_setiv( *svp,b->buffer.start_slack);
225
226 svp = hv_fetchs(hv, "sbrked_remains", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "sbrked_remains" ""
)),((sizeof("sbrked_remains")-1)),((1)) ? (0x20 | 0x10) : 0x20
,((void*)0),0))
;
227 sv_setiv(*svp, b->buffer.sbrked_remains)Perl_sv_setiv( *svp,b->buffer.sbrked_remains);
228
229 svp = hv_fetchs(hv, "minbucket", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "minbucket" "")),
((sizeof("minbucket")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void
*)0),0))
;
230 sv_setiv(*svp, b->buffer.minbucket)Perl_sv_setiv( *svp,b->buffer.minbucket);
231
232 svp = hv_fetchs(hv, "nbuckets", 1)((SV**) Perl_hv_common_key_len( ((hv)),(("" "nbuckets" "")),(
(sizeof("nbuckets")-1)),((1)) ? (0x20 | 0x10) : 0x20,((void*)
0),0))
;
233 sv_setiv(*svp, b->buffer.nbuckets)Perl_sv_setiv( *svp,b->buffer.nbuckets);
234
235 if (_NBUCKETS < b->buffer.nbuckets)
236 warnPerl_warn("FIXME: internal mstats buffer too short");
237
238 for (type = 0; type < (level ? 4 : 2); type++) {
239 UV *p = 0, *p1 = 0, i;
240 AV *av;
241 static const char *types[4] = {
242 "free", "used", "mem_size", "available_size"
243 };
244
245 svp = hv_fetch(hv, types[type], strlen(types[type]), 1)((SV**) Perl_hv_common_key_len( (hv),(types[type]),(strlen(types
[type])),(1) ? (0x20 | 0x10) : 0x20,((void*)0),0))
;
246
247 if (SvOK(*svp)((*svp)->sv_flags & (0x00000100|0x00000200|0x00000400|
0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
&& !(SvROK(*svp)((*svp)->sv_flags & 0x00000800) && SvTYPE(SvRV(*svp))((svtype)((((*svp)->sv_u.svu_rv))->sv_flags & 0xff)
)
== SVt_PVAV))
248 croakPerl_croak("Unexpected value for the key '%s' in the mstats hash", types[type]);
249 if (!SvOK(*svp)((*svp)->sv_flags & (0x00000100|0x00000200|0x00000400|
0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
) {
250 av = newAV()((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV)); _p; }));
251 (void)SvUPGRADE(*svp, SVt_RV)((void)(((svtype)((*svp)->sv_flags & 0xff)) >= (SVt_IV
) || (Perl_sv_upgrade( *svp,SVt_IV),1)))
;
252 SvRV_set(*svp, (SV*)av)do { ((void)0); ((void)0); ((void)0); ((*svp)->sv_u.svu_rv
= ((SV*)av)); } while (0)
;
253 SvROK_on(*svp)((*svp)->sv_flags |= 0x00000800);
254 } else
255 av = (AV*)SvRV(*svp)((*svp)->sv_u.svu_rv);
256
257 av_extend(av, b->buffer.nbuckets - 1)Perl_av_extend( av,b->buffer.nbuckets - 1);
258 /* XXXX What is the official way to reduce the size of the array? */
259 switch (type) {
260 case 0:
261 p = b->buffer.nfree;
262 break;
263 case 1:
264 p = b->buffer.ntotal;
265 p1 = b->buffer.nfree;
266 break;
267 case 2:
268 p = b->buffer.bucket_mem_size;
269 break;
270 case 3:
271 p = b->buffer.bucket_available_size;
272 break;
273 }
274 for (i = 0; i < b->buffer.nbuckets; i++) {
275 svp = av_fetch(av, i, 1)Perl_av_fetch( av,i,1);
276 if (type == 1)
277 sv_setiv(*svp, p[i]-p1[i])Perl_sv_setiv( *svp,p[i]-p1[i]);
278 else
279 sv_setuv(*svp, p[i])Perl_sv_setuv( *svp,p[i]);
280 }
281 }
282}
283
284static void
285mstats_fillhash(SV *sv, int level)
286{
287 struct mstats_buffer buf;
288
289 if (!(SvROK(sv)((sv)->sv_flags & 0x00000800) && SvTYPE(SvRV(sv))((svtype)((((sv)->sv_u.svu_rv))->sv_flags & 0xff)) == SVt_PVHV))
290 croakPerl_croak("Not a hash reference");
291 _fill_mstats(&buf, level);
292 _mstats_to_hv((HV *)SvRV(sv)((sv)->sv_u.svu_rv), &buf, level);
293}
294
295static void
296mstats2hash(SV *sv, SV *rv, int level)
297{
298 if (!(SvROK(rv)((rv)->sv_flags & 0x00000800) && SvTYPE(SvRV(rv))((svtype)((((rv)->sv_u.svu_rv))->sv_flags & 0xff)) == SVt_PVHV))
299 croakPerl_croak("Not a hash reference");
300 if (!SvPOK(sv)((sv)->sv_flags & 0x00000400))
301 croakPerl_croak("Undefined value when expecting mstats buffer");
302 if (SvCUR(sv)((XPV*) (sv)->sv_any)->xpv_cur != sizeof(struct mstats_buffer))
303 croakPerl_croak("Wrong size for a value with a mstats buffer");
304 _mstats_to_hv((HV *)SvRV(rv)((rv)->sv_u.svu_rv), (struct mstats_buffer*)SvPVX(sv)((sv)->sv_u.svu_pv), level);
305}
306#else /* defined(MYMALLOC) */
307static void
308fill_mstats(SV *sv, int level)
309{
310 PERL_UNUSED_ARG(sv)((void)sizeof(sv));
311 PERL_UNUSED_ARG(level)((void)sizeof(level));
312 croakPerl_croak("Cannot report mstats without Perl malloc");
313}
314
315static void
316mstats_fillhash(SV *sv, int level)
317{
318 PERL_UNUSED_ARG(sv)((void)sizeof(sv));
319 PERL_UNUSED_ARG(level)((void)sizeof(level));
320 croakPerl_croak("Cannot report mstats without Perl malloc");
321}
322
323static void
324mstats2hash(SV *sv, SV *rv, int level)
325{
326 PERL_UNUSED_ARG(sv)((void)sizeof(sv));
327 PERL_UNUSED_ARG(rv)((void)sizeof(rv));
328 PERL_UNUSED_ARG(level)((void)sizeof(level));
329 croakPerl_croak("Cannot report mstats without Perl malloc");
330}
331#endif /* defined(MYMALLOC) */
332
333#define _CvGV(cv)(((cv)->sv_flags & 0x00000800) && (((svtype)((
((cv)->sv_u.svu_rv))->sv_flags & 0xff))==SVt_PVCV) ?
Perl_SvREFCNT_inc(((SV *)({ void *_p = (Perl_CvGV( (CV *)((CV
*)((cv)->sv_u.svu_rv)))); _p; }))) : &(PL_sv_immortals
[1]))
\
334 (SvROK(cv)((cv)->sv_flags & 0x00000800) && (SvTYPE(SvRV(cv))((svtype)((((cv)->sv_u.svu_rv))->sv_flags & 0xff))==SVt_PVCV) \
335 ? SvREFCNT_inc(CvGV((CV*)SvRV(cv)))Perl_SvREFCNT_inc(((SV *)({ void *_p = (Perl_CvGV( (CV *)((CV
*)((cv)->sv_u.svu_rv)))); _p; })))
: &PL_sv_undef(PL_sv_immortals[1]))
336
337static void
338S_do_dump(pTHX_ SV *const sv, I32 lim)
339{
340 dVARstruct Perl___notused_struct;
341 SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", 0)Perl_get_sv( "Devel::Peek::pv_limit",0);
342 const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv)((((pv_lim_sv)->sv_flags & (0x00000100|0x00200000)) ==
0x00000100) ? ((XPVIV*) (pv_lim_sv)->sv_any)->xiv_u.xivu_iv
: Perl_sv_2iv_flags( pv_lim_sv,2))
: 0;
343 SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", 0)Perl_get_sv( "Devel::Peek::dump_ops",0);
344 const U16 save_dumpindent = PL_dumpindent;
345 PL_dumpindent = 2;
346 do_sv_dump(0, Perl_debug_log, sv, 0, lim,Perl_do_sv_dump( 0,Perl_PerlIO_stderr(),sv,0,lim,(_Bool)(dumpop
&& Perl_SvTRUE( dumpop)),pv_lim)
347 (bool)(dumpop && SvTRUE(dumpop)), pv_lim)Perl_do_sv_dump( 0,Perl_PerlIO_stderr(),sv,0,lim,(_Bool)(dumpop
&& Perl_SvTRUE( dumpop)),pv_lim)
;
348 PL_dumpindent = save_dumpindent;
349}
350
351static OP *
352S_pp_dump(pTHXvoid)
353{
354 dSPSV **sp = PL_stack_sp;
355 const I32 lim = PL_op->op_private == 2 ? (I32)POPi((IV)({SV *_sv = ((SV *)({ void *_p = ((*sp--)); _p; })); (((
(_sv)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? ((XPVIV*) (_sv)->sv_any)->xiv_u.xivu_iv : Perl_sv_2iv_flags
( _sv,2)); }))
: 4;
356 dPOPssSV *sv = (*sp--);
357 S_do_dump(aTHX_ sv, lim);
358 RETPUSHUNDEFreturn ((*++sp = (&(PL_sv_immortals[1]))), PL_stack_sp = sp
, PL_op->op_next)
;
359}
360
361static OP *
362S_ck_dump(pTHX_ OP *entersubop, GV *namegv, SV *cv)
363{
364 OP *parent, *pm, *first, *second;
365 BINOP *newop;
366
367 PERL_UNUSED_ARG(cv)((void)sizeof(cv));
368
369 ck_entersub_args_proto(entersubop, namegv,Perl_ck_entersub_args_proto( entersubop,namegv,Perl_newSVpvn_flags
( "$;$",3,0x00080000))
370 newSVpvn_flags("$;$", 3, SVs_TEMP))Perl_ck_entersub_args_proto( entersubop,namegv,Perl_newSVpvn_flags
( "$;$",3,0x00080000))
;
371
372 parent = entersubop;
373 pm = cUNOPx(entersubop)((UNOP*)(entersubop))->op_first;
374 if (!OpHAS_SIBLING(pm)((((pm)->op_moresib) ? (_Bool)1 : (_Bool)0))) {
1
Assuming field 'op_moresib' is 0
2
'?' condition is false
3
Taking true branch
375 parent = pm;
376 pm = cUNOPx(pm)((UNOP*)(pm))->op_first;
377 }
378 first = OpSIBLING(pm)(0 + (pm)->op_moresib ? (pm)->op_sibparent : ((void*)0)
)
;
4
Assuming the condition is false
5
'?' condition is false
6
Null pointer value stored to 'first'
379 second = OpSIBLING(first)(0 + (first)->op_moresib ? (first)->op_sibparent : ((void
*)0))
;
7
Access to field 'op_moresib' results in a dereference of a null pointer (loaded from variable 'first')
380 if (!second) {
381 /* It doesn’t really matter what we return here, as this only
382 occurs after yyerror. */
383 return entersubop;
384 }
385 /* we either have Dump($x): [pushmark]->[first]->[ex-cvop]
386 * or Dump($x,1); [pushmark]->[first]->[second]->[ex-cvop]
387 */
388 if (!OpHAS_SIBLING(second)((((second)->op_moresib) ? (_Bool)1 : (_Bool)0)))
389 second = NULL((void*)0);
390
391 if (first->op_type == OP_RV2AV ||
392 first->op_type == OP_PADAV ||
393 first->op_type == OP_RV2HV ||
394 first->op_type == OP_PADHV
395 )
396 first->op_flags |= OPf_REF16;
397 else
398 first->op_flags &= ~OPf_MOD32;
399
400 /* splice out first (and optionally second) ops, then discard the rest
401 * of the op tree */
402
403 op_sibling_splicePerl_op_sibling_splice(parent, pm, second ? 2 : 1, NULL((void*)0));
404 op_free(entersubop)Perl_op_free( entersubop);
405
406 /* then attach first (and second) to a new binop */
407
408 NewOp(1234, newop, 1, BINOP)(newop = (BINOP *) Perl_Slab_Alloc( 1*sizeof(BINOP)));
409 newop->op_type = OP_CUSTOM;
410 newop->op_ppaddr = S_pp_dump;
411 newop->op_private= second ? 2 : 1;
412 newop->op_flags = OPf_KIDS4|OPf_WANT_SCALAR2;
413 op_sibling_splicePerl_op_sibling_splice((OP*)newop, NULL((void*)0), 0, first);
414
415 return (OP *)newop;
416}
417
418static const XOP my_xop = {
419 XOPf_xop_name0x01|XOPf_xop_desc0x02|XOPf_xop_class0x04, /* xop_flags */
420 "Devel_Peek_Dump", /* xop_name */
421 "Dump", /* xop_desc */
422 OA_BINOP(2 << 8), /* xop_class */
423 NULL((void*)0) /* xop_peep */
424};
425
426#line 427 "Peek.c"
427#ifndef PERL_UNUSED_VAR
428# define PERL_UNUSED_VAR(var)((void)sizeof(var)) if (0) var = var
429#endif
430
431#ifndef dVARstruct Perl___notused_struct
432# define dVARstruct Perl___notused_struct dNOOPstruct Perl___notused_struct
433#endif
434
435
436/* This stuff is not part of the API! You have been warned. */
437#ifndef PERL_VERSION_DECIMAL
438# define PERL_VERSION_DECIMAL(r,v,s)(r*1000000 + v*1000 + s) (r*1000000 + v*1000 + s)
439#endif
440#ifndef PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1)
441# define PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1) \
442 PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)(5*1000000 + 32*1000 + 1)
443#endif
444#ifndef PERL_VERSION_GE
445# define PERL_VERSION_GE(r,v,s)((5*1000000 + 32*1000 + 1) >= (r*1000000 + v*1000 + s)) \
446 (PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1) >= PERL_VERSION_DECIMAL(r,v,s)(r*1000000 + v*1000 + s))
447#endif
448#ifndef PERL_VERSION_LE
449# define PERL_VERSION_LE(r,v,s)((5*1000000 + 32*1000 + 1) <= (r*1000000 + v*1000 + s)) \
450 (PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1) <= PERL_VERSION_DECIMAL(r,v,s)(r*1000000 + v*1000 + s))
451#endif
452
453/* XS_INTERNAL is the explicit static-linkage variant of the default
454 * XS macro.
455 *
456 * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
457 * "STATIC", ie. it exports XSUB symbols. You probably don't want that
458 * for anything but the BOOT XSUB.
459 *
460 * See XSUB.h in core!
461 */
462
463
464/* TODO: This might be compatible further back than 5.10.0. */
465#if PERL_VERSION_GE(5, 10, 0)((5*1000000 + 32*1000 + 1) >= (5*1000000 + 10*1000 + 0)) && PERL_VERSION_LE(5, 15, 1)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 15*1000 + 1))
466# undef XS_EXTERNAL
467# undef XS_INTERNAL
468# if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
469# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) __declspec(dllexport) XSPROTO(name)void name( CV* cv __attribute__((unused)))
470# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) STATICstatic XSPROTO(name)void name( CV* cv __attribute__((unused)))
471# endif
472# if defined(__SYMBIAN32__)
473# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) EXPORT_C XSPROTO(name)void name( CV* cv __attribute__((unused)))
474# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) EXPORT_C STATICstatic XSPROTO(name)void name( CV* cv __attribute__((unused)))
475# endif
476# ifndef XS_EXTERNAL
477# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
478# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) void name(pTHX_ CV* cv __attribute__unused____attribute__((unused)))
479# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) STATICstatic void name(pTHX_ CV* cv __attribute__unused____attribute__((unused)))
480# else
481# ifdef __cplusplus
482# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) extern "C" XSPROTO(name)void name( CV* cv __attribute__((unused)))
483# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) static XSPROTO(name)void name( CV* cv __attribute__((unused)))
484# else
485# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) XSPROTO(name)void name( CV* cv __attribute__((unused)))
486# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) STATICstatic XSPROTO(name)void name( CV* cv __attribute__((unused)))
487# endif
488# endif
489# endif
490#endif
491
492/* perl >= 5.10.0 && perl <= 5.15.1 */
493
494
495/* The XS_EXTERNAL macro is used for functions that must not be static
496 * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
497 * macro defined, the best we can do is assume XS is the same.
498 * Dito for XS_INTERNAL.
499 */
500#ifndef XS_EXTERNAL
501# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) XS(name)void name( CV* cv __attribute__((unused)))
502#endif
503#ifndef XS_INTERNAL
504# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) XS(name)void name( CV* cv __attribute__((unused)))
505#endif
506
507/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
508 * internal macro that we're free to redefine for varying linkage due
509 * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
510 * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
511 */
512
513#undef XS_EUPXS
514#if defined(PERL_EUPXS_ALWAYS_EXPORT)
515# define XS_EUPXS(name)static void name( CV* cv __attribute__((unused))) XS_EXTERNAL(name)void name( CV* cv __attribute__((unused)))
516#else
517 /* default to internal */
518# define XS_EUPXS(name)static void name( CV* cv __attribute__((unused))) XS_INTERNAL(name)static void name( CV* cv __attribute__((unused)))
519#endif
520
521#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0)
522#define PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0) assert(cv)((void)0); assert(params)((void)0)
523
524/* prototype to pass -Wmissing-prototypes */
525STATICstatic void
526S_croak_xs_usage(const CV *const cv, const char *const params);
527
528STATICstatic void
529S_croak_xs_usage(const CV *const cv, const char *const params)
530{
531 const GV *const gv = CvGV(cv)Perl_CvGV( (CV *)(cv));
532
533 PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0);
534
535 if (gv) {
536 const char *const gvname = GvNAME(gv)((((XPVGV*)(gv)->sv_any)->xiv_u.xivu_namehek))->hek_key;
537 const HV *const stash = GvSTASH(gv)(((XPVGV*)(gv)->sv_any)->xnv_u.xgv_stash);
538 const char *const hvname = stash ? HvNAME(stash)((((stash)->sv_flags & 0x02000000) && ((struct
xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV*) (stash
)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_name &&
( ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_count ? *
((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_names
: ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_name
)) ? (( ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash
)[((XPVHV*) (stash)->sv_any)->xhv_max+1]))->xhv_name_count
? *((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_names
: ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_name
))->hek_key : ((void*)0))
: NULL((void*)0);
539
540 if (hvname)
541 Perl_croak_nocontextPerl_croak("Usage: %s::%s(%s)", hvname, gvname, params);
542 else
543 Perl_croak_nocontextPerl_croak("Usage: %s(%s)", gvname, params);
544 } else {
545 /* Pants. I don't think that it should be possible to get here. */
546 Perl_croak_nocontextPerl_croak("Usage: CODE(0x%" UVxf"lx" ")(%s)", PTR2UV(cv)(UV)(cv), params);
547 }
548}
549#undef PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0)
550
551#define croak_xs_usagePerl_croak_xs_usage S_croak_xs_usage
552
553#endif
554
555/* NOTE: the prototype of newXSproto() is different in versions of perls,
556 * so we define a portable version of newXSproto()
557 */
558#ifdef newXS_flags
559#define newXSproto_portable(name, c_impl, file, proto)Perl_newXS_flags( name,c_impl,file,proto,0) newXS_flags(name, c_impl, file, proto, 0)Perl_newXS_flags( name,c_impl,file,proto,0)
560#else
561#define newXSproto_portable(name, c_impl, file, proto)Perl_newXS_flags( name,c_impl,file,proto,0) (PL_Sv=(SV*)newXS(name, c_impl, file)Perl_newXS( name,c_impl,file), sv_setpv(PL_Sv, proto)Perl_sv_setpv( PL_Sv,proto), (CV*)PL_Sv)
562#endif /* !defined(newXS_flags) */
563
564#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
565# define newXS_deffile(a,b)Perl_newXS_deffile( a,b) Perl_newXS(aTHX_ a,b,file)
566#else
567# define newXS_deffile(a,b)Perl_newXS_deffile( a,b) Perl_newXS_deffile(aTHX_ a,b)
568#endif
569
570#line 571 "Peek.c"
571
572XS_EUPXS(XS_Devel__Peek_mstat)static void XS_Devel__Peek_mstat( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
573XS_EUPXS(XS_Devel__Peek_mstat)static void XS_Devel__Peek_mstat( CV* cv __attribute__((unused
)))
574{
575 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
576 if (items < 0 || items > 1)
577 croak_xs_usagePerl_croak_xs_usage(cv, "str=\"Devel::Peek::mstat: \"");
578 {
579 const char * str;
580
581 if (items < 1)
582 str = "Devel::Peek::mstat: ";
583 else {
584 str = (const char *)SvPV_nolen(ST(0))((((PL_stack_base[ax + (0)])->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((PL_stack_base[ax + (0)])->sv_u.svu_pv
) : Perl_sv_2pv_flags( PL_stack_base[ax + (0)],0,2))
585;
586 }
587
588 mstat(str)PerlIO_printf(Perl_PerlIO_stderr(), "%s: perl not compiled with MYMALLOC\n"
,str);
;
589 }
590 XSRETURN_EMPTYdo { do { const IV tmpXSoff = (0); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0); } while (0)
;
591}
592
593
594XS_EUPXS(XS_Devel__Peek_fill_mstats)static void XS_Devel__Peek_fill_mstats( CV* cv __attribute__(
(unused)))
; /* prototype to pass -Wmissing-prototypes */
595XS_EUPXS(XS_Devel__Peek_fill_mstats)static void XS_Devel__Peek_fill_mstats( CV* cv __attribute__(
(unused)))
596{
597 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
598 if (items < 1 || items > 2)
599 croak_xs_usagePerl_croak_xs_usage(cv, "sv, level= 0");
600 {
601 SV * sv = ST(0)PL_stack_base[ax + (0)]
602;
603 int level;
604
605 if (items < 2)
606 level = 0;
607 else {
608 level = (int)SvIV(ST(1))((((PL_stack_base[ax + (1)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (1)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
1)],2))
609;
610 }
611
612 fill_mstats(sv, level);
613 }
614 XSRETURN_EMPTYdo { do { const IV tmpXSoff = (0); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0); } while (0)
;
615}
616
617
618XS_EUPXS(XS_Devel__Peek_mstats_fillhash)static void XS_Devel__Peek_mstats_fillhash( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
619XS_EUPXS(XS_Devel__Peek_mstats_fillhash)static void XS_Devel__Peek_mstats_fillhash( CV* cv __attribute__
((unused)))
620{
621 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
622 if (items < 1 || items > 2)
623 croak_xs_usagePerl_croak_xs_usage(cv, "sv, level= 0");
624 {
625 SV * sv = ST(0)PL_stack_base[ax + (0)]
626;
627 int level;
628
629 if (items < 2)
630 level = 0;
631 else {
632 level = (int)SvIV(ST(1))((((PL_stack_base[ax + (1)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (1)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
1)],2))
633;
634 }
635
636 mstats_fillhash(sv, level);
637 }
638 XSRETURN_EMPTYdo { do { const IV tmpXSoff = (0); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0); } while (0)
;
639}
640
641
642XS_EUPXS(XS_Devel__Peek_mstats2hash)static void XS_Devel__Peek_mstats2hash( CV* cv __attribute__(
(unused)))
; /* prototype to pass -Wmissing-prototypes */
643XS_EUPXS(XS_Devel__Peek_mstats2hash)static void XS_Devel__Peek_mstats2hash( CV* cv __attribute__(
(unused)))
644{
645 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
646 if (items < 2 || items > 3)
647 croak_xs_usagePerl_croak_xs_usage(cv, "sv, rv, level= 0");
648 {
649 SV * sv = ST(0)PL_stack_base[ax + (0)]
650;
651 SV * rv = ST(1)PL_stack_base[ax + (1)]
652;
653 int level;
654
655 if (items < 3)
656 level = 0;
657 else {
658 level = (int)SvIV(ST(2))((((PL_stack_base[ax + (2)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (2)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
2)],2))
659;
660 }
661
662 mstats2hash(sv, rv, level);
663 }
664 XSRETURN_EMPTYdo { do { const IV tmpXSoff = (0); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0); } while (0)
;
665}
666
667
668XS_EUPXS(XS_Devel__Peek_Dump)static void XS_Devel__Peek_Dump( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
669XS_EUPXS(XS_Devel__Peek_Dump)static void XS_Devel__Peek_Dump( CV* cv __attribute__((unused
)))
670{
671 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
672 if (items < 1 || items > 2)
673 croak_xs_usagePerl_croak_xs_usage(cv, "sv, lim=4");
674 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
675 SPsp -= items;
676 {
677 SV * sv = ST(0)PL_stack_base[ax + (0)]
678;
679 I32 lim;
680
681 if (items < 2)
682 lim = 4;
683 else {
684 lim = (I32)SvIV(ST(1))((((PL_stack_base[ax + (1)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (1)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
1)],2))
685;
686 }
687#line 439 "Peek.xs"
688{
689 S_do_dump(aTHX_ sv, lim);
690}
691#line 692 "Peek.c"
692 PUTBACKPL_stack_sp = sp;
693 return;
694 }
695}
696
697
698XS_EUPXS(XS_Devel__Peek_DumpArray)static void XS_Devel__Peek_DumpArray( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
699XS_EUPXS(XS_Devel__Peek_DumpArray)static void XS_Devel__Peek_DumpArray( CV* cv __attribute__((unused
)))
700{
701 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
702 if (items < 1)
703 croak_xs_usagePerl_croak_xs_usage(cv, "lim, ...");
704 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
705 SPsp -= items;
706 {
707 I32 lim = (I32)SvIV(ST(0))((((PL_stack_base[ax + (0)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (0)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
0)],2))
708;
709#line 455 "Peek.xs"
710{
711 long i;
712 SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", 0)Perl_get_sv( "Devel::Peek::pv_limit",0);
713 const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv)((((pv_lim_sv)->sv_flags & (0x00000100|0x00200000)) ==
0x00000100) ? ((XPVIV*) (pv_lim_sv)->sv_any)->xiv_u.xivu_iv
: Perl_sv_2iv_flags( pv_lim_sv,2))
: 0;
714 SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", 0)Perl_get_sv( "Devel::Peek::dump_ops",0);
715 const U16 save_dumpindent = PL_dumpindent;
716 PL_dumpindent = 2;
717
718 for (i=1; i<items; i++) {
719 PerlIO_printf(Perl_debug_logPerl_PerlIO_stderr(), "Elt No. %ld 0x%" UVxf"lx" "\n", i - 1, PTR2UV(ST(i))(UV)(PL_stack_base[ax + (i)]));
720 do_sv_dump(0, Perl_debug_log, ST(i), 0, lim,Perl_do_sv_dump( 0,Perl_PerlIO_stderr(),PL_stack_base[ax + (i
)],0,lim,(_Bool)(dumpop && Perl_SvTRUE( dumpop)),pv_lim
)
721 (bool)(dumpop && SvTRUE(dumpop)), pv_lim)Perl_do_sv_dump( 0,Perl_PerlIO_stderr(),PL_stack_base[ax + (i
)],0,lim,(_Bool)(dumpop && Perl_SvTRUE( dumpop)),pv_lim
)
;
722 }
723 PL_dumpindent = save_dumpindent;
724}
725#line 726 "Peek.c"
726 PUTBACKPL_stack_sp = sp;
727 return;
728 }
729}
730
731
732XS_EUPXS(XS_Devel__Peek_DumpProg)static void XS_Devel__Peek_DumpProg( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
733XS_EUPXS(XS_Devel__Peek_DumpProg)static void XS_Devel__Peek_DumpProg( CV* cv __attribute__((unused
)))
734{
735 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
736 if (items != 0)
737 croak_xs_usagePerl_croak_xs_usage(cv, "");
738 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
739 SPsp -= items;
740 {
741#line 474 "Peek.xs"
742{
743 warnPerl_warn("dumpindent is %d", (int)PL_dumpindent);
744 if (PL_main_root)
745 op_dump(PL_main_root)Perl_op_dump( PL_main_root);
746}
747#line 748 "Peek.c"
748 PUTBACKPL_stack_sp = sp;
749 return;
750 }
751}
752
753
754XS_EUPXS(XS_Devel__Peek_SvREFCNT)static void XS_Devel__Peek_SvREFCNT( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
755XS_EUPXS(XS_Devel__Peek_SvREFCNT)static void XS_Devel__Peek_SvREFCNT( CV* cv __attribute__((unused
)))
756{
757 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
758 if (items != 1)
759 croak_xs_usagePerl_croak_xs_usage(cv, "sv");
760 {
761 SV * sv = ST(0)PL_stack_base[ax + (0)]
762;
763 U32 RETVAL;
764 dXSTARGSV * const targ = ((PL_op->op_private & 0x04) ? (PL_curpad
[PL_op->op_targ]) : Perl_sv_newmortal())
;
765#line 485 "Peek.xs"
766 SvGETMAGIC(sv)((void)(__builtin_expect(((((sv)->sv_flags & 0x00200000
)) ? (_Bool)1 : (_Bool)0),(0)) && Perl_mg_get( sv)))
;
767 if (!SvROK(sv)((sv)->sv_flags & 0x00000800))
768 croak_xs_usagePerl_croak_xs_usage(cv, "SCALAR");
769 RETVAL = SvREFCNT(SvRV(sv))(((sv)->sv_u.svu_rv))->sv_refcnt - 1; /* -1 because our ref doesn't count */
770#line 771 "Peek.c"
771 XSprePUSH(sp = PL_stack_base + ax - 1); PUSHu((UV)RETVAL)do { do { UV TARGu_uv = (UV)RETVAL; if (__builtin_expect(((((
(targ)->sv_flags & (0xff|(0x08000000|0x00010000|0x00000800
|0x01000000 |0x00800000|0x10000000)|0x80000000)) == SVt_IV) &
(1 ? !(((__builtin_expect(((PL_tainted) ? (_Bool)1 : (_Bool)
0),(0))) ? (_Bool)1 : (_Bool)0)) : 1) & (TARGu_uv <= (
UV)((IV) ((~(UV)0) >> 1)))) ? (_Bool)1 : (_Bool)0),(1))
) { ((void)0); (targ)->sv_flags |= (0x00000100|0x00001000)
; targ->sv_u.svu_iv = TARGu_uv; } else Perl_sv_setuv_mg( targ
,TARGu_uv); } while (0); (*++sp = (targ)); } while (0)
;
772 }
773 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
774}
775
776
777XS_EUPXS(XS_Devel__Peek_DeadCode)static void XS_Devel__Peek_DeadCode( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
778XS_EUPXS(XS_Devel__Peek_DeadCode)static void XS_Devel__Peek_DeadCode( CV* cv __attribute__((unused
)))
779{
780 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
781 if (items != 0)
782 croak_xs_usagePerl_croak_xs_usage(cv, "");
783 {
784 SV * RETVAL;
785#line 495 "Peek.xs"
786 RETVAL = DeadCode(aTHX);
787#line 788 "Peek.c"
788 RETVAL = sv_2mortal(RETVAL)Perl_sv_2mortal( RETVAL);
789 ST(0)PL_stack_base[ax + (0)] = RETVAL;
790 }
791 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
792}
793
794
795XS_EUPXS(XS_Devel__Peek_CvGV)static void XS_Devel__Peek_CvGV( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
796XS_EUPXS(XS_Devel__Peek_CvGV)static void XS_Devel__Peek_CvGV( CV* cv __attribute__((unused
)))
797{
798 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
799 if (items != 1)
800 croak_xs_usagePerl_croak_xs_usage(cv, "cv");
801 {
802 SV * cv = ST(0)PL_stack_base[ax + (0)]
803;
804 SV * RETVAL;
805
806 RETVAL = _CvGV(cv)(((cv)->sv_flags & 0x00000800) && (((svtype)((
((cv)->sv_u.svu_rv))->sv_flags & 0xff))==SVt_PVCV) ?
Perl_SvREFCNT_inc(((SV *)({ void *_p = (Perl_CvGV( (CV *)((CV
*)((cv)->sv_u.svu_rv)))); _p; }))) : &(PL_sv_immortals
[1]))
;
807 RETVAL = sv_2mortal(RETVAL)Perl_sv_2mortal( RETVAL);
808 ST(0)PL_stack_base[ax + (0)] = RETVAL;
809 }
810 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
811}
812
813
814XS_EUPXS(XS_Devel__Peek_runops_debug)static void XS_Devel__Peek_runops_debug( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
815XS_EUPXS(XS_Devel__Peek_runops_debug)static void XS_Devel__Peek_runops_debug( CV* cv __attribute__
((unused)))
816{
817 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
818 if (items < 0 || items > 1)
819 croak_xs_usagePerl_croak_xs_usage(cv, "flag= -1");
820 {
821 bool_Bool RETVAL;
822 int flag;
823
824 if (items < 1)
825 flag = -1;
826 else {
827 flag = (int)SvIV(ST(0))((((PL_stack_base[ax + (0)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (0)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
0)],2))
828;
829 }
830
831 RETVAL = _runops_debug(flag);
832 ST(0)PL_stack_base[ax + (0)] = boolSV(RETVAL)((RETVAL) ? &(PL_sv_immortals[0]) : &(PL_sv_immortals
[2]))
;
833 }
834 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
835}
836
837#ifdef __cplusplus
838extern "C"
839#endif
840XS_EXTERNAL(boot_Devel__Peek)void boot_Devel__Peek( CV* cv __attribute__((unused))); /* prototype to pass -Wmissing-prototypes */
841XS_EXTERNAL(boot_Devel__Peek)void boot_Devel__Peek( CV* cv __attribute__((unused)))
842{
843#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
844 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
845#else
846 dVARstruct Perl___notused_struct; dXSBOOTARGSXSAPIVERCHKI32 ax = Perl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter
)) << 16) | ((sizeof("" "1.28" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "1.28" "")-
1) << 8) | ((((1)) ? (_Bool)1 : (_Bool)0) ? 0x00000020 :
0) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((((
1)) ? (_Bool)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" "v"
"5" "." "32" "." "0" "")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "v" "5" "." "32" "." "0" "")-1)))
, cv, "Peek.c", "v" "5" "." "32" "." "0", "1.28"); SV **mark =
PL_stack_base + ax; SV **sp = PL_stack_sp; I32 items = (I32)
(sp - mark)
;
847#endif
848#if (PERL_REVISION5 == 5 && PERL_VERSION32 < 9)
849 char* file = __FILE__"Peek.c";
850#else
851 const char* file = __FILE__"Peek.c";
852#endif
853
854 PERL_UNUSED_VAR(file)((void)sizeof(file));
855
856 PERL_UNUSED_VAR(cv)((void)sizeof(cv)); /* -W */
857 PERL_UNUSED_VAR(items)((void)sizeof(items)); /* -W */
858#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
859 XS_VERSION_BOOTCHECKPerl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter))
<< 16) | ((sizeof("" "1.28" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "1.28" "")-
1) << 8) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000020 :
0) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((((
0)) ? (_Bool)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" ""
"")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "" "")-1))), cv, "Peek.c", items,
ax, "1.28")
;
860# ifdef XS_APIVERSION_BOOTCHECKPerl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter))
<< 16) | ((sizeof("" "" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "" "")-1) <<
8) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000020 : 0) | ((((
0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((((0)) ? (_Bool
)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" "v" "5" "." "32"
"." "0" "")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "v" "5" "." "32" "." "0" "")-1)))
, cv, "Peek.c", items, ax, "v" "5" "." "32" "." "0")
861 XS_APIVERSION_BOOTCHECKPerl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter))
<< 16) | ((sizeof("" "" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "" "")-1) <<
8) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000020 : 0) | ((((
0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((((0)) ? (_Bool
)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" "v" "5" "." "32"
"." "0" "")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "v" "5" "." "32" "." "0" "")-1)))
, cv, "Peek.c", items, ax, "v" "5" "." "32" "." "0")
;
862# endif
863#endif
864
865 newXS_deffile("Devel::Peek::mstat", XS_Devel__Peek_mstat)Perl_newXS_deffile( "Devel::Peek::mstat",XS_Devel__Peek_mstat
)
;
866 newXS_deffile("Devel::Peek::fill_mstats", XS_Devel__Peek_fill_mstats)Perl_newXS_deffile( "Devel::Peek::fill_mstats",XS_Devel__Peek_fill_mstats
)
;
867 (void)newXSproto_portable("Devel::Peek::mstats_fillhash", XS_Devel__Peek_mstats_fillhash, file, "\\%;$")Perl_newXS_flags( "Devel::Peek::mstats_fillhash",XS_Devel__Peek_mstats_fillhash
,file,"\\%;$",0)
;
868 (void)newXSproto_portable("Devel::Peek::mstats2hash", XS_Devel__Peek_mstats2hash, file, "$\\%;$")Perl_newXS_flags( "Devel::Peek::mstats2hash",XS_Devel__Peek_mstats2hash
,file,"$\\%;$",0)
;
869 newXS_deffile("Devel::Peek::Dump", XS_Devel__Peek_Dump)Perl_newXS_deffile( "Devel::Peek::Dump",XS_Devel__Peek_Dump);
870 newXS_deffile("Devel::Peek::DumpArray", XS_Devel__Peek_DumpArray)Perl_newXS_deffile( "Devel::Peek::DumpArray",XS_Devel__Peek_DumpArray
)
;
871 newXS_deffile("Devel::Peek::DumpProg", XS_Devel__Peek_DumpProg)Perl_newXS_deffile( "Devel::Peek::DumpProg",XS_Devel__Peek_DumpProg
)
;
872 (void)newXSproto_portable("Devel::Peek::SvREFCNT", XS_Devel__Peek_SvREFCNT, file, "\\[$@%&*]")Perl_newXS_flags( "Devel::Peek::SvREFCNT",XS_Devel__Peek_SvREFCNT
,file,"\\[$@%&*]",0)
;
873 newXS_deffile("Devel::Peek::DeadCode", XS_Devel__Peek_DeadCode)Perl_newXS_deffile( "Devel::Peek::DeadCode",XS_Devel__Peek_DeadCode
)
;
874 newXS_deffile("Devel::Peek::CvGV", XS_Devel__Peek_CvGV)Perl_newXS_deffile( "Devel::Peek::CvGV",XS_Devel__Peek_CvGV);
875 newXS_deffile("Devel::Peek::runops_debug", XS_Devel__Peek_runops_debug)Perl_newXS_deffile( "Devel::Peek::runops_debug",XS_Devel__Peek_runops_debug
)
;
876
877 /* Initialisation Section */
878
879#line 444 "Peek.xs"
880{
881 CV * const cv = get_cvn_flags("Devel::Peek::Dump", 17, 0)Perl_get_cvn_flags( "Devel::Peek::Dump",17,0);
882 assert(cv)((void)0);
883 cv_set_call_checker_flags(cv, S_ck_dump, (SV *)cv, 0)Perl_cv_set_call_checker_flags( cv,S_ck_dump,(SV *)cv,0);
884 Perl_custom_op_register(aTHX_ S_pp_dump, &my_xop);
885}
886
887#line 888 "Peek.c"
888
889 /* End of Initialisation Section */
890
891#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
892# if PERL_VERSION_GE(5, 9, 0)((5*1000000 + 32*1000 + 1) >= (5*1000000 + 9*1000 + 0))
893 if (PL_unitcheckav)
894 call_list(PL_scopestack_ix, PL_unitcheckav)Perl_call_list( PL_scopestack_ix,PL_unitcheckav);
895# endif
896 XSRETURN_YESdo { (PL_stack_base[ax + (0)] = &(PL_sv_immortals[0]) ); do
{ const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0); } while (0)
;
897#else
898 Perl_xs_boot_epilog(aTHX_ ax);
899#endif
900}
901