# TIP 436: Improve TclOO isa Introspection
State: Final
Type: Project
Tcl-Version: 8.6.5
Vote: Done
Post-History:
Author: Donal Fellows <[email protected]>
Created: 30-Jun-2015
Implementation-URL: https://core.tcl-lang.org/tcloo/info/5fa1374aa026d4c7
-----
# 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.