Devel-MAT
view release on metacpan or search on metacpan
lib/Devel/MAT.xs view on Meta::CPAN
/* decr usage count */
SV *count = HeVAL(ent);
if(SvUV(count) > 1) {
sv_setuv(count, SvUV(count) - 1);
return;
}
hv_delete(strings, s, 0, G_DISCARD);
}
MODULE = Devel::MAT PACKAGE = Devel::MAT::SV
void
_set_core_fields(self, type, df, addr, refcnt, size, blessed_at)
HV *self
int type
SV *df
long addr
long refcnt
long size
long blessed_at
CODE:
{
void *ptr;
struct pmat_sv *sv;
switch(type) {
case 1: /* PMAT_SVtGLOB */
Newx(ptr, 1, struct pmat_sv_glob); break;
case 2: /* PMAT_SVtSCALAR */
case 13: /* PMAT_SVtUNDEF */
case 14: /* PMAT_SVtYES */
case 15: /* PMAT_SVtNO */
Newx(ptr, 1, struct pmat_sv_scalar); break;
case 3: /* PMAT_SVtREF */
Newx(ptr, 1, struct pmat_sv_ref); break;
case 4: /* PMAT_SVtARRAY */
Newx(ptr, 1, struct pmat_sv_array); break;
case 5: /* PMAT_SVtHASH */
case 6: /* PMAT_SVtSTASH */
case 17: /* PMAT_SVtCLASS */
Newx(ptr, 1, struct pmat_sv_hash); break;
case 7: /* PMAT_SVtCODE */
Newx(ptr, 1, struct pmat_sv_code); break;
case 16: /* PMAT_SVtOBJECT */
Newx(ptr, 1, struct pmat_sv_object); break;
case 0x7F: /* PMAT_SVtSTRUCT */
Newx(ptr, 1, struct pmat_sv_struct); break;
default:
Newx(ptr, 1, struct pmat_sv); break;
}
sv = ptr;
sv->df = newSVsv(df);
sv->addr = addr;
sv->refcnt = refcnt;
sv->size = size;
sv->blessed_at = blessed_at;
sv->glob_at = 0;
sv_rvweaken(sv->df);
sv_magicext((SV *)self, NULL, PERL_MAGIC_ext, &vtbl, (char *)sv, 0);
}
void DESTROY(self)
HV *self
CODE:
{
struct pmat_sv *sv = get_pmat_sv(self);
free_pmat_sv(sv);
}
void
_set_glob_at(self, glob_at)
HV *self
long glob_at
CODE:
{
struct pmat_sv *sv = get_pmat_sv(self);
sv->glob_at = glob_at;
}
SV *df(self)
HV *self
CODE:
{
struct pmat_sv *sv = get_pmat_sv(self);
RETVAL = SvREFCNT_inc(sv->df); /* return it directly */
}
OUTPUT:
RETVAL
long addr(self)
HV *self
ALIAS:
addr = 0
refcnt = 1
size = 2
blessed_at = 3
glob_at = 4
CODE:
{
struct pmat_sv *sv = get_pmat_sv(self);
if(sv)
switch(ix) {
case 0: RETVAL = sv->addr; break;
case 1: RETVAL = sv->refcnt; break;
case 2: RETVAL = sv->size; break;
case 3: RETVAL = sv->blessed_at; break;
case 4: RETVAL = sv->glob_at; break;
}
}
OUTPUT:
RETVAL
MODULE = Devel::MAT PACKAGE = Devel::MAT::SV::GLOB
void
_set_glob_fields(self, stash_at, scalar_at, array_at, hash_at, code_at, egv_at, io_at, form_at, name_hek, line, file, name)
HV *self
( run in 0.838 second using v1.01-cache-2.11-cpan-7f9471e7e0a )