In perl.git, the branch sprout/lvref has been created <http://perl5.git.perl.org/perl.git/commitdiff/4aa0ef96757f594b2200b1374e05a98412abc307?hp=0000000000000000000000000000000000000000>
at 4aa0ef96757f594b2200b1374e05a98412abc307 (commit) - Log ----------------------------------------------------------------- commit 4aa0ef96757f594b2200b1374e05a98412abc307 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Oct 3 19:50:45 2014 -0700 Handle state vars correctly in ref assignment Only \state(@_) was handling this correctly, as pp_lvavref calls pp_padav. M lib/B/Op_private.pm M op.c M opcode.h M pp.c M regen/op_private M t/op/lvref.t commit 6aa51e3432bfd21920145f782c7b1f1a08abffed Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Oct 3 16:33:55 2014 -0700 lvref.t: Tests for \my assignment and scope exit M t/op/lvref.t commit a433e7a55868054bc147ead8bd99c6b6d3509845 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Oct 3 12:40:23 2014 -0700 Rework lvref.t foreach tests Remove the to-do marker. Add tests for package vars, too. Redo the \my &a test. Iâve decided not to bother with the âmy &aâ syntax for now (if at all). It is problematic and needs discussion. (If âmy &aâ is allowed in foreach, then it should be allowed else- where, but âmy &a;â would call a stub.) M t/op/lvref.t commit d1e5dad7ad5819aa7db1c7c4e8fae047dfb02c9c Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Oct 3 12:29:35 2014 -0700 Get foreach \&foo working Previously these would crash. Usually, &foo is wrapped in an entersub op which gets converted to rv2cv when refgen applies lvalue context. In foreach \&foo, there is no need for us to go the entersub route; rather we pass the original rv2cv op directly to refgen without the entersub wrapping. So the resulting op tree is different. S_lvref was not expecting this alternate op tree. M op.c commit 1be322026870f479443186131cb3753ef19d883a Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Oct 2 22:38:27 2014 -0700 foreach \$var Some passing tests are still marked to-do. We need more tests still. M cop.h M mg.c M mg.h M op.c M perly.act M perly.h M perly.tab M perly.y M pp.c M pp_ctl.c M pp_hot.c commit d76b39a22e21166eb986b83f17f529338df38993 Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Oct 2 21:49:28 2014 -0700 Add OPpLVREF_ITER flag An lvalue reference used as an iterator variable will be implemented using an lvref op with this flag set. M lib/B/Op_private.pm M opcode.h M regen/op_private commit 7c546f50175784bc9e7a88e9e28c7abb33d9d21c Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Oct 1 20:18:06 2014 -0700 Fix err message for $cond ? \bad : ... = ... The error message code in S_lvref was assuming that it only handled list assignment (which was originally the case), but $condition ? \pos : whatever = ... goes through that same code path, and that is a scalar assignment. So pass the assignment type through to S_lvref. M op.c M t/op/lvref.t commit 630c69995c15059aed6fdb9819058ea2abf4eb41 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Oct 1 20:00:10 2014 -0700 Subroutine reference assignment M op.c M t/op/lvref.t commit 493f0c676f57720e491de998e4c623f46dd20a42 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Oct 1 18:15:16 2014 -0700 lvref.t: Repeat bad ref tests with list assignment List assignment goes through a different code path. The errors come from magic_setlvref in that case, not pp_refassign. M t/op/lvref.t commit b80091aa1fcc7d3fc0b924148cd9cb2598ca4e3c Author: Father Chrysostomos <spr...@cpan.org> Date: Tue Sep 30 22:28:48 2014 -0700 lvref.t: do-block err msg is no longer to-do The previous commitâs rearrangement of things fixed this, too. M t/op/lvref.t commit 8f862c6656c789ea51f5a4fb2116d056eaed0dde Author: Father Chrysostomos <spr...@cpan.org> Date: Tue Sep 30 22:20:56 2014 -0700 Make \( ?: ) assignment work When I first implemented list assignment to lvalue references, I thought I could simply modify the kids of the refgen op (\) in one spot. But things like ?: make it necessary to do this recursively. So all that code for turning thingies into lvrefs has been moved into a separate function patterned after op_lvalue but handling only the lvref cases. (I thought about combining it with op_lvalueâs switch statement, but that would require âif(type == OP_LVREF) goto nomod;â too many times, which would be harder to maintain.) M op.c M t/op/lvref.t commit d8ec1a1135a5687b3ea3f7469329275b65ef7206 Author: Father Chrysostomos <spr...@cpan.org> Date: Tue Sep 30 10:28:32 2014 -0700 lvref.t: Remove unnecessary evals M t/op/lvref.t commit 7425377ebf501b4b80e84ebb9efaf2256a7f649e Author: Father Chrysostomos <spr...@cpan.org> Date: Tue Sep 30 10:27:34 2014 -0700 Get basic $cond ? \$a : \$b = ... working When I started working on lvalue references, I envisioned having all scalar assignments pass through pp_refassign. A refassign op repre- sents the initial backslash on the lhs *and* the equals sign. For cases like this, there is no single refgen on the lhs. It turns out that the approach I am using for list assignments (where the lhs becomes an lvref op that returns a magic scalar that does the aliasing when assigned to) is the easiest way to get this working, too. All this commit has to do is allow âsassignâ lvalue context to apply to srefgen and fix the completely broken to-do tests. (I have a ten- dency to write broken to-do tests, as I have no way of testing them at the time.) M op.c M t/op/lvref.t commit 904d8b276c140d765085097211cab2ce234b0ab9 Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Sep 29 22:21:21 2014 -0700 Assignment to \(@array) This is a slurpy lvalue that gobbles up all the rhs elements, which are expected to be references. So \(@a)=\(@b) makes @a share the same elements as @b. We implement this by pushing a null on to the stack as a special marker that pp_aassign will recognise. I decided to change the wording for the \local(@a)=... error slightly, from what my to-do tests had. Some of the other to-do tests were badly written and had to be fixed up a bit. M op.c M pp.c M pp_hot.c M t/op/lvref.t commit cb26e12b89774b69b3587c7f4f966545891af6c7 Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Sep 29 22:23:22 2014 -0700 lvavref needs OPpLVAL_INTRO and OPpPAD_STATE M lib/B/Op_private.pm M opcode.h M regen/op_private commit 221d6b3bacf48566feb38a58003dfefea5b2a6af Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Sep 29 21:43:53 2014 -0700 Add lvavref op type This will be used for slurpy array ref assignments. \(@a) = \(@b) will make @a share the same elements as @b. M ext/Opcode/Opcode.pm M lib/B/Op_private.pm M opcode.h M opnames.h M pp.c M pp_proto.h M regen/opcodes commit 95fbe6319e317608c1b4958b5be6a2d7d8fad7d6 Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Sep 29 21:40:28 2014 -0700 lvref is actually a baseop/unop When used for pad vars, it is childless. M opcode.h M regen/opcodes commit 4fff66428d37aab6b2b245d66b5d75638f0d61f9 Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Sep 29 18:03:57 2014 -0700 List assignment to array and hash refs (\@a,\%h)=... works, but \(@a) and \(%h) do not. \(%h) correctly croaks. (\local @a, \local %h)=... also works. M mg.c M op.c M pp.c M t/op/lvref.t commit 4edbfca54710ce5856e9e0e4d1f1051b804edc05 Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Sep 29 15:48:24 2014 -0700 Renumber OPpLVREF_TYPE to avoid conflicting with OPpPAD_STATE. M lib/B/Op_private.pm M opcode.h M regen/op_private commit 805548ef3d46a9af1a72c39b0af058c065317825 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 28 22:17:27 2014 -0700 Assignment to \local @array and \local %hash Doesnât work with lhs parentheses yet. M pp.c M t/op/lvref.t commit cfa90c6057da90a78e6acd23e86f1a79965a7d57 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 28 11:45:57 2014 -0700 lvref.t: Tests for localised arrays and hashes M t/op/lvref.t commit a42089227e290f92afd2b7d152b7cf21f2bb776f Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 28 00:53:19 2014 -0700 lvref.t: Test assigning non-array to array Same with hashes. M t/op/lvref.t commit eabd215586603f640f1149dfa9acfad359a45334 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 28 00:52:45 2014 -0700 Simple \@array and \%hash assignment Parentheses do not work yet. Neither does local. M op.c M pp.c M t/op/lvref.t commit 00ece86dd8401abed31580fc69f6849487779d79 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 28 00:42:09 2014 -0700 lvref.t: To-do tests for hashes Concerning the error message tests, âparenthesized hashâ would be more helpful than âhash dereferenceâ or âprivate hashâ (as would be provided by OP_DESC), as %foo doesnât look like a hash dereference and âprivate hashâ suggests that \%foo= wonât work, whereas it will. M t/op/lvref.t commit 44352021782383005f14bc002a19cc25ff151efb Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 22:03:25 2014 -0700 Add priv flags for the type of lvalue ref M lib/B/Op_private.pm M opcode.h M regen/op_private commit 5d72e894544b61f4e01ed4cdc273f18aa2aacff0 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 18:44:57 2014 -0700 lvref.t: To-do tests for array ref assignment The evals are temporary. Some of the tests donât even make sense with the evals; they are more placeholders and reminders for now that tests. M t/op/lvref.t commit e408aa16ebb3d80ea535fecd473a18d8f6f0d74a Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 14:17:09 2014 -0700 pp.c: Fold SvIV into S_localise_aelem_lval All three callers were doing SvIV, so we can do it in one spot. M pp.c commit 5f61a10bf32cc2288a5fb0275f111640c91f7ee2 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 14:15:50 2014 -0700 pp.c: Some branch prediction hints M pp.c commit bd68528051f3c1769b09cdadebfb812931c7a9ac Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 14:15:00 2014 -0700 Assignment to hash element refs M mg.c M op.c M pp.c M t/op/lvref.t commit 68ccdf3c10664e8b4e8207e12e2a391094687260 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 11:07:35 2014 -0700 pp.c: Consolidate some local aelem code In the process, avoid a redundant av_fetch for \local$a[0]= and \local($a[0])=. M pp.c commit 08ed8787340cf992fbbdd7194772c396b7b9252a Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 10:49:46 2014 -0700 pp.c:pp_lvrefslice: Unused var M pp.c commit f52bea7a91ea0bebcf15ba5b7066b80b19d7533a Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 27 10:49:24 2014 -0700 \local $a[$ix] assignment M pp.c M t/op/lvref.t commit cde8439711a304a9a38e6fe541daf9a88e59cf6d Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Sep 26 10:40:19 2014 -0700 \@array[@slice] assignment plus changes to the aelem tests to check rhs context. I did \local @a[@s] at the same time, since I was practically copying and pasting code from aslice (ok, not quite). M op.c M pp.c M t/op/lvref.t commit 237371ba6b5c5aef73173505cdcd1a1a3294b78a Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Sep 25 22:13:33 2014 -0700 pp.c: Dodge compiler warning M pp.c commit d246725e3b80ad87a83339d2a6961e8e9fce986a Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Sep 25 22:10:39 2014 -0700 lvrefslice gets OPpLVAL_INTRO M lib/B/Op_private.pm M opcode.h M regen/op_private commit 6462d26008875ba7d1a71da84dbef7be27798b54 Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Sep 25 22:08:15 2014 -0700 Add lvrefslice op type M ext/Opcode/Opcode.pm M opcode.h M opnames.h M pp.c M pp_proto.h M regen/opcodes commit a0ef06fb8bbe460f60becef7987db19a763cff36 Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Sep 25 20:34:11 2014 -0700 Assignment to array elem refs M lib/B/Op_private.pm M mg.c M op.c M opcode.h M pp.c M regen/op_private M t/op/lvref.t commit 8cceb722f82e76abb98a30e4e717e6365e42eade Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Sep 25 16:10:14 2014 -0700 \local $scalar assignment M op.c M pp.c M t/op/lvref.t commit 52fa1c7ccebc68027fb6025742911e0744b21cbf Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Sep 25 13:10:22 2014 -0700 Make \($x,$y) assignment work This applies to \ with multiple kids (refgen). Up till now, op_lvalue_flags only handled srefgen (single refgen). Before I was converting srefgen to lvref and nulling the kid op: srefgen ex-list rv2sv gv became: lvref ex-list ex-rv2sv gv Now Iâm converting the kid instead and nulling the srefgen: ex-srefgen ex-list lvref gv so that the same code can apply to refgen: refgen ex-list pushmark rv2sv gv rv2sv gv becomes ex-refgen ex-list ex-pushmark lvref gv lvref gv M op.c M t/op/lvref.t M t/op/ref.t commit b957ad614c7d61b8792b58135dd0eaaf60fb2fb7 Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Sep 25 08:19:13 2014 -0700 List assignment to lexical scalar refs \($x,$y)=... does not work yet, but \(my $x) and (\$x, \$y) do. M lib/B/Op_private.pm M mg.c M op.c M opcode.h M pp.c M regen/op_private M t/op/lvref.t commit 07ca0bf5ff625065d376226e9b8bfdea402ae658 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 22:13:01 2014 -0700 Fix assertion failure with ... ? \$a : \$b = ... Because both branches have a srefgen, this was treated as a scalar reference assignment, which is usually handled by refassign. But refassign expects the thing on the lhs to be srefgen, not a cond_expr. The logic for propagating the assignment type must not propagate the âASSIGN_REFâ type outward. Only list context propagates outward. Eventually, this will be handled by sassign and the cond_expr will have lvref kids. (Itâs too complicated for refassign, which is the optimised form that combines \ and = into one op.) For now, this commit just fixes the assertion failure without making this type of assignment work yet. M op.c M t/op/lvref.t commit 275c1ed87929ebd9950860af9686a0f65f7722ad Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 16:21:03 2014 -0700 op.c: Apply spair optimisation to \% \@ \& The âspairâ (scalar/single pair) optimisation applies to a few operat- ors for which there are actually pairs of ops, one for scalars or sin- gle items, the other for lists. refgen is one of them. When taking references, hashes, arrays and subroutines are single items, just like scalars, so they can go through the âsingleâ code and benefit, too. refassign will also benefit from this, as \@a = [] (not yet imple- mented) should provide scalar context to the right-hand side, and this avoids the need for special cases (because srefgen with the initial s provides scalar context). (This optimisation could have applied to aggregates passed to cho(m)p, but it results in incorrect messages like âUninitialized value in sca- lar chompâ for chomp @_, so Iâve left it for now.) M op.c M t/lib/warnings/op commit 17b3edd5d9657d5827d550d623d48f2bc65274e0 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 28 22:50:57 2014 -0700 Use âCanât modify reference to...â for refassign, too M op.c M t/op/lvref.t commit 25f1032c51c5d0d6f3b7ad6e3971f26516817fc1 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 14:22:38 2014 -0700 op.c: diag_listed_as for âCan't modify refâ M op.c commit 13b03b0153bee9b408a5956afd0feb34e1a38c4e Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 14:20:48 2014 -0700 lvref.t: Test âCan't modify reference to...â M t/op/lvref.t commit 8669ba3db4315a148760c44da2fa442c00963106 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 13:22:49 2014 -0700 List assignment to package scalar ref \ on the lhs returns a special magical scalar with set-magic that does the aliasing. I considered having a separate abind op that would be like aassign, but different. However, I realised that for ($x, \$y) = ... to work it would have to duplicate all of aassign. So I went with the sim- pler magic implementation. M mg.c M op.c M pp.c M t/op/lvref.t commit ddb0effeb5ad929a99a00d8ecd4e4aab721b5448 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 01:45:47 2014 -0700 Capitalise magic descriptions consistently M mg_raw.h M mg_vtable.h M pod/perlguts.pod M regen/mg_vtable.pl commit 37c710cefab12461c14ec214ce0dfbaf6d6284f9 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 01:42:30 2014 -0700 Add lvref magic type I just couldnât resist using the backslash for the character, even though I had to tweak mg_vtable.pl to make it work. M embed.fnc M embed.h M mg.c M mg_names.c M mg_raw.h M mg_vtable.h M pod/perlguts.pod M proto.h M regen/mg_vtable.pl commit d69844703a041eb4a184fe924482b227637215f3 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 00:58:23 2014 -0700 Add lvref op type M ext/Opcode/Opcode.pm M lib/B/Op_private.pm M opcode.h M opnames.h M pp.c M pp_proto.h M regen/opcode.pl M regen/opcodes commit 192674c26fef529dd51ce5458b6b7ea45c9019a3 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Sep 24 00:19:33 2014 -0700 lvref.t: More parenthesized scalar ref tests These tests are actually nonsensical with the evals, but they currently cause syntax errors. Ultimately they are placeholders and reminders, so it doesnât matter. M t/op/lvref.t commit bfe57aa5c048f4541503c8d967c727846e3bf13f Author: Father Chrysostomos <spr...@cpan.org> Date: Tue Sep 23 22:33:09 2014 -0700 lvref.t: Some assignments with mixed lhs M t/op/lvref.t commit c46c5229b50dcde369badcd270093a829a528f02 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 23:11:32 2014 -0700 Implement \my $x = ... M lib/B/Op_private.pm M op.c M opcode.h M pp.c M regen/op_private M t/op/lvref.t commit e0d2741c001dd93a87d11653de8a1fee66e29155 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 16:04:23 2014 -0700 lvref.t: Test \$foo = \*bar M t/op/lvref.t commit 1b07621caedb9de7a73cc15706c1ad866dfb18c4 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 15:04:20 2014 -0700 lvref.t: To-do tests for foreach \ M t/op/lvref.t commit 32bdc0b0addb2baacd140db64ae1b5c6d3f11f60 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 14:58:15 2014 -0700 lvret.t: To-do tests for \local $scalar= M t/op/lvref.t commit 7f71a81d3c3c55996150221c3096c2a0974ec4a8 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 14:43:37 2014 -0700 When making lex alias, donât free old var too soon It could be exactly the same variable, and the reference on the rhs could be weak: use feature ":all"; use Scalar::Util 'weaken'; my $a; weaken($r = \$a); \$a = $r; __END__ Lvalue references are experimental at - line 5. Segmentation fault: 11 M pp.c M t/op/lvref.t commit 98a6347fda94129e5c8732f9beeef6a72be5ea0e Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 14:23:00 2014 -0700 lvref.t: To-do test for PADSTALE handling M t/op/lvref.t commit 4976506bf460c481ebc2e9ee012602cab24a582b Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 13:56:01 2014 -0700 Simple package scalar lvalue refs \$::x = ... works, but not \local $x yet. M embed.fnc M embed.h M op.c M pp.c M proto.h M sv.c M t/op/lvref.t commit 350a50ab6f865eecfd67ec64d79c1f6f323b6983 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 12:29:30 2014 -0700 lvref.t: Tests for error massages M t/op/lvref.t commit da4eea989d57de7412682828e0bf6c312d6648d3 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 11:19:41 2014 -0700 lvref.t: Remove to-do and eval from passing test This one passing test was failing inside the eval because closures are not yet supported. (Thatâs why I added explicit closure tests in the previous commit.) M t/op/lvref.t commit 4edb9469ecee544bf5eeeaefb922e1806c2e9d56 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 11:16:33 2014 -0700 lvref.t: To-do tests for closures M t/op/lvref.t commit dd8a28a57636d11247121213112376adcd7ee5ee Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 21 00:22:41 2014 -0700 Document lvalue ref diagnostics Also, use âa SCALAR referenceâ rather than âa scalar referenceâ, to match the style used elsewhere. M pod/perldiag.pod M pp.c commit f7e83f45d94ad6a0a30dbb60f9d419ced39b0836 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 14:49:04 2014 -0700 First stab at lexical scalar aliases No \my$x= yet. Only my $x; \$x =.... It does not work properly with variables closed over from outside; hence, all the to-do tests fail still, since they do the assign- ment in evals. But this much works: $ ./miniperl -Ilib -Mfeature=:all -e 'my $m; \$m = \$n; warn \$m; warn \$n' Lvalue references are experimental at -e line 1. SCALAR(0x7fa04b805510) at -e line 1. SCALAR(0x7fa04b805510) at -e line 1. M embed.fnc M embed.h M op.c M opcode.h M pp.c M proto.h M regen/opcodes M scope.c commit 82a311265bd1c3e06412357d0763b38ed6169daa Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 23:33:26 2014 -0700 op.c: In newBINOP, set up op_last before CHECKOP Set up op_last pointers in newBINOP before calling the op-specific ck_* routine. That way, since this op sub-tree is well-formed from the outset, we donât need as much fix-up code elsewhere to account for the case where the binop has been embedded inside a larger op tree (state var ini- tialisation). The repetition operator is an odd bird. If the lhs is a list of one item, it is effectively an unop, though still of class binop. Though op_last would usually point to the last immediate child, it ended up null instead. B::Deparse was written to expect that, so letâs keep it that way by setting it to null in ck_repeat, now that the last = first->sibling assignment in newBINOP (which used to do it) happens earlier. M op.c commit 6c9748f1155bf1bbf2c64d621c648479b3d5a303 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 13:48:48 2014 -0700 Increase $Opcode::VERSION to 1.29 M ext/Opcode/Opcode.pm commit 7c617d49fc57cbbb84ce205dbc2b96cbbd96a42f Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 13:47:58 2014 -0700 Add refassign op type M ext/Opcode/Opcode.pm M lib/B/Op_private.pm M opcode.h M opnames.h M pp.c M pp_proto.h M regen/opcodes commit 6a5d8c16d7da4d8b5caadddc709674e1ab07bd37 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 13:27:47 2014 -0700 op.c:ck_spair: Remove redundant checks Neither the av nor the hv ops have the OA_RETSCALAR flag, so these checks are unreachable. These checks go all the way back to a0d0e21e (perl 5.000). M op.c commit 876cebd167daebb084a81bf49c76966c43e3831d Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 11:46:14 2014 -0700 To-do tests for scalar lvalue refs M MANIFEST A t/op/lvref.t commit 96b22ae7d4ca91ed207bdaa1cdff2855003d6f83 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 11:16:08 2014 -0700 Increase $warnings::VERSION to 1.27 M lib/warnings.pm M regen/warnings.pl commit b68eb770b25ccc12eac97ff64e69c648d2dbcc4d Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 11:15:18 2014 -0700 Add experimental::lvalue_refs warnings category M lib/warnings.pm M regen/warnings.pl M warnings.h commit cc9acdbf6ccf3c0aa29ac4232e3b0aa1da77dc34 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 11:13:58 2014 -0700 Increase $feature::VERSION to 1.38 M lib/feature.pm M regen/feature.pl commit d8a43ee1d08d673965b531c0100ac42270342d52 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Sep 20 11:12:37 2014 -0700 Add lvalue_refs feature feature M feature.h M lib/feature.pm M regen/feature.pl ----------------------------------------------------------------------- -- Perl5 Master Repository