Make overloaded classes inherit fallback
authorFather Chrysostomos <sprout@cpan.org>
Sun, 20 May 2012 06:46:04 +0000 (23:46 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 22 May 2012 01:09:29 +0000 (18:09 -0700)
commit50853fa94fa95a4fad70b61c9360709826bb8093
tree08332f7abef8085b0f9fdb914f0850a60d92b3ab
parent27b36e73a18363f49fb9cd132ee660376466b5ed
Make overloaded classes inherit fallback

Before this commit, only classes that had no overloading defined could
inherit the fallback from other classes.  If a subclass wanted to
override a single overload setting, it would have to specify the fall-
back value explicitly, to avoid implying fallback=>undef.

We do this by separating the fallback value from overloadedness
itself, so it is possible to have a class that is overloaded, but with
no fallback value.

Previously, the ‘()’ stash entry was used for two purposes.  It had a
sub in it so it could be found using usual method lookup mechanims.
The failure to find any such method would be taken for efficiency’s
sake to mean that there was no overloaded, and the search for methods
could end early.  The scalar slot contained the fallback entry itself.

To preserve the effiency, we still use &{"()"} to indicate that there
is overloadedness.

Fallback now uses its own entry, named ‘(fallback’.  Since it
has to be special-cased anyway, there is no need to add it to
regen/overload.pl.
gv.c
lib/overload.pm
lib/overload.t