Bug 48559

Informational

GemStone/S 64 Bit

3.7.1, 3.7, 3.6.8, 3.6.7, 3.6.6, 3.6.5, 3.6.4, 3.6.3, 3.6.2, 3.6.1, 3.6, 3.5.8, 3.5.7, 3.5.6, 3.5.5, 3.5.4, 3.5.3, 3.5.2, 3.5.1, 3.5, 3.4.5, 3.4.4, 3.4.3, 3.4.2, 3.4.1, 3.4, 3.3.8, 3.3.7, 3.3.6, earlier versions

Changing result of isSpecial for classes for specials, such as Character and SmallInteger

Historically, the method isSpecial returns true when sent to objects that are instances of Class such as Character, where the Class itself is not Special, but the instances of that class would be special.  For example, Character isSpecial returns true, in spite of the class named Character not actually being a special instance.

Starting with v3.6, the method Behavior >> isSpecial that overrides the general implementation is removed, allowing the general implementation in Object to be inherited, and the method returns false for Classes of specials.  The nature of this change made deprecation unfeasible. Ongoing development in pre-3.6 code should be aware and write code accordingly.

With v3.6 and 3.5.3, to check if Classes have instances that are special, you should use the method areInstancesSpecial. You should review your code before upgrading to 3.6, and replace uses of isSpecial for classes  to use areInstancesSpecial.

Workaround

Uses of isSpecial for classes should be changed to areInstancesSpecial.

The kernel change is to remove the method Behavior >> isSpecial, so that it inherits from Object.  While base modifications are discouraged, you may define Behavior >> isSpecial with the previous implementation, which will restore the previous behavior, to avoid disruption your application.


                

Last updated: 9/11/20