     1			/*
     2			 * This file was generated automatically by ExtUtils::ParseXS version 2.10 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			
    15			static bool
    16			_runops_debug(int flag)
    17			{
    18			    dTHX;
    19			    const bool d = PL_runops == MEMBER_TO_FPTR(Perl_runops_debug);
    20			
    21			    if (flag >= 0)
    22				PL_runops 
    23				    = MEMBER_TO_FPTR(flag ? Perl_runops_debug : Perl_runops_standard);
    24			    return d;
    25			}
    26			
    27			static SV *
    28			DeadCode(pTHX)
    29			{
    30			#ifdef PURIFY
    31			    return Nullsv;
    32			#else
    33			    SV* sva;
    34			    SV* sv;
    35			    SV* ret = newRV_noinc((SV*)newAV());
    36			    register SV* svend;
    37			    int tm = 0, tref = 0, ts = 0, ta = 0, tas = 0;
    38			
    39			    for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
    40				svend = &sva[SvREFCNT(sva)];
    41				for (sv = sva + 1; sv < svend; ++sv) {
    42				    if (SvTYPE(sv) == SVt_PVCV) {
    43					CV *cv = (CV*)sv;
    44					AV* padlist = CvPADLIST(cv), *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 (CvXSUB(sv)) {
    52					    continue;		/* XSUB */
    53					}
    54					if (!CvGV(sv)) {
    55					    continue;		/* file-level scope. */
    56					}
    57					if (!CvROOT(cv)) {
    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));
    62					if (CvDEPTH(cv)) {
    63					    PerlIO_printf(Perl_debug_log, "  busy\n");
    64					    continue;
    65					}
    66					svp = AvARRAY(padlist);
    67					while (++i <= AvFILL(padlist)) { /* Depth. */
    68					    SV **args;
    69					    
    70					    pad = AvARRAY((AV*)svp[i]);
    71					    argav = (AV*)pad[0];
    72					    if (!argav || (SV*)argav == &PL_sv_undef) {
    73						PerlIO_printf(Perl_debug_log, "    closure-template\n");
    74						continue;
    75					    }
    76					    args = AvARRAY(argav);
    77					    levelm = levels = levelref = levelas = 0;
    78					    levela = sizeof(SV*) * (AvMAX(argav) + 1);
    79					    if (AvREAL(argav)) {
    80						for (j = 0; j < AvFILL(argav); j++) {
    81						    if (SvROK(args[j])) {
    82							PerlIO_printf(Perl_debug_log, "     ref in args!\n");
    83							levelref++;
    84						    }
    85						    /* else if (SvPOK(args[j]) && SvPVX(args[j])) { */
    86						    else if (SvTYPE(args[j]) >= SVt_PV && SvLEN(args[j])) {
    87							levelas += SvLEN(args[j])/SvREFCNT(args[j]);
    88						    }
    89						}
    90					    }
    91					    for (j = 1; j < AvFILL((AV*)svp[1]); j++) {	/* Vars. */
    92						if (SvROK(pad[j])) {
    93						    levelref++;
    94						    do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0);
    95						    dumpit = 1;
    96						}
    97						/* else if (SvPOK(pad[j]) && SvPVX(pad[j])) { */
    98						else if (SvTYPE(pad[j]) >= SVt_PVAV) {
    99						    if (!SvPADMY(pad[j])) {
   100							levelref++;
   101							do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0);
   102							dumpit = 1;
   103						    }
   104						}
   105						else if (SvTYPE(pad[j]) >= SVt_PV && SvLEN(pad[j])) {
   106						    levels++;
   107						    levelm += SvLEN(pad[j])/SvREFCNT(pad[j]);
   108							/* Dump(pad[j],4); */
   109						}
   110					    }
   111					    PerlIO_printf(Perl_debug_log, "    level %i: refs: %i, strings: %i in %i,\targsarray: %i, argsstrings: %i\n", 
   112						    i, levelref, levelm, levels, levela, levelas);
   113					    totm += levelm;
   114					    tota += levela;
   115					    totas += levelas;
   116					    tots += levels;
   117					    totref += levelref;
   118					    if (dumpit)
   119						do_sv_dump(0, Perl_debug_log, (SV*)cv, 0, 2, 0, 0);
   120					}
   121					if (AvFILL(padlist) > 1) {
   122					    PerlIO_printf(Perl_debug_log, "  total: refs: %i, strings: %i in %i,\targsarrays: %i, argsstrings: %i\n", 
   123						    totref, totm, tots, tota, totas);
   124					}
   125					tref += totref;
   126					tm += totm;
   127					ts += tots;
   128					ta += tota;
   129					tas += totas;
   130				    }
   131				}
   132			    }
   133			    PerlIO_printf(Perl_debug_log, "total: refs: %i, strings: %i in %i\targsarray: %i, argsstrings: %i\n", tref, tm, ts, ta, tas);
   134			
   135			    return ret;
   136			#endif /* !PURIFY */
   137			}
   138			
   139			#if (defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS)) \
   140				&& (defined(MYMALLOC) && !defined(PLAIN_MALLOC))
   141			#   define mstat(str) dump_mstats(str)
   142			#else
   143			#   define mstat(str) \
   144				PerlIO_printf(Perl_debug_log, "%s: perl not compiled with DEBUGGING_MSTATS\n",str);
   145			#endif
   146			
   147			#if (defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS)) \
   148				&& (defined(MYMALLOC) && !defined(PLAIN_MALLOC))
   149			
   150			/* Very coarse overestimate, 2-per-power-of-2, one more to determine NBUCKETS. */
   151			#  define _NBUCKETS (2*8*IVSIZE+1)
   152			
   153			struct mstats_buffer 
   154			{
   155			    perl_mstats_t buffer;
   156			    UV buf[_NBUCKETS*4];
   157			};
   158			
   159			static void
   160			_fill_mstats(struct mstats_buffer *b, int level)
   161			{
   162			    dTHX;
   163			    b->buffer.nfree  = b->buf;
   164			    b->buffer.ntotal = b->buf + _NBUCKETS;
   165			    b->buffer.bucket_mem_size = b->buf + 2*_NBUCKETS;
   166			    b->buffer.bucket_available_size = b->buf + 3*_NBUCKETS;
   167			    Zero(b->buf, (level ? 4*_NBUCKETS: 2*_NBUCKETS), unsigned long);
   168			    get_mstats(&(b->buffer), _NBUCKETS, level);
   169			}
   170			
   171			static void
   172			fill_mstats(SV *sv, int level)
   173			{
   174			    dTHX;
   175			
   176			    if (SvREADONLY(sv))
   177				croak("Cannot modify a readonly value");
   178			    SvGROW(sv, sizeof(struct mstats_buffer)+1);
   179			    _fill_mstats((struct mstats_buffer*)SvPVX(sv),level);
   180			    SvCUR_set(sv, sizeof(struct mstats_buffer));
   181			    *SvEND(sv) = '\0';
   182			    SvPOK_only(sv);
   183			}
   184			
   185			static void
   186			_mstats_to_hv(HV *hv, const struct mstats_buffer *b, int level)
   187			{
   188			    dTHX;
   189			    SV **svp;
   190			    int type;
   191			
   192			    svp = hv_fetch(hv, "topbucket", 9, 1);
   193			    sv_setiv(*svp, b->buffer.topbucket);
   194			
   195			    svp = hv_fetch(hv, "topbucket_ev", 12, 1);
   196			    sv_setiv(*svp, b->buffer.topbucket_ev);
   197			
   198			    svp = hv_fetch(hv, "topbucket_odd", 13, 1);
   199			    sv_setiv(*svp, b->buffer.topbucket_odd);
   200			
   201			    svp = hv_fetch(hv, "totfree", 7, 1);
   202			    sv_setiv(*svp, b->buffer.totfree);
   203			
   204			    svp = hv_fetch(hv, "total", 5, 1);
   205			    sv_setiv(*svp, b->buffer.total);
   206			
   207			    svp = hv_fetch(hv, "total_chain", 11, 1);
   208			    sv_setiv(*svp, b->buffer.total_chain);
   209			
   210			    svp = hv_fetch(hv, "total_sbrk", 10, 1);
   211			    sv_setiv(*svp, b->buffer.total_sbrk);
   212			
   213			    svp = hv_fetch(hv, "sbrks", 5, 1);
   214			    sv_setiv(*svp, b->buffer.sbrks);
   215			
   216			    svp = hv_fetch(hv, "sbrk_good", 9, 1);
   217			    sv_setiv(*svp, b->buffer.sbrk_good);
   218			
   219			    svp = hv_fetch(hv, "sbrk_slack", 10, 1);
   220			    sv_setiv(*svp, b->buffer.sbrk_slack);
   221			
   222			    svp = hv_fetch(hv, "start_slack", 11, 1);
   223			    sv_setiv(*svp, b->buffer.start_slack);
   224			
   225			    svp = hv_fetch(hv, "sbrked_remains", 14, 1);
   226			    sv_setiv(*svp, b->buffer.sbrked_remains);
   227			    
   228			    svp = hv_fetch(hv, "minbucket", 9, 1);
   229			    sv_setiv(*svp, b->buffer.minbucket);
   230			    
   231			    svp = hv_fetch(hv, "nbuckets", 8, 1);
   232			    sv_setiv(*svp, b->buffer.nbuckets);
   233			
   234			    if (_NBUCKETS < b->buffer.nbuckets) 
   235				warn("FIXME: internal mstats buffer too short");
   236			    
   237			    for (type = 0; type < (level ? 4 : 2); type++) {
   238				UV *p = 0, *p1 = 0;
   239				AV *av;
   240				int i;
   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);
   246			
   247				if (SvOK(*svp) && !(SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV))
   248				    croak("Unexpected value for the key '%s' in the mstats hash", types[type]);
   249				if (!SvOK(*svp)) {
   250				    av = newAV();
   251				    (void)SvUPGRADE(*svp, SVt_RV);
   252				    SvRV_set(*svp, (SV*)av);
   253				    SvROK_on(*svp);
   254				} else
   255				    av = (AV*)SvRV(*svp);
   256			
   257				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);
   276				    if (type == 1)
   277					sv_setiv(*svp, p[i]-p1[i]);
   278				    else
   279					sv_setuv(*svp, p[i]);
   280				}
   281			    }
   282			}
   283			
   284			static void
   285			mstats_fillhash(SV *sv, int level)
   286			{
   287			    struct mstats_buffer buf;
   288			
   289			    if (!(SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVHV))
   290				croak("Not a hash reference");
   291			    _fill_mstats(&buf, level);
   292			    _mstats_to_hv((HV *)SvRV(sv), &buf, level);
   293			}
   294			
   295			static void
   296			mstats2hash(SV *sv, SV *rv, int level)
   297			{
   298			    if (!(SvROK(rv) && SvTYPE(SvRV(rv)) == SVt_PVHV))
   299				croak("Not a hash reference");
   300			    if (!SvPOK(sv))
   301				croak("Undefined value when expecting mstats buffer");
   302			    if (SvCUR(sv) != sizeof(struct mstats_buffer))
   303				croak("Wrong size for a value with a mstats buffer");
   304			    _mstats_to_hv((HV *)SvRV(rv), (struct mstats_buffer*)SvPVX(sv), level);
   305			}
   306			#else	/* !( defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS) \ ) */ 
   307			static void
   308			fill_mstats(SV *sv, int level)
   309			{
   310			    croak("Cannot report mstats without Perl malloc");
   311			}
   312			
   313			static void
   314			mstats_fillhash(SV *sv, int level)
   315			{
   316			    croak("Cannot report mstats without Perl malloc");
   317			}
   318			
   319			static void
   320			mstats2hash(SV *sv, SV *rv, int level)
   321			{
   322			    croak("Cannot report mstats without Perl malloc");
   323			}
   324			#endif	/* defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS)... */ 
   325			
   326			#define _CvGV(cv)					\
   327				(SvROK(cv) && (SvTYPE(SvRV(cv))==SVt_PVCV)	\
   328				 ? SvREFCNT_inc(CvGV((CV*)SvRV(cv))) : &PL_sv_undef)
   329			
   330			#ifndef PERL_UNUSED_VAR
   331			#  define PERL_UNUSED_VAR(var) if (0) var = var
   332			#endif
   333			
   334			#line 335 "Peek.c"
   335			
   336			XS(XS_Devel__Peek_mstat); /* prototype to pass -Wmissing-prototypes */
   337			XS(XS_Devel__Peek_mstat)
   338	      ######    {
   339	      ######        dXSARGS;
   340	      ######        if (items < 0 || items > 1)
   341	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::mstat(str=\"Devel::Peek::mstat: \")");
   342	      ######        PERL_UNUSED_VAR(cv); /* -W */
   343			    {
   344	      ######    	char *	str;
   345			
   346	      ######    	if (items < 1)
   347	      ######    	    str = "Devel::Peek::mstat: ";
   348				else {
   349	      ######    	    str = (char *)SvPV_nolen(ST(0));
   350				}
   351			
   352	      ######    	mstat(str);
   353			    }
   354	      ######        XSRETURN_EMPTY;
   355			}
   356			
   357			
   358			XS(XS_Devel__Peek_fill_mstats); /* prototype to pass -Wmissing-prototypes */
   359			XS(XS_Devel__Peek_fill_mstats)
   360	      ######    {
   361	      ######        dXSARGS;
   362	      ######        if (items < 1 || items > 2)
   363	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::fill_mstats(sv, level= 0)");
   364	      ######        PERL_UNUSED_VAR(cv); /* -W */
   365			    {
   366	      ######    	SV *	sv = ST(0);
   367	      ######    	int	level;
   368			
   369	      ######    	if (items < 2)
   370	      ######    	    level = 0;
   371				else {
   372	      ######    	    level = (int)SvIV(ST(1));
   373				}
   374			
   375	      ######    	fill_mstats(sv, level);
   376			    }
   377	      ######        XSRETURN_EMPTY;
   378			}
   379			
   380			
   381			XS(XS_Devel__Peek_mstats_fillhash); /* prototype to pass -Wmissing-prototypes */
   382			XS(XS_Devel__Peek_mstats_fillhash)
   383	      ######    {
   384	      ######        dXSARGS;
   385	      ######        if (items < 1 || items > 2)
   386	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::mstats_fillhash(sv, level= 0)");
   387	      ######        PERL_UNUSED_VAR(cv); /* -W */
   388			    {
   389	      ######    	SV *	sv = ST(0);
   390	      ######    	int	level;
   391			
   392	      ######    	if (items < 2)
   393	      ######    	    level = 0;
   394				else {
   395	      ######    	    level = (int)SvIV(ST(1));
   396				}
   397			
   398	      ######    	mstats_fillhash(sv, level);
   399			    }
   400	      ######        XSRETURN_EMPTY;
   401			}
   402			
   403			
   404			XS(XS_Devel__Peek_mstats2hash); /* prototype to pass -Wmissing-prototypes */
   405			XS(XS_Devel__Peek_mstats2hash)
   406	      ######    {
   407	      ######        dXSARGS;
   408	      ######        if (items < 2 || items > 3)
   409	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::mstats2hash(sv, rv, level= 0)");
   410	      ######        PERL_UNUSED_VAR(cv); /* -W */
   411			    {
   412	      ######    	SV *	sv = ST(0);
   413	      ######    	SV *	rv = ST(1);
   414	      ######    	int	level;
   415			
   416	      ######    	if (items < 3)
   417	      ######    	    level = 0;
   418				else {
   419	      ######    	    level = (int)SvIV(ST(2));
   420				}
   421			
   422	      ######    	mstats2hash(sv, rv, level);
   423			    }
   424	      ######        XSRETURN_EMPTY;
   425			}
   426			
   427			
   428			XS(XS_Devel__Peek_Dump); /* prototype to pass -Wmissing-prototypes */
   429			XS(XS_Devel__Peek_Dump)
   430	          22    {
   431	          22        dXSARGS;
   432	          22        if (items < 1 || items > 2)
   433	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::Dump(sv, lim=4)");
   434	          22        PERL_UNUSED_VAR(cv); /* -W */
   435	          22        PERL_UNUSED_VAR(ax); /* -Wall */
   436	          22        SP -= items;
   437			    {
   438	          22    	SV *	sv = ST(0);
   439	          22    	I32	lim;
   440			
   441	          22    	if (items < 2)
   442	          22    	    lim = 4;
   443				else {
   444	      ######    	    lim = (I32)SvIV(ST(1));
   445				}
   446			#line 343 "Peek.xs"
   447			{
   448			    SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE);
   449			    const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
   450			    SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE);
   451			    const I32 save_dumpindent = PL_dumpindent;
   452			    PL_dumpindent = 2;
   453			    do_sv_dump(0, Perl_debug_log, sv, 0, lim,
   454				       (bool)(dumpop && SvTRUE(dumpop)), pv_lim);
   455			    PL_dumpindent = save_dumpindent;
   456			}
   457			#line 458 "Peek.c"
   458	          22    	PUTBACK;
   459				return;
   460			    }
   461			}
   462			
   463			
   464			XS(XS_Devel__Peek_DumpArray); /* prototype to pass -Wmissing-prototypes */
   465			XS(XS_Devel__Peek_DumpArray)
   466	      ######    {
   467	      ######        dXSARGS;
   468	      ######        if (items < 1)
   469	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::DumpArray(lim, ...)");
   470	      ######        PERL_UNUSED_VAR(cv); /* -W */
   471	      ######        PERL_UNUSED_VAR(ax); /* -Wall */
   472	      ######        SP -= items;
   473			    {
   474	      ######    	I32	lim = (I32)SvIV(ST(0));
   475			#line 358 "Peek.xs"
   476			{
   477			    long i;
   478			    SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE);
   479			    const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
   480			    SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE);
   481			    const I32 save_dumpindent = PL_dumpindent;
   482			    PL_dumpindent = 2;
   483			
   484			    for (i=1; i<items; i++) {
   485				PerlIO_printf(Perl_debug_log, "Elt No. %ld  0x%"UVxf"\n", i - 1, PTR2UV(ST(i)));
   486				do_sv_dump(0, Perl_debug_log, ST(i), 0, lim,
   487					   (bool)(dumpop && SvTRUE(dumpop)), pv_lim);
   488			    }
   489			    PL_dumpindent = save_dumpindent;
   490			}
   491			#line 492 "Peek.c"
   492	      ######    	PUTBACK;
   493				return;
   494			    }
   495			}
   496			
   497			
   498			XS(XS_Devel__Peek_DumpProg); /* prototype to pass -Wmissing-prototypes */
   499			XS(XS_Devel__Peek_DumpProg)
   500	      ######    {
   501	      ######        dXSARGS;
   502	      ######        if (items != 0)
   503	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::DumpProg()");
   504	      ######        PERL_UNUSED_VAR(cv); /* -W */
   505	      ######        PERL_UNUSED_VAR(ax); /* -Wall */
   506	      ######        SP -= items;
   507			    {
   508			#line 377 "Peek.xs"
   509			{
   510			    warn("dumpindent is %d", (int)PL_dumpindent);
   511			    if (PL_main_root)
   512				op_dump(PL_main_root);
   513			}
   514			#line 515 "Peek.c"
   515	      ######    	PUTBACK;
   516				return;
   517			    }
   518			}
   519			
   520			
   521			XS(XS_Devel__Peek_SvREFCNT); /* prototype to pass -Wmissing-prototypes */
   522			XS(XS_Devel__Peek_SvREFCNT)
   523	      ######    {
   524	      ######        dXSARGS;
   525	      ######        if (items != 1)
   526	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::SvREFCNT(sv)");
   527	      ######        PERL_UNUSED_VAR(cv); /* -W */
   528			    {
   529	      ######    	SV *	sv = ST(0);
   530	      ######    	I32	RETVAL;
   531	      ######    	dXSTARG;
   532			
   533	      ######    	RETVAL = SvREFCNT(sv);
   534	      ######    	XSprePUSH; PUSHi((IV)RETVAL);
   535			    }
   536	      ######        XSRETURN(1);
   537			}
   538			
   539			
   540			XS(XS_Devel__Peek_SvREFCNT_inc); /* prototype to pass -Wmissing-prototypes */
   541			XS(XS_Devel__Peek_SvREFCNT_inc)
   542	      ######    {
   543	      ######        dXSARGS;
   544	      ######        if (items != 1)
   545	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::SvREFCNT_inc(sv)");
   546	      ######        PERL_UNUSED_VAR(cv); /* -W */
   547	      ######        PERL_UNUSED_VAR(ax); /* -Wall */
   548	      ######        SP -= items;
   549			    {
   550	      ######    	SV *	sv = ST(0);
   551	      ######    	SV *	RETVAL;
   552			#line 393 "Peek.xs"
   553			{
   554			    RETVAL = SvREFCNT_inc(sv);
   555			    PUSHs(RETVAL);
   556			}
   557			#line 558 "Peek.c"
   558	      ######    	PUTBACK;
   559				return;
   560			    }
   561			}
   562			
   563			
   564			XS(XS_Devel__Peek_SvREFCNT_dec); /* prototype to pass -Wmissing-prototypes */
   565			XS(XS_Devel__Peek_SvREFCNT_dec)
   566	      ######    {
   567	      ######        dXSARGS;
   568	      ######        if (items != 1)
   569	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::SvREFCNT_dec(sv)");
   570	      ######        PERL_UNUSED_VAR(cv); /* -W */
   571	      ######        PERL_UNUSED_VAR(ax); /* -Wall */
   572	      ######        SP -= items;
   573			    {
   574	      ######    	SV *	sv = ST(0);
   575			#line 404 "Peek.xs"
   576			{
   577			    SvREFCNT_dec(sv);
   578			    PUSHs(sv);
   579			}
   580			#line 581 "Peek.c"
   581	      ######    	PUTBACK;
   582				return;
   583			    }
   584			}
   585			
   586			
   587			XS(XS_Devel__Peek_DeadCode); /* prototype to pass -Wmissing-prototypes */
   588			XS(XS_Devel__Peek_DeadCode)
   589	      ######    {
   590	      ######        dXSARGS;
   591	      ######        if (items != 0)
   592	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::DeadCode()");
   593	      ######        PERL_UNUSED_VAR(cv); /* -W */
   594			    {
   595	      ######    	SV *	RETVAL;
   596			#line 412 "Peek.xs"
   597			    RETVAL = DeadCode(aTHX);
   598			#line 599 "Peek.c"
   599	      ######    	ST(0) = RETVAL;
   600	      ######    	sv_2mortal(ST(0));
   601			    }
   602	      ######        XSRETURN(1);
   603			}
   604			
   605			
   606			XS(XS_Devel__Peek_CvGV); /* prototype to pass -Wmissing-prototypes */
   607			XS(XS_Devel__Peek_CvGV)
   608	           5    {
   609	           5        dXSARGS;
   610	           5        if (items != 1)
   611	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::CvGV(cv)");
   612	           5        PERL_UNUSED_VAR(cv); /* -W */
   613			    {
   614	           5    	SV *	cv = ST(0);
   615	           5    	SV *	RETVAL;
   616			
   617	           5    	RETVAL = _CvGV(cv);
   618	           5    	ST(0) = RETVAL;
   619	           5    	sv_2mortal(ST(0));
   620			    }
   621	           5        XSRETURN(1);
   622			}
   623			
   624			
   625			XS(XS_Devel__Peek_runops_debug); /* prototype to pass -Wmissing-prototypes */
   626			XS(XS_Devel__Peek_runops_debug)
   627	      ######    {
   628	      ######        dXSARGS;
   629	      ######        if (items < 0 || items > 1)
   630	      ######    	Perl_croak(aTHX_ "Usage: Devel::Peek::runops_debug(flag= -1)");
   631	      ######        PERL_UNUSED_VAR(cv); /* -W */
   632			    {
   633	      ######    	bool	RETVAL;
   634	      ######    	int	flag;
   635			
   636	      ######    	if (items < 1)
   637	      ######    	    flag = -1;
   638				else {
   639	      ######    	    flag = (int)SvIV(ST(0));
   640				}
   641			
   642	      ######    	RETVAL = _runops_debug(flag);
   643	      ######    	ST(0) = boolSV(RETVAL);
   644	      ######    	sv_2mortal(ST(0));
   645			    }
   646	      ######        XSRETURN(1);
   647			}
   648			
   649			#ifdef __cplusplus
   650			extern "C"
   651			#endif
   652			XS(boot_Devel__Peek); /* prototype to pass -Wmissing-prototypes */
   653			XS(boot_Devel__Peek)
   654	           3    {
   655	           3        dXSARGS;
   656	           3        char* file = __FILE__;
   657			
   658	           3        PERL_UNUSED_VAR(cv); /* -W */
   659	           3        PERL_UNUSED_VAR(items); /* -W */
   660	           3        XS_VERSION_BOOTCHECK ;
   661			
   662	           3            newXS("Devel::Peek::mstat", XS_Devel__Peek_mstat, file);
   663	           3            newXS("Devel::Peek::fill_mstats", XS_Devel__Peek_fill_mstats, file);
   664	           3            newXSproto("Devel::Peek::mstats_fillhash", XS_Devel__Peek_mstats_fillhash, file, "\\%;$");
   665	           3            newXSproto("Devel::Peek::mstats2hash", XS_Devel__Peek_mstats2hash, file, "$\\%;$");
   666	           3            newXS("Devel::Peek::Dump", XS_Devel__Peek_Dump, file);
   667	           3            newXS("Devel::Peek::DumpArray", XS_Devel__Peek_DumpArray, file);
   668	           3            newXS("Devel::Peek::DumpProg", XS_Devel__Peek_DumpProg, file);
   669	           3            newXS("Devel::Peek::SvREFCNT", XS_Devel__Peek_SvREFCNT, file);
   670	           3            newXS("Devel::Peek::SvREFCNT_inc", XS_Devel__Peek_SvREFCNT_inc, file);
   671	           3            newXS("Devel::Peek::SvREFCNT_dec", XS_Devel__Peek_SvREFCNT_dec, file);
   672	           3            newXS("Devel::Peek::DeadCode", XS_Devel__Peek_DeadCode, file);
   673	           3            newXS("Devel::Peek::CvGV", XS_Devel__Peek_CvGV, file);
   674	           3            newXS("Devel::Peek::runops_debug", XS_Devel__Peek_runops_debug, file);
   675	           3        XSRETURN_YES;
   676			}
   677			
