NOOP; /* Equivalent to !SvTRUE and !SvOK */
}
#endif
- else if (SvTRUE(sv)) {
+ else if (SvTRUE(sv))
+ /* don't need to set overloading here because fallback => 1
+ * is the default setting for classes without overloading */
amt.fallback=AMGfallYES;
+ else if (SvOK(sv)) {
+ amt.fallback=AMGfallNEVER;
filled = 1;
have_ovl = 1;
}
- else if (SvOK(sv)) {
- amt.fallback=AMGfallNEVER;
+ else {
filled = 1;
have_ovl = 1;
}
$| = 1;
BEGIN { require './test.pl' }
-plan tests => 5186;
+plan tests => 5190;
use Scalar::Util qw(tainted);
package OnlyFallback;
use overload fallback => 0;
}
- my $obj = bless {}, 'OnlyFallback';
- my $died = !eval { "".$obj; 1 };
- my $err = $@;
- ok($died, "fallback of 0 causes error");
- like($err, qr/"\.": no method found/, "correct error");
+ {
+ my $obj = bless {}, 'OnlyFallback';
+ my $died = !eval { "".$obj; 1 };
+ my $err = $@;
+ ok($died, "fallback of 0 causes error");
+ like($err, qr/"\.": no method found/, "correct error");
+ }
+
+ {
+ package OnlyFallbackUndef;
+ use overload fallback => undef;
+ }
+ {
+ my $obj = bless {}, 'OnlyFallbackUndef';
+ my $died = !eval { "".$obj; 1 };
+ my $err = $@;
+ ok($died, "fallback of undef causes error");
+ # this one tries falling back to stringify before dying
+ like($err, qr/"""": no method found/, "correct error");
+ }
+
+ {
+ package OnlyFallbackTrue;
+ use overload fallback => 1;
+ }
+ {
+ my $obj = bless {}, 'OnlyFallbackTrue';
+ my $val;
+ my $died = !eval { $val = "".$obj; 1 };
+ my $err = $@;
+ ok(!$died, "fallback of 1 doesn't cause error")
+ || diag("got error of $err");
+ like($val, qr/^OnlyFallbackTrue=HASH\(/, "stringified correctly");
+ }
}
{ # undefining the overload stash -- KEEP THIS TEST LAST