From 386a54892347d3298ba7f1e98f207e36bc4f3424 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 29 Jun 2012 00:38:04 -0500 Subject: [PATCH] "use overload fallback => 0" should enable overloading [perl #113010] This makes package Foo; use overload fallback => 0; and package Bar; use overload '+' => \&add, fallback => 0; behave identically when an operator other than '+' is used. --- gv.c | 10 ++++++++-- lib/overload.t | 14 +++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/gv.c b/gv.c index c4089cd..8251c29 100644 --- a/gv.c +++ b/gv.c @@ -2274,10 +2274,16 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) NOOP; /* Equivalent to !SvTRUE and !SvOK */ } #endif - else if (SvTRUE(sv)) + else if (SvTRUE(sv)) { amt.fallback=AMGfallYES; - else if (SvOK(sv)) + filled = 1; + have_ovl = 1; + } + else if (SvOK(sv)) { amt.fallback=AMGfallNEVER; + filled = 1; + have_ovl = 1; + } for (i = 1; i < lim; i++) amt.table[i] = NULL; diff --git a/lib/overload.t b/lib/overload.t index a132492..5212083 100644 --- a/lib/overload.t +++ b/lib/overload.t @@ -48,7 +48,7 @@ package main; $| = 1; BEGIN { require './test.pl' } -plan tests => 5184; +plan tests => 5186; use Scalar::Util qw(tainted); @@ -2627,6 +2627,18 @@ is eval {"$a"}, overload::StrVal($a), 'fallback is stored under "()"'; is($obj->val, 7, "correct result (add incr void)"); } +# [perl #113010] +{ + { + 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"); +} { # undefining the overload stash -- KEEP THIS TEST LAST package ant; -- 2.7.4