Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.542.mcz==================== Summary ====================
Name: Kernel-nice.542
Author: nice
Time: 4 February 2011, 1:00:46.508 am
UUID: ea1d8beb-aa2d-4cf3-8389-2072df48f6e3
Ancestors: Kernel-ul.541
thu shalt not invoke super in vain
=============== Diff against Kernel-ul.541 ===============
Item was changed:
Dictionary variableSubclass: #MethodDictionary
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Methods'!
+ !MethodDictionary commentStamp: 'nice 2/1/2011 02:47' prior: 0!
+ I am a special dictionary holding methods. I am just like a normal Dictionary, except that I am implemented differently. Each Class has an instance of MethodDictionary to hold the correspondence between selectors (names of methods) and methods themselves.
- !MethodDictionary commentStamp: 'ul 10/30/2009 04:43' prior: 0!
- I am just like a normal Dictionary, except that I am implemented differently. Each Class has an instances of MethodDictionary to hold the correspondence between selectors (names of methods) and methods themselves.
In a normal Dictionary, the instance variable 'array' holds an array of Associations. Since there are thousands of methods in the system, these Associations waste space.
Each MethodDictionary is a variable object, with the list of keys (selector Symbols) in the variable part of the instance. The variable 'array' holds the values, which are CompiledMethods.
I also maintain the following invariant: (self basicAt: index) isNil = (array at: index) isNil.!
Item was changed:
----- Method: MethodDictionary>>includesKey: (in category 'accessing') -----
includesKey: aSymbol
+ "This override assumes that instVarsInclude: uses a fast primitive"
- "This override assumes that pointsTo is a fast primitive"
aSymbol ifNil: [^ false].
+ ^ self instVarsInclude: aSymbol!
- ^ super instVarsInclude: aSymbol!