New CAT call
Contents
Introduction
The ECMA standard introduces a new solution to the CAT call problem. Covariant redefinition of a formal argument is only possible to a detachable type:
class A feature f (a: ANY) do end end |
class B1 inherit A redefine f end feature f (a: STRING) do end -- not valid end |
class B2 inherit A redefine f end feature f (a: ?STRING) do end -- valid end |
The most obvious observation is, that this weakens the new non-void typing mechanism, it is now possible to pass void to feature f of class B2. On the other side, ECMA-2 is not very clear about what happens when an object of type INTEGER_REF is passed to feature f of B2 (this is possible through a reference of class A). Either a is attached to the INTEGER_REF object or a is detached. Both solutions have their own drawbacks and will be discussed in the next two sections. The rest of the wiki covers problems that are not related to this interpretation.
CAT call results in attached argument
A reference of a detachable type can be either:
- Void
- Or attached to an object of arbitrary type.
CAT call results in detached argument
It is impossible for the
The main problem is, that it is not detectable, whether there was a CAT call or just a
CAT call results in an argument attached argument
- as is detached.
Will a be attached to void or will it be attached to the INTEGER_REF This wiki discusses some of concerns related to this solution.
Detachable type
According to the new approach a detachable type can be attached to an object of "any" type.