Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ct.1520.mcz
==================== Summary ====================
Name: Kernel-ct.1520
Author: ct
Time: 15 August 2023, 3:10:09.691866 pm
UUID: 26ff8963-9b5d-8a49-b54a-35a487efc001
Ancestors: Kernel-mt.1519
Proposal: Adds ScaledDecimal>>#printFractionAsDecimal similar to #printShowingDecimalPlaces:.
Usage:
(5/7*100s2) printFractionAsDecimal '71.42'
Essentially, this gets rid of the scale ("s2") to create a user-friendly printString.
=============== Diff against Kernel-mt.1519 ===============
Item was added:
+ ----- Method: ScaledDecimal>>printFractionAsDecimal (in category 'printing') -----
+ printFractionAsDecimal
+
+ ^ String streamContents: [:stream |
+ self printFractionAsDecimalOn: stream]!
Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-mt.1529.mcz
==================== Summary ====================
Name: Kernel-mt.1529
Author: mt
Time: 11 October 2023, 9:28:50.916195 am
UUID: 106bac4d-ad96-6d44-a2e3-bb403a579214
Ancestors: Kernel-eem.1528, Kernel-LM.1518
Merge Kernel-LM.1518.
Allow a Smalltalk Process to check whether it is currently running external code.
This is indicated by the VM using a special instance of an empty LinkedList in the "myList" instance variable.
=============== Diff against Kernel-eem.1528 ===============
Item was changed:
----- Method: Process>>browserPrintStringWith: (in category 'printing') -----
browserPrintStringWith: anObject
| stream |
stream := WriteStream
on: (String new: 100).
stream nextPut: $(.
priority printOn: stream.
self isSuspended
ifTrue: [stream nextPut: $s].
+ self isInExternalCode
+ ifTrue: [stream nextPut: $e].
stream nextPutAll: ') '.
stream nextPutAll: self name.
stream nextPut: $:.
stream space.
stream nextPutAll: anObject asString.
^ stream contents!
Item was added:
+ ----- Method: Process>>isInExternalCode (in category 'testing') -----
+ isInExternalCode
+ "In a threaded VM, a Smalltalk Process may run a primitive in the background.
+ Answer whether this is currently the case for this Process."
+
+ "Special Object 41 (40 in VM) is the ProcessInExternalCodeTag, which is an empty LinkedList."
+ ^ myList == (Smalltalk specialObjectsArray at: 41)!
Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.1237.mcz
==================== Summary ====================
Name: Tools-eem.1237
Author: eem
Time: 10 October 2023, 3:57:50.710352 pm
UUID: d53a76a0-eb4e-4bc2-8454-2c1b6fb1c382
Ancestors: Tools-eem.1236
Fix a regression in Tools-ct.1227 or thereabouts. MessageSet>>initializeMessageList: *must not* morph ClassReferences into MethodReferences, It must therefore use isCodeReference, *not* isMethodReference.
(Christoph and all, ClassReferences are like MethodReferences but refer to class definitions, not method definitions. They can be used to answer Systemnavigation queries such as "which classes include a particular pool dictionary", or "which classes inherit from Morph" etc... So please don't break these by assuming they don't exist. See Object>>isCodeReference)
=============== Diff against Tools-eem.1236 ===============
Item was changed:
----- Method: MessageSet>>initializeMessageList: (in category 'private') -----
initializeMessageList: anArray
"Initialize my messageList from the given list of MethodReference or string objects. NB: special handling for uniclasses.
Do /not/ replace the elements of anArray if they are already MethodReferences, so as to allow users to construct richer systems, such as differencers between existing and edited versions of code.
NOTE THAT we must support anArray to already have the desired amount and order of elements such as for the 'method inheritance' view, where all elements are prefixed with spaces to indicate the inheritance tree."
| isOrdered |
isOrdered := anArray size > 1
+ and: [anArray second isCodeReference]
- and: [anArray second isMethodReference]
and: [anArray second stringVersion first = Character space].
messageList := isOrdered
ifTrue: [OrderedCollection new]
ifFalse: [Set new].
anArray do:
+ [:each |
+ each isCodeReference
- [:each | each isMethodReference
ifTrue: [messageList add: each]
ifFalse:
[ MessageSet
parse: each
toClassAndSelector:
[ : class : sel | class ifNotNil: [ messageList add: (MethodReference class: class selector: sel) ] ] ] ].
isOrdered ifFalse: [messageList := messageList asOrderedCollection sort].
"Unify labels if wanted."
self class useUnifiedMessageLabels ifTrue:
[ messageList withIndexDo:
[ : each : index |
each stringVersion: (self indentionPrefixOfSize: (self indentionsIn: each stringVersion)) , (self unifiedMessageLabelFor: each) ] ].
messageListIndex := messageList isEmpty ifTrue: [0] ifFalse: [1].
contents := String empty!
Item was changed:
----- Method: MessageSet>>messageIconAt: (in category 'message list') -----
messageIconAt: anIndex
+ | item |
Browser showMessageIcons
ifFalse: [^ nil].
+ item := self messageList at: anIndex.
+ ^item isCodeReference ifTrue:
+ [ToolIcons iconNamed: (ToolIcons
+ iconForClass: item actualClass
+ selector: item selector)]!
-
- ^ ToolIcons iconNamed: (ToolIcons
- iconForClass: (self messageList at: anIndex) actualClass
- selector: (self messageList at: anIndex) selector)!
Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.1236.mcz
==================== Summary ====================
Name: Tools-eem.1236
Author: eem
Time: 10 October 2023, 3:37:25.087937 pm
UUID: bb11baf9-5e2d-432d-aa46-2faecd613bb4
Ancestors: Tools-mt.1235
Fix a bug in the PackagePaneBrowser when setting its system category via selectSystemCategory:. Override browsers' implementation to set packageListIndex to the best match if selectSystemCategory: has succeeded. This turns a hard error in PackagePaneBrowserTest>>testClassList into an assert failure (because too many classes are selected, sicne in the test Tools-Browser is chosen as the selected category, but Tools is the closest package.).
=============== Diff against Tools-mt.1235 ===============
Item was added:
+ ----- Method: PackagePaneBrowser>>selectSystemCategory: (in category 'system category list') -----
+ selectSystemCategory: aSymbol
+ "Override to set packageListIndex correctly."
+ super selectSystemCategory: aSymbol.
+ packageListIndex := selectedSystemCategory
+ ifNil: [0]
+ ifNotNil:
+ [:ssc| | maxMatch maxMatchIndex |
+ "find the longest package name that the selectedSystemCategory begins with.
+ e.g. if selectedSystemCategory is #'Tools-Browser', but the only
+ contains 'Tools', select 'Tools' as the packageListIndex'"
+ maxMatch := 0.
+ maxMatchIndex := 0.
+ [:break|
+ self packageList withIndexDo:
+ [:packageName :index|
+ (ssc beginsWith: packageName) ifTrue:
+ [ssc = packageName ifTrue:
+ [maxMatchIndex := index.
+ break value].
+ packageName size > maxMatch ifTrue:
+ [maxMatch := packageName size.
+ maxMatchIndex := index]]]] valueWithExit.
+ maxMatchIndex]!
Eliot Miranda uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-eem.2133.mcz
==================== Summary ====================
Name: Morphic-eem.2133
Author: eem
Time: 10 October 2023, 2:53:46.066891 pm
UUID: f6cb84a2-0ad3-4165-bfcf-5cf99a9524f6
Ancestors: Morphic-mt.2132
Robustness in TextMorph>>minExtent.
In minHeight the paragraph may be nil but the paragraph's lines may also be nil momentarily, even though the paragraph is not. So use minCompositionHeight in both eventualities.
Extract the common expression in the result computation; write minWidth in the same style.
=============== Diff against Morphic-mt.2132 ===============
Item was changed:
----- Method: TextMorph>>minHeight (in category 'layout') -----
minHeight
"Answer the minimal height of the receiver to be used in Morphic layout policies. Avoid text composition if there is no paragraph yet to speed up overall layouting and avoid cyclic algorithmic dependencies. The minimal height is basically computed from text-composition metrics and extra decoration such as borders and margins."
| result |
+ result := ((paragraph ifNotNil: [:para| para lines ifNotNil: [:lines| lines first lineHeight]])
+ ifNil: [self minCompositionHeight])
- result := (paragraph
- ifNil: [self minCompositionHeight]
- ifNotNil: [:para| para lines first lineHeight])
+ (self borderWidth*2).
+ ^margins
+ ifNil: [result]
+ ifNotNil:
+ [:theMargins|
+ result + (theMargins isRectangle
+ ifTrue: [theMargins top + theMargins bottom]
+ ifFalse: [theMargins isPoint
+ ifTrue: [theMargins y + theMargins y]
+ ifFalse: [2 * theMargins]])]!
- margins ifNil: [^ result].
-
- ^ margins isRectangle
- ifTrue: [result + margins top + margins bottom]
- ifFalse: [margins isPoint
- ifTrue: [result + margins y + margins y]
- ifFalse: [result + (2*margins)]]!
Item was changed:
----- Method: TextMorph>>minWidth (in category 'layout') -----
minWidth
"Answer the minimal width of the receiver to be used in Morphic layout policies. Avoid text composition if there is no paragraph yet to speed up overall layouting and avoid cyclic algorithmic dependencies. The minimal width is basically computed from text-composition metrics and extra decoration such as borders and margins."
| result |
result := self minCompositionWidth + (self borderWidth*2).
+ ^margins
+ ifNil: [result]
+ ifNotNil:
+ [:theMargins|
+ result + (theMargins isRectangle
+ ifTrue: [theMargins left + theMargins right]
+ ifFalse: [theMargins isPoint
+ ifTrue: [theMargins y + theMargins y]
+ ifFalse: [2 * theMargins]])]!
- margins ifNil: [^ result].
-
- ^ margins isRectangle
- ifTrue: [result + margins left + margins right]
- ifFalse: [margins isPoint
- ifTrue: [result + margins x + margins x]
- ifFalse: [result + (2*margins)]]!
A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-LM.1518.mcz
==================== Summary ====================
Name: Kernel-LM.1518
Author: LM
Time: 10 October 2023, 2:44:24.276403 pm
UUID: f8960afe-7cf7-42d4-a697-1fbed22c874d
Ancestors: Kernel-mt.1517
Allow a Smalltalk Process to check whether it is currently running external code.
This is indicated by the VM using a special instance of an empty LinkedList in the "myList" instance variable.
=============== Diff against Kernel-mt.1517 ===============
Item was changed:
Link subclass: #Process
instanceVariableNames: 'suspendedContext priority myList threadId effectiveProcess name island env'
classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Processes'!
+ !Process commentStamp: 'LM 9/14/2023 13:25' prior: 0!
- !Process commentStamp: 'eem 10/9/2021 15:34' prior: 0!
I represent an independent path of control in the system. This path of control may be stopped (by sending the message suspend) in such a way that it can later be restarted (by sending the message resume). When any one of several paths of control can be advanced, the single instance of ProcessorScheduler named Processor determines which one will actually be advanced, partly using the value of priority.
Instance Variables: N.B. The first four are used by the virtual machine. They must be defined, and defined in this order,
suspendedContext: <Context|nil>
priority: <Integer>
myList: <LinkedList|nil>
threadId: <Integer|nil>
effectiveProcess: <Process|nil>
name: <String|nil>
island: <Island|nil>
env: <Dictionary|nil>
effectiveProcess
- if not nil effectiveProcess is a process I am running on behalf of. Used by the execution simulation machinery (used by the debugger) to ensure that Processor activeProcess et al answer the expected result when simulating execution (e.g. when debugging). See evaluate:onBehalfOf: and senders.
env
- if not nil this is a Dictionary providing process-specific variables. See e.g. environmentAt:*, DynamicVariable and ProcessSpecificVariable.
island
- used by Tweak and Croquet to partition the image into multiple address spaces
myList
- if nil, I am either suspended or the active process. If not nil it is either some condition variable (Semaphore, Mutex) that I am blocked waiting on, or it is the LinkedList in ProcessorScheduler quiescentProcesses that holds the processes for my priority that are not the current active process but still runnable.
name
- if not nil this is my name, used for information, see e.g. the names of processes displayed in the ProcessBrowser
priority
- my scheduling priority, which corresponds to the index in ProcessorScheduler quiescentProcesses that holds the LinkedList of processes at this priority. If I am running but quiescent, changing priority involves changing priority and myList.
suspendedContext
- if nil, then I am either the active process or I have been terminated. If not nil it is the Context at the hot end of my stack
threadId
+ - if not nil then it is an integer value set by the VM that controls how I interact with underlying native threads. If positive, the threadId is that of some native thread known to the VM, and the VM will ensure that when I am running, I will be running on that native thread. If negative, the absolute value of threadId is that of some thread known to the VM, and the VM will ensure that when I am running, I will *not* be running on that native thread. Set by the VM. Not to be set manually. Meaningful only on threaded VMs (which do not mean VMs with a threaded heartbeat). It is required to be my fourth instance variable. See SmalltalkImage >> #processHasThreadAffinityInstVar: for further information.!
- - if not nil then it is an integer value set by the VM that controls how I interact with underlying native threads. If positive, the threadId is that of some native thread known to the VM, and the VM will ensure that when I am running, I will be running on that native thread. If negative, the absolute value of threadId is that of some thread known to the VM, and the VM will ensure that when I am running, I will *not* be running on that native thread. Set by the VM. Not to be set manually. Meaningful only on threaded VMs (which do not mean VMs with a threaded heartbeat). It is required to be my fourth instance variable. See SmalltalkImage >> #processHasThreadIdInstVar: for further information.!
Item was changed:
----- Method: Process>>browserPrintStringWith: (in category 'printing') -----
browserPrintStringWith: anObject
| stream |
stream := WriteStream
on: (String new: 100).
stream nextPut: $(.
priority printOn: stream.
self isSuspended
ifTrue: [stream nextPut: $s].
+ self isInExternalCode
+ ifTrue: [stream nextPut: $e].
stream nextPutAll: ') '.
stream nextPutAll: self name.
stream nextPut: $:.
stream space.
stream nextPutAll: anObject asString.
^ stream contents!
Item was added:
+ ----- Method: Process>>isInExternalCode (in category 'testing') -----
+ isInExternalCode
+ "In a threaded VM, a Smalltalk Process may run a primitive in the background.
+ Answer whether this is currently the case for this Process."
+
+ "Special Object 41 (40 in VM) is the ProcessInExternalCodeTag, which is an empty LinkedList."
+ ^ myList == (Smalltalk specialObjectsArray at: 41)!
Levente Uzonyi uploaded a new version of 61Deprecated to project The Inbox:
http://source.squeak.org/inbox/61Deprecated-ul.10.mcz
==================== Summary ====================
Name: 61Deprecated-ul.10
Author: ul
Time: 7 October 2023, 10:31:14.012496 am
UUID: 13110127-70a1-43b6-b291-29dbd27133b2
Ancestors: 61Deprecated-ul.9
Some methods of MVCDebugger and MorphicDebugger are not in the 61Deprecated monticello package even though the classes are in the 61Deprecated category.
This is an attempt to fix that. Move to trunk if it works for you as well.
=============== Diff against 61Deprecated-ul.9 ===============
Item was added:
+ ----- Method: MVCDebugger class>>openOn:context:label:contents:fullView: (in category 'opening') -----
+ openOn: processToDebug context: context label: title contents: contentsStringOrNil fullView: full
+ "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger."
+
+ | debugger cm ac acp wasActive |
+ cm := Project current world. "controller manager"
+ ac := cm activeController.
+ acp := cm activeControllerProcess. "the ui process"
+ wasActive := cm inActiveControllerProcess.
+
+ debugger := self new
+ process: processToDebug
+ "Keep track of the controller if it matches."
+ controller: (acp == processToDebug ifTrue: [ac])
+ context: context.
+
+ full
+ ifTrue: [debugger openFullNoSuspendLabel: title]
+ ifFalse: [debugger openNotifierNoSuspendContents: contentsStringOrNil label: title].
+
+ "Try drawing the debugger tool at least once to avoid freeze."
+ Project current restoreDisplay.
+
+ "If we are in a helper process, #openNoTerminate WILL NOT activate the debugger's controller. Example: user-interrupt request (cmd+dot)."
+ (acp == processToDebug and: [wasActive not])
+ ifTrue: [ [cm searchForActiveController] fork ].
+
+ "Be sure to suspend the process we want to debug now."
+ processToDebug suspend.
+
+ "If we are NOT in a helper process, #openNoTerminate WILL NOT terminate the active controller's process."
+ (acp ~~ processToDebug and: [wasActive])
+ ifTrue: [ Processor terminateActive ].
+
+ "Get here only if active process is not the process-to-debug. Use helper process if you want to access this return value."
+ ^ debugger!
Item was added:
+ ----- Method: MVCDebugger>>context: (in category 'initialize') -----
+ context: aContext
+
+ self
+ process: Processor activeProcess
+ controller: (ScheduledControllers inActiveControllerProcess
+ ifTrue: [ScheduledControllers activeController])
+ context: aContext.!
Item was added:
+ ----- Method: MVCDebugger>>openFullFromNotifier: (in category 'initialize') -----
+ openFullFromNotifier: notifierView
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ | fullView |
+ super openFullFromNotifier: notifierView.
+
+ fullView := ToolBuilder default build: self.
+ fullView label: notifierView label. "Keep the label."
+ fullView controller openNoTerminate.
+
+ notifierView controller closeAndUnscheduleNoTerminate.
+ Processor terminateActive.!
Item was added:
+ ----- Method: MVCDebugger>>openFullNoSuspendLabel: (in category 'initialize') -----
+ openFullNoSuspendLabel: aString
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ | fullView |
+ super openFullNoSuspendLabel: aString.
+
+ fullView := ToolBuilder default build: self.
+ fullView label: aString.
+ fullView controller openNoTerminate.
+
+ ^ fullView!
Item was added:
+ ----- Method: MVCDebugger>>openNotifierNoSuspendContents:label: (in category 'initialize') -----
+ openNotifierNoSuspendContents: msgString label: label
+
+ | builder spec view |
+ EventSensor default flushEvents.
+ super openNotifierNoSuspendContents: msgString label: label.
+
+ builder := ToolBuilder default.
+ spec := self buildNotifierWith: builder label: label message: msgString.
+
+ view := builder build: spec.
+ view controller openNoTerminate.
+
+ ^ view!
Item was added:
+ ----- Method: MVCDebugger>>process:controller:context: (in category 'initialize') -----
+ process: aProcess controller: aController context: aContext
+
+ self process: aProcess context: aContext.
+
+ interruptedController := aController.!
Item was added:
+ ----- Method: MVCDebugger>>resumeProcess: (in category 'private') -----
+ resumeProcess: processToResume
+ "Finally free the reference to the controller if any. We cannot do this in #windowIsClosing."
+
+ | controllerToReschedule |
+ controllerToReschedule := interruptedController.
+ interruptedController := nil.
+
+ ScheduledControllers
+ activeController: controllerToReschedule
+ andProcess: processToResume.!
Item was added:
+ ----- Method: MorphicDebugger class>>openOn:context:label:contents:fullView: (in category 'opening') -----
+ openOn: processToDebug context: context label: title contents: contentsStringOrNil fullView: full
+
+ | debugger uiBlock |
+ debugger := self new
+ process: processToDebug context: context;
+ errorWasInUIProcess: (Project current spawnNewProcessIfThisIsUI: processToDebug).
+
+ uiBlock := [
+ full
+ ifTrue: [debugger openFullNoSuspendLabel: title]
+ ifFalse: [debugger openNotifierNoSuspendContents: contentsStringOrNil label: title].
+
+ "Try layouting the debugger tool at least once to avoid freeze."
+ debugger topView ifNotNil: [:window |
+ "There are way too many #fullBounds sends. Layout errors might already have happened."
+ window allMorphsDo: [:m | (m hasProperty: #errorOnLayout) ifTrue: [self error: 'Layout error']].
+ window world doLayout. "Not safely!!"].
+ "Try drawing the debugger tool at least once to avoid freeze."
+ debugger topView ifNotNil: [:window | window world displayWorld. "Not safely!!"].
+ ].
+
+ "Schedule debugging in a deferred UI message if necessary. Note that only the ui process should execute ui code."
+ (Project current uiProcess isActiveProcess not or: [processToDebug isActiveProcess])
+ ifFalse: uiBlock
+ ifTrue: [ | event |
+ self flag: #discuss. "mt: We need to preserve the currentEvent for #openToolsAttachedToMouseCursor ..."
+ event := self currentEvent.
+ Project current addDeferredUIMessage: [event becomeActiveDuring: uiBlock]].
+
+ processToDebug suspend.
+
+ "Get here only if active process is not the process-to-debug. So in tests, use a helper process if you want to access this return value."
+ ^ debugger!
Item was added:
+ ----- Method: MorphicDebugger>>openFullFromNotifier: (in category 'initialize') -----
+ openFullFromNotifier: notifierWindow
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ super openFullFromNotifier: notifierWindow.
+
+ notifierWindow delete.
+
+ ^ ToolBuilder default
+ open: self
+ label: notifierWindow label!
Item was added:
+ ----- Method: MorphicDebugger>>openFullNoSuspendLabel: (in category 'initialize') -----
+ openFullNoSuspendLabel: aString
+ "Create, schedule and answer a full debugger with the given label. Do not terminate the current active process."
+
+ super openFullNoSuspendLabel: aString.
+
+ ^ ToolBuilder default
+ open: self
+ label: aString!
Item was added:
+ ----- Method: MorphicDebugger>>openNotifierNoSuspendContents:label: (in category 'initialize') -----
+ openNotifierNoSuspendContents: msgString label: label
+
+ | builder spec |
+ super openNotifierNoSuspendContents: msgString label: label.
+
+ builder := ToolBuilder default.
+ spec := self buildNotifierWith: builder label: label message: msgString.
+
+ ^ ToolBuilder default open: spec!
Item was added:
+ ----- Method: MorphicDebugger>>resumeProcess: (in category 'private') -----
+ resumeProcess: processToResume
+
+ processToResume isTerminated ifFalse: [
+ errorWasInUIProcess ifTrue: [Project current uiProcess: processToResume].
+ processToResume resume.
+ errorWasInUIProcess ifTrue: [Processor terminateActive]].!
Item was added:
+ ----- Method: MorphicDebugger>>windowIsClosing (in category 'initialize') -----
+ windowIsClosing
+ "Keep track of last debugger extent."
+
+ interruptedProcess ifNil: [ ^ self ].
+
+ SavedExtent ifNotNil:
+ [ self dependents
+ detect:
+ [ : each | each isWindowForModel: self ]
+ ifFound:
+ [ : topWindow | | isDebuggerNotNotifier |
+ isDebuggerNotNotifier := self dependents anySatisfy:
+ [ : each | each isTextView ].
+ isDebuggerNotNotifier ifTrue: [
+ SavedExtent := (topWindow extent / RealEstateAgent scaleFactor) rounded ] ]
+ ifNone: [ "do nothing" ] ].
+
+ super windowIsClosing.!
Levente Uzonyi uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-ul.1053.mcz
==================== Summary ====================
Name: Collections-ul.1053
Author: ul
Time: 7 October 2023, 10:26:41.0275 am
UUID: 4eddffe9-ef92-4f02-bc1f-9dc9178f1fd2
Ancestors: Collections-eem.1052
- properly deprecate SequenceableCollection>>copyWithoutFirst
- make sort functions copyable (copy their hierachy as well)
=============== Diff against Collections-eem.1052 ===============
Item was added:
+ ----- Method: ChainedSortFunction>>postCopy (in category 'as yet unclassified') -----
+ postCopy
+
+ super postCopy.
+ nextFunction := nextFunction copy!
Item was added:
+ ----- Method: ComposedSortFunction>>postCopy (in category 'as yet unclassified') -----
+ postCopy
+
+ super postCopy.
+ baseSortFunction := baseSortFunction copy!
Item was removed:
- ----- Method: SequenceableCollection>>copyWithoutFirst (in category 'copying') -----
- copyWithoutFirst
- "Deprecatd. Return a copy of the receiver which doesn't include
- the first element."
-
- ^ self allButFirst!
Levente Uzonyi uploaded a new version of 61Deprecated to project The Trunk:
http://source.squeak.org/trunk/61Deprecated-ul.9.mcz
==================== Summary ====================
Name: 61Deprecated-ul.9
Author: ul
Time: 7 October 2023, 10:24:59.594858 am
UUID: 3c66b9d7-8caa-4690-9b66-641a5eef3c84
Ancestors: 61Deprecated-dtl.8
Properly deprecate SequenceableCollection>>copyWithoutFirst.
=============== Diff against 61Deprecated-dtl.8 ===============
Item was added:
+ ----- Method: SequenceableCollection>>copyWithoutFirst (in category '*61Deprecated-Collections') -----
+ copyWithoutFirst
+ "Return a copy of the receiver which doesn't include the first element."
+
+ self deprecated: 'Use allButFirst'.
+ ^ self allButFirst!