Tcl Source Code

View Ticket
15:00 Closed ticket [9d61624b3d]: empty superclass slot is not always equivalent to oo::object plus 5 other changes artifact: 9de2b95c92 user: dkf
[9d61624b3d]: Stop crashes when emptying the superclass slot. check-in: 8e643395a4 user: dkf tags: trunk
14:37 Ticket [9d61624b3d] empty superclass slot is not always equivalent to oo::object status still Open with 3 other changes artifact: ce9ef918f7 user: dkf
04:52 Ticket [9d61624b3d]: 4 changes artifact: dbec366240 user: aku
22:17 New ticket [9d61624b3d]. artifact: 60227c02a4 user: anonymous

Ticket UUID: 9d61624b3deb9fc676d69a59e0213e61cf8e5fb1
Title: empty superclass slot is not always equivalent to oo::object
Type: Bug Version: 8.6.0
Submitter: anonymous Created on: 2013-07-07 22:17:10
Subsystem: 35. TclOO Package Assigned To: dkf
Priority: 5 Medium Severity: Critical
Status: Closed Last Modified: 2013-08-02 15:00:08
Resolution: Fixed Closed By: dkf
    Closed on: 2013-08-02 15:00:08
If you do not define a superclass for $class, then oo::object will be
the superclass of $class. This is explained in the documentation
(of oo::define) as "an empty parent class is equivalent to oo::object".
However, if you do oo::define $class { superclass }, then the superclass
slot is made empty, but does not again become equivalent to oo::object.
A crash can be caused. Example:

% oo::class create fruit {
    method eat {} {
        puts "yummy!"
% set f [fruit new]
% info object class $f oo::object
% info class superclasses fruit
% oo::define fruit { superclass }
% info class superclasses fruit
% info object class $f oo::object
% info object isa object $f
% $f destroy 
impossible to invoke method "destroy": no defined method or unknown method
% info class call fruit destroy
cannot construct any call chain
% $f
Segmentation fault (core dumped)

-Marcel van der Goot
User Comments: dkf added on 2013-08-02 14:37:40:

Confirmed interactively. Ouch.