Hello community, here is the log from the commit of package perl-Data-Alias for openSUSE:Factory checked in at 2011-12-01 12:25:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Data-Alias (Old) and /work/SRC/openSUSE:Factory/.perl-Data-Alias.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Data-Alias", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Data-Alias/perl-Data-Alias.changes 2011-09-23 12:36:42.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Data-Alias.new/perl-Data-Alias.changes 2011-12-01 12:25:10.000000000 +0100 @@ -1,0 +2,36 @@ +Tue Nov 29 20:30:24 UTC 2011 - co...@suse.com + +version 1.16; 2011-11-17 + + * bugfix: use supported API to put destructor calls on the save stack + (the unsupported way used before was wrong for 64-bit systems on + perl 5.13.1 and later) + + * document the behaviour of "alias return" in more detail + + * convert .cvsignore to .gitignore + +------------------------------------------------------------------- +Tue Nov 29 20:28:20 UTC 2011 - co...@suse.com + +- update to 1.14 + * port to Perl 5.15.0, where the op type aelemfast has been split into + aelemfast and aelemfast_lex + * test compatibility with Devel::CallParser + * bugfix: never unhook peephole optimiser, because unhooking is liable + to fail if anything else hooked it + * bugfix: revise check for dorassign opcode to cope with FreeBSD's + mutant Perl 5.8 that has it + * test POD syntax and coverage + * bugfix: prevent the lexer getting confused if the first thing inside + an alias{} block is an open paren + * bugfix: don't crash if an rv2cv op is built with PL_parser null + * bugfix: handle variant structure of entersub op which lacks (ex-)list + op as direct child + * bugfix: squash bogus dtrace-related macro definitions that are picked + up due to defining PERL_CORE + * switch all pp functions to internal linkage + * avoid some compiler warnings + * include .cvsignore file in distribution + +------------------------------------------------------------------- Old: ---- Data-Alias-1.12.tar.gz New: ---- Data-Alias-1.16.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Data-Alias.spec ++++++ --- /var/tmp/diff_new_pack.kRAhzm/_old 2011-12-01 12:25:11.000000000 +0100 +++ /var/tmp/diff_new_pack.kRAhzm/_new 2011-12-01 12:25:11.000000000 +0100 @@ -18,15 +18,14 @@ Name: perl-Data-Alias -Version: 1.12 +Version: 1.16 Release: 1 License: GPL+ or Artistic %define cpan_name Data-Alias Summary: Comprehensive set of aliasing operations Url: http://search.cpan.org/dist/Data-Alias/ Group: Development/Libraries/Perl -#Source: http://www.cpan.org/authors/id/Z/ZE/ZEFRAM/Data-Alias-%{version}.tar.gz -Source: %{cpan_name}-%{version}.tar.gz +Source: http://www.cpan.org/authors/id/Z/ZE/ZEFRAM/%{cpan_name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: perl BuildRequires: perl-macros @@ -71,11 +70,8 @@ %perl_process_packlist %perl_gen_filelist -%clean -%{__rm} -rf %{buildroot} - %files -f %{name}.files -%defattr(644,root,root,755) +%defattr(-,root,root,755) %doc Changes README %changelog ++++++ Data-Alias-1.12.tar.gz -> Data-Alias-1.16.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/.gitignore new/Data-Alias-1.16/.gitignore --- old/Data-Alias-1.12/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/Data-Alias-1.16/.gitignore 2011-11-17 22:42:27.000000000 +0100 @@ -0,0 +1,8 @@ +/Makefile +/pm_to_blib +/blib +/MYMETA.yml +/Data-Alias-* +/Alias.c +/Alias.o +/Alias.bs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/Alias.xs new/Data-Alias-1.16/Alias.xs --- old/Data-Alias-1.12/Alias.xs 2011-02-22 21:41:15.000000000 +0100 +++ new/Data-Alias-1.16/Alias.xs 2011-11-17 22:57:41.000000000 +0100 @@ -25,6 +25,12 @@ PERL_SUBVERSION) #endif +#if defined(USE_DTRACE) && defined(PERL_CORE) +#undef ENTRY_PROBE +#undef RETURN_PROBE +#define ENTRY_PROBE(func, file, line, stash) +#define RETURN_PROBE(func, file, line, stash) +#endif #if defined(PERL_CORE) && defined(MULTIPLICITY) && \ (PERL_COMBI_VERSION < 5013006) @@ -176,7 +182,11 @@ #endif #define SVs_PADFLAGS (SVs_PADBUSY|SVs_PADMY|SVs_PADTMP) +#ifdef pp_dorassign +#define DA_HAVE_OP_DORASSIGN 1 +#else #define DA_HAVE_OP_DORASSIGN (PERL_COMBI_VERSION >= 5009000) +#endif #define DA_TIED_ERR "Can't %s alias %s tied %s" #define DA_ODD_HASH_ERR "Odd number of elements in hash assignment" @@ -210,7 +220,6 @@ #define dDA SV *_da, **_dap #define dDAforce SV *_da = *DA_FETCH(FALSE) -#define da_peeps (*(I32 *) &SvCUR(_da)) #define da_inside (*(I32 *) &SvIVX(_da)) #define da_iscope (*(PERL_CONTEXT **) &SvPVX(_da)) #define da_old_peepp (*(void (**)(pTHX_ OP *)) &LvTARG(_da)) @@ -225,7 +234,6 @@ #define DA_INIT STATIC CV *da_cv, *da_cvc; -STATIC I32 da_peeps; STATIC I32 da_inside; STATIC PERL_CONTEXT *da_iscope; STATIC void (*da_old_peepp)(pTHX_ OP *); @@ -237,7 +245,7 @@ STATIC OP *da_tag_entersub(pTHX) { return NORMAL; } STATIC void da_peep(pTHX_ OP *o); -STATIC int da_peep2(pTHX_ OP *o); +STATIC void da_peep2(pTHX_ OP *o); STATIC SV *da_fetch(pTHX_ SV *a1, SV *a2) { switch ((Size_t) a1) { @@ -300,7 +308,8 @@ } \ } STMT_END -STATIC void da_restore_gvcv(pTHX_ GV *gv) { +STATIC void da_restore_gvcv(pTHX_ void *gv_v) { + GV *gv = (GV*)gv_v; CV *restcv = (CV *) SSPOPPTR; CV *oldcv = GvCV(gv); GvCV_set(gv, restcv); @@ -357,18 +366,16 @@ } GvMULTI_on(gv); if (GvINTRO(gv)) { + SvREFCNT_inc_simple_void_NN((SV *) gv); + SvREFCNT_inc_simple_void_NN(value); GvINTRO_off(gv); - SSCHECK(4); + SSCHECK(1); SSPUSHPTR((SV *) oldcv); - SSPUSHDXPTR((void (*)(pTHX_ void *)) - da_restore_gvcv); - SSPUSHPTR(SvREFCNT_inc_simple_NN((SV *) gv)); - SSPUSHINT(SAVEt_DESTRUCTOR_X); - GvCV_set(gv, - (CV *) SvREFCNT_inc_simple_NN(value)); + SAVEDESTRUCTOR_X(da_restore_gvcv, (void*)gv); + GvCV_set(gv, (CV*)value); } else { - GvCV_set(gv, - (CV *) SvREFCNT_inc_simple_NN(value)); + SvREFCNT_inc_simple_void_NN(value); + GvCV_set(gv, (CV*)value); SvREFCNT_dec((SV *) oldcv); } return; @@ -400,7 +407,8 @@ return; case SVt_PVHV: if (value == &PL_sv_undef) { - hv_delete_ent((HV *) a1, a2, G_DISCARD, 0); + (void) hv_delete_ent((HV *) a1, a2, + G_DISCARD, 0); } else { if (!hv_store_ent((HV *) a1, a2, value, 0)) SvREFCNT_dec(value); @@ -414,7 +422,8 @@ Perl_croak(aTHX_ DA_TARGET_ERR); } -STATIC void da_unlocalize_gvar(pTHX_ GP *gp) { +STATIC void da_unlocalize_gvar(pTHX_ void *gp_v) { + GP *gp = (GP*) gp_v; SV *value = (SV *) SSPOPPTR; SV **sptr = (SV **) SSPOPPTR; SV *old = *sptr; @@ -433,12 +442,10 @@ } STATIC void da_localize_gvar(pTHX_ GP *gp, SV **sptr) { - SSCHECK(5); + SSCHECK(2); SSPUSHPTR(sptr); SSPUSHPTR(*sptr); - SSPUSHDXPTR((void (*)(pTHX_ void *)) da_unlocalize_gvar); - SSPUSHPTR(gp); - SSPUSHINT(SAVEt_DESTRUCTOR_X); + SAVEDESTRUCTOR_X(da_unlocalize_gvar, (void*)gp); ++gp->gp_refcnt; *sptr = Nullsv; } @@ -454,13 +461,13 @@ return rv; } -OP *DataAlias_pp_srefgen(pTHX) { +STATIC OP *DataAlias_pp_srefgen(pTHX) { dSP; SETs(da_refgen(aTHX_ TOPs)); RETURN; } -OP *DataAlias_pp_refgen(pTHX) { +STATIC OP *DataAlias_pp_refgen(pTHX) { dSP; dMARK; if (GIMME_V != G_LIST) { ++MARK; @@ -474,7 +481,7 @@ RETURN; } -OP *DataAlias_pp_anonlist(pTHX) { +STATIC OP *DataAlias_pp_anonlist(pTHX) { dSP; dMARK; I32 i = SP - MARK; AV *av = newAV(); @@ -494,7 +501,7 @@ RETURN; } -OP *DataAlias_pp_anonhash(pTHX) { +STATIC OP *DataAlias_pp_anonhash(pTHX) { dSP; dMARK; dORIGMARK; HV *hv = (HV *) newHV(); SV *sv; @@ -507,9 +514,9 @@ Perl_warner(aTHX_ packWARN(WARN_MISC), "Odd number of elements in anonymous hash"); if (val == &PL_sv_undef) - hv_delete_ent(hv, key, G_DISCARD, 0); + (void) hv_delete_ent(hv, key, G_DISCARD, 0); else - hv_store_ent(hv, key, val, 0); + (void) hv_store_ent(hv, key, val, 0); } SP = ORIGMARK; if (PL_op->op_flags & OPf_SPECIAL) { @@ -522,9 +529,14 @@ RETURN; } -OP *DataAlias_pp_aelemfast(pTHX) { +STATIC OP *DataAlias_pp_aelemfast(pTHX) { dSP; - AV *av = (PL_op->op_flags & OPf_SPECIAL) ? + AV *av = +#if (PERL_COMBI_VERSION >= 5015000) + PL_op->op_type == OP_AELEMFAST_LEX ? +#else + (PL_op->op_flags & OPf_SPECIAL) ? +#endif (AV *) PAD_SV(PL_op->op_targ) : GvAVn(cGVOP_gv); IV index = PL_op->op_private; if (!av_fetch(av, index, TRUE)) @@ -543,7 +555,7 @@ return FALSE; } -OP *DataAlias_pp_aelem(pTHX) { +STATIC OP *DataAlias_pp_aelem(pTHX) { dSP; SV *elem = POPs, **svp; AV *av = (AV *) POPs; @@ -584,7 +596,7 @@ } #endif -OP *DataAlias_pp_helem(pTHX) { +STATIC OP *DataAlias_pp_helem(pTHX) { dSP; SV *key = POPs; HV *hv = (HV *) POPs; @@ -613,7 +625,7 @@ RETURN; } -OP *DataAlias_pp_aslice(pTHX) { +STATIC OP *DataAlias_pp_aslice(pTHX) { dSP; dMARK; AV *av = (AV *) POPs; IV max, count; @@ -646,7 +658,7 @@ RETURN; } -OP *DataAlias_pp_hslice(pTHX) { +STATIC OP *DataAlias_pp_hslice(pTHX) { dSP; dMARK; HV *hv = (HV *) POPs; SV *key; @@ -685,7 +697,7 @@ RETURN; } -OP *DataAlias_pp_padsv(pTHX) { +STATIC OP *DataAlias_pp_padsv(pTHX) { dSP; IV index = PL_op->op_targ; if (PL_op->op_private & OPpLVAL_INTRO) { @@ -696,7 +708,7 @@ RETURN; } -OP *DataAlias_pp_padav(pTHX) { +STATIC OP *DataAlias_pp_padav(pTHX) { dSP; dTARGET; if (PL_op->op_private & OPpLVAL_INTRO) SAVECLEARSV(PAD_SVl(PL_op->op_targ)); @@ -704,7 +716,7 @@ RETURN; } -OP *DataAlias_pp_padhv(pTHX) { +STATIC OP *DataAlias_pp_padhv(pTHX) { dSP; dTARGET; if (PL_op->op_private & OPpLVAL_INTRO) SAVECLEARSV(PAD_SVl(PL_op->op_targ)); @@ -712,7 +724,7 @@ RETURN; } -OP *DataAlias_pp_gvsv(pTHX) { +STATIC OP *DataAlias_pp_gvsv(pTHX) { dSP; GV *gv = cGVOP_gv; if (PL_op->op_private & OPpLVAL_INTRO) { @@ -723,7 +735,7 @@ RETURN; } -OP *DataAlias_pp_gvsv_r(pTHX) { +STATIC OP *DataAlias_pp_gvsv_r(pTHX) { dSP; GV *gv = cGVOP_gv; if (PL_op->op_private & OPpLVAL_INTRO) { @@ -743,7 +755,7 @@ return egv; } -OP *DataAlias_pp_rv2sv(pTHX) { +STATIC OP *DataAlias_pp_rv2sv(pTHX) { dSP; dPOPss; if (!SvROK(sv) && SvTYPE(sv) != SVt_PVGV) do { const char *tname; @@ -785,7 +797,7 @@ RETURN; } -OP *DataAlias_pp_rv2sv_r(pTHX) { +STATIC OP *DataAlias_pp_rv2sv_r(pTHX) { U8 savedflags; OP *op = PL_op, *ret; @@ -803,7 +815,7 @@ return ret; } -OP *DataAlias_pp_rv2gv(pTHX) { +STATIC OP *DataAlias_pp_rv2gv(pTHX) { dSP; dPOPss; if (SvROK(sv)) { wasref: sv = SvRV(sv); @@ -829,7 +841,7 @@ RETURN; } -OP *DataAlias_pp_rv2av(pTHX) { +STATIC OP *DataAlias_pp_rv2av(pTHX) { OP *ret = PL_ppaddr[OP_RV2AV](aTHX); dSP; SV *av = POPs; @@ -838,7 +850,7 @@ return ret; } -OP *DataAlias_pp_rv2hv(pTHX) { +STATIC OP *DataAlias_pp_rv2hv(pTHX) { OP *ret = PL_ppaddr[OP_RV2HV](aTHX); dSP; SV *hv = POPs; @@ -847,7 +859,7 @@ return ret; } -OP *DataAlias_pp_sassign(pTHX) { +STATIC OP *DataAlias_pp_sassign(pTHX) { dSP; SV *a1, *a2, *value; if (PL_op->op_private & OPpASSIGN_BACKWARDS) { @@ -860,7 +872,7 @@ RETURN; } -OP *DataAlias_pp_aassign(pTHX) { +STATIC OP *DataAlias_pp_aassign(pTHX) { dSP; SV **left, **llast, **right, **rlast; I32 gimme = GIMME_V; @@ -1047,7 +1059,7 @@ RETURN; } -OP *DataAlias_pp_andassign(pTHX) { +STATIC OP *DataAlias_pp_andassign(pTHX) { dSP; SV *a2 = POPs; SV *sv = da_fetch(aTHX_ TOPs, a2); @@ -1059,7 +1071,7 @@ RETURN; } -OP *DataAlias_pp_orassign(pTHX) { +STATIC OP *DataAlias_pp_orassign(pTHX) { dSP; SV *a2 = POPs; SV *sv = da_fetch(aTHX_ TOPs, a2); @@ -1072,7 +1084,7 @@ } #if DA_HAVE_OP_DORASSIGN -OP *DataAlias_pp_dorassign(pTHX) { +STATIC OP *DataAlias_pp_dorassign(pTHX) { dSP; SV *a2 = POPs; SV *sv = da_fetch(aTHX_ TOPs, a2); @@ -1085,7 +1097,7 @@ } #endif -OP *DataAlias_pp_push(pTHX) { +STATIC OP *DataAlias_pp_push(pTHX) { dSP; dMARK; dORIGMARK; dTARGET; AV *av = (AV *) *++MARK; I32 i; @@ -1100,7 +1112,7 @@ RETURN; } -OP *DataAlias_pp_unshift(pTHX) { +STATIC OP *DataAlias_pp_unshift(pTHX) { dSP; dMARK; dORIGMARK; dTARGET; AV *av = (AV *) *++MARK; I32 i = 0; @@ -1114,7 +1126,7 @@ RETURN; } -OP *DataAlias_pp_splice(pTHX) { +STATIC OP *DataAlias_pp_splice(pTHX) { dSP; dMARK; dORIGMARK; I32 ins = SP - MARK - 3; AV *av = (AV *) MARK[1]; @@ -1168,7 +1180,7 @@ RETURN; } -OP *DataAlias_pp_leave(pTHX) { +STATIC OP *DataAlias_pp_leave(pTHX) { dSP; SV **newsp; PMOP *newpm; @@ -1208,7 +1220,7 @@ return NORMAL; } -OP *DataAlias_pp_return(pTHX) { +STATIC OP *DataAlias_pp_return(pTHX) { dSP; dMARK; I32 cxix; PERL_CONTEXT *cx; @@ -1284,8 +1296,8 @@ if (optype == OP_REQUIRE && !SvTRUE(sv) && (gimme == G_SCALAR || MARK == SP)) { sv = cx->blk_eval.old_namesv; - hv_delete(GvHVn(PL_incgv), SvPVX_const(sv), SvCUR(sv), - G_DISCARD); + (void) hv_delete(GvHVn(PL_incgv), SvPVX_const(sv), + SvCUR(sv), G_DISCARD); DIE(aTHX_ "%"SVf" did not return a true value", sv); } break; @@ -1297,6 +1309,7 @@ break; default: DIE(aTHX_ "panic: return"); + retop = NULL; /* suppress "uninitialized" warning */ } TAINT_NOT; @@ -1334,34 +1347,28 @@ return retop; } -OP *DataAlias_pp_leavesub(pTHX) { +STATIC OP *DataAlias_pp_leavesub(pTHX) { if (++PL_markstack_ptr == PL_markstack_max) markstack_grow(); *PL_markstack_ptr = cxstack[cxstack_ix].blk_oldsp; return DataAlias_pp_return(aTHX); } -OP *DataAlias_pp_entereval(pTHX) { +STATIC OP *DataAlias_pp_entereval(pTHX) { dDAforce; PERL_CONTEXT *iscope = da_iscope; I32 inside = da_inside; I32 cxi = (cxstack_ix < cxstack_max) ? cxstack_ix + 1 : cxinc(); - void (*peepp)(pTHX_ OP *) = PL_peepp; OP *ret; da_iscope = &cxstack[cxi]; da_inside = 1; - if (peepp != da_peep) { - da_old_peepp = peepp; - PL_peepp = da_peep; - } ret = PL_ppaddr[OP_ENTEREVAL](aTHX); da_iscope = iscope; da_inside = inside; - PL_peepp = peepp; return ret; } -OP *DataAlias_pp_copy(pTHX) { +STATIC OP *DataAlias_pp_copy(pTHX) { dSP; dMARK; SV *sv; switch (GIMME_V) { @@ -1397,6 +1404,9 @@ DA_OUTER_ERR); break; case OP_AELEM: op->op_ppaddr = DataAlias_pp_aelem; break; +#if (PERL_COMBI_VERSION >= 5015000) + case OP_AELEMFAST_LEX: +#endif case OP_AELEMFAST: op->op_ppaddr = DataAlias_pp_aelemfast; break; case OP_HELEM: op->op_ppaddr = DataAlias_pp_helem; break; case OP_ASLICE: op->op_ppaddr = DataAlias_pp_aslice; break; @@ -1528,10 +1538,7 @@ break; case OP_LIST: if (op->op_ppaddr == da_tag_list) { - if (da_peep2(aTHX_ op)) { - dDAforce; - PL_peepp = da_old_peepp; - } + da_peep2(aTHX_ op); return hits; } break; @@ -1651,14 +1658,13 @@ return hits; } -STATIC int da_peep2(pTHX_ OP *o) { +STATIC void da_peep2(pTHX_ OP *o) { OP *sib, *k; int useful; while (o->op_ppaddr != da_tag_list) { while ((sib = o->op_sibling)) { if ((o->op_flags & OPf_KIDS) && (k = cUNOPo->op_first)){ - if (da_peep2(aTHX_ k)) - return 1; + da_peep2(aTHX_ k); } else switch (o->op_type ? o->op_type : o->op_targ) { case_OP_SETSTATE_ case OP_NEXTSTATE: @@ -1668,7 +1674,7 @@ o = sib; } if (!(o->op_flags & OPf_KIDS) || !(o = cUNOPo->op_first)) - return 0; + return; } useful = o->op_private & OPpUSEFUL; op_null(o); @@ -1694,10 +1700,6 @@ } } } - { - dDAforce; - return !--da_peeps; - } } STATIC void da_peep(pTHX_ OP *o) { @@ -1711,8 +1713,8 @@ o = tmp; if (da_transform(aTHX_ o, FALSE)) da_inside = 2; - } else if (da_peep2(aTHX_ o)) { - PL_peepp = da_old_peepp; + } else { + da_peep2(aTHX_ o); } LEAVE; } @@ -1728,14 +1730,18 @@ char *s, *start_s; CV *cv; o = da_old_ck_rv2cv(aTHX_ o); +#if (PERL_COMBI_VERSION >= 5009005) + if (!PL_parser) + return o; +#endif + if (PL_lex_state != LEX_NORMAL && PL_lex_state != LEX_INTERPNORMAL) + return o; /* not lexing? */ kid = cUNOPo->op_first; if (kid->op_type != OP_GV || !DA_ACTIVE || ( (cv = GvCV(kGVOP_gv)) != da_cv && cv != da_cvc )) return o; if (o->op_private & OPpENTERSUB_AMPER) return o; - if (PL_lex_state != LEX_NORMAL && PL_lex_state != LEX_INTERPNORMAL) - return o; /* not lexing? */ SvPOK_off(cv); o->op_ppaddr = da_tag_rv2cv; if (cv == da_cv) @@ -1773,6 +1779,23 @@ if ((PL_nexttype[PL_nexttoke++] = yylex()) == '{') { PL_nexttype[PL_nexttoke++] = DO; sv_setpv((SV *) cv, "$"); + if (PERL_COMBI_VERSION >= 5011002 && + *PL_bufptr == '(') { + /* + * A paren here triggers special lexer + * behaviour for a parenthesised argument + * list, which screws up the normal + * parsing that we want to continue. + * Suppress it by injecting a semicolon, + * which is otherwise a no-op coming just + * after the opening brace of a block. + */ + Move(PL_bufptr, PL_bufptr+1, + PL_bufend+1-PL_bufptr, char); + *PL_bufptr = ';'; + PL_bufend++; + SvCUR(PL_linestr)++; + } } if(PL_lex_state != LEX_KNOWNEXT) { PL_lex_defer = PL_lex_state; @@ -1807,10 +1830,6 @@ memset(start_s, ' ', PL_bufptr-start_s); } } - if (!da_peeps++) { - da_old_peepp = PL_peepp; - PL_peepp = da_peep; - } if (da_iscope != &cxstack[cxstack_ix]) { SAVEVPTR(da_iscope); SAVEI32(da_inside); @@ -1826,9 +1845,12 @@ STATIC OP *da_ck_entersub(pTHX_ OP *o) { dDA; OP *kid = cUNOPo->op_first; - OP *last = kLISTOP->op_last; - OP *tmp; + OP *last, *tmp; int inside; + if (!(kid->op_type == OP_LIST || + (kid->op_type == OP_NULL && kid->op_targ == OP_LIST))) + return da_old_ck_entersub(aTHX_ o); + last = kLISTOP->op_last; if (!DA_ACTIVE || !(kid->op_flags & OPf_KIDS) || last->op_ppaddr != da_tag_rv2cv) return da_old_ck_entersub(aTHX_ o); @@ -1884,6 +1906,8 @@ PL_check[OP_ENTERSUB] = da_ck_entersub; } CvLVALUE_on(get_cv("Data::Alias::deref", TRUE)); + da_old_peepp = PL_peepp; + PL_peepp = da_peep; } void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/Changes new/Data-Alias-1.16/Changes --- old/Data-Alias-1.12/Changes 2011-02-22 21:47:02.000000000 +0100 +++ new/Data-Alias-1.16/Changes 2011-11-17 23:23:52.000000000 +0100 @@ -1,4 +1,48 @@ -Revision history for Perl extension Data::Alias +version 1.16; 2011-11-17 + + * bugfix: use supported API to put destructor calls on the save stack + (the unsupported way used before was wrong for 64-bit systems on + perl 5.13.1 and later) + + * document the behaviour of "alias return" in more detail + + * convert .cvsignore to .gitignore + +version 1.15; 2011-06-21 + + * port to Perl 5.15.0, where the op type aelemfast has been split into + aelemfast and aelemfast_lex + + * test compatibility with Devel::CallParser + +version 1.14; 2011-04-27 + + * bugfix: never unhook peephole optimiser, because unhooking is liable + to fail if anything else hooked it + + * bugfix: revise check for dorassign opcode to cope with FreeBSD's + mutant Perl 5.8 that has it + + * test POD syntax and coverage + +version 1.13; 2011-04-25 + + * bugfix: prevent the lexer getting confused if the first thing inside + an alias{} block is an open paren + + * bugfix: don't crash if an rv2cv op is built with PL_parser null + + * bugfix: handle variant structure of entersub op which lacks (ex-)list + op as direct child + + * bugfix: squash bogus dtrace-related macro definitions that are picked + up due to defining PERL_CORE + + * switch all pp functions to internal linkage + + * avoid some compiler warnings + + * include .cvsignore file in distribution 1.12 Tue Feb 22 20:47 GMT 2011 - Updated to work with Perl version 5.13.10, where GvGP() and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/MANIFEST new/Data-Alias-1.16/MANIFEST --- old/Data-Alias-1.12/MANIFEST 2007-03-20 15:10:05.000000000 +0100 +++ new/Data-Alias-1.16/MANIFEST 2011-11-17 22:42:28.000000000 +0100 @@ -1,3 +1,4 @@ +.gitignore Alias.xs Changes inc/Module/Install.pm @@ -16,6 +17,7 @@ t/01_deref.t t/03_copy.t t/04_alias_parse.t +t/04_swap.t t/05_alias_parse2.t t/06_alias_scope.t t/07_alias_anon_array.t @@ -39,7 +41,10 @@ t/26_alias_local.t t/28_alias_const.t t/29_alias_dorassign.t +t/devel_callparser.t t/lib/assign.pm t/lib/Test/Builder.pm t/lib/Test/More.pm t/lib/Test/Simple.pm +t/pod_cvg.t +t/pod_syn.t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/META.yml new/Data-Alias-1.16/META.yml --- old/Data-Alias-1.12/META.yml 2011-02-22 21:46:02.000000000 +0100 +++ new/Data-Alias-1.16/META.yml 2011-11-17 23:24:00.000000000 +0100 @@ -16,4 +16,4 @@ - t requires: perl: 5.8.1 -version: 1.12 +version: 1.16 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/README new/Data-Alias-1.16/README --- old/Data-Alias-1.12/README 2011-02-22 21:45:45.000000000 +0100 +++ new/Data-Alias-1.16/README 2011-11-17 23:24:33.000000000 +0100 @@ -1,4 +1,4 @@ -Data::Alias 1.12 - Comprehensive set of aliasing operations +Data::Alias 1.16 - Comprehensive set of aliasing operations System requirements: @@ -318,15 +318,13 @@ replaces operations within the scope of "alias" by aliasing variants. For those familiar with perl's internals: it triggers on a ck_rv2cv - which resolves to the imported "alias" sub, and does a parser hack to - allow the "alias BLOCK" syntax. When the ck_entersub is triggered that - corresponds to it, the op is marked to be found later. The actual work - is done in a peep-hook which is installed on the ck_rv2cv trigger, and - processes the marked entersub and its children, replacing the pp_addrs - with aliasing replacements. The peep hook will also take care of any - subs defined within the lexical (but not dynamical) scope between the - ck_rv2cv and the ck_entersub. When no marked entersubs remain, the - Data::Alias-peeper stops and is deinstalled. + which resolves to the imported "alias" sub, and does a parser hack + to allow the "alias BLOCK" syntax. When the ck_entersub is triggered + that corresponds to it, the op is marked to be found later. The actual + work is done in a peep-hook, which processes the marked entersub and + its children, replacing the pp_addrs with aliasing replacements. The + peep hook will also take care of any subs defined within the lexical + (but not dynamical) scope between the ck_rv2cv and the ck_entersub. KNOWN ISSUES Lexical variables diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/lib/Data/Alias.pm new/Data-Alias-1.16/lib/Data/Alias.pm --- old/Data-Alias-1.12/lib/Data/Alias.pm 2011-02-22 21:45:33.000000000 +0100 +++ new/Data-Alias-1.16/lib/Data/Alias.pm 2011-11-17 23:24:05.000000000 +0100 @@ -5,7 +5,7 @@ use strict; use warnings; -our $VERSION = '1.12'; +our $VERSION = '1.16'; use base 'Exporter'; use base 'DynaLoader'; @@ -288,8 +288,23 @@ =item Returning an alias -Returns aliases from the current C<sub> or C<eval>. Normally this only happens -for lvalue subs, but C<alias return> can be used in any sub. +Returns aliases from the current C<sub> or C<eval>. Normally this only +happens for lvalue subs, but C<alias return> can be used in any sub. +Lvalue subs only work for scalar return values, but C<alias return> +can handle a list of return values. + +A sub call will very often copy the return value(s) immediately after +they have been returned. C<alias return> can't prevent that. To pass +an alias through a sub return and into something else, the call site +must process the return value using an aliasing operation, or at least a +non-copying one. For example, ordinary assignment with the sub call on +the right hand side will copy, but if the call site is in the scope of an +C<alias> pragma then the assignment will instead alias the return value. + +When alias-returning a list of values from a subroutine, each individual +value in the list is aliased. The list as a whole is not aliasable; +it is not an array. At the call site, a list of aliases can be captured +into separate variables or into an array, by an aliasing list assignment. =item Subroutines and evaluations @@ -335,12 +350,11 @@ For those familiar with perl's internals: it triggers on a ck_rv2cv which resolves to the imported C<alias> sub, and does a parser hack to allow the C<alias BLOCK> syntax. When the ck_entersub is triggered that corresponds to -it, the op is marked to be found later. The actual work is done in a peep-hook -which is installed on the ck_rv2cv trigger, and processes the marked entersub +it, the op is marked to be found later. The actual work is done in a peep-hook, +which processes the marked entersub and its children, replacing the pp_addrs with aliasing replacements. The peep hook will also take care of any subs defined within the lexical (but not -dynamical) scope between the ck_rv2cv and the ck_entersub. When no marked -entersubs remain, the Data::Alias-peeper stops and is deinstalled. +dynamical) scope between the ck_rv2cv and the ck_entersub. =head1 KNOWN ISSUES diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/t/04_swap.t new/Data-Alias-1.16/t/04_swap.t --- old/Data-Alias-1.12/t/04_swap.t 1970-01-01 01:00:00.000000000 +0100 +++ new/Data-Alias-1.16/t/04_swap.t 2011-11-17 22:42:27.000000000 +0100 @@ -0,0 +1,19 @@ +use strict; +use warnings qw(FATAL all); +no warnings 'void'; +use lib 'lib'; +use Test::More tests => 4; + +use Data::Alias; + +our $x = "x"; +my $xref = "@{[\$x]}"; +our $y = "y"; +my $yref = "@{[\$y]}"; +alias { ($x, $y) = ($y, $x) }; +is $x, "y"; +is $y, "x"; +is "@{[\$x]}", $yref; +is "@{[\$y]}", $xref; + +1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/t/devel_callparser.t new/Data-Alias-1.16/t/devel_callparser.t --- old/Data-Alias-1.12/t/devel_callparser.t 1970-01-01 01:00:00.000000000 +0100 +++ new/Data-Alias-1.16/t/devel_callparser.t 2011-11-17 22:42:27.000000000 +0100 @@ -0,0 +1,22 @@ +use warnings; +no warnings "void"; +use strict; + +BEGIN { + eval { require Devel::CallParser }; + if($@ ne "") { + require Test::More; + Test::More::plan(skip_all => "Devel::CallParser unavailable"); + } +} + +use Test::More tests => 2; + +use Devel::CallParser (); + +use Data::Alias; + +is alias(42), 42; +is alias{42}, 42; + +1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/t/pod_cvg.t new/Data-Alias-1.16/t/pod_cvg.t --- old/Data-Alias-1.12/t/pod_cvg.t 1970-01-01 01:00:00.000000000 +0100 +++ new/Data-Alias-1.16/t/pod_cvg.t 2011-11-17 22:42:27.000000000 +0100 @@ -0,0 +1,9 @@ +use warnings; +use strict; + +use Test::More; +plan skip_all => "Test::Pod::Coverage not available" + unless eval "use Test::Pod::Coverage; 1"; +Test::Pod::Coverage::all_pod_coverage_ok(); + +1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Data-Alias-1.12/t/pod_syn.t new/Data-Alias-1.16/t/pod_syn.t --- old/Data-Alias-1.12/t/pod_syn.t 1970-01-01 01:00:00.000000000 +0100 +++ new/Data-Alias-1.16/t/pod_syn.t 2011-11-17 22:42:27.000000000 +0100 @@ -0,0 +1,8 @@ +use warnings; +use strict; + +use Test::More; +plan skip_all => "Test::Pod not available" unless eval "use Test::Pod 1.00; 1"; +Test::Pod::all_pod_files_ok(); + +1; -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org