[Merge] Constants, inlined subs, TARGs, ...
authorFather Chrysostomos <sprout@cpan.org>
Fri, 26 Jul 2013 06:50:01 +0000 (23:50 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 26 Jul 2013 06:50:01 +0000 (23:50 -0700)
commit9e4ab805355b2aa3838747a3ac9664d6590aa006
tree8d0a7a9f9264bf54846dd686ab8a0896f5dbf1b6
parent6f7e3040169a31244d7459c4fa0492602bc514df
parentf5b4a4128bbf937774d10d32dbddaae7fb2274fc
[Merge] Constants, inlined subs, TARGs, ...

This branch fixes many inconsistencies in the way constants, inlinable
subroutines, and operator return values (TARGs) are handled.

• Constant folding no longer causes operators to return read-only sca-
  lars that would otherwise return mutable scalars (1+2, "thr"."ee").
• Modifying mutable scalars returned from operators no longer affects
  future return values (this affected the range operator).
• Subroutines like sub () {42} always return mutable scalars.
• Constants like 1 and "two" now always produce read-only scalars.
• Constants created by ‘use constant’ always return read-only scalars.
• Referencing an operator return value, or a constant under threads,
  no longer creates a new scalar, causing print \$_, \$_ to print two
  different addresses.

This list is not exhaustive.