TIP 436: Improve TclOO isa Introspection

Login
Bounty program for improvements to Tcl and certain Tcl packages.
State:		Final
Type:		Project
Tcl-Version:	8.6.5
Vote:		Done
Post-History:	
Author:		Donal Fellows <dkf@users.sf.net>
Created:	30-Jun-2015

Abstract

The various info object isa introspectors should not produce errors when given a non-object; the set membership tests should simply return boolean false in those cases.

Rationale

The info object isa command is intended to be used to allow asking whether some object is a member of a general set of entities; for example, info object isa object allows querying whether you actually have a handle to an object at all. However, the other membership sets all throw an error when given a non-object. This complicates the use of the API when all that is really needed is to return a false value in those cases.

Motivating example (with thanks to Will Duquette): is the proc a class? No. It's not even an object, so it clearly cannot be a class and so the following command should produce false (or 0) and not an error:

 info object isa class proc

Proposed Change

Where one of the info object isa introspectors:

  • info object isa class object

  • info object isa metaclass object

  • info object isa mixin object class

  • info object isa object object

  • info object isa typeof object class

Would produce an error due to either the object or (where appropriate) the class object not passing some critical precondition to the test, the result of the command will be 0 (i.e., boolean false). Errors will be still generated when the wrong number of arguments are supplied.

Note that this rule is already followed by info object isa object.

Copyright

This document has been placed in the public domain.

History