summaryrefslogtreecommitdiff
path: root/lib/overload.t
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2010-07-02 22:06:49 +0100
committerDavid Mitchell <davem@iabyn.com>2010-07-03 16:25:58 +0100
commit3bc4ee4c5aa3ed1ba3b33fb9d35f9196144d5420 (patch)
tree16ebc7300fa3a14973a78a0354455054f424ae0d /lib/overload.t
parentc5aa2872379824e696683293ee3de5762325de1e (diff)
downloadperl-3bc4ee4c5aa3ed1ba3b33fb9d35f9196144d5420.tar.gz
overload.t: clarify concat #FETCH expected
It turns out that the number of FETCHes for the fallback ($tied_ovld . foo) just needed explaining, not fixing.
Diffstat (limited to 'lib/overload.t')
-rw-r--r--lib/overload.t26
1 files changed, 10 insertions, 16 deletions
diff --git a/lib/overload.t b/lib/overload.t
index 986073277f..7d4dbff315 100644
--- a/lib/overload.t
+++ b/lib/overload.t
@@ -1730,22 +1730,16 @@ foreach my $op (qw(<=> == != < <= > >=)) {
"do { my \$arg = %s; \$_[2] ? (3 $op \$arg) : (\$arg $op 3) }";
# ARRAY FETCH: initial
# SCALAR FETCH: initial eval-return,
- # with fallback, we just stringify, so eval-return skipped
-
- # XXX TODO concat overload with fallback calls FETCH too often
- if ($_ eq '.') {
- push @tests, [ 18, "%s $op 3", "($_)", '("")',
- [ 1, 2, 0, 1, 2, 0 ], 1 ];
- push @tests, [ 18, "3 $op %s", "($_)", '("")',
- [ 1, 2, 0, 1, 2, 0 ], 1 ];
- }
- else {
- push @tests, [ 18, "%s $op 3", "($_)", '("")',
- [ 1, 2, 0, 1, 1, 0 ], 1 ];
- next if $_ eq 'x'; # repeat only overloads on LHS
- push @tests, [ 18, "3 $op %s", "($_)", '("")',
- [ 1, 2, 0, 1, 1, 0 ], 1 ];
- }
+ # with fallback, we just stringify, so eval-return skipped,
+ # but an extra FETCH happens in sub"", except for 'x',
+ # which passes a copy of the RV to sub"", avoiding the
+ # second FETCH
+
+ push @tests, [ 18, "%s $op 3", "($_)", '("")',
+ [ 1, 2, 0, 1, ($_ eq '.' ? 2 : 1), 0 ], 1 ];
+ next if $_ eq 'x'; # repeat only overloads on LHS
+ push @tests, [ 18, "3 $op %s", "($_)", '("")',
+ [ 1, 2, 0, 1, 2, 0 ], 1 ];
}
for (qw(++ --)) {