In perl.git, the branch sprout/lvref has been created

<http://perl5.git.perl.org/perl.git/commitdiff/7e8c5c94ad6be3f12bf06cf057c05e1f4974e2e9?hp=0000000000000000000000000000000000000000>

        at  7e8c5c94ad6be3f12bf06cf057c05e1f4974e2e9 (commit)

- Log -----------------------------------------------------------------
commit 7e8c5c94ad6be3f12bf06cf057c05e1f4974e2e9
Author: Father Chrysostomos <[email protected]>
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 8c95502998ee81564c5d17ab978950cae6ad5f6a
Author: Father Chrysostomos <[email protected]>
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 f234dbfa0fab29a5821695251fac890db4952907
Author: Father Chrysostomos <[email protected]>
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 a8afacd63097c32dd9954fb6f3461d2d8ba30260
Author: Father Chrysostomos <[email protected]>
Date:   Wed Oct 1 20:00:10 2014 -0700

    Subroutine reference assignment

M       op.c
M       t/op/lvref.t

commit 988b260756968449d0f3ce49b6a7abf369287dbc
Author: Father Chrysostomos <[email protected]>
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 591c2d0091ccd80005ef813764b838a39b87897f
Author: Father Chrysostomos <[email protected]>
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 ef9cfa281595a9d8d16ffd03c58fc051875bdec4
Author: Father Chrysostomos <[email protected]>
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 7d50c498cd1d479554f20094d600242953b0b78c
Author: Father Chrysostomos <[email protected]>
Date:   Tue Sep 30 10:28:32 2014 -0700

    lvref.t: Remove unnecessary evals

M       t/op/lvref.t

commit 7a1bf3e41d76269f8a939f2002f929c7ec42ce91
Author: Father Chrysostomos <[email protected]>
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 7ae9a458104c2064501d0e77e2d1e8ecbff11e30
Author: Father Chrysostomos <[email protected]>
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       regen/opcodes
M       t/op/lvref.t

commit 13e5ae16dc7b09cf314230ba236dc9bdee6f696e
Author: Father Chrysostomos <[email protected]>
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 5b318ccc85572aa922f32be06ebd8ad6b4f4113e
Author: Father Chrysostomos <[email protected]>
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

commit c9f221ea126a9cbe599e1fe847867032a492d3b1
Author: Father Chrysostomos <[email protected]>
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 42257b7b2bef320ae4539f8c75e241fc806172a2
Author: Father Chrysostomos <[email protected]>
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 7f436c79e37cba8165fc25372affece9203554a9
Author: Father Chrysostomos <[email protected]>
Date:   Mon Sep 29 16:10:44 2014 -0700

    Fix up Peek.t for magic flag renumbering

M       ext/Devel-Peek/t/Peek.t

commit 235d39d3166eaba6481c74ebd95d7b2f9afd46d8
Author: Father Chrysostomos <[email protected]>
Date:   Mon Sep 29 15:48:24 2014 -0700

    Renumber OPpLVREF_TYPE
    
    so it can be copied to mg_flags without conflicting with the generic
    magic flags.  The previous commit made room in mg_flags for this.

M       lib/B/Op_private.pm
M       mg.h
M       opcode.h
M       regen/op_private

commit 7fc1898addad12347f61dca5369e7bd6141859d2
Author: Father Chrysostomos <[email protected]>
Date:   Mon Sep 29 15:45:21 2014 -0700

    mg.h: Renumber magic flags
    
    Put all the generic flags in the lower bits and the private flags in
    the higher bits.
    
    This makes it easier to understand what’s what and also provides more
    wiggle room for magic types that need contiguous bits available.

M       mg.h

commit 5e2d09799e79f958f3baa6766a034ce7f31947a2
Author: Father Chrysostomos <[email protected]>
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 a9e4ac12a2e5fd1e2ec619d3382397a83dc9a2fa
Author: Father Chrysostomos <[email protected]>
Date:   Sun Sep 28 11:45:57 2014 -0700

    lvref.t: Tests for localised arrays and hashes

M       t/op/lvref.t

commit 84093333db25d6e08b0a3198ff2a4edfaca894fa
Author: Father Chrysostomos <[email protected]>
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 fcca3a990cf0e5f6a315a7411d1ce21745062143
Author: Father Chrysostomos <[email protected]>
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 5b9cb7b7c0b70e8ea6508b20165cb0d91daad2cc
Author: Father Chrysostomos <[email protected]>
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 951b746c5b46514c53271f23a15981d9dfe96a3e
Author: Father Chrysostomos <[email protected]>
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 c343224e4c49bc5654bb4c85285fb1ab174fc563
Author: Father Chrysostomos <[email protected]>
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 ddf3435b7115c75a4f70260f77a4c78769fff367
Author: Father Chrysostomos <[email protected]>
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 3760ca3f8be7e4112617315a1f237c3555b32482
Author: Father Chrysostomos <[email protected]>
Date:   Sat Sep 27 14:15:50 2014 -0700

    pp.c: Some branch prediction hints

M       pp.c

commit adcf5594a508d0584f1dbb4922a8db204ac33423
Author: Father Chrysostomos <[email protected]>
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 a1b7e4274b862367322b7bc9f1b37b3443abe993
Author: Father Chrysostomos <[email protected]>
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 14e96065b0a44381fcd45328f999de4bd67e3d49
Author: Father Chrysostomos <[email protected]>
Date:   Sat Sep 27 10:49:46 2014 -0700

    pp.c:pp_lvrefslice: Unused var

M       pp.c

commit 579c29d21d23209e3fb70ff4020b8f1a272c6acb
Author: Father Chrysostomos <[email protected]>
Date:   Sat Sep 27 10:49:24 2014 -0700

    \local $a[$ix] assignment

M       pp.c
M       t/op/lvref.t

commit af9ee262418d0f533fe28219dbecf0d11cdfa7c8
Author: Father Chrysostomos <[email protected]>
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 3d75ba44058d868d5c14aacb850b3c60da5badf7
Author: Father Chrysostomos <[email protected]>
Date:   Thu Sep 25 22:13:33 2014 -0700

    pp.c: Dodge compiler warning

M       pp.c

commit 9c88dc85d17b1ac9dffd343b97c85833a3cb8100
Author: Father Chrysostomos <[email protected]>
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 851a5c86c16bb5e3767ce872239869c3bbf913c5
Author: Father Chrysostomos <[email protected]>
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 437011555ef3b7745e2abee1bb1a76b5fb3e64f4
Author: Father Chrysostomos <[email protected]>
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 819e87deb45f684706e91db42712800733d38a27
Author: Father Chrysostomos <[email protected]>
Date:   Thu Sep 25 16:10:14 2014 -0700

    \local $scalar assignment

M       op.c
M       pp.c
M       t/op/lvref.t

commit ff120e98bf1a47d9a4194faf4d463647dfa09197
Author: Father Chrysostomos <[email protected]>
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 097b28f8dae39fa51ca68d02ddc3766c31b7a586
Author: Father Chrysostomos <[email protected]>
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 b6937be702a44b09b65b877ad5d044b89d0e7670
Author: Father Chrysostomos <[email protected]>
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 1738d8c71e53397a092b4766b574501d7bc4b7f4
Author: Father Chrysostomos <[email protected]>
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 1b3290bf37543bf3e07ffcce44493178bec111d9
Author: Father Chrysostomos <[email protected]>
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 cb90eb2a2bf8ed4047a6292fe1b4d4d64074dd11
Author: Father Chrysostomos <[email protected]>
Date:   Wed Sep 24 14:22:38 2014 -0700

    op.c: diag_listed_as for ‘Can't modify ref’

M       op.c

commit 8088e2d3aa890c1f5fbf6712b6f049a21f606343
Author: Father Chrysostomos <[email protected]>
Date:   Wed Sep 24 14:20:48 2014 -0700

    lvref.t: Test ‘Can't modify reference to...’

M       t/op/lvref.t

commit 98fdf0002ff26a233bf1ea433d4ab90c022463c1
Author: Father Chrysostomos <[email protected]>
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 35a96ec716d492379d4c6edcc70bb9784af2b4ce
Author: Father Chrysostomos <[email protected]>
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 aac0c2c4eda8f383d81c78e99465de408a253636
Author: Father Chrysostomos <[email protected]>
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 5999c678eeaabc7173438b7a498a9cdba1dd8d48
Author: Father Chrysostomos <[email protected]>
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 f3426e26fdbaab4c2907496c72a8a1587df3cd96
Author: Father Chrysostomos <[email protected]>
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 a163fe33d49b5dec616371b1a9bf355cec88276f
Author: Father Chrysostomos <[email protected]>
Date:   Tue Sep 23 22:33:09 2014 -0700

    lvref.t: Some assignments with mixed lhs

M       t/op/lvref.t

commit 4a30524973f58028c3c8053209b2896ac11a586a
Author: Father Chrysostomos <[email protected]>
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 cf63ceebca3e0fa132b4a0557291ea0d02f04357
Author: Father Chrysostomos <[email protected]>
Date:   Sun Sep 21 16:04:23 2014 -0700

    lvref.t: Test \$foo = \*bar

M       t/op/lvref.t

commit 4ee5b1112fedfb64d7c0c6ab062311a4217a5a81
Author: Father Chrysostomos <[email protected]>
Date:   Sun Sep 21 15:04:20 2014 -0700

    lvref.t: To-do tests for foreach \

M       t/op/lvref.t

commit 2036bc96c3c45358f4493f23b74e667baa38ec67
Author: Father Chrysostomos <[email protected]>
Date:   Sun Sep 21 14:58:15 2014 -0700

    lvret.t: To-do tests for \local $scalar=

M       t/op/lvref.t

commit 37605c058eea598b480e9f4a79f803ad060a4bbc
Author: Father Chrysostomos <[email protected]>
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 a1fb1fd6e127da0778f8795cf80d5c72aa1e2e54
Author: Father Chrysostomos <[email protected]>
Date:   Sun Sep 21 14:23:00 2014 -0700

    lvref.t: To-do test for PADSTALE handling

M       t/op/lvref.t

commit b4b3acb1874f95bcabd861c13750b9e721c80d41
Author: Father Chrysostomos <[email protected]>
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 c2b09c5117d4c39b9bbb7db6ed13f6920952f971
Author: Father Chrysostomos <[email protected]>
Date:   Sun Sep 21 12:29:30 2014 -0700

    lvref.t: Tests for error massages

M       t/op/lvref.t

commit 24199d4b9c60cd4cbafe216591009e2c9d74dd7c
Author: Father Chrysostomos <[email protected]>
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 a5cc2bec62ab9ee9be5586cf49cb933d1152bded
Author: Father Chrysostomos <[email protected]>
Date:   Sun Sep 21 11:16:33 2014 -0700

    lvref.t: To-do tests for closures

M       t/op/lvref.t

commit ef39588a03d8e422ab0d29bec494559794d52b2b
Author: Father Chrysostomos <[email protected]>
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 9dc52a10d098a9e07762a6cd677a46ee70257e15
Author: Father Chrysostomos <[email protected]>
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 5122562fc7aff29102b78a82bdc7ef40e268556f
Author: Father Chrysostomos <[email protected]>
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 71757247f303717e6d7c5660eb3053c956947a94
Author: Father Chrysostomos <[email protected]>
Date:   Sat Sep 20 13:48:48 2014 -0700

    Increase $Opcode::VERSION to 1.29

M       ext/Opcode/Opcode.pm

commit 817929e844bd938ab27bc2172f9be9846f69f635
Author: Father Chrysostomos <[email protected]>
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 ae65dae14025059a608a1317658a072574842697
Author: Father Chrysostomos <[email protected]>
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 09da7ee5524dc134e23459a6b0907e9a3fa6b105
Author: Father Chrysostomos <[email protected]>
Date:   Sat Sep 20 11:46:14 2014 -0700

    To-do tests for scalar lvalue refs

M       MANIFEST
A       t/op/lvref.t

commit d14de8462f3128d6e5ff1b6877da3ce94e420e55
Author: Father Chrysostomos <[email protected]>
Date:   Sat Sep 20 11:16:08 2014 -0700

    Increase $warnings::VERSION to 1.27

M       lib/warnings.pm
M       regen/warnings.pl

commit bb8d95538f7f26e7471e6b800bcab6bacef64767
Author: Father Chrysostomos <[email protected]>
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 fbd793f7b239e854e35e679aad72fc1a55053d87
Author: Father Chrysostomos <[email protected]>
Date:   Sat Sep 20 11:13:58 2014 -0700

    Increase $feature::VERSION to 1.38

M       lib/feature.pm
M       regen/feature.pl

commit c4f60aaf9b779d941cb438853e305fad8e691b4f
Author: Father Chrysostomos <[email protected]>
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

Reply via email to