This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
sassign is wrongly declared as BASEOP, not BINOP.
authorReini Urban <rurban@cpanel.net>
Thu, 29 Sep 2016 13:30:27 +0000 (14:30 +0100)
committerDavid Mitchell <davem@iabyn.com>
Thu, 29 Sep 2016 16:01:15 +0000 (17:01 +0100)
commit1257c0814cb385a65f4175daa8be8b51e151e4ec
treec2c9a651efdbebddea50f90c54bec0b4d447b071
parent614f2ce4f49414577dec90f8c9bd3f0404bf2ebf
sassign is wrongly declared as BASEOP, not BINOP.

[ DAPM:
  To clarify: OP_SASSIGN is always allocated as a BINOP (or occasionally
  as a UNOP - see the next commit), but is listed as a BASEOP in
  regen/opcodes. Because of this, various bits of code that rely on e.g.
  PL_opargs[] have to be special-cased for OP_SASSIGN. This commit changes
  the entry in regen/opcodes to list it as BINOP, and removes the
  special-casing.
  I've also added a temporary workaround marked by XXX to make the commit
  work under PERL_OP_PARENT, which is the default now. This will be
  removed in a couple if commits' time.
]

This was wrong from the very beginning:
added with 79072805bf lwall perl 5.0 alpha 2 1993 with class s, not 0,
but missing the 2 S S args, which are present in aassign.
Changed to BASEOP with db173bac9b6de7d by mbeattie in 1997.
The '# sassign is special-cased for op class' comment is suspicious.

Fix it in ck_sassign also, it is created as BINOP in newASSIGNOP.
In 202206897 dapm 2014 complained about it also. Remove some special
cases where it should be a BINOP but was not.
op.c
opcode.h
regen/opcodes