This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
overload.t: clarify concat #FETCH expected
authorDavid Mitchell <davem@iabyn.com>
Fri, 2 Jul 2010 21:06:49 +0000 (22:06 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sat, 3 Jul 2010 15:25:58 +0000 (16:25 +0100)
It turns out that the number of FETCHes for the fallback ($tied_ovld . foo)
just needed explaining, not fixing.

lib/overload.t

index 9860732..7d4dbff 100644 (file)
@@ -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(++ --)) {