From: Nick Ing-Simmons Date: Mon, 12 Jul 2004 14:26:12 +0000 (+0000) Subject: NI-S: IMHO utf8_upgrade is just changing representation not the value X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7a5fa8a2cb05d06ee722842024d6960f349f483b;p=p5sagit%2Fp5-mst-13.2.git NI-S: IMHO utf8_upgrade is just changing representation not the value so it has no business calling SvSETMAGIC. p4raw-id: //depot/perl@23084 --- diff --git a/sv.c b/sv.c index df384e7..aaf23e3 100644 --- a/sv.c +++ b/sv.c @@ -703,7 +703,7 @@ S_varname(pTHX_ GV *gv, char *gvtype, PADOFFSET targ, p = "???"; else if (!HvNAME(hv)) p = "__ANON__"; - else + else p = HvNAME(hv); if (strNE(p, "main")) { sv_catpv(name,p); @@ -969,7 +969,7 @@ S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match) gv = cGVOPx_gv(o); if (match && GvSV(gv) != uninit_sv) break; - return S_varname(aTHX_ gv, "$", 0, + return S_varname(aTHX_ gv, "$", 0, Nullsv, 0, FUV_SUBSCRIPT_NONE); } /* other possibilities not handled are: @@ -3945,7 +3945,6 @@ Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags) } if (SvUTF8(sv)) { - SvSETMAGIC(sv); return SvCUR(sv); } @@ -3982,7 +3981,6 @@ Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags) /* Mark as UTF-8 even if no hibit - saves scanning loop */ SvUTF8_on(sv); } - SvSETMAGIC(sv); return SvCUR(sv); } @@ -4155,7 +4153,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags) dtype = SvTYPE(dstr); SvAMAGIC_off(dstr); - if ( SvVOK(dstr) ) + if ( SvVOK(dstr) ) { /* need to nuke the magic */ mg_free(dstr); @@ -4627,11 +4625,11 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags) SvIVX(dstr) = SvIVX(sstr); } if (SvVOK(sstr)) { - MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring); + MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring); sv_magic(dstr, NULL, PERL_MAGIC_vstring, smg->mg_ptr, smg->mg_len); SvRMAGICAL_on(dstr); - } + } } else if (sflags & SVp_IOK) { if (sflags & SVf_IOK) @@ -4918,7 +4916,7 @@ S_sv_release_COW(pTHX_ register SV *sv, char *pvx, STRLEN cur, STRLEN len, if (len) { /* this SV was SvIsCOW_normal(sv) */ /* we need to find the SV pointing to us. */ SV *current = SV_COW_NEXT_SV(after); - + if (current == sv) { /* The SV we point to points back to us (there were only two of us in the loop.) @@ -5087,7 +5085,7 @@ Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* Same SvOOK_on but SvOOK_on does a SvIOK_off and we do that anyway inside the SvNIOK_off */ - SvFLAGS(sv) |= SVf_OOK; + SvFLAGS(sv) |= SVf_OOK; } SvNIOK_off(sv); SvLEN(sv) -= delta; @@ -5883,8 +5881,8 @@ Perl_sv_clear(pTHX_ register SV *sv) PUSHs(tmpref); PUTBACK; call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID); - - + + POPSTACK; SPAGAIN; LEAVE; @@ -6192,7 +6190,7 @@ UTF-8 bytes as a single character. Handles magic and type coercion. * The length is cached in PERL_UTF8_magic, in the mg_len field. Also the * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init(). * (Note that the mg_len is not the length of the mg_ptr field.) - * + * */ STRLEN @@ -6242,7 +6240,7 @@ Perl_sv_len_utf8(pTHX_ register SV *sv) STATIC bool S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, U8 *s, U8 *start) { - bool found = FALSE; + bool found = FALSE; if (SvMAGICAL(sv) && !SvREADONLY(sv)) { if (!*mgp) @@ -6284,7 +6282,7 @@ S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I *cachep = (STRLEN *) (*mgp)->mg_ptr; ASSERT_UTF8_CACHE(*cachep); if ((*cachep)[i] == (STRLEN)uoff) /* An exact match. */ - found = TRUE; + found = TRUE; else { /* We will skip to the right spot. */ STRLEN forw = 0; STRLEN backw = 0; @@ -6345,7 +6343,7 @@ S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I (*cachep)[2] = 0; (*cachep)[3] = 0; } - + found = TRUE; } } @@ -6382,7 +6380,7 @@ S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I return found; } - + /* =for apidoc sv_pos_u2b @@ -6511,7 +6509,7 @@ Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp) /* We already know part of the way. */ len = cache[0]; s += cache[1]; - /* Let the below loop do the rest. */ + /* Let the below loop do the rest. */ } else { /* cache[1] > *offsetp */ /* We already know all of the way, now we may @@ -6525,7 +6523,7 @@ Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp) if (!(forw < 2 * backw)) { U8 *p = s + cache[1]; STRLEN ubackw = 0; - + cache[1] -= backw; while (backw--) { @@ -6947,9 +6945,9 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append) rslen = 1; } else if (RsSNARF(PL_rs)) { - /* If it is a regular disk file use size from stat() as estimate - of amount we are going to read - may result in malloc-ing - more memory than we realy need if layers bellow reduce + /* If it is a regular disk file use size from stat() as estimate + of amount we are going to read - may result in malloc-ing + more memory than we realy need if layers bellow reduce size we read (e.g. CRLF or a gzip layer) */ Stat_t st; @@ -7054,12 +7052,12 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append) cnt = PerlIO_get_cnt(fp); /* get count into register */ /* make sure we have the room */ - if ((I32)(SvLEN(sv) - append) <= cnt + 1) { + if ((I32)(SvLEN(sv) - append) <= cnt + 1) { /* Not room for all of it - if we are looking for a separator and room for some + if we are looking for a separator and room for some */ if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) { - /* just process what we have room for */ + /* just process what we have room for */ shortbuffered = cnt - SvLEN(sv) + append + 1; cnt -= shortbuffered; } @@ -7069,7 +7067,7 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append) SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1)))); } } - else + else shortbuffered = 0; bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */ ptr = (STDCHAR*)PerlIO_get_ptr(fp); @@ -8630,7 +8628,7 @@ Copies a string into a new SV, optionally blessing the SV. The length of the string must be specified with C. The C argument will be upgraded to an RV. That RV will be modified to point to the new SV. The C argument indicates the package for the blessing. Set C to -C to avoid the blessing. The new SV will have a reference count +C to avoid the blessing. The new SV will have a reference count of 1, and the RV will be returned. Note that C copies the pointer while this copies the string. @@ -9346,7 +9344,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV } if (!asterisk) - if( *q == '0' ) + if( *q == '0' ) fill = *q++; EXPECT_NUMBER(q, width); @@ -10036,8 +10034,8 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV } /* Use memchr() instead of strchr(), as eptr is not guaranteed */ /* to point to a null-terminated string. */ - if (left && ckWARN(WARN_PRINTF) && memchr(eptr, '\n', elen) && - (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) + if (left && ckWARN(WARN_PRINTF) && memchr(eptr, '\n', elen) && + (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) Perl_warner(aTHX_ packWARN(WARN_PRINTF), "Newline in left-justified string for %sprintf", (PL_op->op_type == OP_PRTF) ? "" : "s"); @@ -10799,7 +10797,7 @@ Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param) IoPAGE(dstr) = IoPAGE(sstr); IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr); IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr); - if(IoFLAGS(sstr) & IOf_FAKE_DIRP) { + if(IoFLAGS(sstr) & IOf_FAKE_DIRP) { /* I have no idea why fake dirp (rsfps) should be treaded differently but otherwise we end up with leaks -- sky*/ @@ -11386,31 +11384,31 @@ Create and return a new interpreter by cloning the current one. perl_clone takes these flags as parameters: -CLONEf_COPY_STACKS - is used to, well, copy the stacks also, -without it we only clone the data and zero the stacks, -with it we copy the stacks and the new perl interpreter is -ready to run at the exact same point as the previous one. -The pseudo-fork code uses COPY_STACKS while the +CLONEf_COPY_STACKS - is used to, well, copy the stacks also, +without it we only clone the data and zero the stacks, +with it we copy the stacks and the new perl interpreter is +ready to run at the exact same point as the previous one. +The pseudo-fork code uses COPY_STACKS while the threads->new doesn't. CLONEf_KEEP_PTR_TABLE -perl_clone keeps a ptr_table with the pointer of the old -variable as a key and the new variable as a value, -this allows it to check if something has been cloned and not -clone it again but rather just use the value and increase the -refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill -the ptr_table using the function -C, -reason to keep it around is if you want to dup some of your own -variable who are outside the graph perl scans, example of this +perl_clone keeps a ptr_table with the pointer of the old +variable as a key and the new variable as a value, +this allows it to check if something has been cloned and not +clone it again but rather just use the value and increase the +refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill +the ptr_table using the function +C, +reason to keep it around is if you want to dup some of your own +variable who are outside the graph perl scans, example of this code is in threads.xs create CLONEf_CLONE_HOST -This is a win32 thing, it is ignored on unix, it tells perls -win32host code (which is c++) to clone itself, this is needed on -win32 if you want to run two threads at the same time, -if you just want to do some stuff in a separate perl interpreter -and then throw it away and return to the original one, +This is a win32 thing, it is ignored on unix, it tells perls +win32host code (which is c++) to clone itself, this is needed on +win32 if you want to run two threads at the same time, +if you just want to do some stuff in a separate perl interpreter +and then throw it away and return to the original one, you don't need to do anything. =cut @@ -12255,14 +12253,14 @@ Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding) EXTEND(SP, 3); XPUSHs(encoding); XPUSHs(sv); -/* +/* NI-S 2002/07/09 Passing sv_yes is wrong - it needs to be or'ed set of constants - for Encode::XS, while UTf-8 decode (currently) assumes a true value means + for Encode::XS, while UTf-8 decode (currently) assumes a true value means remove converted chars from source. Both will default the value - let them. - + XPUSHs(&PL_sv_yes); */ PUTBACK;