[squeak-dev] The Inbox: Tools-nice.956.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Mar 5 23:13:35 UTC 2020
Nicolas Cellier uploaded a new version of Tools to project The Inbox:
http://source.squeak.org/inbox/Tools-nice.956.mcz
==================== Summary ====================
Name: Tools-nice.956
Author: nice
Time: 6 March 2020, 12:13:33.047985 am
UUID: 68a4728a-05bb-4255-ba4a-211be07f2d24
Ancestors: Tools-mt.955
My own superficial refactoring of Inspector (June 2019), probably less deep than ct.
Consider that the field list is decomposed into
- fixedFields
- variableFields
The fixedFields include
- baseFields: self, all inst var, the instance variables
- extraFields: these are fields to be performed (message selectors) - ask object class for #extraInspectorFields
The variableFields are the keys (index) for collections, or can be composite for a Context
With those simple rules, selection index handling is still a bit convoluted. But we have enough genericity so as to encapsulate uggliness in superclass, and let the subclasses concentrate on the contents.
=============== Diff against Tools-mt.955 ===============
Item was removed:
- ----- Method: ContextInspector>>fieldList (in category 'accessing') -----
- fieldList
- "Answer the base field list plus an abbreviated list of indices."
- | tempNames stackIndices |
- tempNames := object tempNames collect:[:t| '[',t,']'].
- stackIndices := (object numTemps + 1 to: object stackPtr) collect: [:i| i printString].
- ^self baseFieldList, tempNames, stackIndices!
Item was removed:
- ----- Method: ContextInspector>>selection (in category 'accessing') -----
- selection
- "The receiver has a list of variables of its inspected object.
- One of these is selected. Answer the value of the selected variable."
- | basicIndex |
- selectionIndex = 0 ifTrue: [^ ''].
- selectionIndex = 1 ifTrue: [^ object].
- selectionIndex = 2 ifTrue: [^ object longPrintStringLimitedTo: 20000].
- selectionIndex - 2 <= object class instSize ifTrue:
- [^object instVarAt: selectionIndex - 2].
- basicIndex := selectionIndex - 2 - object class instSize.
- basicIndex <= object numTemps ifTrue:
- [^object debuggerMap namedTempAt: basicIndex in: object].
- basicIndex <= object stackPtr ifTrue:
- [^object at: basicIndex].
- ^nil
- !
Item was added:
+ ----- Method: ContextInspector>>variableFieldList (in category 'accessing') -----
+ variableFieldList
+ "Separate the temps from the rest of the stack"
+ | tempNames stackIndices |
+ tempNames := object tempNames collect:[:t| '[',t,']'].
+ stackIndices := (object numTemps + 1 to: object stackPtr) collect: [:i| i printString].
+ ^tempNames, stackIndices!
Item was added:
+ ----- Method: ContextInspector>>variableFieldSelection: (in category 'accessing') -----
+ variableFieldSelection: rank
+ rank <= object numTemps ifTrue:
+ [^object debuggerMap namedTempAt: rank in: object].
+ rank <= object stackPtr ifTrue:
+ [^object at: rank].
+ ^nil
+ !
Item was removed:
- ----- Method: DictionaryInspector>>fieldList (in category 'accessing') -----
- fieldList
- ^ self baseFieldList
- , (keyArray collect: [:key | key printString])!
Item was removed:
- ----- Method: DictionaryInspector>>numberOfFixedFields (in category 'private') -----
- numberOfFixedFields
- ^ 2 + object class instSize!
Item was removed:
- ----- Method: DictionaryInspector>>selection (in category 'selecting') -----
- selection
-
- selectionIndex <= (self numberOfFixedFields) ifTrue: [^ super selection].
- ^ object at: (keyArray at: selectionIndex - self numberOfFixedFields) ifAbsent:[nil]!
Item was added:
+ ----- Method: DictionaryInspector>>variableFieldList (in category 'accessing') -----
+ variableFieldList
+ ^ keyArray collect: [:key | key printString]!
Item was added:
+ ----- Method: DictionaryInspector>>variableFieldSelection: (in category 'selecting') -----
+ variableFieldSelection: rank
+ ^ object at: (keyArray at: rank) ifAbsent:[nil]!
Item was added:
+ ----- Method: Float>>extraInspectorFields (in category '*Tools-Inspector') -----
+ extraInspectorFields
+ ^super extraInspectorFields , #(signBit exponent significand successor predecessor)!
Item was changed:
----- Method: Inspector>>baseFieldList (in category 'accessing') -----
baseFieldList
"Answer an Array consisting of 'self'
and the instance variable names of the inspected object."
^ (Array with: 'self' with: 'all inst vars')
, object class allInstVarNames!
Item was changed:
----- Method: Inspector>>copyName (in category 'menu commands') -----
copyName
"Copy the name of the current variable, so the user can paste it into the
window below and work with is. If collection, do (xxx at: 1)."
| sel aClass variableNames |
+ selectionIndex <= 2
- self selectionUnmodifiable
ifTrue: [^ self changed: #flash].
aClass := self object class.
variableNames := aClass allInstVarNames.
+ (aClass isVariable and: [selectionIndex > self numberOfFixedFields])
- (aClass isVariable and: [selectionIndex > (variableNames size + 2)])
ifTrue: [sel := '(self basicAt: ' , (selectionIndex - (variableNames size + 2)) asString , ')']
+ ifFalse: [selectionIndex - 2 <= variableNames size
+ ifTrue: [sel := variableNames at: selectionIndex - 2]
+ ifFalse: [sel := '(self ' , (self fieldList at: selectionIndex) , ')']].
- ifFalse: [sel := variableNames at: selectionIndex - 2].
(self selection isKindOf: Collection)
ifTrue: [sel := '(' , sel , ' at: 1)'].
Clipboard clipboardText: sel asText!
Item was changed:
----- Method: Inspector>>defsOfSelection (in category 'menu commands') -----
defsOfSelection
"Open a browser on all defining references to the selected instance variable, if that's what currently selected. "
+ | sel |
+ self hasAnInstanceVariableSelected ifFalse: [^ self changed: #flash].
+ sel := object class allInstVarNames at: self selectionIndex - 2.
+ self systemNavigation browseAllStoresInto: sel from: object class!
- | aClass sel |
-
- self selectionUnmodifiable ifTrue: [^ self changed: #flash].
- (aClass := self object class) isVariable ifTrue: [^ self changed: #flash].
-
- sel := aClass allInstVarNames at: self selectionIndex - 2.
- self systemNavigation browseAllStoresInto: sel from: aClass!
Item was added:
+ ----- Method: Inspector>>extraFieldList (in category 'accessing') -----
+ extraFieldList
+ "Answer an Array of optional messages to be sent to object."
+
+ ^ (object respondsTo: #extraInspectorFields)
+ ifTrue: [object extraInspectorFields]
+ ifFalse: [Array empty]!
Item was changed:
----- Method: Inspector>>fieldList (in category 'accessing') -----
fieldList
"Answer the base field list plus an abbreviated list of indices."
+ ^ self fixedFieldList , self variableFieldList!
- object class isVariable ifFalse: [^ self baseFieldList].
- ^ self baseFieldList ,
- (object basicSize <= (self i1 + self i2)
- ifTrue: [(1 to: object basicSize)
- collect: [:i | i printString]]
- ifFalse: [(1 to: self i1) , (object basicSize-(self i2-1) to: object basicSize)
- collect: [:i | i printString]])!
Item was added:
+ ----- Method: Inspector>>fixedFieldList (in category 'accessing') -----
+ fixedFieldList
+ "Answer an Array consisting of all the fixed fields, including extra."
+
+ ^ self baseFieldList , self extraFieldList!
Item was added:
+ ----- Method: Inspector>>fixedFieldSelection (in category 'selecting') -----
+ fixedFieldSelection
+ "Selection when the selectionIndex is inside the fixedFieldList"
+ selectionIndex = 0 ifTrue: [^ ''].
+ selectionIndex = 1 ifTrue: [^ object].
+ selectionIndex = 2 ifTrue: [^ object longPrintStringLimitedTo: 20000].
+ (selectionIndex - 2) <= object class instSize
+ ifTrue: [^ object instVarAt: selectionIndex - 2].
+ ^object perform: (self fieldList at: selectionIndex)!
Item was added:
+ ----- Method: Inspector>>hasAnInstanceVariableSelected (in category 'selecting') -----
+ hasAnInstanceVariableSelected
+ ^selectionIndex between: 3 and: 2 + object class instSize!
Item was added:
+ ----- Method: Inspector>>numberOfFixedFields (in category 'accessing') -----
+ numberOfFixedFields
+ ^ 2 + object class instSize + self extraFieldList size!
Item was changed:
----- Method: Inspector>>referencesToSelection (in category 'menu commands') -----
referencesToSelection
+ "Open a browser on all references to the selected instance variable, if that's what currently selected."
+ | sel |
+ self hasAnInstanceVariableSelected ifFalse: [^ self changed: #flash].
+ sel := object class allInstVarNames at: self selectionIndex - 2.
+ self systemNavigation browseAllAccessesTo: sel from: object class!
- "Open a browser on all references to the selected instance variable, if that's what currently selected. 1/25/96 sw"
- | aClass sel |
-
- self selectionUnmodifiable ifTrue: [^ self changed: #flash].
- (aClass := self object class) isVariable ifTrue: [^ self changed: #flash].
-
- sel := aClass allInstVarNames at: self selectionIndex - 2.
- self systemNavigation browseAllAccessesTo: sel from: aClass!
Item was changed:
----- Method: Inspector>>replaceSelectionValue: (in category 'selecting') -----
replaceSelectionValue: anObject
"The receiver has a list of variables of its inspected object. One of these
is selected. The value of the selected variable is set to the value,
anObject."
| basicIndex si instVarIndex |
selectionIndex <= 2 ifTrue: [
self toggleIndex: (si := selectionIndex).
self toggleIndex: si.
^ object].
instVarIndex := selectionIndex - 2.
instVarIndex > object class instSize
ifFalse: [^ object instVarAt: instVarIndex put: anObject].
+ basicIndex := selectionIndex - self numberOfFixedFields.
+ (object class isVariable and: [basicIndex between: 1 and: object basicSize])
+ ifTrue: [self error: 'Cannot replace selection'].
- object class isVariable or: [self error: 'Cannot replace selection'].
- basicIndex := selectionIndex - 2 - object class instSize.
(object basicSize <= (self i1 + self i2) or: [basicIndex <= self i1])
ifTrue: [^object basicAt: basicIndex put: anObject]
ifFalse: [^object basicAt: object basicSize - (self i1 + self i2) + basicIndex
put: anObject]!
Item was changed:
----- Method: Inspector>>selection (in category 'selecting') -----
selection
"The receiver has a list of variables of its inspected object.
One of these is selected. Answer the value of the selected variable."
+ | index |
+ index := selectionIndex - self numberOfFixedFields.
+ index <= 0
+ ifTrue: [^self fixedFieldSelection]
+ ifFalse: [^self variableFieldSelection: index] !
- | basicIndex |
- selectionIndex = 0 ifTrue: [^ ''].
- selectionIndex = 1 ifTrue: [^ object].
- selectionIndex = 2 ifTrue: [^ object longPrintStringLimitedTo: 20000].
- (selectionIndex - 2) <= object class instSize
- ifTrue: [^ object instVarAt: selectionIndex - 2].
- basicIndex := selectionIndex - 2 - object class instSize.
- (object basicSize <= (self i1 + self i2) or: [basicIndex <= self i1])
- ifTrue: [^ object basicAt: basicIndex]
- ifFalse: [^ object basicAt: object basicSize - (self i1 + self i2) + basicIndex]!
Item was changed:
----- Method: Inspector>>selectionUnmodifiable (in category 'selecting') -----
selectionUnmodifiable
"Answer if the current selected variable is modifiable via acceptance in the code pane. For most inspectors, no selection and a selection of 'self' (selectionIndex = 1) and 'all inst vars' (selectionIndex = 2) are unmodifiable"
+ ^ selectionIndex <= 2 or: [selectionIndex between: 3 + object class instSize and: self numberOfFixedFields]!
- ^ selectionIndex <= 2!
Item was added:
+ ----- Method: Inspector>>variableFieldList (in category 'accessing') -----
+ variableFieldList
+ "Answer an abbreviated list of indices for variable classes."
+
+ object class isVariable ifFalse: [^Array empty].
+ ^(object basicSize <= (self i1 + self i2)
+ ifTrue: [(1 to: object basicSize)
+ collect: [:i | i printString]]
+ ifFalse: [(1 to: self i1) , (object basicSize-(self i2-1) to: object basicSize)
+ collect: [:i | i printString]])!
Item was added:
+ ----- Method: Inspector>>variableFieldSelection: (in category 'selecting') -----
+ variableFieldSelection: rank
+ "The receiver has a list of variables fields
+ Answer the variable field at given rank."
+ (object basicSize <= (self i1 + self i2) or: [rank <= self i1])
+ ifTrue: [^ object basicAt: rank]
+ ifFalse: [^ object basicAt: object basicSize - (self i1 + self i2) + rank]!
Item was added:
+ ----- Method: Integer>>extraInspectorFields (in category '*Tools-inspector') -----
+ extraInspectorFields
+ ^super extraInspectorFields , #(hex highBitOfMagnitude)!
Item was added:
+ ----- Method: Object>>extraInspectorFields (in category '*Tools-inspecting') -----
+ extraInspectorFields
+ "Answer a list of fields to be performed for inspectors"
+ ^#(identityHash)!
Item was removed:
- ----- Method: OrderedCollectionInspector>>fieldList (in category 'accessing') -----
- fieldList
- object ifNil: [ ^ OrderedCollection new].
- ^ self baseFieldList ,
- (self objectSize <= (self i1 + self i2)
- ifTrue: [(1 to: self objectSize)
- collect: [:i | i printString]]
- ifFalse: [(1 to: self i1) , (self objectSize - (self i2-1) to: self objectSize)
- collect: [:i | i printString]])
- "
- OrderedCollection new inspect
- (OrderedCollection newFrom: #(3 5 7 123)) inspect
- (OrderedCollection newFrom: (1 to: 1000)) inspect
- "!
Item was added:
+ ----- Method: OrderedCollectionInspector>>removeSelection (in category 'menu commands') -----
+ removeSelection
+ selectionIndex <= self numberOfFixedFields ifTrue: [^ self changed: #flash].
+ object removeAt: self selectedObjectIndex.
+ selectionIndex := 0.
+ contents := ''.
+ self changed: #inspectObject.
+ self changed: #fieldList.
+ self changed: #selection.
+ self changed: #selectionIndex.!
Item was changed:
----- Method: OrderedCollectionInspector>>replaceSelectionValue: (in category 'selecting') -----
replaceSelectionValue: anObject
"The receiver has a list of variables of its inspected object. One of these
is selected. The value of the selected variable is set to the value, anObject."
+ selectionIndex <= self numberOfFixedFields
- (selectionIndex - 2) <= object class instSize
ifTrue: [^ super replaceSelectionValue: anObject].
object at: self selectedObjectIndex put: anObject!
Item was changed:
----- Method: OrderedCollectionInspector>>selectedObjectIndex (in category 'selecting') -----
selectedObjectIndex
"Answer the index of the inspectee's collection that the current selection refers to."
| basicIndex |
+ basicIndex := selectionIndex - self numberOfFixedFields.
+ ^ (self objectSize <= (self i1 + self i2) or: [basicIndex <= self i1])
- basicIndex := selectionIndex - 2 - object class instSize.
- ^ (object size <= (self i1 + self i2) or: [basicIndex <= self i1])
ifTrue: [basicIndex]
+ ifFalse: [self objectSize - (self i1 + self i2) + basicIndex]!
- ifFalse: [object size - (self i1 + self i2) + basicIndex]!
Item was removed:
- ----- Method: OrderedCollectionInspector>>selection (in category 'selecting') -----
- selection
- "The receiver has a list of variables of its inspected object.
- One of these is selected. Answer the value of the selected variable."
-
- (selectionIndex - 2) <= object class instSize
- ifTrue: [^ super selection].
- ^ object at: self selectedObjectIndex!
Item was added:
+ ----- Method: OrderedCollectionInspector>>variableFieldList (in category 'accessing') -----
+ variableFieldList
+ object ifNil: [ ^ OrderedCollection new].
+ ^(self objectSize <= (self i1 + self i2)
+ ifTrue: [(1 to: self objectSize)
+ collect: [:i | i printString]]
+ ifFalse: [(1 to: self i1) , (self objectSize - (self i2-1) to: self objectSize)
+ collect: [:i | i printString]])
+ "
+ OrderedCollection new inspect
+ (OrderedCollection newFrom: #(3 5 7 123)) inspect
+ (OrderedCollection newFrom: (1 to: 1000)) inspect
+ "!
Item was added:
+ ----- Method: OrderedCollectionInspector>>variableFieldSelection: (in category 'selecting') -----
+ variableFieldSelection: rank
+ "The receiver has a list of variables of its inspected object.
+ One of these is selected. Answer the value of the selected variable."
+
+ | index |
+ index := (object size <= (self i1 + self i2) or: [rank <= self i1])
+ ifTrue: [rank]
+ ifFalse: [object size - (self i1 + self i2) + rank].
+ ^object at: index!
Item was removed:
- ----- Method: SetInspector>>fieldList (in category 'accessing') -----
- fieldList
- object
- ifNil: [^ Set new].
- ^ self baseFieldList
- , (object array
- withIndexCollect: [:each :i | each ifNotNil: [i printString]])
- select: [:each | each notNil]!
Item was changed:
----- Method: SetInspector>>removeSelection (in category 'menu') -----
removeSelection
+ selectionIndex <= self numberOfFixedFields ifTrue: [^ self changed: #flash].
- (selectionIndex <= object class instSize) ifTrue: [^ self changed: #flash].
object remove: self selection.
selectionIndex := 0.
+ contents := ''.
- self setContents: ''.
self changed: #inspectObject.
self changed: #fieldList.
self changed: #selection.
self changed: #selectionIndex.!
Item was removed:
- ----- Method: SetInspector>>selection (in category 'selecting') -----
- selection
- selectionIndex = 0 ifTrue: [^ ''].
- selectionIndex = 1 ifTrue: [^ object].
- selectionIndex = 2 ifTrue: [^ object longPrintString].
- (selectionIndex - 2) <= object class instSize
- ifTrue: [^ object instVarAt: selectionIndex - 2].
-
- ^ object array at: self arrayIndexForSelection ifAbsent: [ String empty ]!
Item was added:
+ ----- Method: SetInspector>>variableFieldList (in category 'accessing') -----
+ variableFieldList
+ object ifNil: [^ Set new].
+ ^ (object array
+ withIndexCollect: [:each :i | each ifNotNil: [i printString]])
+ select: [:each | each notNil]!
Item was added:
+ ----- Method: SetInspector>>variableFieldSelection: (in category 'selecting') -----
+ variableFieldSelection: rank
+ "Note: the index is decoded from selected field name, because I am un-ordered"
+ ^ object array at: self arrayIndexForSelection ifAbsent: [ String empty ]!
Item was removed:
- ----- Method: WeakSetInspector>>fieldList (in category 'accessing') -----
- fieldList
- | slotIndices |
- object ifNil: [^ Set new].
-
- "Implementation note: do not use objectArray withIndexCollect: as super
- because this might collect indices in a WeakArray, leading to constantly changing fieldList
- as explained at http://bugs.squeak.org/view.php?id=6812"
-
- slotIndices := (Array new: object size) writeStream.
- object array withIndexDo: [:each :i |
- (each notNil and: [each ~= flagObject]) ifTrue: [slotIndices nextPut: i printString]].
-
- ^ self baseFieldList
- , slotIndices contents!
Item was added:
+ ----- Method: WeakSetInspector>>variableFielsList (in category 'accessing') -----
+ variableFielsList
+ | slotIndices |
+ object ifNil: [^ Set new].
+
+ "Implementation note: do not use objectArray withIndexCollect: as super
+ because this might collect indices in a WeakArray, leading to constantly changing fieldList
+ as explained at http://bugs.squeak.org/view.php?id=6812"
+
+ slotIndices := (Array new: object size) writeStream.
+ object array withIndexDo: [:each :i |
+ (each notNil and: [each ~= flagObject]) ifTrue: [slotIndices nextPut: i printString]].
+
+ ^ slotIndices contents!
More information about the Squeak-dev
mailing list
|