diff options
author | Nicholas Clark <nick@ccl4.org> | 2006-02-20 19:00:22 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2006-02-20 19:00:22 +0000 |
commit | c84c465283025c72dfa40558418521b8e42b7290 (patch) | |
tree | 285b0b56947449f80159279646c736c3aebb484f | |
parent | 5316d14db4aade2e88cbb15cc065195245c0ec51 (diff) | |
download | perl-c84c465283025c72dfa40558418521b8e42b7290.tar.gz |
PVCVs don't need XNVs either.
(And actually remove xcv_depth)
(And fix the copy lengths in bodies_by_type)
p4raw-id: //depot/perl@27249
-rw-r--r-- | cv.h | 32 | ||||
-rw-r--r-- | dump.c | 2 | ||||
-rw-r--r-- | ext/B/B/Bytecode.pm | 4 | ||||
-rw-r--r-- | ext/Devel/Peek/t/Peek.t | 9 | ||||
-rw-r--r-- | sv.c | 12 |
5 files changed, 48 insertions, 11 deletions
@@ -34,7 +34,6 @@ struct xpvcv { } xcv_root_u; GV * xcv_gv; char * xcv_file; - long xcv_depth; PADLIST * xcv_padlist; CV * xcv_outside; U32 xcv_outside_seq; /* the COP sequence (at the point of our @@ -43,6 +42,37 @@ struct xpvcv { cv_flags_t xcv_flags; }; +typedef struct { + STRLEN xpv_cur; /* length of xp_pv as a C string */ + STRLEN xpv_len; /* allocated size */ + union { + IV xivu_iv; + UV xivu_uv; + void * xivu_p1; + I32 xivu_i32; /* depth, >= 2 indicates recursive call */ + } xiv_u; + MAGIC* xmg_magic; /* magic for scalar array */ + HV* xmg_stash; /* class package */ + + HV * xcv_stash; + union { + OP * xcv_start; + ANY xcv_xsubany; + } xcv_start_u; + union { + OP * xcv_root; + void (*xcv_xsub) (pTHX_ CV*); + } xcv_root_u; + GV * xcv_gv; + char * xcv_file; + PADLIST * xcv_padlist; + CV * xcv_outside; + U32 xcv_outside_seq; /* the COP sequence (at the point of our + * compilation) in the lexically enclosing + * sub */ + cv_flags_t xcv_flags; +} xpvcv_allocated; + /* =head1 Handy Values @@ -1304,7 +1304,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo PerlIO_putc(file, '\n'); } if ((type >= SVt_PVNV && type != SVt_PVAV && type != SVt_PVHV - && type != SVt_PVFM) + && type != SVt_PVCV && type != SVt_PVFM) || type == SVt_NV) { STORE_NUMERIC_LOCAL_SET_STANDARD(); /* %Vg doesn't work? --jhi */ diff --git a/ext/B/B/Bytecode.pm b/ext/B/B/Bytecode.pm index 4497d445ff..6a30111179 100644 --- a/ext/B/B/Bytecode.pm +++ b/ext/B/B/Bytecode.pm @@ -257,7 +257,9 @@ sub B::PVNV::bsave { # Likewise HVs have no NV slot actually allocated. # I don't think that they can get here, but better safe than sorry return if $sv->isa('B::HV'); - } + return if $sv->isa('B::CV'); + return if $sv->isa('B::FM'); + } asm "xnv", sprintf "%.40g", $sv->NVX; } diff --git a/ext/Devel/Peek/t/Peek.t b/ext/Devel/Peek/t/Peek.t index 3d5d683b07..8897329500 100644 --- a/ext/Devel/Peek/t/Peek.t +++ b/ext/Devel/Peek/t/Peek.t @@ -38,6 +38,9 @@ sub do_test { $pattern =~ s/^ *\$ROOT *\n/ ($] < 5.009) ? " ROOT = 0x0\n" : ''; /mge; + $pattern =~ s/^ *\$IVNV *\n/ + ($] < 5.009) ? " IV = 0\n NV = 0\n" : ''; + /mge; @@ -218,7 +221,7 @@ do_test(13, SV = PVCV\\($ADDR\\) at $ADDR REFCNT = 2 FLAGS = \\(PADMY,POK,pPOK,ANON,WEAKOUTSIDE\\) - NV = 0 + $IVNV PROTOTYPE = "" COMP_STASH = $ADDR\\t"main" START = $ADDR ===> \\d+ @@ -244,7 +247,7 @@ do_test(14, SV = PVCV\\($ADDR\\) at $ADDR REFCNT = (3|4) FLAGS = \\(\\) - NV = 0 + $IVNV COMP_STASH = $ADDR\\t"main" START = $ADDR ===> \\d+ ROOT = $ADDR @@ -489,7 +492,7 @@ do_test(23, SV = PVCV\\($ADDR\\) at $ADDR REFCNT = (2) FLAGS = \\(POK,pPOK,CONST\\) - NV = 0 + $IVNV PROTOTYPE = "" COMP_STASH = 0x0 $ROOT @@ -969,15 +969,17 @@ static const struct body_details bodies_by_type[] = { + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill), TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) }, - /* 76 */ - { sizeof(XPVCV), sizeof(XPVCV), 0, TRUE, HADNV, - HASARENA, FIT_ARENA(0, sizeof(XPVCV)) }, + /* 56 */ + { sizeof(xpvcv_allocated), sizeof(XPVCV) + - relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur), + + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur), + TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) }, { sizeof(xpvfm_allocated), - sizeof(xpvfm_allocated) + sizeof(XPVFM) - relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur), + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur), - TRUE, HADNV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) }, + TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) }, /* XPVIO is 84 bytes, fits 48x */ { sizeof(XPVIO), sizeof(XPVIO), 0, TRUE, HADNV, |